Workflow
Drive a headsign phase-gate workflow. Use when the repository contains .headsign/workflow.yaml and the user asks to start, continue, or resume a workflow run — or when .headsign/state.json shows a run in progress (e.g. when recovering after compaction). Do not use in repositories that have no .headsign directory.From its SKILL.md
npx -y skills add meganemura/headsign --skill workflowAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 20 days oldThe repository was created 20 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 1 stars1 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 file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
8.9 KB, ~2.2k tokens by cl100k_base, as published. Nobody here has run it
headsign workflow
headsign is a phase gate: you do the work, deterministic shell checks decide the phase transitions. You never judge for yourself whether a phase is done — the gate does.
When this skill runs inside its Claude Code plugin, the CLI is bundled with
it and no install is needed. headsign <cmd> below means:
node "${CLAUDE_SKILL_DIR}/../../dist/headsign.mjs" <cmd>
(If the package is installed via npm, npx headsign — or a PATH-installed
headsign — works too.)
If the bundled path above does not exist, this file is a copy running
outside its plugin (e.g. placed in .claude/skills/) — the bundle only
ships with the plugin. Use npx headsign or a PATH-installed headsign
if available; otherwise stop and tell the user to either install the
plugin or npm install the package. Do not guess at other paths.
The discipline
- First, check whether this session is the driver. If this session did
not run
headsign start, and hasn't been explicitly asked (by the user, or by the session that did) to continue an existing run — do not runheadsign nextorheadsign abort. A repository can have more than one Claude Code session open on it at once (a lead plus teammates, or a subagent working alongside the session that spawned it), and only the one driving the run should touch it: obeying a nudge you weren't meant to answer can burn a retry or advance a phase nobody asked you to touch. Want to know what's happening without touching anything? Runheadsign status— it's read-only, and safe to call at any time. - If you are a delegated agent and were entrusted with driving a run,
claim it first — don't just start calling
next. This applies when you are a teammate (Claude Code's agent-teams feature) or a subagent: you share the spawning session's process and environment, so your ownnextcalls stamp that session as the driver, not you. Instead: runheadsign claim, then end your turn. The seal happens at your own turn end — that is the only moment headsign can learn which delegated agent you are — and the hook confirms it in its message, naming the workflow and phase. Do not runheadsign nextbefore you have seen that confirmation. If some other agent got adopted by mistake (it ended a turn while your marker was armed and could name itself), runheadsign claimagain from the agent that should be driving: a new claim re-arms the marker, and that agent is a real contender for it because its own turn end always fires the event that seals. Another agent naming itself first can take this marker too, so re-claim until the confirmation names the agent you meant. A session driving a run on its own does not needclaimat all — ordinarynextstamping already works there. Skipping the claim fails silently rather than loudly: a plainnextfrom you stamps the spawning session, so every later nudge goes to it while your own turns end unheld. And if you need to check whether you are the driver, don't read it offheadsign status— as a delegated agent, the reliable signal is the hook itself: if your turn ends are being pushed back toheadsign next, this run is yours to drive. Read which message you got: an ordinary nudge fires only on a positive match, butClaim confirmed …means an armed marker just seated you — if you did not runheadsign claim, you have taken a seat another agent was asking for, so say so and let it claim again. The test only works in this direction and only for delegated agents: ending quietly proves nothing (not having claimed, an exhausted nudge cap, a pause note, orHEADSIGN_OBSERVERall end turns quietly), and a plain session gets nudged on a run that stamped no identifier at all. A probe is not free either: one that comes back as an ordinary nudge spends one from the cap, one that passes while your own pause note is armed consumes the note, and one that lands under another agent's armed marker consumes that marker. Probe deliberately, not by habit. - To begin a workflow:
headsign start. It prints the first phase's instructions. - Whenever you are unsure what to do, think a phase's work is finished, or
have just recovered from compaction — run
headsign nextand obey the first-line token. That one habit is the whole protocol. RETRY→ the output shows exactly which check failed and its last output. Fix that, then runheadsign nextagain.ADVANCE→ follow the printed instructions of the new phase. IfADVANCE <phase>is followed by a line like--- gate failed: ... → routed to <phase> ---, the previous phase's gate rejected the work and routed you here — read that line, it's why you're back.- Never end the run on your own judgment while the answer is anything
other than
COMPLETE. If you are genuinely stuck — or the user asks to stop mid-run — record why withheadsign abort <reason>and report to the user; that's a legitimate exit, but it's permanent: the run cannot be resumed. To pause rather than end — stepping away to resume later — write one line explaining why to.headsign/tmp/stop-noteand stop again: the stop-boundary hook passes immediately, andheadsign nextpicks the run back up later from the same phase.ESCALATEmeans stop working and ask the user for direction. - If the current phase's gate reads a verdict file (a review phase), spawn
a reviewer subagent restricted to read-only tools (Read/Grep/Glob) and
have it REPORT exactly
APPROVEDorREJECTED(with reasons). Then you write that reported verdict, verbatim, to the verdict file and runheadsign next— the reviewer stays unable to touch code or the verdict, so the judgment and the work stay separated.
Notes
- A phase's printed instruction may tell you to use a specific skill or spawn a subagent — do what it says.
headsign start/next/abort/status/claimoperate on the current directory's.headsign/only — run them from the directory that owns the workflow (the repo or git-worktree root), not a subdirectory. Each git worktree is therefore its own independent run: its state lives in that worktree's.headsign/, and a run in another worktree of the same repository neither shares it nor sees it. The stop-boundary hooks are the exception: they find the run from any subdirectory up to the repo/worktree root, so they still fire even if the session's cwd has drifted.- Exit codes are verdicts, not errors: 1 = RETRY/PENDING, 2 = ESCALATE/ABORT.
Read the text, don't treat non-zero as a tool failure. PENDING = the gate
can't be evaluated yet — not a failure. Produce the artifact it's waiting
on (e.g. the reviewer's verdict file), then run
headsign nextagain; don't retry-loop on it. Exit 3 is different — a real usage/config error (unknown command, wrong directory, a workflow that no longer defines the current phase, anothernextalready running). Fix the invocation, the directory, or the workflow file; don't loop-retry on it. headsign statusis a different kind of command, on purpose: it never judges, so its first-line vocabulary is separate fromnext's tokens —RUNNING/COMPLETE/ESCALATED/ABORTED, capitalized like a report, notADVANCE/RETRY/PENDING/ESCALATE/ABORT. Its exit code doesn't follow the 1=RETRY/PENDING, 2=ESCALATE/ABORT rule above either: it's 0 whenever state could be read at all (evenESCALATED/ABORTED), and 3 only when there's no run to read. Use it whenever you want to look without the risk of touching anything — see the discipline's first rule, above, for when that's required rather than optional.headsign nextis cheap and safe to call at any moment: if nothing changed in the working tree it reprints the last verdict without consuming an attempt.- Lock contention from parallel subagents is normal — wait briefly and retry once; the error message itself carries the recovery.
- If
headsign nextkeeps printing(unchanged)even though you changed something, the change was probably in a git-ignored file outside.headsign/that the tree-hash doesn't watch (build outputs, coverage reports, …) — everything under.headsign/(includingtmp/) is always watched regardless of.gitignore. Touch or save any git-tracked file to force a fresh evaluation, but that forces re-judgment, not a free retry: if the gate still fails after the touch, it's a real, counted attempt.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.