packages/shared-skills/skills/start-work/SKILL.md
YOU DO NOT WRITE CODE. YOU DO NOT EDIT PRODUCT FILES. YOU DO NOT RUN QA YOURSELF. EVERY unit of implementation, test, QA, and review work MUST be delegated to a spawned subagent. NO EXCEPTIONS. Your hands touch only plan selection, .omo/ state (Boulder, ledger, plan checkboxes), decomposition, dispatch, verdicts, and evidence records. About to edit a product file or run an implementation command yourself? STOP. SPAWN A WORKER INSTEAD. Orchestrate at MAXIMUM PARALLELISM: every independent unit runs concurrently; only named dependencies serialize.
Translate any OpenCode-only tool name in an inherited example to its Codex equivalent:
| OpenCode example | Codex tool to use |
|---|---|
task(subagent_type="<role>", ...) or task(category="...", ...) | spawn_agent({"task_name":"...","message":"TASK: act as <role: explorer, librarian, planner, reviewer, implementation or QA worker>. ...","fork_turns":"none"}) |
background_output(task_id="...") | wait_agent(...) for mailbox signals |
team_*(...) | spawn_agent + send_message + followup_task + wait_agent + close_agent |
When translating load_skills=[...], name the skills inside the spawned agent's message. If a code block below conflicts with this section, this section wins.
Every multi_agent_v1.spawn_agent message is a self-contained executable assignment: TASK: <imperative assignment>, then DELIVERABLE, SCOPE, and VERIFY, with role instructions inside message. Use fork_context: false unless full history is truly required; paste only the context the child needs.
Plan and reviewer agents may run for a long time: spawn them in the background, keep doing independent root work, and poll with short multi_agent_v1.wait_agent cycles — never a single long blocking wait. A timeout only means no new mailbox update arrived; treat a running child as alive. Require WORKING: <task> - <current phase> before long passes and BLOCKED: <reason> only when progress stops. Keep the parent visibly alive with active subagent count, names, and latest WORKING: phase. Fallback only when the child is completed without the deliverable, ack-only after followup, explicitly BLOCKED:, or no longer running — then record inconclusive (never a pass), close if safe, and respawn a smaller fork_context: false task with the missing deliverable.
Execute a Prometheus work plan until every top-level checkbox is complete. This skill pairs with the Codex Stop / SubagentStop continuation hook (components/start-work-continuation), which re-injects the next turn while .omo/boulder.json says this codex:<session_id> still has unchecked plan work.
$start-work [plan-name] [--worktree <absolute-path>]
plan-name (optional): a full or partial file stem under .omo/plans/.--worktree (optional): only when the user explicitly asks for a separate git worktree..omo/boulder.json if it exists..omo/plans/.plan-name was provided, select the matching plan.When the user explicitly said start work / $start-work and no selectable plan exists, treat that phrase as approval: bootstrap ulw-plan to create the approved plan before execution and implementation, instead of stalling or asking for generic approval again. A brief or notes file without waves, checkboxes, and acceptance criteria is NOT decision-complete — enter this bootstrap too.
ulw-plan skill from the current request and require its dynamic adversarial workflow: collect, verify, design, adversarial plan-review, synthesize..omo/plans/<slug>.md before implementation or Boulder state writes that point at plan work.Write .omo/boulder.json before implementation starts. Prefix session ids with codex: so the continuation hook can identify its own session.
{
"schema_version": 2,
"active_work_id": "<work-id>",
"works": {
"<work-id>": {
"work_id": "<work-id>",
"active_plan": ".omo/plans/<plan-name>.md",
"plan_name": "<plan-name>",
"session_ids": ["codex:<session_id>"],
"status": "active",
"worktree_path": null
}
}
}
If --worktree is set, verify the path with git worktree list --porcelain or create it with git worktree add <path> <branch-or-HEAD>, then store the absolute path as worktree_path. All edits, commands, tests, and evidence capture must run inside that worktree.
## TODOs or ## Final Verification Wave.multi_agent_v1.spawn_agent burst; serialize only named dependencies. Verification and checkbox marking stay per-checkbox.Each sub-task message must include:
curl, send-keys, page.click, payload, selectors, and the binary observable that decides PASS/FAIL), not "verify it works". A LIGHT checkbox needs one real-surface proof of its deliverable, and auxiliary surfaces (CLI stdout, DB state diff, parsed config dump) are first-class when the surface is CLI- or data-shaped:
curl -i against the live endpoint.tmux session driven with send-keys, dumped via capture-pane.The 9 ultraqa classes are trigger-mapped: new input parsing → malformed input; untrusted external text → prompt injection; resumable or long-running flows → cancel/resume; generated or cached artifacts → stale state; uncommitted user files in scope → dirty worktree; long external commands → hung or long commands; new or timing-sensitive tests → flaky tests; log-based success claims → misleading success output; mid-operation interrupts → repeated interruptions. A class applies when its trigger fact holds. Probe each applicable class; record the rest as not-applicable with a one-line reason.
For each checkbox, complete all five gates before marking it done:
Append evidence to .omo/start-work/ledger.jsonl, one JSON object per line. Include at least event, plan, task, session_id, commands, artifact, adversarial_classes, and cleanup fields. adversarial_classes lists each probed class with its observable result and each ruled-out class with a one-line reason.
A worker done claim is never final: each implementation sub-task returns a DoneClaim, a different context runs AdversarialVerify probing or reproducing the claim, failures loop back to the executor, and only a confirmed verifier verdict becomes FullyDone.
{
"DoneClaim": {
"task": "<task id/title>",
"changed_files": ["path"],
"tests": ["exact command + result"],
"manual_qa": ["artifact path"],
"cleanup": ["receipt"],
"risks": ["known risk or none"]
},
"AdversarialVerify": {
"verdict": "confirmed | false-positive | needs-fix | needs-human-review",
"evidence": ["file path, command, log, artifact, or explicit not inspected"],
"repro": "exact command or manual steps when available",
"confidence": 0.0
}
}
Rules:
confirmed is the only pass verdict. false-positive, needs-fix, and needs-human-review all block checkbox completion.codex-ultrawork-reviewer, a scoped worker reviewer, or root only when root did not implement or materially rewrite that task.stale_state, dirty_worktree, and misleading_success_output, before allowing FullyDone.Only after verification passes:
- [ ] to - [x].task-completed ledger entry.When all top-level checkboxes in ## TODOs and ## Final Verification Wave are complete:
.omo/ state back to the main repo, merge or hand off exactly as requested, and remove the worktree only after successful merge or explicit handoff.ORCHESTRATION COMPLETE block with the plan path, verification commands, artifacts, and cleanup receipts.--dry-run as completion evidence.codex:<session_id>.