v2.54.0
Release notes for orun v2.54.0 — everything landed since v2.53.2. The headline
is a removal: the work plane is gone. orun work, orun epic and
orun spec are retired, along with the work tools on the orun MCP. What
replaces them is smaller and, we think, the only part that was ever ours to
own: orun pr, the provenance pen.
Why
The work plane was a delivery-derived tracker: two append-only logs, lifecycle as a derived query, sealed briefs, an approval ladder. It was built to the end of its own logic and never met a user.
A census against Linear's 538-operation API put the differentiating core inside it — evidence ingest, gate truth, provenance, the derived ladder, the seal — at under 1,000 lines across both repos. The remaining ~50,000 was a tracker competing with the one every team already pays for. Finishing it meant winning that competition; bridging to it meant maintaining a shim forever. Deleting it meant keeping the boundary it taught us and rebuilding the small part against a real tracker rather than instead of one.
So it is deleted, whole, in one release rather than behind a deprecation window nobody would use.
Removed
orun work— the work lens:import,list, and the Space/epic verbs.orun epic—epic pull, the approval-sealed brief.orun spec—spec pull, the client-side seal of a fold query.- The work tools on
orun mcp serve— 15 tools in v2.53.2 (work_query,work_get,spec_get,spec_doc,epic_brief,task_create,task_comment,task_assign,contract_propose, and the rest). - The cockpit's Work lane in
orun tui-next. Home, Agents, Activity, Catalog and Events are unchanged. - The
epic-owneragent type. Its entire loop was designs, adoption, approval and the milestone ladder.
orun initiatives — added after v2.53.2 as the group's new name, then removed
with it — never appeared in a released binary. If you read about it, it does
not exist in any version you can install.
orun pr — the provenance pen
The one piece of the work plane worth keeping never depended on it: every PR should carry its own lineage, and something should check that it does.
orun pr open --task PAY-T14 --title "Route the reads"
orun pr check # the same rules, locally, before the PR exists
orun githooks install # stamp the Orun-Task trailer on every commit
pr open renames the branch onto the orun/<task-key>-<slug> grammar, pushes
it, and writes a machine-readable manifest into the PR body — the task, the
skill revisions the session ran under, the session id. With a GitHub credential
ambient (GITHUB_TOKEN / GH_TOKEN / gh auth) it opens through the API;
without one it prepares everything and prints the compare URL plus the body to
paste, which is honest either way.
pr check is the local preflight of exactly the rules Orun Cloud's
orun/compliance check verifies on the PR itself — prevention over detection.
It exits non-zero on errors, so it drops into a pre-push hook or a CI step.
The task key is now just a key. It can name a Linear issue, a Jira ticket, or anything else with a grammar; orun no longer needs to own the tracker that minted it.
orun skills — hosted agent playbooks
orun skills list # the registry: name, revision, source
orun skills pull <name> # materialize as native skill files
Skills are content-addressed by revision, and the revisions a session ran under
ride into the PR manifest that orun pr open writes — so what an agent was
told is recoverable from what it did.
The orun MCP is smaller and mounts differently
One stdio loop still composes two planes, now 28 tools plus the built-in
connection_info (was 40 + 1 in v2.53.2):
- The pen plane (1 tool) —
pr_open. - The platform plane (27 tools) — the Orun Cloud public API: catalog, runs and logs, audit, events, access, usage, billing, config, secret metadata, webhooks, skills. 21 reads plus 6 policy-gated writes.
The pen mounts on the checkout, not on a credential. This is a change in
your favour: pr_open used to require a resolved workspace, because it
happened to live on the work plane. It now asks only whether it is standing in
a repository. Run orun mcp serve inside a repo with no Orun Cloud auth at all
and you still get pr_open, where before you got only connection_info.
orun mcp doctor reports it as its own check:
✓ pen repository checkout at .git — `pr_open` mounts
--read-only does not touch pr_open. The flag scopes what the server may
change in the cloud. The pen changes your checkout and your GitHub, which is
the whole reason it is mounted, and stripping it would leave an agent with no
way to deliver its work.
Agent types
The three shipped types keep their harness and catalog lanes and lose the work
names. implementer and bootstrapper keep pr_open — one task, one PR,
lineage in the body. orchestrator reads the catalog and proposes; it does not
write PRs.
Base literacy's "The work plane" section is now "Your brief". The discipline is unchanged — you do not report your own state — but it rests on the brief's content address instead of on a derived-lifecycle query.
Upgrade notes
-
orun work,orun epic,orun specare gone. There is no replacement command and no compatibility alias; a script that calls them fails withunknown command. The hosted data they read was dropped server-side in the same epic, so an older binary pointed at current Orun Cloud will not work either. -
MCP clients lose the work tools. A client configured against
orun mcp servekeeps working —initializeanswers, the roster is just smaller. A prompt or agent definition that nameswork_query,task_get,spec_getor any other retired tool getsunknown toolas a normal isError result, not a protocol fault. Audit your tool allowlists: a name that no longer exists grants nothing and says nothing. -
orun agent run --spec <slug>still works, from a local file. It reads the sealed brief at.orun/specs/<slug>/snapshot.jsonand pins its content id onto the run, exactly as before. What changed is where that file comes from:orun spec pullused to fetch and seal it, and now you author or generate it. Two things tightened — the brief decodes leniently (fields it does not model are ignored) and its content id is computed over the bytes on disk rather than over a re-encode, so identity survives reformatting and a lossy decode cannot fabricate a matching id. -
A brief carrying derived state is refused. A
rung,lifecycle,assigneesorpinnedkey anywhere in a sealed brief fails the read rather than reaching an agent's instructions. -
orun prloses two gestures with the plane they spoke to.pr open --quick "title"minted a triage task inline, andpr linkcommented a URL onto a task's coordination log. Both endpoints are gone.pr open --task,pr checkandgithooks installare unchanged. -
orun agentis otherwise untouched. The runtime's only coupling to the work plane was one type, the task contract, which moved to its own package with its seal intact. Drivers, the attach protocol, session logs, replay and the tool policy all behave exactly as they did. -
Nothing else moved.
orun plan,orun run,orun catalog,orun workflow,orun secrets,orun integrations,orun policy,orun workspaceand the object model are untouched by this release.
Where the record lives
Retirement is not retraction. The design documents are archived in-repo under
specs/archive/ — orun-work-v2, orun-work-v4, orun-initiatives,
orun-initiatives-v2 — each stamped with why it was retired.
What was judged worth carrying into whatever replaces this is written down separately: nineteen named fold behaviours, the ownership boundary between what a tracker owns and what we do, and four rules for the successor. No replacement schema was created in this release; whoever builds it starts from that document and mints their own.