ox plan
Work with SageOx-enriched plans: design, GTM, rollout, engineering, any plan your team executes against. Enrich, render, review, and save. ox computes team-context signals (collision, prior-art, expert-routing) locally, with no LLM or network call.
Lifecycle verbs (approve, work, realize, abandon, supersede) are thin sugar over one event-log engine. Each accepts --json and is idempotent: re-running an already-applied verb is a safe no-op.
Usage
Subcommands
| Command | Description |
|---|---|
ox plan enrich | Enrich a plan with SageOx team context (JSON by default) |
ox plan render | Render a plan to a self-contained HTML page |
ox plan review | Open a live review loop for a saved plan (serve, collect, auto-reload, approve) |
ox plan review await | Block until reviewers submit feedback, then print open items as JSON (agent loop) |
ox plan save | Save a plan, mockup, or review page to the Ledger and share it |
ox plan list | Browse saved Ledger plans |
ox plan view | Read a saved plan in the terminal |
ox plan status | Show a saved plan's lifecycle timeline and current status |
ox plan approve | Mark a saved plan approved |
ox plan work | Record that a coding session worked on a saved plan |
ox plan realize | Mark a saved plan realized (its intent was carried out) |
ox plan abandon | Mark a saved plan abandoned |
ox plan supersede | Mark a saved plan superseded by a successor plan |
Examples
Consult team context before drafting a plan. Returns JSON badges (collision, prior-art, expert-routing) at zero LLM and network cost. Add --text for a human-readable summary.
Enrich an existing plan document (or pipe one on stdin). With no input, ox auto-discovers the newest ~/.claude/plans/*.md.
Render a plan to a self-contained HTML page and open it in your browser. On a saved plan, --open launches the live review loop, pass --static for a read-only page instead.
Serve a saved plan on a short-lived localhost server and stay up across review rounds. Reviewers mark up sections, risks, and decisions; each round writes to the Ledger and prints a digest for the agent.
The agent side of the review loop: it blocks until any reviewer leaves open feedback, prints the open items as JSON, and exits. It exits with status timeout when nothing arrives within --timeout, or approved once a reviewer approves the plan. Because it blocks, confirm with the user before an AI coworker enters the loop.
Save a plan to the Ledger, push it, and print its share link. Prefer an authored self-contained HTML page as the plan of record; a .md file works for quick plans. Re-saving a slug that names an existing open plan records a new revision with the same ID and link.
List every saved plan, newest first, whatever its status. Narrow the list with --limit N, --since, and --until, which accept a duration (30m, 2h, 7d, 1w), an RFC3339 instant, or a date (2026-10-01).
Flags
ox plan save
| Flag | Description |
|---|---|
--file string | The plan of record: an authored self-contained .html page (preferred) or a .md quick plan |
--slug string | Save as this plan slug; an existing open plan with this slug gets a new revision |
--kind string | What the artifact is: plan (default), mockup, review, or evidence |
--annotations string | Merged annotations.json; optional with --file, which self-enriches |
--json | Emit the saved plan's ID, URL, revision, and share status as JSON |
ox plan save always saves, whatever the plan.save config says. When the plan saves locally but is not pushed, it says so on stderr (and under share with --json) and prints the command that fixes it.
ox plan list
| Flag | Description |
|---|---|
--limit int | Show at most N plans, newest first (0 = no limit) |
--since string | Only plans saved at or after this time |
--until string | Only plans saved before this time; a bare date includes that whole day |
--json | Emit the plan list as JSON |
What's next
- ox pr - Emit a PR header that links the plans a change produced
- ox viz - Author the visualizations a rendered plan can embed
- ox session - Sessions record which plan they worked on

