Changelog
Release notes for Agent Relay. Format follows Keep a Changelog and the project follows Semantic Versioning. Downloadable artifacts live on the GitHub Releases page.
v0.7.0
View release →- Interactive REPL (
relaywith no subcommand). Persistent slash shell modeled on Claude Code / Codex: every existing CLI command is also a/-prefixed slash command, bare text is forwarded to the active agent's PTY, and the inline Textual panel redraws on every keystroke. Driven by a singleSlashRegistryso/help, the slash menu, anddocs/repl.mdnever drift. - Tmux integration.
relay --tmuxwraps the REPL inrelay-<sha256(cwd)[:8]>for crash-safety;relay --attachreattaches./tmux status|detach|split <agent>from inside the REPL. First-run prompt persists the choice totmux_autoinconfig.toml. - Structured JSONL logging at
~/.config/relay/repl.log(rotating 5×1 MB). Captures session lifecycle, slash dispatch (cmd / duration_ms / ok / error), agent spawn/exit, signal events.RELAY_LOG_LEVELhonored. - **
/diagnose** — shareable bundle (version + redacted log tail) for bug reports. - Crash recovery — pidfile reaper at startup. PID files live in
~/.config/relay/agents/; on next launch we cross-check the live command line against the recorded agent and only signal genuine orphans. Reused PIDs are skipped silently. - Onboarding wizard on first run (config file missing). Detects agents, picks a default, asks about tmux, persists to
config.toml. Re-runnable via/setup.--no-onboardingskips it for CI/scripts. - **
[repl.env]config section** for opting in additional env forwards to spawned agents. Keys validated as proper env-variable names; values still scrubbed by the deny-list unless on the per-agent provider allowlist. - Performance budgets + gated micro-benches in
tests/bench_repl.py(RELAY_BENCH=1). 16 ms p99 keystroke-to-render target documented indocs/performance.md. - Auto-generated slash-command reference (
docs/repl.md) plus a CI gate (tests/test_repl_docs.py) that fails the build if the registry and the doc drift. - New docs:
docs/repl.md,docs/architecture.md,docs/performance.md,docs/security.md(env contract + redaction pipeline + validation rules). scripts/release.sh X.Y.Z— one-command release prep. Bumps__version__, the extensionpackage.json, regenerates the lockfile, rewritesCHANGELOG.md's[Unreleased]header to a dated[X.Y.Z], regenerates the docs-site changelog + search-index JSON, and stages everything for a PR. Doesn't commit/push/tag — leaves that to the user's branch workflow.- Hook-based automatic rate-limit handoff.
relay installnow wires Claude CodeNotificationand CodexStophooks, normalizes hook payloads into daemonrate_limitedevents, and lets live REPL sessions execute a matching automatic handoff through the configured fallback order. - Install-time fallback-order setup.
relay installinfers[handoff].orderfrom detected Claude, Codex, and Gemini CLIs when no order exists. Userelay install --handoff-order ...to override or--no-handoff-orderto skip. - Per-agent env allowlist.
build_agent_envnow takes anagent=parameter and only forwards a provider key (e.g.ANTHROPIC_API_KEY) when launching that agent. All other forwarded keys whose values match a known-secret prefix (sk-,AKIA,ghp_,xox, …) are replaced with[REDACTED]before reaching the child. - Slash parser hardening. Every string / list-of-string argument passes through
validate_string(rejects null bytes and control chars outside\t\n\r);ArgSpec.choicesis now enforced; paths go throughresolve_safe_path(rejects..traversal, absolute,~, and symlink escapes unless--allow-outside-cwd). - **Docs now treat
relayas the primary workflow.** README, web docs, public concept pages, and examples were updated around the interactive shell, repo-local session lineage, automatic handoff triggers, and the current command surfaces. - **
logger.exception(...)no longer leaks secrets to disk.**_JsonlFormatter.formatnow runsredact()overexc_info, pre-cachedexc_text, andstack_info— the last hop before the JSONL file. Previously the redaction filter only touched the message and structured extras, so a traceback containingkey=sk-…survived to disk. - **
/diagnose --jsonno longer leaks the working directory path.** The JSON payload'scwdfield now goes through the sameredact()call the text path uses, so output is safe to paste into a bug report from any project. - Docs-site changelog page now renders
**bold**markdown properly (was showing literal**characters in the v0.6.x entries).
- Interactive REPL (
v0.6.3
View release →- Homebrew bump PR:
git pushfrom the rendered formula failed becausegh repo cloneauthenticates viaGH_TOKENbutgit pushfalls back to the git credential helper which has no credentials in CI. Now we rewrite the tap remote URL to embed the PAT (https://x-access-token:$GH_TOKEN@github.com/…) right after clone so subsequent pushes succeed without any extra credential helper setup.
- Homebrew bump PR:
v0.6.2
View release →- VS Code extension publish is no longer automated. The Marketplace publisher Members / Azure DevOps identity dance proved brittle in CI; publishing the
.vsixby hand from a laptop is a five-minute step per release and avoids surprises. The recipe lives as a comment inrelease.yml. The extension'spackage.jsonnow tracks the main package version (0.6.2here) so manual publishes stay in step. - Homebrew bump PR. The release workflow tried to
cpthe rendered formula intotap/Formula/agent-relay.rb, but a freshly-created tap repo doesn't have aFormula/directory yet. Addedmkdir -p tap/Formulabefore the copy.
- VS Code extension publish is no longer automated. The Marketplace publisher Members / Azure DevOps identity dance proved brittle in CI; publishing the
v0.6.1
View release →- Intel macOS native binary (
relay-darwin-x64). GitHub deprecated themacos-13runner in 2026 and capacity collapsed — jobs targeting that label routinely queue for hours without starting. Intel-Mac users now fall through automatically toinstall.sh'suv tool installfallback; the curl one-liner still works on Intel Macs, it just takes the source path instead of a binary download. Apple Silicon, Linux x64, Linux arm64, and Windows x64 binaries are unaffected. Revisit when (if) we need cross-compile-from-arm64 to bring back the native binary. - The v0.6.0 release shipped without the Homebrew bump PR (the
bump-homebrewjob depended on the cancelled darwin-x64 matrix entry). With darwin-x64 dropped from the matrix, v0.6.1 produces a clean Homebrew bump PR automatically, sobrew install bethvourc/tap/agent-relaynow works.
- Intel macOS native binary (
v0.6.0
View release →- Always-on layer: a small local daemon plus four adapters captures context from every AI coding agent on the machine and hands off automatically when one rate-limits. Drive it from the CLI, or let it run in the background. See the always-on guide.
relay install/uninstall/doctor— detects installed agents (Claude Code, Cursor, Antigravity, Windsurf, VS Code, Codex CLI, aider, Gemini CLI, Warp), wires hooks/extensions/configs, and registers the daemon for auto-start via launchd / systemd user units / Windows Startup folder.doctorruns six health checks.relay daemon start|stop|status|tail— manages the background process;tailstreams live events from every adapter.relay wrap <cmd>— PTY-wraps any CLI agent (codex, aider, gemini-cli, sgpt, llm) so its rate-limits and lifecycle are captured without disturbing colours, prompts, or^C.relay resume <snapshot-id>+relay snapshots— list and reopen handoff snapshots produced by the daemon.relay dashboard— local web UI showing live sessions, snapshots, and a handoff trigger. Built into the binary; no external service.relay proxy start|status|cert— opt-in HTTPS proxy (requirespip install agent-relay-tool[proxy]) for lossless rate-limit capture from Anthropic / OpenAI / Google response headers.relay mcp serve— MCP server that lets Warp's native agent (or any MCP-aware client) feed events into the relay log.relay self-update— pulls the latest binary release and replaces the running executable atomically.relayshort command — declared alongsideagent-relayin the PyPI package, so the canonical short name works regardless of install method.--version/-Vflag on the root parser.- VS Code-family extension — one extension published to Open VSX and the VS Code Marketplace covers Cursor, Antigravity, VS Code, Windsurf, Trae, Void, and any future VS Code fork. Includes a
Relay: Hand off this sessioncommand onCmd+Shift+R. - Native binary distribution — PyInstaller bundles for macOS arm64 / macOS x64 / Linux x64 / Linux arm64 / Windows x64, published on every release via GitHub Actions. The curl one-liner at agent-relay.dev now detects platform and pulls the right binary, with a
uv toolfallback. - Homebrew tap at
bethvourc/homebrew-tap—brew install bethvourc/tap/agent-relayinstalls the native binary. - Docs site: new pages at
/always-on,/architecture,/privacy,/adapters/{claude-code,cursor,warp,cli}. pyproject.tomlcleaned up —[project.optional-dependencies]was previously nested inside[project], which silently droppedauthors/keywords/classifiersunder the wrong section.- Release pipeline split:
publish.ymlkeeps PyPI ownership;release.ymlowns platform binaries (uploaded to the public mirror via a scoped PAT), VS Code extension publishing, and the Homebrew bump PR. Source code stays on the private origin; only compiled artifacts surface publicly.
v0.5.6
View release →deactivatecommand (aliascomplete) for marking a session as finished or inactive, giving you explicit control over session lifecycle instead of relying on implicit timeouts.- Console feedback when a session is deactivated, so it's clear which session closed and what its final state was.
- Public community mirror at github.com/bethvourc/agent--relay for README, issues, discussions, and releases. Source remains private.
- Project metadata (
pyproject.tomlHomepage/Source/Issues) now points at the public mirror, so PyPI sidebar links resolve for anonymous visitors. - Docs site (
agent-relay.dev) GitHub/issue links route to the public mirror. - Installation scripts (
install.sh,install.ps1) refined for clearer platform-specific guidance.
v0.5.5
View release →- Improved cost estimation and model handling in metrics + CLI; cost labels in the dashboard and alerts now read as "est. cost" to make clear that values are estimates rather than billed amounts.
- Last release before the public-mirror split.
v0.5.0
View release →alertscommand for inspecting threshold breaches across sessions, with matching dashboard panel that integrates alerts into the session detail view.- Live-update controls for the dashboard: opt-in soft-refresh with JSON payloads so the page can update in place without a full reload.
MetricsFilterfor scoped metric queries — filter dashboard views by session, agent, time window, and more.- HTML dashboard surface for the Prometheus exporter so operators get a browsable view alongside the scrape endpoint.
- Chart features on the dashboard for session metrics (token, cost, and latency over turns).
- PyPI download badge on the README for visibility into install volume.
- Standardised metric labels and heading styles across the UI for a more consistent look.
- Refactored UI colour themes to use a token-based styling system; surface rule applied consistently to metrics panels and other surfaces.
- Help command structure reworked for clearer navigation and grouping.
- Turn-status aliases introduced so metrics and watch output read more naturally.
- Deprecated CLI and integration test files cleaned out as part of the metrics refactor.
v0.4.0
View release →watchcommand — live session monitoring that follows an in-progress session and auto-picks the latest active session when none is given. Includes a--metricspanel that refreshes per turn.metricscommand for token / cost / latency rollups per session.metrics-tailcommand streams metric events as JSONL for ingestion into external pipelines.metrics-servecommand exposes Prometheus and OTLP exporters from the local daemon, with alert evaluation hooks emitted into the JSONL stream.- Fallback logic in
watchimproved so the command picks the latest session when no id is supplied, instead of erroring out.
v0.3.0
View release →- Gemini agent adapter — Agent Relay now drives Gemini alongside Claude and Codex.
- Turn prompt logic refined to conditionally display the preamble, improving conversation flow when context is already loaded.
- Session snapshot rendering in
handoffscleaned up for a tighter output.
v0.2.0
View release →conversecommand for agent-to-agent turn-based interaction.discovercommand for detecting available agent CLIs on the host.cleancommand for removing all relay sessions.resolvecommand for resolving conflicts in concurrent agent runs, including capture-hook specifications and claim handling.- Concurrent execution support with tmux session management and pane capture; phase management and control status reporting for multi-agent workflows.
- Agent aliases and tmux integration so existing tmux users can plug Agent Relay into their workflow.
- Verbose output option on the
claudecommand. - Renamed PyPI package from
agent-relaytoagent-relay-toolto clear up naming conflicts; installation instructions updated to match. - Codex output normalisation: trailing "done" markers stripped so handoff payloads don't carry noise.
- Conversation rendering in the CLI extended to include agent output inline.
- Workstream kind defaults to
mixedin concurrent execution; schema validation added.
v0.1.0
View release →- Initial release. Agent Relay ships as a local-first CLI for handing off coding sessions between AI agents.
agent-relay <agent>— the one command that captures the current session state, generates a handoff packet, and launches the next agent with context preserved.- v2 session model: per-repo storage at
<repo>/.agent-relay/with manifests, journals, checkpoints, and content-addressed objects. repaircommand for fixing inconsistencies in v2 sessions, plus integrity checks on session load.- Lifecycle management (active / completed / archived) with safety checks on launch commands and agent profiles.
- Status / dashboard rendering for inspecting sessions from the CLI.
- Migration path from legacy session files into v2 sessions.