Heartbeat planner
This skill should be activated during heartbeat Step 4 when PLANNER_DUE=true. It runs the planner as a foreground subagent and parses DISPATCH/NOTIFY output lines for downstream dispatch.From its SKILL.md
npx -y skills add spajxo/kvido --skill heartbeat-plannerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
1.9 KB, as published. Nobody here has run it
Run the planner as a foreground subagent (wait for completion). The planner evaluates state, schedules, and pending work, then returns natural language output describing what should happen this tick.
Throttle: heartbeat.sh outputs PLANNER_DUE=true|false based on planning_interval config (default 3 — every 3rd iteration). If PLANNER_DUE=false, skip Step 4 entirely and proceed to Step 5 (dispatch only previously queued agents like pending chat:* tasks).
If PLANNER_DUE=true and no planner task pending/in_progress:
TaskCreatesubjectplannerTaskUpdate→in_progress- Dispatch planner agent (foreground — wait for completion)
- Read planner's NL output
- Log:
kvido log add heartbeat dispatch --message "planner"with token/duration from<usage>tag - Mark planner task as
completedviaTaskUpdate
The planner output uses structured lines:
DISPATCH gatherer
DISPATCH triager
DISPATCH worker 86 model=sonnet
DISPATCH librarian
DISPATCH_AFTER triager gatherer
NOTIFY stale-worker 42
DISPATCH <agent>— dispatch agent (parallel by default)DISPATCH worker <id> [model=<model>]— dispatch worker for specific task (by numeric ID); optionalmodel=token selects model (haiku/sonnet/opus, default sonnet)DISPATCH_AFTER <agent> <after-agent>— sequential orderingNOTIFY <type> [detail]— heartbeat handles notification directlyNo dispatches needed.— skip Steps 5 and 6
If the planner returns nothing or "No dispatches needed.", skip planner-originated dispatches in Step 5. Still proceed to Step 5 for pending chat:* tasks and to Step 6 for completed background agents.