Family scheduler. Compiles each cell's HEARTBEAT.md into a crontab. Linux cron fires; pulse just keeps the file in sync. Generated 2026-06-15 18:30:12.
| status | cell | cron (mountain) | next fire | last fire | message |
|---|---|---|---|---|---|
| โ fired | zero-advisor-jerry | */15 * * * * |
2026-06-15 18:45:00 | 2026-06-15 18:30:01 (158ms) | drain events since your cursor and act on anything new (RUNBOOK ยง2) โ no-op if nothing's new |
| โ fired | zero-advisor-pete | */15 * * * * |
2026-06-15 18:45:00 | 2026-06-15 18:30:01 (177ms) | drain events since your cursor and act on anything new (RUNBOOK ยง2); no-op if nothing new |
| โ fired | zero-mother | */30 * * * * |
2026-06-15 19:00:00 | 2026-06-15 18:30:01 (178ms) | run the steward pass โ execute .claude/skills/steward/SKILL.md: one deterministic sweep (scripts/steward-sweep.sh via mac_exec), then judge the summary. quiet fleet โ silent no-op. |
| โ fired | zero-delta-co-land | 0 */12 * * * |
2026-06-16 00:00:00 | 2026-06-15 12:00:01 (1.0s) | county-level land & access re-interpret pass: pull current land facts from zero-delta-co-market, refresh prior findings, log only material changes to findings_log (mode=push) and publish (RUNBOOK ยง5); no change โ write nothing, end the turn |
| โ fired | zero-delta-co-water-rights | 0 0 * * * |
2026-06-16 00:00:00 | 2026-06-15 00:00:01 (1.1s) | good morning โ county-level re-interpret pass (RUNBOOK ยง6): re-ask the market cell (zero-delta-co-market) for material county-wide water changes plus Convex basics, log material in-domain findings to findings_log. No change โ no-op, write/send nothing. |
| โ fired | zero-delta-co-market | 0 3 * * * |
2026-06-16 03:00:00 | 2026-06-15 03:00:01 (986ms) | zeros pass (9 UTC = 3am Mountain summer): drain savedListings:pendingZeros and run the daily watch pass per skills/homezero/ZEROS.md. |
| โ fired | zero-abstractor | 0 4 * * * |
2026-06-16 04:00:00 | 2026-06-15 04:00:01 (3.7s) | good morning โ run dream to consolidate memory, wiki, and mentality, then republish your brain: bun publish-brain.ts |
| โ missed | zero-advisor-jerry | 0 4 * * * |
2026-06-16 04:00:00 | expected 2026-06-15 04:00:00 | dream โ consolidate memory, wiki, and mentality |
| โ missed | zero-advisor-pete | 0 4 * * * |
2026-06-16 04:00:00 | expected 2026-06-15 04:00:00 | dream โ consolidate memory, wiki, and mentality |
| โ fired | zero-delta-co-land | 0 4 * * * |
2026-06-16 04:00:00 | 2026-06-15 04:00:01 (2.0s) | dream โ consolidate memory, wiki, and mentality |
| โ fired | zero-delta-co-market | 0 4 * * * |
2026-06-16 04:00:00 | 2026-06-15 04:00:01 (1.3s) | dream โ consolidate memory, wiki, and mentality. |
| โ fired | zero-delta-co-water-rights | 0 4 * * * |
2026-06-16 04:00:00 | 2026-06-15 04:00:01 (2.8s) | dream โ consolidate memory, wiki, and mentality. |
| โ fired | zero-mother | 0 4 * * * |
2026-06-16 04:00:00 | 2026-06-15 04:00:01 (176ms) | dream consolidation โ run the dream skill: re-balance memory, wiki, and mentality from recent signal. |
| โ missed | zero-advisor-jerry | 0 7 * * * |
2026-06-16 07:00:00 | expected 2026-06-15 07:00:00 | good morning โ assemble the daily briefing and send it if the buyer's tempo and engagement warrant (RUNBOOK ยง8); a quiet day is a two-line or held briefing |
| โ missed | zero-advisor-pete | 0 7 * * * |
2026-06-16 07:00:00 | expected 2026-06-15 07:00:00 | assemble the daily briefing and send if the buyer tempo and engagement warrant (RUNBOOK ยง8); a quiet day is a two-line or held briefing. [13:00 UTC = 7am Mountain MDT / 6am MST winter] |
| โ missed | zero-advisor-jerry | 0 10 * * 0 |
2026-06-21 10:00:00 | expected 2026-06-14 10:00:00 | Sunday weekly digest: what moved in the watched set, what the market did, what's next โ WhatsApp the buyer and write a takes row kind:digest (RUNBOOK ยง8) |
| โ missed | zero-advisor-pete | 0 10 * * 0 |
2026-06-21 10:00:00 | expected 2026-06-14 10:00:00 | weekly digest โ what moved in the watched set, what the market did, what you would do next; WhatsApp the buyer and log a takes row kind:digest (RUNBOOK ยง8). [Sun 16:00 UTC = 10am Mountain MDT / 9am MST winter] |
| time | cell | latency | result | corr |
|---|---|---|---|---|
| 2026-06-15 18:30:01 | zero-mother | 178ms | ok | F3PSHJN5KD |
| 2026-06-15 18:30:01 | zero-advisor-pete | 177ms | ok | 9079J66RWM |
| 2026-06-15 18:30:01 | zero-advisor-jerry | 158ms | ok | JVPAXB54XT |
| 2026-06-15 18:15:01 | zero-advisor-pete | 154ms | ok | DZJYQQKZZM |
| 2026-06-15 18:15:01 | zero-advisor-jerry | 144ms | ok | K07B5TE922 |
| 2026-06-15 18:00:01 | zero-advisor-pete | 168ms | ok | 3Q15PAKDQX |
| 2026-06-15 18:00:01 | zero-mother | 156ms | ok | QQ0M5SMD52 |
| 2026-06-15 18:00:01 | zero-advisor-jerry | 148ms | ok | STKEJ8CPBE |
| 2026-06-15 17:45:01 | zero-advisor-pete | 159ms | ok | JRHXTG72K4 |
| 2026-06-15 17:45:01 | zero-advisor-jerry | 147ms | ok | D3VMJESR24 |
| 2026-06-15 17:30:01 | zero-mother | 185ms | ok | NZ1HS5Z9NN |
| 2026-06-15 17:30:01 | zero-advisor-jerry | 175ms | ok | S2PR8B0PWM |
| 2026-06-15 17:30:01 | zero-advisor-pete | 156ms | ok | K8Q8R0P4RD |
| 2026-06-15 17:15:01 | zero-advisor-pete | 963ms | ok | TSCJJAERZD |
| 2026-06-15 17:15:01 | zero-advisor-jerry | 146ms | ok | 1ET3B5ZWAD |
| 2026-06-15 17:00:01 | zero-advisor-pete | 180ms | ok | WSPRS8810T |
| 2026-06-15 17:00:01 | zero-mother | 181ms | ok | 3T5QWQ936A |
| 2026-06-15 17:00:01 | zero-advisor-jerry | 152ms | ok | N23A7J23YM |
| 2026-06-15 16:45:01 | zero-advisor-pete | 158ms | ok | 0M43CCWXAG |
| 2026-06-15 16:45:01 | zero-advisor-jerry | 126ms | ok | 82AKXKVNNR |
fleet cell edits HEARTBEAT.md โ (PostToolUse hook) โผ proxy /heartbeat-changed โ โผ ~/.cells/pulse-inbox/ โ Mac-side queue, survives pulse hibernating โ every ~60s โผ [cells-pulse cell] claude --print runs the pulse skill: drain inbox โ translate prose โ cron lines save-schedule โ writes /etc/cron.d/pulse-schedules render โ refresh state/heartbeats.md digest render-dashboard โ writes this page โ โผ /etc/cron.d/pulse-schedules โ Linux cron evaluates every minute โ matched lines fire โผ cron-fire.sh wraps: cells talk --await <cell> "<msg>" โ times the call, logs latency + exit code โผ /root/.cells/logs/cron-fires.log
Push for schedule updates, pull for firing. When a cell edits its HEARTBEAT.md, a hook pushes the change to pulse via the proxy. Pulse drains that inbox every ~60s, parses prose like "every weekday at 8am" into a 5-field crontab line, and writes it into /etc/cron.d/pulse-schedules. From there Linux cron is the fire engine โ pulse is just the prose-to-cron compiler.
Cron is evaluated in Mountain time. Pulse's cell is pinned to America/Denver, so 0 8 * * * means 8am MDT/MST and DST is handled by the OS. Prose with explicit UTC times gets converted.
State survives hibernation. The inbox is Mac-side (~/.cells/pulse-inbox/); cells can push schedule updates even while pulse-cc is asleep, and pulse drains the backlog when it wakes. Per-cell parsed schedules live at pulse-cache/<cell>.json; the firing record is the cron-fires log inside the pulse cell.
Latency is the cell's response time. cells talk waits for the receiving cell to actually ack the message (default 180s timeout). A small latency means the cell was running and responsive. A latency near 180s usually means the talk timed out โ the cell may have been hibernating and failed to wake. The "missed" status above means cron should have fired but no log entry showed up at all.