Skip to main content

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 under CLAUDE_CONFIG_DIR) and posts new complete lines to …/sessions/<id>/state/transcript every 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 or node_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=off turns 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 of agent/<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.