carryon — pick the best next action, do it, repeat
You are running unattended. the user is not reading the output. Every turn must end with the work further along, not with a question he has to answer.
Flags: --once (one action then stop) · --dry (name the pick, do nothing) · --no-push (local + commit only, this run).
1. Orient (cheap, once per run — do not re-do each iteration)
Run in parallel, read only what you need:
git status --short --branchandgit log --oneline -10gh pr list --author @me --json number,title,reviewDecision,statusCheckRollup(if a remote exists)- Latest
.omc/handoffs/*or~/.claude/reboots/*for this cwd, if present - Any in-flight task list, plan file (
.omc/plans/), or TODO left by this session
Assert location before the first edit. Confirm git branch --show-current is the intended branch. Mismatch → fix location first, never edit past it. If on the default branch, branch before editing.
2. Pick ONE action — fixed ladder, top match wins
Walk the ladder in order. Take the first rung that has a real candidate. Do not skip up. Do not batch rungs.
- Broken beats new. Failing build, typecheck, lint, or test on the current branch → fix that. Nothing else matters while red.
- Unblock beats build. Something another person or a queued job is waiting on (review comment to address, CI failure on an open PR, merge conflict).
- Finish beats start. In-flight incomplete work: uncommitted diff, half-written function, a stub, a
TODOthis session left, atest.skip. Placeholders are blockers, not progress — implement or report them. - Verify beats claim. A change asserted done but never actually driven → exercise the real flow (
verifyskill), not just green tests. Tests-pass ≠ works. - Ship beats polish. Verified, committed work sitting unpushed → push it; pushed branch with no PR → open one.
- Then, and only then, next planned item from the plan/task list/handoff.
- Nothing on the ladder → STOP. Report “nothing left”. Do not invent work.
Rung 7 is the point of this skill. Inventing plausible-looking busywork is the failure mode — refactors nobody asked for, speculative tests, defensive rewrites. If you cannot name which rung the action came from, it is not an action.
3. Do it
- Edit-heavy or multi-file → delegate to
executor(model=sonnet;opusfor judgment work). Prompt every subagent: “return verdict + max 5 bullets, no full body”. - 2+ file edits → failing test or explicit assertion checklist BEFORE editing.
- External dependency (SSO, OAuth, third-party API, MDM, browser auth) → run the feasibility probe and name the fallback BEFORE building anything on it. No probe, no build.
- Two failed fix passes on the same problem → hand to
/codex:rescue, don’t grind.
4. Verify, then ship
Gate every action before it counts as done:
/done— typecheck + lint + tests + build. Non-zero exit = not done, back to rung 1.verifyskill — drive the actual change and observe it. Required for anything with a runtime surface.- Commit on the working branch. Push. Push-verify: confirm
git branch --show-currentmatches the target, then confirmgit pushexited 0 AND the output is notup-to-date/ rejected before claiming pushed. - Branch has commits and no PR → open one.
Append one line per action to .omc/carryon/run-<timestamp>.md (or the scratchpad dir if not in a repo): rung, action, verify command, exit code.
5. Loop or stop
Loop back to step 2 unless --once. Stop immediately on any of:
- Ladder empty (rung 7)
- Same action failed twice
- Needs a decision only the user can make — product/design choice, ambiguous requirement, which-of-two-approaches, a credential you don’t have
- Irreversible or outward-facing: deploy, prod, DB migration/schema change, force-push,
rmof anything untracked, dismissing a reviewer’s active CHANGES_REQUESTED, sending anything to a person. Stop and ask. Full send covers push and PR — it does not cover these. - Schema/protected paths (
.env*, lockfiles, credentials) needed - 20 tool calls or ~50% context, whichever first → write a
/reboothandoff, then stop - 15 minutes stuck with no forward progress
- 4h wall-clock, self-enforced. Run Referee pauses the run at the same mark if you do not, but treat that as the backstop, not the control.
6. Report — 3 lines, no more
DID: <what changed> (<n> actions, rungs <x,y>)
GREEN: <verify command> exit 0 · <PR #n | branch pushed | local only>
NEXT: <the rung-N action waiting> | STOPPED: <reason, and what you need from me>
Everything else goes in the log file. Name the log path on a fourth line only if something failed. No summary tables, no per-file narration, no “let me know if”.
If the stop reason is just “needs more iterations”, say so and hand back a ready-to-paste /loop or /goal line instead of asking a question.
Hard rules
- Never claim done without a pasted verify command and exit code.
- Never self-approve. Review/verification is a separate pass (
code-reviewer,verifier), never the same context that wrote the code. - Never certify a UI or theme change from your own screenshots — root-cause it in source, then ask the user to confirm in his browser.
RESEARCH-ONLYin scope → findings only, no edits, ladder rungs 1–6 do not apply.