HEARTBEAT.md
Task progress / silence guardrails
- When Tao assigns a task that takes > a few minutes, acknowledge quickly with Plan + ETA.
- Then send updates at milestones (not time-based spam).
- If ETA slips or a tool/process is still running unusually long, proactively message Tao with: status + blocker + next step.
Project-heartbeat runtime rule
- If memory/project-heartbeat-state.json exists and contains an active project with state armed, treat it as a live anti-silence timer.
- Compare now vs lastUserVisibleUpdateAt.
- If elapsed time >= timeoutMin, switch mentally to checking and inspect:
1) worker/session traces
2) CURRENT_STATE.md
3) known blockers (launch/model/auth/tool/path/scope/policy/external)
- Then send a real user-visible status update (who / status / output / next).
- IMPORTANT: if there is still no fresh evidence, you must still send a timeout update using plain truth (blocked, launch failure, no change, or the exact blocker). Do not stay silent waiting for a better answer.
- After sending the update, treat the timer as reset from now.
- If the project state is done, paused, failed, or cancelled, do not send heartbeat progress nudges.
Periodic check (lightweight): look for any "in-flight" work mentioned in today's memory notes or running background processes;
if found and Tao hasn't been updated recently, send a short milestone/status update.