Lever status
Levers for AI coding agents (Claude Code, Gemini CLI, GitHub Copilot, OpenCode) — multiply the agent's force, divide the human's effort.
npx -y skills add fmind/agent-levers --skill lever-statusAssembled 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.
What its author says it does
Copied from the file, not written here
Inspect or cancel levers. List all (no arg), detail one (TL;DR + criteria + per-criterion events timeline), or cancel one with `<id> cancel [<reason>]`. Never advances the chain.
SKILL.md
5.4 KB, as published. Nobody here has run it
lever-status
Three modes against .agents/levers/: list, detail, cancel. List and detail are read-only; cancel is the only write path. None of them advance the chain — that's /lever <id>'s job.
State model recap
lever.yaml.step ∈ {plan, do, check, act, done, cancel} is the single state pointer. pause ∈ {ask, blocked} appears only when halted at step waiting for the user, and only ever at step: plan or step: do. The pair (step, pause) is the full state.
1. Pre-flight
- Confirm
.agents/levers/exists. If missing, stop with a chat sentence pointing to/lever-init. - Branch on the argument:
- No argument → list mode (§2).
<id-or-slug>alone → detail mode (§3).<id-or-slug> cancel [<reason>]→ cancel mode (§4).
2. List mode (no argument)
-
Read every
.agents/levers/*/lever.yaml. Skip directories without one and note them under aSkipped:line in the chat reply. -
For each lever extract:
lever_id,slug,step,pause(optional), criteria pass count,updated_at. -
Print as a plain-text table sorted by
lever_id(no markdown table syntax — chat is monospace). State is<step>or<step> · paused: <reason>:ID Slug State Pass Updated 1 add_password_sign_in check 3/4 2026-05-03 09:55 2 fix_dropdown_ios plan · paused: ask 0/0 2026-05-02 14:12 3 refactor_api_routes done 8/8 2026-05-01 18:30 -
Trim
slugto 24 chars with…ellipsis if longer. TrimUpdatedtoYYYY-MM-DD HH:MM. -
End with a one-line summary (e.g., "3 levers · 1 done · 1 awaiting answer · 1 ready to advance.").
3. Detail mode (<id-or-slug>)
-
Resolve
<id-or-slug>→.agents/levers/<id>-<slug>/:- Pure integer → match the leading
<id>. - String → match a slug fragment; on multi-match pick the lowest
<id>and note in the chat reply. - Missing → stop with a chat sentence; recommend
/lever-statusto list.
- Pure integer → match the leading
-
Read
lever.yamland the LEVER.md## TL;DRblock (the first## TL;DRheading and its bullet list — verbatim). -
Print:
Lever <id> — <slug> State: <step> (or "<step> · paused: <reason>") TL;DR: <verbatim TL;DR bullets> Criteria: C1 ✓ · C2 ✓ · C3 ✗ · C4 ✓ (3/4 passing) Next: /lever <id> to advance. -
The
Next:line varies by(step, pause):step ∈ {plan, do, check, act}and nopause→/lever <id> to advance.pause: ask→awaiting answer — see TL;DR.pause: blocked→blocked — see TL;DR.step: done→done — human review of the diff.step: cancel→cancelled.
-
Render the trace inline whenever any criterion has events (§5). Skip when every
eventsis empty (typical atstep: plan).
4. Cancel mode (<id-or-slug> cancel [<reason>])
-
Resolve
<id-or-slug>→ directory (§3 rule). -
Read
lever.yaml. Ifstep ∈ {done, cancel}, stop with"Lever <id> already <step>; nothing to do."— terminal states are immutable. -
Write
lever.yaml:step: cancel, drop anypause, bumpupdated_at. Validated againstlever.schema.json. Leavecriteria,decisions,hintsintact for archival. -
Replace LEVER.md
## TL;DRin place with the cancellation block. If the user supplied<reason>(everything aftercancel), include it; otherwise omit the line.## TL;DR - **State:** `step: cancel` — lever cancelled. - **Next:** none — directory stays for archival. - **Cancelled because:** <reason if provided> -
Chat reply: one sentence stating the lever was cancelled and naming the directory.
5. Trace render (detail mode, when events exist)
For each criterion in lever.yaml.criteria (declared id order), print:
C<n> — <description> (<pass | fail>)
HH:MM <verb> · <cmd or "—">
output: <one trimmed line, when present>
note: <one-line rationale or fold root-cause / drop count, when present>
HH:MM-HH:MM fold (<N> earlier events dropped)
note: <drop count or root cause>
HH:MM pass · <cmd>
output: <verifier summary>
Conventions:
- One block per criterion; if a criterion has no events while others do, print its header followed by
(no events). - Within a criterion, events are in append order — don't reorder by timestamp.
- For
verb: fold, prefer theatrange and thenote; omitcmd. - Trim
outputandnoteto one line each; append…if a value contained a newline.
End the chat reply with a one-line summary across criteria (e.g., "4 criteria · 6 events total · 1 cap-fold at C3.").
6. Hand off
Invariant: list/detail output reflects what's actually in the files (no caching, no inference). Cancel writes only lever.yaml.step / pause / updated_at and the LEVER.md ## TL;DR block — never criteria, decisions, hints, or the rest of LEVER.md. End the chat reply with the printed table (list), detail block + inline trace (detail), or one-sentence cancellation confirmation (cancel). No fixed line format.