# relay-baton v0.9.0 Release Notes Status: **Released** Date: 2026-05 Theme: **Automation & Runtime (bounded)** — add *bounded* multi-turn continuation, session replay, re-planning, and adaptive compression — without ever introducing an unbounded autopilot, a daemon, or auto-commit. ## Summary v0.9 turns the Agent Room from a single-shot REPL into a **bounded** runtime. The new `LoopController` is a pure, model-free guard that caps how many plan↔execute steps may run and stops on no-progress (divergence) or budget pressure. The room gains `/continue --max-steps N` (default 3, hard-capped at 20), `/replan` (backs up the current plan first), and `/replay`. A new `relay-baton replay` command renders the recorded conversation timeline. Per- agent **adaptive compression thresholds** let larger-context agents run hotter before compaction. Everything stays confirmation-first and subprocess-only. ## Added - **Bounded loop controller** — `LoopController` (core `runtime/`). Pure and model-free: the caller runs a step, reports an observation (`budgetRatio`, `progressKey`), and asks whether to proceed. Stops on `max-steps`, `budget`, `divergence` (repeated progress key), or `explicit-stop`. It NEVER spawns anything — "continue" is always *bounded*. - **Session replay** — `ConversationReplay` (core) projects `.ai-session/conversation.jsonl` into an ordered, filterable timeline plus a deterministic summary (counts by role/kind, first/last timestamps). New read-only CLI command `relay-baton replay` with `--json`, `--session`, `--kind`, and `--limit`. No model call. - **Room bounded continue / replan / replay** — new slash commands: - `/continue --max-steps N` (or `-n N`, or a bare number) — preview a bounded plan↔execute loop, then run it confirmation-first. Each step is gated by `LoopController`; the loop stops early when the git working-tree signature stops changing. - `/replan ` — backs up the current `plan.md`, then runs the planner. - `/replay` — read-only conversation timeline (no confirmation, no model). - **Adaptive compression thresholds** — `RelayBatonConfig.contextCompression .perAgent?` plus `resolveCompressionThreshold(config, agent)`. Per-agent overrides take precedence over the global threshold; values are clamped to `[0,1]`. `ContextCompressor.compressIfNeeded` accepts an optional `agent`. ## Changed - CLI version bumped to `0.9.0`. - Room help text and command grammar extended (`/continue`, `/replan`, `/replay`). ## Tests - `LoopController.test.ts` — max-steps cap (incl. clamp to ≥1), budget ceiling (incl. 0.95 default), divergence on repeated progress key, explicit stop. - `ConversationReplay.test.ts` — ordered timeline + summary, session/kind filters, recent-N limit, one-liner rendering, empty log. - `CompressionPolicy.test.ts` — default fallback, global vs per-agent precedence, clamping of out-of-range values. - `RoomEngine.test.ts` — `parseMaxSteps` parsing/clamping; `/continue`, `/replan`, `/replay` action shapes and confirmation gating. ## Not included (still deferred) - Non-interactive `run --until` orchestration → candidate for a later release. - Daemon / long-running prototype → **explicitly out of scope** (roadmap candidate only; relay-baton stays a local, on-demand harness). - Semantic summarization, exact tokenizers, auto commit/push/PR — permanently out of scope. ## Upgrade notes - Fully additive. No config migration required. `contextCompression.perAgent` is optional. `/continue` is bounded by design (default 3 steps, max 20) and still asks for a single explicit confirmation before any agent runs. ## Verification commands ```bash pnpm build pnpm test relay-baton replay --json # read-only timeline, no model call relay-baton chat # /help, then /continue --max-steps 2 (confirm), /replan, /replay, /exit relay-baton verify ``` `continue` never runs unbounded: it is capped by `--max-steps` and stops on no-progress or budget pressure. `replay`/`/replay` make no model calls at all.