v2.91.0
Binaries and the merged-pull-request list are on the GitHub releases page.
A cloud session survives its box
A cloud session runs in a box with a lifetime. When the box ends, everything
that was not pushed used to go with it: Claude Code's conversation, its
reasoning, any uncommitted change. The next session for the task started
from a fresh clone of the default branch with a one-paragraph kickoff, and
redid work. Orunbase now keeps a state object per session (orun-cloud
saas-session-continuity CT2), and orun agent serve uses it
(saas-session-continuity CT3):
- Keep. While a Claude Code session works, serve tails the harness's
transcript (
~/.claude/projects/<dir>/<session>.jsonl, or underCLAUDE_CONFIG_DIR) and posts new complete lines to…/sessions/<id>/state/transcriptevery second and at each turn's end. At each turn's end, and every two minutes while the working copy is dirty, it snapshots unpushed work — modified and untracked files, never ignored ones ornode_modules, as a gzip tar of at most 16 MB with the commit it applies to — to…/state/snapshot. Resume metadata (the harness session, its directory, the checkout, branch and commit) goes to…/state/meta. - Resume. A session Orunbase dispatched after an earlier one for the same
task reads that session's state at boot (
…/state/resume). It writes the transcript back under the directory Claude Code derives from this box's working directory (every character that is not a letter or digit becomes-) and launches the harness with--resume <session>: Claude Code continues the same conversation under the same id. A snapshot taken on the commit now checked out is put back; one taken on another commit is left alone and the log says why. - Best-effort. Nothing here fails a session: a failed read starts fresh, a
refused write is retried on the next tick.
ORUN_RESUME=offturns resuming off.
A session grounds on the task's branch
The task plane files a push under a task only on the provenance grammar,
orun/<KEY>-<slug>. A session grounded on agent/<KEY>-<type>, and a branch
a previous session pushed was re-created from the default branch on a new box
because grounding only reused a local branch.
ORUN_TASK_BRANCH. When the platform sets it to a branch that names the session's task, serve grounds there instead ofagent/<KEY>-<type>. A branch for another task, or off the grammar, is ignored.- A branch that exists only on origin is checked out tracking it, so a session on a new box starts where its predecessor pushed.
Each turn reports its prompt-cache use
Claude Code's per-turn cost_sample now carries inputTokens,
outputTokens, cacheReadTokens and cacheWriteTokens beside tokens.
With caching, input_tokens is only the uncached remainder, so a hit rate
was invisible; tokens keeps its meaning.