/steer:work¶
Execute a GitHub issue end-to-end from local Claude Code — the execution
counterpart to /steer:issues (which owns backlog management and
never edits code).
When to use
Use to start, resume, check, or finish a specific issue.
Argument hint: [start | resume | status | finish] [--reviewed] [#issue ...]
--reviewed — the review-gated path
Add --reviewed to wrap execution in the review loop formerly carried by the
standalone deliver skill: an independent plan-gate review → implement →
/code-review gate → bounded fix. The shared protocol lives in
templates/reference/REVIEW-LOOP.md.
End-to-end flow¶
flowchart TD
START["/steer:work start #123"] --> VALIDATE[Read + validate the issue]
VALIDATE --> CLAIM[Claim it · self-assign · set in-progress]
CLAIM --> BRANCH[Create or reuse issue/* branch + work marker]
BRANCH --> SPEC[Load linked /spec]
SPEC --> IMPL[Implement + test<br/>commit autonomously]
IMPL --> PROGRESS[Update progress on the issue]
PROGRESS --> FINISH["/steer:work finish #123"]
FINISH --> PR[Open PR]
PR --> WATCH[Watch CI to conclusion]
WATCH -->|red| FIX[Fix · re-push · re-watch]
FIX --> WATCH
WATCH -->|green| STATE[Transition to validate · hand reviewer a green PR]
Delivery mode¶
How the work reaches main is governed by the repo's delivery mode, declared
in the product CLAUDE.md ## Delivery mode section (the same marker the steer
hooks read — solo-trunk vs pr-flow; absent or unreadable → pr-flow).
Issue-first holds in both modes — every implementation-affecting change is tied
to a GitHub issue; the modes differ only in the branch/PR ceremony around it.
| pr-flow (default) | solo-trunk (pre-MVP greenfield) | |
|---|---|---|
| Branch | issue/<n> branch + spec/.work marker |
none — commit straight to main |
| Marker | written for Stop-hook reconciliation | skipped (stay on main) |
| Delivery | open a PR; the PR is the human gate | Closes #N trunk commit under Commit autonomy (rule 45) |
| Terminal evidence | merged PR | closed issue from the trunk commit |
Determine the mode once at start / finish. In solo-trunk, wherever a step below
says branch, marker, or PR, skip it and substitute the trunk commit —
validation, managed-block progress, CI-watch (via gh run watch on the trunk push),
and the Definition of Done are unchanged. Committing to main is authorized in this
mode; deploy stays human-gated all the same, and graduating the repo to the PR
flow is /steer:protect's job, never this skill's.
Modes¶
| Mode | What it does |
|---|---|
start |
Validate, claim (self-assigns the invoking GitHub user), branch + write the work marker (pr-flow) or stay on main (solo-trunk), load specs, begin implementing. |
resume |
Pick a claimed issue back up where it left off — including offering to re-enter the Claude Code session that last worked it. |
status |
Report progress on the issue(s). |
finish |
Open the PR (pr-flow) — the first push of the new issue/<n> branch sets the upstream (git push -u origin <branch>; later pushes are a plain git push) — or commit straight to main with a Closes #N trailer (solo-trunk), watch CI to conclusion (gh pr checks --watch, or gh run watch on the trunk push) and fix a red build before transitioning to validate — the reviewer gets a green PR, not a running or red one. |
Local work marker¶
start writes a local, git-ignored marker at spec/.work/<branch>.md (slashes →
underscores). Its existence is what the end-of-turn
Stop-hook reconciliation uses to recognize a branch as
issue-governed — ahead of any branch-name guess — so an unconventionally named
but properly claimed branch is still recognized.
The marker also records a newest-first list of the Claude Code session(s)
that worked the branch. The Stop hook keeps the most-recent session at the head
each turn, and resume reads it: if a different prior session is recorded, it
offers claude --resume <id> (and the transcript path) so you can re-enter that
conversation for context. These session ids are local-only breadcrumbs — they
stay in the git-ignored marker and never reach the tracker.
Rules it follows¶
- One issue per branch/PR by default (in solo-trunk, one trunk commit per
issue, each closing its own
#N). - Git and PR delivery follow the repo's commit/PR-autonomy rules — commits are autonomous, pushing/opening the PR is gated. See the Authorization model.
- After pushing,
finishwatches CI to green and fixes a red build before treating the work as done — read-only CI status (gh pr checks,gh run view,gh run watch) is pre-approved for this;git pushand the PR/merge steps stay gated. If you have stepped away, the in-turn watch blocks the turn; re-enter monitoring with a/loopovergh pr checks(steer ships no background poller). Merge and deploy remain a human's call. - All tracker-metadata I/O routes through
/steer:tracker-sync.