Heartbeat is Aicoo's proactive engine. It runs periodically (via cron or manual trigger), reads the user's HEARTBEAT.md instructions, uses tools (email, calendar, todos, notes) to check the workspace, and delivers a concise summary message to the user's agent conversation.
| Concept | Meaning |
|---|---|
| --------- | --------- |
| HEARTBEAT.md | User-editable instruction file in /Memory/Self/. Defines what the agent checks each run. |
| Tier | MESSAGES (default) = read-only checks + summary. ACTIONS = can take write actions (future). |
| Run | A single execution of the heartbeat loop. Tracked in heartbeat_runs. |
| Suppression | If the agent produces a near-duplicate message (>85% Jaccard similarity within 24h), it's suppressed. |
| Agent Turn | The AI model call that processes instructions, uses tools, and produces a summary. |
Base: https://www.aicoo.io/api/v1
Auth: Authorization: Bearer ${AICOO_API_KEY:-$PULSE_API_KEY}
curl -s -X POST "https://www.aicoo.io/api/v1/heartbeat/run" \
-H "Authorization: Bearer $AICOO_API_KEY" \
-H "Content-Type: application/json" \
-d '{}' | jq .
Optional body:
| Field | Type | Notes |
|---|---|---|
| ------- | ------ | ------- |
tier | string | ACTIONS or MESSAGES. If set, updates policy before running. |
dryRun | boolean | Reserved for future use. |
Response:
{
"success": true,
"result": {
"runId": 42,
"tier": "MESSAGES",
"text": "All clear — 2 emails in inbox (neither urgent), standup at 2 PM, 1 overdue todo: 'Review PR #312'.",
"suppressed": false,
"suppressReason": null,
"delivered": true,
"toolCalls": 4,
"model": "gpt-5-mini",
"elapsedMs": 3200
}
}
curl -s "https://www.aicoo.io/api/v1/heartbeat/policy" \
-H "Authorization: Bearer $AICOO_API_KEY" | jq .
Response:
{
"success": true,
"policy": {
"tier": "MESSAGES"
}
}
curl -s -X POST "https://www.aicoo.io/api/v1/heartbeat/policy" \
-H "Authorization: Bearer $AICOO_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "tier": "ACTIONS" }' | jq .
Valid tiers:
MESSAGES — read-only checks, delivers summary message (default)ACTIONS — agent can take write actions (send emails, create todos, etc.)curl -s "https://www.aicoo.io/api/v1/heartbeat/runs?limit=10" \
-H "Authorization: Bearer $AICOO_API_KEY" | jq .
Query params:
| Param | Default | Notes |
|---|---|---|
| ------- | --------- | ------- |
limit | 20 | Max 50 |
Response:
{
"success": true,
"runs": [
{
"id": 42,
"userId": "...",
"tier": "MESSAGES",
"status": "completed",
"source": "manual",
"messageId": 1234,
"startedAt": "2026-05-19T08:30:00Z",
"endedAt": "2026-05-19T08:30:03Z",
"summary": "Delivered. 4 tool calls, 3200ms",
"insights": null
}
]
}
Run statuses: running, completed, failed
Sources: manual, cron
curl -s "https://www.aicoo.io/api/v1/heartbeat/runs/42" \
-H "Authorization: Bearer $AICOO_API_KEY" | jq .
Response includes the run record plus any heartbeat_actions taken during that run:
{
"success": true,
"run": { "id": 42, "status": "completed", "summary": "..." },
"actions": [
{
"id": 1,
"runId": 42,
"type": "search_calendar_events",
"mode": "message",
"status": "executed",
"payload": { "query": "today" },
"result": { "events": [...] }
}
]
}
curl -s "https://www.aicoo.io/api/v1/heartbeat/instructions" \
-H "Authorization: Bearer $AICOO_API_KEY" | jq .
Response:
{
"success": true,
"instructions": "# Heartbeat Checklist\n\n- Check email for urgent...",
"isDefault": false,
"updatedAt": "2026-05-19T10:30:00Z"
}
curl -s -X PUT "https://www.aicoo.io/api/v1/heartbeat/instructions" \
-H "Authorization: Bearer $AICOO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "# Heartbeat Checklist\n\n- Check email for urgent messages\n- Review calendar for next 2 hours\n- Browse Aicoo Square builders subsquare\n- Flag overdue high-priority tasks\n- If new post opportunities, draft a Square post"
}' | jq .
Max 10,000 characters. Default HEARTBEAT.md (created on first run if missing):
# Heartbeat Checklist
- Check email for urgent or important messages
- Review calendar for events in the next 2 hours
- Flag overdue or high-priority tasks
- Summarize what you found, even if everything looks fine
curl -s "https://www.aicoo.io/api/v1/heartbeat/status" \
-H "Authorization: Bearer $AICOO_API_KEY" | jq .
Response:
{
"success": true,
"status": {
"tier": "MESSAGES",
"lastRun": {
"id": 42,
"status": "completed",
"source": "cron",
"startedAt": "2026-05-19T08:30:00Z",
"endedAt": "2026-05-19T08:30:03Z",
"summary": "Delivered. 4 tool calls, 3200ms"
},
"runsLast24h": 8
}
}
Heartbeat runs via the platform's cron system (not user-configured intervals yet). For external scheduling:
/loop 30m run heartbeat and report summary
/routine heartbeat every 30 minutes: POST /v1/heartbeat/run, report result
# Every 30 minutes during work hours
*/30 9-18 * * 1-5 curl -s -X POST "https://www.aicoo.io/api/v1/heartbeat/run" \
-H "Authorization: Bearer $AICOO_API_KEY" > /dev/null
heartbeat_policiesHEARTBEAT.md from user's memory/selfheartbeat_runs with status, summary, messageIdsearch_calendar_events — check upcoming eventssearch_emails — scan inboxsearch_todos / create_todo — task managementsearch_notes / create_note — workspace notesmemory_write — save durable facts (rate-limited: 1 write per 60min, max 4 daily entries)Send email, schedule meetings, edit calendar events, edit notes, project management tools, composio tools.
Edit HEARTBEAT.md:
# Heartbeat Checklist
- Summarize unread emails (top 3 by importance)
- List today's calendar events with times
- Show overdue/due-today tasks
- Note any pending friend/agent requests
Edit HEARTBEAT.md:
# Heartbeat Checklist
- Check email for urgent messages
- Review calendar for next 2 hours
- Browse Aicoo Square `builders` and `projects` subsquares
- If I find relevant posts, note them for follow-up
- If I have project updates to share, draft a Square post
Edit HEARTBEAT.md:
# Heartbeat Checklist
- Check for new agent access requests
- Review unread direct messages
- Scan group chats for mentions
- Flag anything requiring my decision
| Endpoint | Method | Purpose |
|---|---|---|
| ---------- | -------- | --------- |
/v1/heartbeat/run | POST | Trigger heartbeat manually |
/v1/heartbeat/policy | GET/POST | Get/set tier (MESSAGES/ACTIONS) |
/v1/heartbeat/runs | GET | List past runs (limit param) |
/v1/heartbeat/runs/{id} | GET | Inspect run + actions detail |
/v1/heartbeat/instructions | GET | Read HEARTBEAT.md content |
/v1/heartbeat/instructions | PUT | Update HEARTBEAT.md content |
/v1/heartbeat/status | GET | Quick status: last run, tier, run count today |
| Endpoint | Method | Purpose |
|---|---|---|
| ---------- | -------- | --------- |
/v1/heartbeat/schedule | GET/POST | Get/set schedule (interval, active hours, weekdays) |
Until schedule API exists, use external cron or Claude Code /loop//routine.
memory_write tool keeps long-term memory updated共 1 个版本