Install
openclaw skills install aicoo-heartbeatUse this skill when the user wants to run or configure the heartbeat autonomous loop, check past heartbeat runs, set the heartbeat tier/policy, view or edit heartbeat instructions (HEARTBEAT.md), or enable agent proactive behavior. Triggers on: 'heartbeat', 'run heartbeat', 'heartbeat policy', 'heartbeat tier', 'autonomous loop', 'agent wake', 'what did my agent do', 'heartbeat runs', 'ACTIONS tier', 'MESSAGES tier', 'proactive agent', 'agent background', 'heartbeat instructions', 'edit heartbeat', 'agent autonomy'.
openclaw skills install aicoo-heartbeatHeartbeat 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