Rotating Heartbeat Pattern: Single heartbeat runs every 2 hours and runs the most overdue check based on the state file.
Read docs/agent-architecture.md for full behavioral rules.
- NO DELETIONS without asking your user first
- Don't spam - be thoughtful about engagement
- Don't send external messages (email, social) without permission
- Log what you do in daily memory file
When woken by a system event:
- Check inbox immediately
- Process urgent messages - if urgent, respond with action
- Acknowledge info messages - if they have questions or need response
- Mark read - after processing, mark messages as read
- Report only if actionable - don't spam for routine INFO messages
- Read
memory/heartbeat-state.jsonfor last check timestamps - Calculate which check is most overdue (respect time windows)
- Run that check
- Update timestamp in state file
- Report only if check finds something actionable
- Return
HEARTBEAT_OKif nothing needs attention
| Check | Cadence | Time Window | Priority |
|---|---|---|---|
| Self-Maintenance | 1 hour | Anytime | High |
| Dashboard Sync | 1 hour | Anytime | High |
| Inbox | 1 hour | Anytime | High |
| 2 hours | 8 AM - 10 PM | Medium | |
| Calendar | 2 hours | 8 AM - 10 PM | Medium |
| Relationships | 12 hours | 9 AM - 9 PM | Low |
| Learning Capture | 6 hours | Anytime | Low |
Purpose: Learning capture, decision tracking, lesson sharing, and synergy checks.
Actions:
- Review session for decisions, mistakes, or insights
- Look for opportunities to combine recent work or projects
- Check for lessons from other agents
- Update today's memory file
- Log lessons to learning database
Report: Only if breakthrough/insight worth sharing
Update: self_maintenance timestamp
Purpose: Keep cloud dashboard current with local data
Report: Only on errors
Update: dashboard_sync timestamp
Purpose: Check for messages from other agents or systems
Response rules:
- [ACTION] or urgent=true → respond with action
- [INFO] → respond if it requires acknowledgment or has a question
- [CHAT] → respond genuinely if you have something to say
Report: Only for urgent or action-required messages
Update: inbox timestamp
Purpose: Check for important email
Report if:
- Recruiter email
- Calendar invite
- Time-sensitive request
- Expected business correspondence
Update: email timestamp
Purpose: Alert about upcoming events
Report if:
- Event starting in <2 hours
- New event since last check
- Interview or important meeting coming up
Update: calendar timestamp
Purpose: Check for relationship follow-ups due
Report if: Someone is due for follow-up
Update: relationships timestamp
- Important email arrived
- Calendar event coming up (<2h)
- Interesting opportunity discovered
- Token budget concern (>150k context)
- Urgent message received
- It's been >8h since you said anything substantive
- Late night (23:00-08:00) unless urgent
- Human is clearly busy
- Nothing new since last check
- Just checked <30 minutes ago
- All systems nominal
Reply HEARTBEAT_OK if nothing needs attention.
When you have nothing to say, respond with ONLY: NO_REPLY
- It must be your ENTIRE message — nothing else
- Never append it to an actual response
- Never wrap it in markdown or code blocks