agent-doc-discipline
Writing-time discipline for documents agents consume (the five surfaces, specs, tickets, .omc/skills/) — every rule checkable and…
Durable multi-goal workflow that persists plan/ledger artifacts under .omc/ultragoal and prints Claude /goal handoff text for the active session
Claude Code
$ npx -y skills add Yeachan-Heo/oh-my-claudecode --skill ultragoal --agent claude-code
Codex
$ npx skills add Yeachan-Heo/oh-my-claudecode --skill ultragoal -a codex -y
Cursor
$ npx skills add Yeachan-Heo/oh-my-claudecode --skill ultragoal -a cursor -y
Gemini CLI
$ npx skills add Yeachan-Heo/oh-my-claudecode --skill ultragoal -a gemini-cli -y
GitHub Copilot
$ npx skills add Yeachan-Heo/oh-my-claudecode --skill ultragoal -a github-copilot -y
OpenCode
$ npx skills add Yeachan-Heo/oh-my-claudecode --skill ultragoal -a opencode -y
Windsurf
$ npx skills add Yeachan-Heo/oh-my-claudecode --skill ultragoal -a windsurf -y
name: ultragoal description: Durable multi-goal workflow that persists plan/ledger artifacts under .omc/ultragoal and prints Claude /goal handoff text for the active session argument-hint: "<brief or subcommand>" level: 3
<Purpose> Ultragoal breaks a brief into an ordered set of goals, records start/checkpoint/blocker/failure events in a durable append-only ledger, and tells the active Claude agent how to drive the Claude Code `/goal` slash command alongside the plan. It does not — and cannot — mutate Claude `/goal` state from the shell; it persists durable repo state and prints a model-facing handoff that the active agent must act on in-session. </Purpose>
<Use_When>
</Use_When>
<Do_Not_Use_When>
</Do_Not_Use_When>
<Why_This_Exists> Claude Code `/goal` is a session-scoped Stop hook: it blocks the session from stopping until a condition holds, and auto-clears on success. That is a great single-session execution primitive, but it loses state across sessions and does not by itself enforce a final review gate. `omc ultragoal` adds a durable plan, ledger, and gating layer so a long multi-step initiative can survive session restarts, fresh worktrees, and review iterations while still leveraging Claude `/goal` to keep the active agent focused. </Why_This_Exists>
<How_To_Use>
On plugin-only installs where `omc` is not on `PATH`, replace the `omc` prefix in the commands below and in generated handoffs with `oh-my-claudecode.js`, or use `node <plugin-root>/bin/oh-my-claudecode.js`.
1. Create a plan from a brief:
omc ultragoal create-goals --brief-file plan.md
Or with explicit stories:
omc ultragoal create-goals --brief "ship the migration" \
--goal "Schema::Add new columns" \
--goal "Backfill::Backfill rows in batches" \
--goal "Cutover::Drop old columns and switch reads"The default mode is `aggregate` (one Claude `/goal` covers the run). Pass `--claude-goal-mode per-story` if you want each story to have its own `/goal`.
**Multi-repo workspaces / parallel sessions:** when several Claude sessions in the same workspace need to run `/ultragoal` concurrently, pass either `--plan-id <stable-id>` or `--auto-plan-id` so the plan is written to `.omc/ultragoal/plans/{planId}/` instead of the shared single-plan path. Without that flag, two sessions creating goals would clobber each other. `--auto-plan-id` derives `{epochMs}-{slug}` from the brief title. Then thread the same `--plan-id <id>` through every subsequent subcommand in that session. Use `omc ultragoal list-plans` to enumerate available planIds when needed.
2. Start (or resume) the next story:
omc ultragoal complete-goals [<goal-id>]
With no goal id, this preserves the default behavior of resuming the active story or starting the first pending story. With a goal id, OMC targets exactly that named eligible story (a pending story may be started out of order); it never falls through to another story. An active different story, unknown id, completed or review-blocked story, or failed story without `--retry-failed` is rejected without state mutation. An in-progress named story is resumed without changing its attempt. This prints a model-facing handoff. The active Claude agent must read it and:
shell nor the agent can do it, so ask the user to type `/goal <aggregate objective>` and wait. `--claude-goal-json` (below) reconciles the ledger only and does not satisfy the PreToolUse `/goal` guard, which blocks tool calls until it observes an active `/goal`.
3. Checkpoint a story:
omc ultragoal checkpoint --goal-id G001-... --status complete \
--evidence "tests/files/PR evidence" \
--claude-goal-json '{"goal":{"objective":"...","status":"active"}}'For the final story, also pass `--quality-gate-json` containing `aiSlopCleaner`, `verification`, and `codeReview` evidence (all clean).
4. If the final review is not clean, do NOT mark complete. Record blockers:
omc ultragoal record-review-blockers --goal-id G00X-... \
--title "Resolve final code-review blockers" \
--objective "Fix the listed review findings and rerun final gates" \
--evidence "<the review findings>" \
--claude-goal-json '{"goal":{"objective":"...","status":"active"}}'This appends a new blocker story and keeps the Claude `/goal` active.
5. Inspect state at any time:
omc ultragoal status
</How_To_Use>
<Important_Limitations>
For Codex users: Check out oh-my-codex — the same orchestration experience for OpenAI Codex CLI. Liked OmC but found it a bit overkill? Try gajae-code.
Writing-time discipline for documents agents consume (the five surfaces, specs, tickets, .omc/skills/) — every rule checkable and…
Clean AI-generated code slop with a regression-safe, deletion-first workflow and optional reviewer-only mode
Settle types and module shape before cross-boundary code — competing designs explored in parallel, compared on API surface and…
Periodic architecture survey — walks the module graph and reports ranked deepening candidates (shallow modules, hypothetical…
Run N parallel candidates at one brief and synthesize: rubric-first framing, isolated fan-out, a cross-judge on a different…
Shipyard's navigator — chart a foggy effort (destination unclear, questions not yet stateable) into a map of decision tickets on…
Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by…
Create a new Architecture Decision Record with sequential numbering and AgentDB registration