relay-baton DongGeon Lee
winget install --id=dgl1231.relay-baton -e relay-baton is a local handoff + token-diet harness that lets Codex CLI and Claude Code take turns on the same repository without re-pasting the chat log, the diff, or the repo.
winget install --id=dgl1231.relay-baton -e relay-baton is a local handoff + token-diet harness that lets Codex CLI and Claude Code take turns on the same repository without re-pasting the chat log, the diff, or the repo.
Portable continuation infrastructure for coding agents.
Pass compressed coding state between Codex CLI, Claude Code, and whatever ships next — without re-pasting the chat log, the diff, or the repo.
English · 한국어 · 日本語 · 简体中文 · 繁體中文 · Español · Français · Deutsch · Português · Русский
# Codex hits a quota wall mid-task. relay-baton notices, builds a compact
# handoff from the repository's actual state, and resumes the work in Claude.
$ relay-baton run "refactor the upload pipeline" --diet caveman
● relay chain: codex → claude
Starting with codex (hop 1/2)
→ codex exec --sandbox workspace-write "refactor the upload pipeline"
▲ codex hit a limit — fallback pattern detected: "rate limit exceeded"
→ building a compact handoff for claude…
✓ handoff ready — passing the baton: codex → claude
✓ claude finished the task.
↳ see what changed: relay-baton review · session state: relay-baton status
Prebuilt, single-file executables are attached to every release — no Node install required to run them.
One-line CLI install (verifies SHA256SUMS, no admin required):
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/dgl1231/relay-baton/main/install/install.sh | sh
# Windows PowerShell
iwr https://raw.githubusercontent.com/dgl1231/relay-baton/main/install/install.ps1 -UseB | iex
| OS | Binary | Get it |
|---|---|---|
| macOS (Apple Silicon) | relay-baton-macos-arm64 | Latest release |
| Linux (x64) | relay-baton-linux-x64 | Latest release |
| Windows (x64) | relay-baton-windows-x64.exe | Latest release |
# macOS / Linux
chmod +x relay-baton-macos-arm64
./relay-baton-macos-arm64 --version
# Windows
.\relay-baton-windows-x64.exe --version
Via npm (needs Node ≥ 20):
npm i -g @relay-baton/cli # installs the `relay-baton` command
npx @relay-baton/cli doctor # or one-off without installing
Via a package manager — manifests live in homebrew/,
scoop/, and winget/. Each folder's README has the
publish steps (Homebrew needs a tap repo, Scoop a bucket repo, Winget a PR to
microsoft/winget-pkgs):
brew tap dgl1231/relay-baton && brew install relay-baton # macOS / Linux
scoop bucket add relay-baton https://github.com/dgl1231/scoop-relay-baton; scoop install relay-baton # Windows
winget install dgl1231.relay-baton # Windows (after the winget-pkgs PR lands)
Desktop app (Tauri shell over the same CLI — see desktop/):
| OS | Installer | Get it |
|---|---|---|
| macOS (Apple Silicon) | relay-baton_…_aarch64.dmg | Latest release |
| Linux (x64) | relay-baton_…_amd64.AppImage | Latest release |
| Windows (x64) | relay-baton_…_x64-setup.exe | Latest release |
> Desktop installers are signed/notarized only when release signing secrets are
> configured. Unsigned fallback builds still ship, so expect Gatekeeper /
> SmartScreen prompts on unsigned releases. SHA256SUMS is attached to new
> releases for CLI installer verification.
> Desktop update checks are opt-in and manual. Signed updater artifacts and
> latest.json are published only when Tauri updater signing secrets are
> configured for a release.
>
> Older versions: pick any tag on the releases page. Prefer to build from source instead? See Install below.
AI coding work is fragmenting across tools. A real session looks like this:
The default way to move work between agents today is copy-paste the chat log — or worse, the whole repo dumped into a prompt. That approach has three problems:
relay-baton is a local harness that sits underneath the agents and carries the minimum sufficient state across the handoff: a compact summary, a repo map, and file references — not a transcript.
> Spend as few tokens as possible while merging Codex CLI and Claude Code CLI into a single workflow. > > When one agent hits a quota / context limit, the next one resumes from the exact repository state — without re-pasting the whole log, diff, or repo.
┌─────────┐ ┌──────────────┐ ┌──────────────┐ ┌────────┐
│ Codex │ → │ Fallback │ → │ Token Diet │ → │ Claude │
│ exec │ │ Detector │ │ Handoff │ │ Code │
└─────────┘ └──────────────┘ └──────────────┘ └────────┘
↓ ↓
.ai-session/handoff.md, compact-state.md,
repo-map.md, full-diff.patch, commands.log
A baton-pass for coding agents:
The handoff is a small file (.ai-session/handoff.md) plus references. Everything heavy — the full diff, the full log, the full repo map — stays on disk and is loaded on demand.
$ relay-baton init # create .ai-session/ in the current repo
$ relay-baton doctor # check git, codex, claude, env, config
$ relay-baton run "fix flaky upload test" --diet balanced
● relay chain: codex → claude
Starting with codex (hop 1/2)
→ codex exec --sandbox workspace-write "fix flaky upload test"
... codex output streams here ...
▲ codex hit a limit — fallback pattern detected: "maximum context length"
→ building a compact handoff for claude…
✓ handoff ready — passing the baton: codex → claude
Continuing with claude (hop 2/2)
→ claude --permission-mode acceptEdits -p ""
... claude resumes, edits files, finishes ...
$ relay-baton status # what state is the session in?
$ relay-baton budget # how much of the diet budget did we use?
Manual handoff, no auto-fallback:
$ relay-baton handoff --to claude --no-run --diet caveman
Across multiple repos:
$ relay-baton project add /path/to/repo-a --diet caveman
$ relay-baton project add /path/to/repo-b --diet balanced
$ relay-baton project switch repo-b
$ relay-baton run "wire up the new metrics endpoint"
A proactive alternative to reactive fallback: have a planner write a structured plan, gate it for completeness, then have an executor implement it.
# 1) Planner (default: Claude) writes .ai-session/plan.md, gated by PlanQualityGate.
$ relay-baton plan "add rate limiting to the upload endpoint" --with claude
# 2) Inspect / edit the plan if you want.
$ cat .ai-session/plan.md
# 3) Executor (default: Codex) implements the plan.
$ relay-baton execute --with codex
# Or do both in one shot once the plan passes its gate:
$ relay-baton plan "add rate limiting" --then-execute
# Scaffold an empty plan template without launching an agent:
$ relay-baton plan "explore options" --no-run
Deterministic mid-session compaction of state.md / commands.log so an agent
runs longer before hitting a context wall. No model call, fully reversible
(raw artifacts are rotated to commands.log.full.).
# See what would change without writing anything.
$ relay-baton compress-context --dry-run
# Compress when weight/budget exceeds the threshold (default 0.8).
$ relay-baton compress-context --threshold 0.8
# Force compression regardless of threshold.
$ relay-baton compress-context --force
# Simulated end-to-end check: resolution, fallback detection, handoff no-run,
# token budget, API-key env block. Exits non-zero on failure.
$ relay-baton verify
# Extended environment diagnostics (OK/WARN/FAIL checklist).
$ relay-baton doctor --deep
Neither verify nor doctor --deep makes any network or model call, and
verify writes nothing into your repo (it uses a throwaway temp dir).
Fastest path (no clone, no build). The package is @relay-baton/cli; the
command it installs is relay-baton:
npm i -g @relay-baton/cli # installs the `relay-baton` command
relay-baton doctor # check codex/claude + environment
relay-baton login # log in to both CLIs
relay-baton run "Fix the mail attachment upload flow" --diet balanced
# one-off without installing: npx @relay-baton/cli doctor
From source (for development):
# 1) Install & build
pnpm install
pnpm build
# 2) Log in to both CLIs in one go
pnpm relay-baton login
# 3) Sanity check
pnpm relay-baton doctor
# 4) Start a task on Codex; auto-handoff to Claude on quota/context limit
pnpm relay-baton run "Fix the mail attachment upload flow" --diet balanced
> pnpm relay-baton is an alias for node packages/cli/dist/index.js. For a global binary, link it with pnpm -F @relay-baton/cli link --global (optional). Published as @relay-baton/cli, so npm i -g @relay-baton/cli (command: relay-baton) or npx @relay-baton/cli works without a build.
install/install.md is both a human install guide and an instruction surface that coding agents can execute as-is:
# Codex CLI
codex exec --sandbox workspace-write "Read https://github.com/dgl1231/relay-baton/blob/main/install/install.md and install relay-baton on this machine. Do not print or store API keys. Finish by running 'pnpm relay-baton doctor'."
# Claude Code (headless)
claude --permission-mode acceptEdits -p "Read https://github.com/dgl1231/relay-baton/blob/main/install/install.md and follow it step by step. Do not print or store API keys. End by running 'pnpm relay-baton doctor'."
quota exceeded, rate limit exceeded, maximum context length and similar in agent output and hands off to the fallback agent. False-positive guards skip grep results and prose about the patterns themselves.off · lite · balanced · caveman · ultra). Lock files, build output, minified bundles, and binary blobs are excluded; logs are tailed; repo maps replace source..ai-session/plan.md, gated for completeness, then an executor agent (default Codex) implements it. relay-baton plan "" --then-execute.state.md / commands.log so an agent runs longer before hitting a context wall. relay-baton compress-context, plus an auto-pass inside run.OPENAI_API_KEY / ANTHROPIC_API_KEY are stripped from child processes. Opt-in only via --allow-api-key-env. No keys are ever stored, printed, or logged.--project or --path.codex / claude CLIs as subprocesses.packages/
shared/ # types, constants
core/ # UI-independent business logic
agents/ # AgentAdapter, CodexAdapter, ClaudeCodeAdapter, FallbackDetector
git/ # GitService, RepoMapGenerator
session/ # SessionManager (.ai-session/ lifecycle)
token-diet/ # BudgetManager, DiffCompactor, LogCompactor, HandoffCompactor, ...
handoff/ # HandoffGenerator, HandoffQualityGate, TokenDietQualityGate, PromptBuilder
workflow/ # BatonWorkflow — the orchestration
projects/ # ProjectRegistry, ProjectManager, ProjectResolver
cli/ # commander entrypoints — thin shells over core
tui/ # Ink dashboard — read-only over core
Design rules:
core knows nothing about UI.cli and tui hold no business logic — they wire user input to core.AgentAdapter. Adding opencode, gemini, aider means adding an adapter, not patching core..ai-session/. relay-baton never edits your source files.Single-repository flow:
relay-baton init
relay-baton doctor
relay-baton run "Fix the failing upload flow" --diet balanced
relay-baton status
relay-baton budget
Generate a handoff without launching the next agent:
relay-baton handoff --to claude --no-run --diet caveman
Register and use a project:
relay-baton project add /path/to/relay-baton --name relay-baton --diet caveman --primary codex --fallback claude
relay-baton project list
relay-baton project switch relay-baton
relay-baton status --project relay-baton
relay-baton handoff --to claude --no-run --project relay-baton --diet caveman
Direct path without registering:
relay-baton status --path /path/to/repo
relay-baton budget --path /path/to/repo
Open the TUI dashboard:
relay-baton tui --project relay-baton
| Command | Description |
|---|---|
relay-baton init | Create .ai-session/ in the current repo |
relay-baton doctor | Check git / codex / claude / env / config (--deep for extended diagnostics) |
relay-baton verify | Simulated end-to-end check — no real model calls (--diet, --verbose, --keep-temp) |
relay-baton login [agent] | Run Codex / Claude auth flows (codex / claude / all) |
relay-baton run "" | Run primary agent, detect fallback, hand off |
relay-baton route "" | Preview the advisory routing hint (read-only, --json) |
relay-baton handoff --to claude | Manual handoff (--diet, --no-run, --force) |
relay-baton handoff history | List the current + backed-up handoff documents (metadata only) |
relay-baton plan "" | Plan-execute mode: planner writes plan.md (--with, --no-run, --then-execute) |
relay-baton execute | Plan-execute mode: executor implements plan.md (--with, --from) |
relay-baton review | Deterministically review the diff against plan.md Steps — no model call (--json) |
relay-baton receipt done/skip/list | Append-only execution receipts for plan steps (--note, --json) |
relay-baton compact / squeeze | Rebuild compact-state, repo-map, full-diff |
relay-baton compress-context | Compress running state.md / commands.log when over budget (--dry-run, --threshold) |
relay-baton budget | Show context-budget usage |
Project-aware commands accept --project and --path .
Resolution priority: --path > --project > active project > current working directory. compress stays cwd-based — it's a file-level utility.
Projects are stored at ~/.relay-baton/projects.json. Set RELAY_BATON_PROJECTS_FILE to use a different path (CI, sandboxing, tests).
relay-baton project add /path/to/relay-baton --name relay-baton --diet caveman --primary codex --fallback claude
relay-baton project list
relay-baton project switch relay-baton
project add requires the path to exist and be a directory. It may be a plain, non-git project folder; git-backed commands such as run and handoff still require a git repository when executed. Duplicate paths are not added twice. A corrupt projects.json is backed up to projects.json.corrupt-.bak and reset to an empty registry — commands keep working. Read-only commands (status, budget, doctor) do not write the registry; only run and handoff update lastUsedAt.
relay-baton run "..." spawns the primary CLI as a subprocess..ai-session/commands.log..ai-session/handoff.md and the referenced files.Principles:
*.min.js excluded) over full diff.| Profile | Intent | Notes |
|---|---|---|
off | Minimal truncation | Mostly pass-through |
lite | Light cleanup | Strip blank lines, duplicate instructions |
balanced (default) | Day-to-day | Compact state + diff summary + log tail + repo map |
caveman | Aggressive minimal | Short direct bullets; no full diff/log inline |
ultra | Extreme | Almost everything via reference |
> caveman is not a silly tone — it means aggressive minimal-context. Technical accuracy is preserved.
.ai-session/ files| File | Role |
|---|---|
task.md | The user's task |
state.md | Current state (Goal / Done / In Progress / Remaining / Decisions / Risks / Next Step) |
compact-state.md | Deterministic compaction of state.md |
handoff.md | Handoff document for the next agent |
decisions.md | Decision log |
changed-files.md | List of changed files |
repo-map.md | Directory tree + key files |
commands.log | Codex / Claude execution log (append-only) |
errors.md | Error notes |
test-results.md | Test / build results |
full-diff.patch | git diff HEAD snapshot |
context-budget.json | Token-diet usage snapshot |
session.json | Session metadata |
relay-baton.config.json{
"primaryAgent": "codex",
"fallbackAgent": "claude",
"agents": {
"codex": { "command": "codex", "args": ["exec", "--sandbox", "workspace-write"] },
"claude": { "command": "claude", "args": ["--permission-mode", "acceptEdits", "-p"] }
},
"fallbackPatterns": [
"usage limit reached",
"rate limit exceeded",
"context length exceeded",
"context limit exceeded",
"token limit exceeded",
"quota exceeded",
"quota limit",
"insufficient quota",
"maximum context length",
"too many requests"
],
"authPolicy": {
"mode": "cli-session",
"allowApiKeyEnv": false,
"warnIfApiKeyEnvDetected": true,
"blockedEnvVars": ["OPENAI_API_KEY", "ANTHROPIC_API_KEY"]
},
"tokenDiet": {
"enabled": true,
"profile": "balanced",
"outputCompression": true
},
"handoffTriggers": {
"budgetRatio": 0.8,
"changedFiles": 30,
"usageTokensProxy": 100000
}
}
If no config file exists, defaults are used. handoffTriggers (v1.2.0) is
optional — when any threshold is reached after a clean agent exit, run
suggests handing off to the next agent (y/N confirm, or --yes); leave it out
to keep detection error-pattern-only. Other optional blocks: guardrails
(stop-condition caps for guard/--until) and hooks
(preHandoff/postExecute local commands) — see
docs/COMMANDS.md.
relay-baton tui opens an Ink dashboard for the active project, or relay-baton tui --project for a specific one.
q quit · r refresh · p next project · d cycle diet (in memory) · b reload budget · h generate handoff with no agent run.The TUI never launches Codex or Claude. It reads session files and can generate a no-run handoff.
Handoff Quality Gate — runs before fallback launch:
handoff.md contains the sections Goal, Previous Agent, Next Agent, Changed Files, Known Errors, Next Steps.--force overrides.Token Diet Quality Gate:
handoff.md ≤ maxHandoffChars for the active profile.Token Diet Summary section present.commands.log / AGENTS.md / CLAUDE.md bodies must not be inlined.caveman / ultra, the Important Diff block stays within maxDiffChars.OPENAI_API_KEY / ANTHROPIC_API_KEY stripped from child processes by default.--allow-api-key-env or authPolicy.allowApiKeyEnv: true lets them through.doctor reports whether each variable is set — but never prints its value.run / handoff outside a git repo.handoff.md with a timestamp suffix.commands.log is append-only..ai-session/.compress does not overwrite the input file unless --write is passed.| Approach | What carries over | Token cost | Continuity | Failure mode |
|---|---|---|---|---|
| Raw chat export | Entire transcript | High (most of it is noise) | Brittle — agent re-reads its own thinking | Context window overflow |
| Copy-paste prompting | What the human remembered | Variable | Fragile — depends on memory | Silent drift from real state |
| Whole-repo dump | Everything | Very high | Strong but expensive | Truncated mid-file by the model |
| relay-baton | Compact summary + repo map + file references | Low, bounded by profile | Strong — driven by actual repo state | Fails loudly via quality gates |
relay-baton is small sharp tooling for AI-native development workflows.
.ai-session/ directory is just files. Read them, grep them, diff them, ship them in a PR.core.> GIF / asciinema recording placeholder — coming with v0.4. > > A 30-second clip will show a Codex run hitting a quota wall, relay-baton emitting a compact handoff, and Claude Code resuming the task from the exact same repo state.
| Item | Version / Note |
|---|---|
| Node.js | ≥ 20 |
| pnpm | ≥ 9 |
| git | required |
codex | primary agent — ChatGPT Plus or higher subscription required |
claude | fallback agent — Claude Pro or higher subscription required |
> ### Subscription notice
>
> relay-baton never calls the OpenAI / Anthropic API directly. It uses the subscription auth of the local codex / claude CLIs.
>
> - Codex CLI — sign in with ChatGPT Plus / Pro / Team / Enterprise.
> - Claude Code CLI — sign in with Anthropic Claude Pro / Max / Team / Enterprise.
> - Free-tier accounts will not work reliably for either CLI.
> - API-key auth is technically possible but blocked by default behind --allow-api-key-env, to prevent accidental usage-based billing.
Default agent invocations:
codex exec --sandbox workspace-write ""claude --permission-mode acceptEdits -p ""--full-auto, --ask-for-approval, and bypassPermissions are intentionally not used (deprecated / unsupported / unsafe). Power users can override agents..args in relay-baton.config.json.
relay-baton login launches each CLI's native auth flow.
relay-baton login # both
relay-baton login codex # codex only
relay-baton login claude # claude only
Under the hood:
codex login. Complete browser auth and you return automatically.claude session. Type /login, complete browser auth, then /exit.claude --version succeeding does not mean you're logged in. If you see "Not logged in", re-run the command above.
> relay-baton does not store, print, or log credentials during the auth process. All credentials are managed by each CLI itself.
relay-baton starts as a two-agent fallback harness. The same primitive scales further:
.ai-session/ to a shared remote so the next machine picks up where the last one stopped.review, diagnose, continue modes — bounded autopilot loops with explicit checkpoints.The harness stays the same shape: detect, capture, compact, hand off.
The full roadmap lives in docs/ROADMAP.md:
verify, doctor --deep, TUI mode panel.review, plan execution receipts, plan diffing, --json outputs, conversation event schema.relay-baton chat/room (turn-based, confirmation-first REPL).LoopController), /continue --max-steps N, /replan, session replay, adaptive per-agent compression thresholds.A planned direction (first cut in v0.8) to turn relay-baton into an interactive
multi-agent workspace: talk to Claude and Codex by turns in one session,
with per-agent messages clearly distinguished — Claude as planner/reviewer,
Codex as executor. It keeps every existing safety rail (subprocess-only, no API
keys, no auto commit/push/PR, confirmation-first with a prompt preview before
any real run). Design only for now — not implemented yet. Full design:
docs/AGENT_ROOM.md.
docs/GUIDE.md — consolidated guide: install, quickstart, desktop/CLI workflows, safety (한국어)docs/COMMANDS.md — full command reference (한국어)docs/ARTIFACTS.md — .ai-session/ artifact stability contract (v1.0)docs/AGENT_ROOM.md — Agent Room designdocs/ROADMAP.md — roadmapdocs/RELEASE.md — release & distribution runbook (how the per-OS binaries are built/shipped)docs/HANDOFF.md — session handoff / current state (start here in a new session)Detailed notes live in release-notes/ (index). They are user-facing changelogs, not agent handoff material — that role belongs to .ai-session/handoff.md.
Latest: v1.6.1 — English · 한국어 · full history in CHANGELOG.md
> relay-baton reached general availability at v1.0.0 (MIT, published to npm /
> Homebrew / Scoop / Winget). Pre-1.0 tags below used a perpetual -alpha.N
> line; see CHANGELOG.md for the consolidated history.
| Version | English | 한국어 | One-line summary |
|---|---|---|---|
| v1.6.1 | Read → | 읽기 → | One-click Windows install: NSIS setup skips the wizard pages (Welcome/Choose-Location) — double-click installs straight to a branded finish screen. |
| v1.6.0 | Read → | 읽기 → | Modern Windows installer: brand-styled NSIS …-setup.exe, per-user install, no UAC (replaces the MSI wizard). |
| v1.5.1 | Read → | 읽기 → | Honest run endings (failed chain exits 4 → red desktop chip) & quieter live card (claude rate_limit_event suppressed). |
| v1.5.0 | Read → | 읽기 → | Run agents from the desktop app, confirmation-first: /run + Run-here on plan/execute/handoff, live streaming card with cancel. |
| v1.4.1 | Read → | 읽기 → | Desktop timeline polish: result cards survive reloads; role-coded rows (user/relay-baton/agents) in both themes. |
| v1.4.0 | Read → | 읽기 → | Friendly agent stream (--pretty on run/plan/execute/handoff: structured JSONL → readable lines + token/cost receipt) & desktop Agent Room result cards. |
| v1.3.1 | Read → |
After any change:
pnpm build
pnpm test
pnpm relay-baton doctor
pnpm relay-baton project add /path/to/relay-baton --name relay-baton --diet caveman
pnpm relay-baton status --project relay-baton
pnpm relay-baton handoff --to claude --no-run --project relay-baton --diet caveman
pnpm relay-baton budget
Issues and PRs welcome. For larger changes, open a short RFC issue first.
git clone https://github.com/dgl1231/relay-baton
cd relay-baton
pnpm install
pnpm build
pnpm test
MIT. See LICENSE.
relay-baton compress |
| Deterministically compress a markdown file |
relay-baton status | Print session status |
relay-baton project add | Register a project directory |
relay-baton project list / current / doctor | Inspect registered projects |
relay-baton project switch | Change the active project |
relay-baton project remove | Unregister a project |
relay-baton tui | Launch the Ink dashboard (display-only; never spawns agents) |
relay-baton chat / room | Agent Room: turn-based, confirmation-first multi-agent REPL (v0.9: /continue --max-steps N, /replan, /replay) |
relay-baton replay | Replay the recorded conversation timeline — read-only, no model call (--json, --session, --kind, --limit) |
| Desktop hotfix: unsigned installers panicked at startup (updater plugin without config); windows now open. |
| v1.3.0 | Read → | 읽기 → | Route preview & polish: read-only route command, friendly output across doctor/init/status/login/handoff, trigger visibility in doctor, record-ready demo. |
| v1.2.0 | Read → | 읽기 → | Smarter relay (opt-in handoffTriggers + run --handoff-now, advisory routing hints) & friendly CLI/desktop UI. |
| v1.0.0 (GA) | Read → | 읽기 → | First public release: MIT license, npm @relay-baton/cli + libs, Homebrew/Scoop/Winget, GA versioning. |
| v2.1.0-alpha.2 | Read → | 읽기 → | Secret-leak regression scan + --allow-api-key-env audit (names only); v2.1 complete. |
| v2.1.0-alpha.1 | Read → | 읽기 → | Redact before handoff: a Redaction Gate blocks launching the next agent on high-severity secret findings (unless --force). |
| v2.1.0-alpha.0 | Read → | 읽기 → | Windows-safe agent spawn: safeSpawn (cross-spawn) resolves npm-global .cmd shims and escapes arguments, fixing doctor/run/login on Windows. |
| v2.0.0-alpha.6 | Read → | 읽기 → | Conversation-event schema versioning + session export; v2.0 feature-complete and a "Beyond v2.0" roadmap. |
| v2.0.0-alpha.5 | Read → | 읽기 → | Session archive prune policy (session prune, disabled by default, dry-run unless --apply) + a CI release-creation race fix. |
| v2.0.0-alpha.4 | Read → | 읽기 → | git-baseline.json brought under the versioned schema contract (registry + migrate/doctor coverage + legacy normalization). |
| v2.0.0-alpha.3 | Read → | 읽기 → | Installer/update finalized + public docs pass: a locked distribution policy in RELEASE.md and a consolidated docs/GUIDE.md (EN+KO). |
| v2.0.0-alpha.2 | Read → | 읽기 → | Stability guards: desktop i18n parity test (en/ko/ja/zh) enforcing the stable desktop contract, and a hard-constraints test locking the auth policy + no-LLM-client rule. |
| v2.0.0-alpha.1 | Read → | 읽기 → | Schema migrator apply path: relay-baton migrate --apply [--dry-run] normalizes legacy artifacts with timestamped backups, opt-in and idempotent. |
| v2.0.0-alpha.0 | Read → | 읽기 → | v2.0 stability line opens: read-only artifact schema migration checks (relay-baton migrate, ARTIFACT_SCHEMA_VERSIONS registry, doctor --deep schema lines). Detection + guidance only. |
| v1.9.0-alpha.0 | Read → | 읽기 → | Team handoff package: portable handoff bundle (manifest + SHA-256 + redaction pass), handoff inspect, a markdown report, and a desktop team-handoff export card + Agent Room /bundle /report. No cloud upload. |
| v1.8.0-alpha.1 | Read → | 읽기 → | Project intelligence complete: relay-baton profile (framework tags + recommended commands), inventory (scripts/packages/CI/release files), and a desktop project-inspector panel + Agent Room /workspace /profile /inventory. |
| v1.8.0-alpha.0 | Read → | 읽기 → | Project intelligence start: deterministic, bounded relay-baton workspace map (package managers, languages, monorepo packages, scripts, entry points, docs, AGENTS/CLAUDE files). No semantic indexing. |
| v1.7.0-alpha.0 | Read → | 읽기 → | Guarded execution workflow: deterministic read-only execution checkpoints (checkpoint add/list/summary), a guard stop-condition policy, a risk classifier, and a desktop guarded-execution panel + Agent Room /checkpoints /guard /risk. |
| v1.6.0-alpha.0 | Read → | 읽기 → | Session archives, recovery, and desktop browsing: read-only session list/inspect/resume with manifest + SHA-256 integrity and stale/incomplete diagnosis, plus a desktop session-archive panel and Agent Room /sessions /inspect /resume. |
| v1.5.0-alpha.1 | Read → | 읽기 → | Distribution cleanup: opt-in/manual desktop updater wiring, signed updater artifact/latest.json release support, v1.4 deferred-item closure, and v1.6-to-v2.0 roadmap. |
| v1.5.0-alpha.0 | Read → | 읽기 → | Git tracking first cut: read-only relay-baton git status --json, non-git project fallback, desktop Git panel, and /git in Agent Room. |
| v1.4.0-alpha.1 | Read → | 읽기 → | Distribution polish: one-line CLI installers with SHA-256 verification, release SHA256SUMS/SBOM metadata, package-manager templates, optional signing hooks, and a desktop Codex/Claude preview switcher. |
| v1.3.0-alpha.1 | Read → | 읽기 → | Desktop Agent Room UX revamp: tabbed dashboard/room, full-height chat, handoff modal, slash-command palette with descriptions, decluttered buttons, and a full ? usage guide (en/ko/ja/zh). |
| v1.3.0-alpha.0 | Read → | 읽기 → | Desktop conversation + project-scoped sessions: Agent Room composer, persisted conversation events via conversation append, visible project/session context, and confirmation-first slash actions. |
| v1.2.0-alpha.3 | Read → | 읽기 → | Desktop project management + i18n: add projects with the folder picker, switch/remove projects in the GUI, register non-git project folders, and switch UI chrome between English/Korean/Japanese/Simplified Chinese. |
| v1.2.0-alpha.2 | Read → | 읽기 → | Desktop sidecar fix: the GUI now actually reaches the bundled CLI (withGlobalTauri + window.__TAURI__), so status/budget/handoff/timeline panels populate. |
| v1.2.0-alpha.1 | Read → | 읽기 → | Desktop prerelease completed: fixes the Windows .msi build (non-numeric prerelease) so all 6 assets ship; adds Phase D — signing docs, window-state persistence, light/dark toggle, TUI-mirrored keyboard shortcuts. |
| v1.2.0-alpha.0 | Read → | 읽기 → | Desktop GUI prerelease (Phase A+B): build-desktop release job (.dmg/.msi/.AppImage), deterministic icons, sidecar staging, read-only dashboard, and CLI JSON surface (project list/current --json, handoff show). Unsigned installers. |
| v1.1.3 | Read → | 읽기 → | Distributable (shipped): per-OS standalone executables (Node SEA) attached to the GitHub Release, automated release.yml pipeline, README downloads, Tauri desktop scaffold. (v1.1.0–1.1.2 were release-pipeline hotfixes.) |
| v1.0.0 | Read → | 읽기 → | Stable Local Release: frozen config/session contracts, .ai-session/ artifact validation (doctor --deep), full command reference (docs/COMMANDS.md EN+KO), finalized Agent Room set with read-only /diagnose. |
| v0.9.0 | Read → | 읽기 → | Automation & Runtime (bounded): LoopController, /continue --max-steps N, /replan, relay-baton replay / room /replay, adaptive per-agent compression thresholds. |
| v0.8.0 | Read → | 읽기 → | Adapter Expansion + Agent Room (first cut): OpenCode/Gemini/Aider scaffolds, project-level fallback overrides, OS CI matrix, relay-baton chat/room (turn-based, confirmation-first REPL). |
| v0.7.0 | Read → | 읽기 → | Review & Diagnose: relay-baton review (deterministic diff-vs-plan), execution receipts, plan diffing, --json for status/budget/review, conversation event schema (draft). |
| v0.6.0 | Read → | 읽기 → | Trust & Verify: relay-baton verify (simulated E2E, no model calls), doctor --deep, TUI mode panel, docs/ROADMAP.md. |
| v0.5.0 | Read → | 읽기 → | Plan-execute mode (plan / execute, planner→executor, PlanQualityGate) + context-compression mode (compress-context). |
| v0.4.0 | Read → | 읽기 → | GitHub Actions CI, critical-path tests, CLI smoke test, session observability, handoff history. |
| v0.3.0 | Read → | 읽기 → | Side-effect-free ProjectResolver, registry recovery with backup on corrupt projects.json, RELAY_BATON_PROJECTS_FILE override, lastError cleanup on fallback. |
| v0.2.0 | Read → | 읽기 → | Multi-project registry, --project / --path, project CLI commands, improved TUI dashboard, .gitattributes. |
| v0.1.0 | Read → | 읽기 → | Initial MVP for Codex-to-Claude handoff with token diet, fallback detection, quality gates, and auth-safe subprocess execution. |