5662144283
Ports the OpenCode /start-work flow onto Codex as a discoverable skill. The skill drives plan selection, Boulder state with codex:<session_id> prefixed ids, worktree binding, parallel spawn_agent sub-tasks with 6-section prompts, 4-channel Manual-QA evidence (HTTP / tmux / browser / computer use), ledger append at .omo/start-work/ledger.jsonl, and a 4-phase verification gate. Pairs with the start-work-continuation Codex Stop / SubagentStop hook component that re-injects continuation while boulder.json shows incomplete work for the active codex: session. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
121 lines
5.9 KiB
Markdown
121 lines
5.9 KiB
Markdown
---
|
|
name: start-work
|
|
description: "Execute a Prometheus work plan in Codex with Boulder state, evidence ledger updates, worktree discipline, parallel subagents, and Stop-hook continuation. Use after planning when the user says start work, execute plan, continue plan, resume plan, or asks to run a .omo/plans plan."
|
|
---
|
|
|
|
## Codex Harness Tool Compatibility
|
|
|
|
This skill ports the OpenCode `/start-work` flow onto Codex. Any OpenCode-only tool name in an inherited example must be translated to its Codex equivalent:
|
|
|
|
| OpenCode example | Codex tool to use |
|
|
| --- | --- |
|
|
| `task(subagent_type="explore", ...)` | `spawn_agent(agent_type="explorer", task_name="...", message="...")` |
|
|
| `task(subagent_type="librarian", ...)` | `spawn_agent(agent_type="librarian", task_name="...", message="...")` |
|
|
| `task(subagent_type="plan", ...)` | `spawn_agent(agent_type="plan", task_name="...", message="...")` |
|
|
| `task(subagent_type="oracle", ...)` for final verification | `spawn_agent(agent_type="codex-ultrawork-reviewer", task_name="...", message="...")` |
|
|
| `task(category="...", ...)` for implementation or QA | `spawn_agent(agent_type="worker", task_name="...", message="...")` |
|
|
| `background_output(task_id="...")` | `wait_agent(...)` |
|
|
| `dispatchInternalPrompt(...)` | the `Stop` hook emits `{"decision":"block","reason":"<prompt>"}` automatically; see Continuation |
|
|
| `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.
|
|
|
|
# start-work
|
|
|
|
Execute a Prometheus work plan until every top-level checkbox is complete. This skill pairs with the Codex `Stop` / `SubagentStop` continuation hook in `components/start-work-continuation`, which re-injects the next turn while `.omo/boulder.json` says the current `codex:<session_id>` still has unchecked plan work.
|
|
|
|
## Usage
|
|
|
|
```text
|
|
$start-work [plan-name] [--worktree <absolute-path>]
|
|
```
|
|
|
|
- `plan-name` is optional. It may be a full or partial file stem under `.omo/plans/`.
|
|
- `--worktree` is optional. Use it only when the user explicitly asks to work in a separate git worktree.
|
|
|
|
## Phase 1: Select the plan
|
|
|
|
1. Read `.omo/boulder.json` if it exists.
|
|
2. List Prometheus plan files under `.omo/plans/`.
|
|
3. If `plan-name` was provided, select the matching plan.
|
|
4. If exactly one active or paused Boulder work exists for this session, resume it.
|
|
5. If no active work exists and exactly one plan exists, select it.
|
|
6. If multiple plans remain possible, ask one focused selection question.
|
|
|
|
## Phase 2: Create or update Boulder state
|
|
|
|
Write `.omo/boulder.json` before implementation starts. Session ids must be prefixed with `codex:` so the continuation hook can identify its own session.
|
|
|
|
```json
|
|
{
|
|
"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.
|
|
|
|
## Phase 3: Execute the next checkbox
|
|
|
|
1. Read the full selected plan.
|
|
2. Find the first unchecked column-0 checkbox in `## TODOs` or `## Final Verification Wave`.
|
|
3. Ignore nested checkboxes under acceptance criteria, evidence, and definition-of-done sections.
|
|
4. Decompose that checkbox into atomic sub-tasks.
|
|
5. Dispatch independent sub-tasks in parallel with `spawn_agent`; serialize only when one sub-task has a named dependency on another.
|
|
|
|
Each sub-task message must include:
|
|
|
|
1. Goal and exact files or directories in scope.
|
|
2. Required red test or failing reproduction before production changes.
|
|
3. Implementation constraints from the plan and project rules.
|
|
4. Automated verification commands to run.
|
|
5. One Manual-QA channel: HTTP call, tmux session, browser use, or computer use.
|
|
6. Required artifact path and cleanup receipt.
|
|
|
|
## Phase 4: Verify and record evidence
|
|
|
|
For each checkbox, complete all four gates before marking it done:
|
|
|
|
1. Plan reread: confirm the checkbox and acceptance criteria.
|
|
2. Automated verification: run tests, typecheck, lint, build, or the plan-specific equivalent.
|
|
3. Manual-QA channel: capture a real artifact, not a dry-run claim.
|
|
4. Cleanup: close temporary processes, tmux sessions, browser contexts, ports, containers, and temp directories.
|
|
|
|
Append evidence to `.omo/start-work/ledger.jsonl` using one JSON object per line. Include at least `event`, `plan`, `task`, `session_id`, `commands`, `artifact`, and `cleanup` fields.
|
|
|
|
## Phase 5: Mark progress
|
|
|
|
Only after verification passes:
|
|
|
|
1. Edit the plan checkbox from `- [ ]` to `- [x]`.
|
|
2. Re-read the plan and confirm the remaining count decreased.
|
|
3. Append a `task-completed` ledger entry.
|
|
4. Continue with the next checkbox. Do not ask whether to continue.
|
|
|
|
## Completion
|
|
|
|
When all top-level checkboxes in `## TODOs` and `## Final Verification Wave` are complete:
|
|
|
|
1. Run the plan's final verification commands.
|
|
2. If worktree mode was used, sync `.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.
|
|
3. Remove or mark the Boulder work as completed.
|
|
4. Print an `ORCHESTRATION COMPLETE` block with the plan path, verification commands, artifacts, and cleanup receipts.
|
|
|
|
## Hard rules
|
|
|
|
- No production change before a failing test or reproduction exists.
|
|
- No `--dry-run` as completion evidence.
|
|
- No tests-only completion claim. A Manual-QA artifact is required.
|
|
- No unprefixed session ids in Boulder state. Codex sessions are always `codex:<session_id>`.
|
|
- No stale-memory execution. The plan and ledger are the durable source of truth.
|