Skip to content

Roadmap

What omh builds next, in the order that gates it, and what has already landed. Ordered by what gates what, not by what is most fun.

Status: intent, with ✅ for what landed. Nothing here is built by virtue of being written down. The ✅ marks are the claim; anything unmarked is a plan. Work that shipped outside a milestone is in retrospectives.

✅ landed · 🔶 partly landed · ⬜ not started

Milestone Status Landed Remains
v0 — the base set, one harness 🔶 everything but memory’s hub pages memory’s hub pages
v0.5 — backends 🔶 the runtime trait; podman, and sbx rewritten from its spike — both opt-in since 0.10.0 a live omh doctor --harness claude under sbx, which decides whether it becomes the default
v1 — accountability 🔶 omh why cost accounting: what the whole set injects
v1.5 — the work loop ✅ all twelve steps, in 0.6.0 —
v2 — portability 🔶 omh import beyond MCP (0.4.0), omh eject (0.8.0) a second adapter driven for real work
v3 — the unique capability ⬜ — the marketplace plugin port
v4 — memory and graph, re-justified ⬜ — a review of both against their measured cost

These are milestones, not crate versions. The crate is at 0.16.1 and milestone v1.5 is roughly what 0.6.0 contained. They are deliberately not kept in lockstep — v0 has spanned sixteen minor releases already.

Why the crate is not called 1.0

A milestone moves when a body of work lands, and semver moves on every release. Calling the crate 1.0 would imply a stability this project has not earned — one verified harness, one verified runtime.

✅ omh init that decides · ✅ images · ✅ sandbox + worktree · ✅ persistence · ✅ omh account login · ✅ omh sNN attach · ✅ omh doctor · ✅ carry_in · ✅ code graph · ✅ omh graph · ✅ stack hooks · 🔶 memory — the store, retrieval and staleness ship; hub pages do not

Success criterion: omh init && omh new claude is visibly better than raw claude, with zero questions asked.

Not in v0: further adapters, memory, breadth in the capability superset. Breadth before depth is how distributions die.

🔶 The runtime trait exists, and a podman backend ships beside Docker. sbx ships too, rewritten from what its spike found.

It is opt-in (runtime = "sbx"); auto never picks it. What decides whether it becomes the default is the full live acceptance — a real omh doctor --harness claude under sbx — which has not run. Until it does, Docker is the only end-to-end-verified runtime and the credential weakness sbx addresses stays unaddressed on Docker.

What the sbx spike measured, and what changed because of it

The spike ran against sbx 0.39.0 — single-file mounts, chosen guest paths and the image-delivery path are all measured — and the backend was rewritten from what it found: stage-and-symlink for the mounts sbx cannot do natively, docker save | sbx template load delivery, and label-free session reuse.

✅ omh why · ⬜ cost accounting

why ships. Every base-set entry answers who installed it, what it costs, what was considered instead and how to remove it — and the four fields are enforced by a test rather than by convention, so an entry cannot be added without its reasoning. The base set moved out of the binary into a versioned manifest to make that possible; every launch generates from it and why explains from it.

What remains is the rollup: what the whole set injects, measured in bytes, deterministically and without an LLM in the loop. Per-entry costs are recorded in the manifest today, and six of them — the grep nudge, the three rules sections, git-note’s note and the memory server’s tool list — are computed by a test rather than typed, which is the shape the rest should take. The ones needing a live MCP connection are doctor territory rather than a pure function.

What cost accounting buys is the one thing genuinely missing: a reason for the base set to ever shrink. Arguments for adding are always available; “this now costs 4.1 KB before you type anything, up from 2.3” is the fact that forces the other conversation, and it is free to produce.

Why this is deliberately not a benchmark

The reasoning is in measure the cost, argue the benefit — briefly, an eval suite over a stochastic metric costs real money per decision, measures tokens rather than correctness, and becomes the thing the base set is tuned to pass. Distributions have never earned legitimacy that way.

The loop around the sandbox’s repository, built. All twelve steps of its design landed across #53–#67, and that page — kept in the repository’s history, as it last stood — names the pull request behind each one.

  • omh sNN log makes the sandbox’s commits visible, and --turns reads the end-of-turn snapshots omh takes for an agent that commits nothing.
  • diff grew -p and checkpoint numbers.
  • --keep takes the numbers log printed, and is repeatable from a recorded replay point.
  • sync brings trunk in, merged on the host.
  • rm refuses over work no branch has.
  • omh s became a dashboard — state, staleness, the files two sessions are both changing, and the sandbox repositories a removed session left behind. omh s01 is that dashboard scoped to one session.

Success criterion: a session’s work can be read, curated and landed without typing git and without knowing that a session is a worktree. Met.

What this cost is worth reading before proposing the next one: a third of those pull requests were corrections to the ones before them, and the recurring defect was not a wrong answer but a confident one — a question omh could not answer rendering identically to an answer. The design records each, with the measurement that settled it.

⬜ Second adapter driven for real work · ✅ full omh import (0.4.0), covering rules, skills, hooks and commands rather than MCP alone · ✅ omh eject (0.8.0)

None of these were ever gated on evidence — an earlier version of this roadmap put them behind a benchmark, which parked three cheap, useful deliverables behind a research project. See omh import.

⬜ Marketplace plugin port: Claude Code plugins re-rendered for other harnesses.

This is the thing nothing else can do, and it makes curation nearly free — inherit Anthropic’s taste, port it everywhere. It sits at v3 rather than v1 because it is worth very little until the ports are verified, which needs v2’s portability work and v1’s evidence.

⬜ Both are in the product on argument. The re-justification is a real review against their measured cost and a stated criterion — not a p-value — and either they earn their place or they go.

A distribution that cannot retire its own choices is just an opinion with a changelog.


  • The spike fails badly. If sbx forces host-path mounts, the staging model needs rework rather than a tweak, and v0.5 grows. The spike has run: sbx 0.39.0 mounts a workspace at its exact host path and cannot mount a single file, and the sbx backend absorbed that with stage-and-symlink — see v0.5.
  • The graph’s cost grows faster than its usefulness. Then v4 happens early and subtracts, which is the system working.
  • Someone actually uses this besides its author. Real usage reorders roadmaps more reliably than reasoning does — every item on this list that has shipped was reordered at least once by running the tool.
  • Retrospectives
    Work that shipped outside a milestone, and what it cost.
  • Decisions
    The choices these milestones build on.
  • Risks
    What is still weak, stated plainly.