Skip to content
Back to skills

Forge Heartbeat

ASecurity

Detects a dispatched agent gone silent mid-run from events.jsonl. Use during multi-agent runs or when a run feels quiet — silent agent, stalled run, heartbeat check, timeout.

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 6, 2026
ai-agentsgonodegit

Security analysis

A100/100

Scanned September 6, 2026

npx -y skills add ForgeyClap/claude-forge --skill forge-heartbeat --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Forge Heartbeat?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Forge Heartbeat
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/forgeyclap-forge-heartbeat/badge)](https://www.skillsdirectory.com/skills/forgeyclap-forge-heartbeat)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: forge-heartbeat
description: Detects a dispatched agent gone silent mid-run from events.jsonl. Use during multi-agent runs or when a run feels quiet — silent agent, stalled run, heartbeat check, timeout.
---

# forge-heartbeat — stall/silence watchdog

Flags a dispatched Boss that went quiet mid-work — crashed, stuck in a loop, or waiting on something
nobody is watching. Read-only: it never touches a live agent, it only reads the real events already
logged.

## When to use

- **During a multi-agent `/forge` run** — periodically, or whenever the run "feels quiet" (no new
  dashboard activity for a while).
- **When the owner asks** "is anything stuck?" or "did that agent die?"
- **As a future forge-doctor check** — same read-only, evidence-only pattern as
  `forge-doctor`/`forge-verify`; can be wired in later without changing this tool's contract.

## How to run

```
node .claude/forge-bin/forge-heartbeat.cjs check <run_id>
  # print stalled agents (or "no stalled agents"), exit 0 clean / 1 stalled

node .claude/forge-bin/forge-heartbeat.cjs check <run_id> --window 15   # override the silence window (minutes)
node .claude/forge-bin/forge-heartbeat.cjs check <run_id> --root <projectRoot>
node .claude/forge-bin/forge-heartbeat.cjs check <run_id> --json        # full machine-readable result
```

## What STALLED means

- An agent is **tracked** once it has logged `agent_started` or `subagent_started`.
- An agent is **finished** — and never flagged, no matter how old its last event is — once it has
  logged `agent_completed`, `subagent_completed`, `agent_failed`, or `subagent_failed` anywhere in its
  history. Silence after a real completion/failure is expected, not a stall.
- An unfinished, tracked agent is **STALLED** when it has been silent for longer than the window
  (default 10 minutes) since its last real event.
- Within stalled agents, **NEVER PROGRESSED** is a stronger flag: the agent's start event is also its
  only event — it never logged a single progress/output event before going quiet.
- Events with no resolvable `timestamp` are never treated as "just happened" or invented a fake time for
  — they're tracked but excluded from the last-seen calculation, so a stall is never hidden or invented
  by a missing timestamp.

## Honesty

- Reads **only** real events from `<run>/events.jsonl` — it never pings a live agent process and never
  guesses at agent state.
- **Silence is a flag to CHECK the agent, not to auto-kill it.** This tool never cancels, restarts, or
  reassigns work — it surfaces a signal for the Lead (or the owner) to look at. A stalled agent might
  simply be doing something slow and legitimate; treat the flag as "go look", not "it failed".
- A malformed line in `events.jsonl` is skipped, never crashes the check, and is reported in the
  `malformed` count.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.