Install any skill in seconds. Free to start, no credit card required.
Get Started Free →List, enable, disable, or manually trigger heartbeats (proactive agents). Shows last 10 runs with status and cost. Use when the user says 'list heartbeats', 'show active heartbeats', 'enable atlas-4h', 'disable zara-2h', 'run atlas heartbeat now', 'which heartbeats are running', or wants visibility into proactive agent state.
.claude/skills/evolution-foundation-manage-heartbeats/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | -6% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 2% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -4% | 0% |
| case-12 | ✗→✓ | ▲ Improved | -4% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 1% | 0% |
> Auth note: Use from dashboard.backend.sdk_client import evo — auto-handles URL + auth, no Bearer token needed in code.
Inspect and control existing heartbeats — list them, enable/disable, trigger manual runs, review run history.
Use this skill when the user wants to:
Don't use this to create new heartbeats — use /create-heartbeat.
pythonfrom dashboard.backend.sdk_client import evo heartbeats = evo.get("/api/heartbeats")
Response shape per heartbeat: id, agent, interval_seconds, enabled, last_run_at, last_run_status, last_run_cost_usd, next_trigger_at.
Present to user as a table:
cost_usd in last 7 days)pythonfrom dashboard.backend.sdk_client import evo hb = evo.get(f"/api/heartbeats/{hb_id}")
Includes last 10 runs with full fields: started_at, ended_at, duration_ms, tokens_in, tokens_out, cost_usd, status, prompt_preview, error.
Show the user the latest 3 runs, summarize patterns (always-skip / always-act / mixed).
pythonfrom dashboard.backend.sdk_client import evo # Enable evo.patch(f"/api/heartbeats/{hb_id}", {"enabled": True}) # Disable (preserves data, just stops the dispatcher from scheduling) evo.patch(f"/api/heartbeats/{hb_id}", {"enabled": False})
Warn the user:
pythonfrom dashboard.backend.sdk_client import evo result = evo.post(f"/api/heartbeats/{hb_id}/run")
Response {"run_id": "...", "status": "queued"} within ~500ms. Execution happens async.
Tell the user:
workspace/ADWs/logs/heartbeats/<id>-<date>.jsonl in real time.GET /api/heartbeats/<id> to see last_run_status flip from running → success / fail / timeout.pythonfrom dashboard.backend.sdk_client import evo runs = evo.get(f"/api/heartbeats/{hb_id}/runs", params={"limit": 50})
Useful to audit a heartbeat that was misbehaving historically. Filter by:
?status=fail — only failures?status=timeout — only timeouts?from=YYYY-MM-DD&to=YYYY-MM-DD — date rangeOnly if truly obsolete:
pythonfrom dashboard.backend.sdk_client import evo # Gracefully — returns 409 if currently running evo.delete(f"/api/heartbeats/{hb_id}") # Force-kill currently-running evo.delete(f"/api/heartbeats/{hb_id}", params={"force": "true"})
Confirm with user before forcing. Disable first, then delete once runs stop.
/scheduler → Heartbeats tab. The skill is useful for scripted management or when Davidson prefers CLI./costs shows heartbeat cost per agent alongside routine costs.Related: .claude/rules/heartbeats.md, /create-heartbeat.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 10,687 | 6,788 | -36% | 1 | 1 | 0% | 1,754 | 2,097 | +20% | 0 | 0 | — |
case-02 | pass→pass | 14,562 | 7,500 | -48% | 1 | 1 | 0% | 2,372 | 2,290 | -3% | 0 | 0 | — |
case-03 | pass→pass | 10,597 | 3,896 | -63% | 1 | 1 | 0% | 1,783 | 1,661 | -7% | 0 | 0 | — |
case-04 | fail→fail | 5,798 | 7,985 | +38% | 1 | 1 | 0% | 990 | 1,669 | +69% | 0 | 0 | — |
case-05 | fail→fail | 37,239 | 8,754 | -76% | 1 | 1 | 0% | 1,542 | 1,432 | -7% | 0 | 0 | — |
case-06 | fail→fail | 12,398 | 13,703 | +11% | 1 | 1 | 0% | 1,999 | 1,441 | -28% | 0 | 0 | — |
case-07 | fail→pass | 10,912 | 3,652 | -67% | 1 | 1 | 0% | 1,725 | 1,615 | -6% | 0 | 0 | — |
case-08 | fail→fail | 9,481 | 6,213 | -34% | 1 | 1 | 0% | 1,439 | 1,393 | -3% | 0 | 0 | — |
case-09 | fail→pass | 7,462 | 2,401 | -68% | 1 | 1 | 0% | 1,398 | 1,419 | +2% | 0 | 0 | — |
case-10 | fail→pass | 13,535 | 6,266 | -54% | 1 | 1 | 0% | 2,275 | 2,185 | -4% | 0 | 0 | — |
case-11 | fail→fail | 18,383 | 3,975 | -78% | 1 | 1 | 0% | 2,875 | 1,704 | -41% | 0 | 0 | — |
case-12 | fail→pass | 12,357 | 7,068 | -43% | 1 | 1 | 0% | 2,437 | 2,340 | -4% | 0 | 0 | — |
case-13 | fail→fail | 12,070 | 5,168 | -57% | 1 | 1 | 0% | 2,187 | 1,869 | -15% | 0 | 0 | — |
case-14 | fail→pass | 11,317 | 4,791 | -58% | 1 | 1 | 0% | 1,792 | 1,818 | +1% | 0 | 0 | — |
case-15 | fail→pass | 8,265 | 3,084 | -63% | 1 | 1 | 0% | 1,284 | 1,492 | +16% | 0 | 0 | — |
case-16 | fail→pass | 7,053 | 3,093 | -56% | 1 | 1 | 0% | 1,223 | 1,546 | +26% | 0 | 0 | — |
case-17 | fail→pass | 9,858 | 2,206 | -78% | 1 | 1 | 0% | 1,529 | 1,281 | -16% | 0 | 0 | — |
case-18 | fail→pass | 8,850 | 1,546 | -83% | 1 | 1 | 0% | 1,437 | 1,187 | -17% | 0 | 0 | — |
case-19 | fail→pass | 4,157 | 2,509 | -40% | 1 | 1 | 0% | 540 | 1,349 | +150% | 0 | 0 | — |
case-20 | pass→pass | 8,357 | 3,009 | -64% | 1 | 1 | 0% | 1,187 | 1,520 | +28% | 0 | 0 | — |
case-21 | fail→pass | 10,479 | 2,520 | -76% | 1 | 1 | 0% | 1,872 | 1,477 | -21% | 0 | 0 | — |
case-22 | fail→pass | 10,847 | 1,913 | -82% | 1 | 1 | 0% | 1,834 | 1,277 | -30% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +55 percentage points is the difference between those two pass rates over the 18 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.