Loop Heartbeat
SkillProductivityScheduled discovery automation that runs scans on a heartbeat interval, classifies findings, and routes them to goals or triage inbox.
Use Loop Heartbeat in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Loop Heartbeat and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the Loop Heartbeat skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
What this skill tells your AI
The instructions your AI receives, as published by hashgraph-online/awesome-codex-plugins in plugins/Colin4k1024/tsp/skills/loop-heartbeat/SKILL.md and read by Ahel’s review.
Scheduled discovery automation that runs scans, finds issues, and routes findings to goals or triage. The heartbeat is what makes a loop a loop — not a one-shot run.
Based on Addy Osmani's Loop Engineering: "Automations are the thing that makes a loop an actual loop. Run prompts on a schedule. Findings go to a triage inbox; empty runs archive themselves."
When to Activate
- User invokes
/heartbeat startto begin scheduled scans - User invokes
/heartbeat runfor a one-shot scan - A goal converges and follow-up scanning is needed
- Project onboarding includes quality monitoring setup
Core Concept
The heartbeat is the "discovery layer" of a loop. It answers: "What's broken right now?" on a recurring basis without human prompting.
Every 30 minutes:
┌─ Run test suite ─── PASS → skip
├─ Run linter ─────── FAIL → create goal (auto-fix)
├─ Audit deps ─────── FAIL → triage inbox (human decision)
└─ Type check ─────── PASS → skip
Configuration
Create .claude/heartbeat.yaml in the project root:
heartbeat:
interval: "30m"
scans:
- name: "test-health"
command: "npm test 2>&1 | tail -10"
onFailure: "auto-goal"
description: "Test suite health"
- name: "lint-drift"
command: "npm run lint -- --quiet 2>&1 | wc -l"
threshold: 0
onFailure: "triage"
description: "Lint error count"
- name: "type-check"
command: "npx tsc --noEmit 2>&1; echo EXIT:$?"
onFailure: "auto-goal"
description: "TypeScript type errors"
budget:
maxDollarsPerHour: 2.0
pauseOnExhaust: true
Scan Result Classification
| onFailure | Behavior | Use When |
|---|---|---|
auto-goal | Creates /goal automatically | Machine can fix it (tests, lint, types) |
triage | Adds to /triage inbox | Human judgment needed (deps, security) |
notify | Desktop notification only | Informational, no action required |
ignore | Log silently | Monitoring only, aggregate later |
Budget Controls
maxDollarsPerHour: Pause heartbeat if scanning costs exceed thispauseOnExhaust: If true, pause (resumable); if false, stop entirely- Goal creation inherits the default goal budget from
/goalsettings
Empty Run Handling
When all scans pass:
- No goals or triage items are created
- Run is logged to
~/.claude/heartbeat-last-run.json - Next run proceeds on schedule
- This is the "archive themselves silently" behavior
Integration Points
/goal:auto-goalfailures create goals via completion-oracle.js/triage:triagefailures append to~/.claude/triage/inbox.jsonl- CronCreate: Scheduling uses the Claude Code CronCreate primitive
- ScheduleWakeup: Alternative for dynamic-interval loops
- Hooks: Runs as a scheduled task, not a synchronous hook
Hard Bans
- Heartbeat MUST NOT modify code (it's discovery-only)
- Heartbeat MUST NOT create goals without a stopping condition
- Budget limits MUST be enforced (no unbounded scan spending)
- Failed scans MUST be classified (no silent failures)
- Empty runs MUST NOT create noise (pass = skip)
Example Session
User: /heartbeat start
System:
Loaded .claude/heartbeat.yaml (3 scans configured)
Registered CronCreate: every 30m
Next run: 30m from now
Budget: $2.00/hour
[30 minutes later, heartbeat fires]
Scan results:
✓ test-health: all tests pass
✗ lint-drift: 4 lint errors found → created goal-a1b2c3d4
✓ type-check: no type errors
Summary: 2/3 scans passed, 1 goal created
Signals
- GitHub stars
- 1k
- Forks
- 316
- Last commit
- Oct 2026
Advanced
- Item type
- skill
- Key
loop-heartbeat- Source
- github.com/hashgraph-online/awesome-codex-plugins
github.com/hashgraph-online/awesome-codex-plugins
Related picks
Skill · thedaviddias
The pick for JavaScriptmodern-javascript-patterns
Skill · wshobson
The pick for JavaScriptsetup-ts-deep-modules
Skill · mattpocock
The pick for TypeScripttypescript-pro
Skill · jeffallan
The pick for TypeScriptcron-manager
Skill · countbot-ai
The pick for Croncron-packs
Skill · profbernardoj
The pick for Cron