/pane-liveness-check
Use when auditing cmux panes for claim-or-close, sprint close-out, idle workers, dead shells, uncommitted or unpushed artifacts, untitled seats, or stale numeric surface refs.
$ golems-cli skills install pane-liveness-checkUpdated today
Run a read-only claim-or-close sweep. The core rule is conservative: uncertainty always KEEP. Idle state, TASK_DONE, a title, or cost data never proves that a pane is done.
Run
bash skills/golem-powers/pane-liveness-check/scripts/run.sh
bash skills/golem-powers/pane-liveness-check/scripts/run.sh --jsonThe runner uses cmux/cmuxlayer reads and Git status/upstream reads. It never closes, kills, sends to, retitles, checks out, fetches, resets, or cleans a worktree.
Safety Contract
- Enumerate with cmuxlayer
list_surfacesandverbose:true; stable UUID is each surface'sid. - Key every row by UUID. Treat
surface:Nas display-only. - Immediately before each parsed read, re-list and compare UUID. Accept screen evidence only with an atomic
cmux read-screen --id-format bothreceipt for the expected UUID. Re-list afterward. - Any mismatch means
STALE-REF — re-enumerate,verdict: null, and no disposition. - Set an owner only from explicit metadata (
seat_lane,parent_agent_id,Owner lane: @name, or(@name)); otherwise useowner=UNKNOWN.
Verdicts
| Evidence | Verdict |
|---|---|
| Uncommitted files or unpushed commits | KEEP-unpushed |
| Verified dead process | DEAD-shell |
| Live worker still booting, thinking, or working | KEEP-live |
| Open/owed/unknown lane or incomplete proof | KEEP-blocked |
| Closed lane, harvested/reported worker, clean pushed artifact | CLOSE-CANDIDATE |
| UUID mismatch | No disposition: STALE-REF |
Report DONE only when all three are true: no open lane, no live worker is unharvested or unreported, and no work is unpushed. Flag launcher-only titles such as <repo>Claude [surface:N] as untitled.
Full SKILL.md source — includes LLM directives, anti-patterns, and technical instructions stripped from the Overview tab.
Run a read-only claim-or-close sweep. The core rule is conservative: uncertainty always KEEP. Idle state, TASK_DONE, a title, or cost data never proves that a pane is done.
Run
bash skills/golem-powers/pane-liveness-check/scripts/run.sh
bash skills/golem-powers/pane-liveness-check/scripts/run.sh --jsonThe runner uses cmux/cmuxlayer reads and Git status/upstream reads. It never closes, kills, sends to, retitles, checks out, fetches, resets, or cleans a worktree.
Safety Contract
- Enumerate with cmuxlayer
list_surfacesandverbose:true; stable UUID is each surface'sid. - Key every row by UUID. Treat
surface:Nas display-only. - Immediately before each parsed read, re-list and compare UUID. Accept screen evidence only with an atomic
cmux read-screen --id-format bothreceipt for the expected UUID. Re-list afterward. - Any mismatch means
STALE-REF — re-enumerate,verdict: null, and no disposition. - Set an owner only from explicit metadata (
seat_lane,parent_agent_id,Owner lane: @name, or(@name)); otherwise useowner=UNKNOWN.
Verdicts
| Evidence | Verdict |
|---|---|
| Uncommitted files or unpushed commits | KEEP-unpushed |
| Verified dead process | DEAD-shell |
| Live worker still booting, thinking, or working | KEEP-live |
| Open/owed/unknown lane or incomplete proof | KEEP-blocked |
| Closed lane, harvested/reported worker, clean pushed artifact | CLOSE-CANDIDATE |
| UUID mismatch | No disposition: STALE-REF |
Report DONE only when all three are true: no open lane, no live worker is unharvested or unreported, and no work is unpushed. Flag launcher-only titles such as <repo>Claude [surface:N] as untitled.
NOT for
- Automatically closing, killing, messaging, or retitling panes.
- Worktree mutation or garbage collection.
- Billing analysis or worker shaming; output omits cost entirely.
Common Mistakes
- Treating
idle,TASK_DONE, or an old title as completion proof. - Inferring ownership from a repository-like title.
- Reusing a numeric surface ref after pane re-enumeration.
- Declaring DONE while a live worker, open lane, dirty tree, or unpushed commit remains.
Evaluation
2026-08-03: naive baseline 2/18 (11.1%); deterministic sweep 18/18 (100%), +88.9 percentage points.
Best Pass Rate
94%
Opus 4.6
Assertions
18
3 models tested
Avg Cost / Run
$0.2511
across models
Fastest (p50)
1.8s
Haiku 4.5
Behavior Evals
Phase 2 baseline — skill quality on ClaudeBehavior Baseline
| Assertion | Opus 4.6 | Sonnet 4.6 | Haiku 4.5 | Consensus |
|---|---|---|---|---|
| keep-blocked | 3/3 | |||
| no-close | 2/3 | |||
| reason-names-open-lane | 2/3 | |||
| keep-unpushed | 3/3 | |||
| task-done-not-proof | 3/3 | |||
| reason-names-uncommitted | 3/3 | |||
| dead-shell | 2/3 | |||
| title-not-liveness | 3/3 | |||
| process-field | 3/3 | |||
| keep-unpushed | 3/3 | |||
| no-close | 2/3 | |||
| commit-count | 3/3 | |||
| stale-ref | 3/3 | |||
| no-disposition | 2/3 | |||
| verbose-list | 3/3 | |||
| close-candidate | 1/3 | |||
| no-cost | 3/3 | |||
| uuid-key | 2/3 |
Token Usage
Cost per Run
| Model | Input Tokens | Output Tokens | Cost / Run | Cost / 1K Runs |
|---|---|---|---|---|
| Opus 4.6 | 8,883 | 6,967 | $0.6558 | $655.80 |
| Sonnet 4.6 | 4,069 | 5,519 | $0.0950 | $95.00 |
| Haiku 4.5 | 2,503 | 1,575 | $0.0026 | $2.60 |
Response Time (p50)
Response Time (p95)
| Model | p50 | p95 | Overhead |
|---|---|---|---|
| Opus 4.6 | 3.0s | 5.9s | +97% |
| Sonnet 4.6 | 3.0s | 5.8s | +96% |
| Haiku 4.5 | 1.8s | 2.6s | +47% |
Last evaluated: 2026-03-12 · Data is generated from skill assertions (real cross-model benchmarks coming soon)
Changelog entries are derived from eval runs and skill version updates. Full cascading changelog (Phase 4D) coming soon.
Best Pass Rate
94%
Assertions
18
Models Tested
3
Evals Run
6
- +Initial release to Golems skill library
- +18 assertions across 6 eval scenarios
- +Eval fixtures included