recursive-agent 0.8.2

A Rust coding-agent platform: kernel, tools, multi-agent orchestration, HTTP API, MCP, and TUI
Documentation
# Changelog

## 0.8.2

Release-infra hardening release; no product code changes.

### Release channels
- **crates.io publish chain repaired**: the channel had silently stalled at
  0.6.0 — `cargo publish -p recursive-agent` verified against stale registry
  copies of its workspace siblings and the failure was swallowed by
  `continue-on-error`. All publishable crates now version-lockstep (agui-*,
  recursive-agent, recursive-tui, recursive-cli), internal deps carry version
  reqs, and the release job publishes the whole workspace in dependency order
  with index-propagation retries. Failures are loud now.
- **Homebrew tap automated**: `release.yml` bumps `jeffkit/homebrew-tap`
  after every release (deploy-key auth, idempotent). The tap had lagged at
  0.7.0 through two releases.
- Docker image build unchanged; GitHub Releases unchanged.

### Maintenance (0.8.1 post-release fixes, shipped here)
- Gate repairs: `cargo fmt` + 2 clippy `needless_borrow` in
  `src/http/handlers.rs`; h2 0.4.14→0.4.19 (RUSTSEC-2026-0258) and
  rustls 0.23.40→0.23.45 (RUSTSEC-2026-0285) upgraded; unused `serde`
  dependency dropped from recursive-tui.
- Test isolation: the TUI session-listing test holds `env_lock` and filters
  foreign sessions; all six session-writing backend tests pin
  `PinnedRecursiveHome` so test runs no longer write sessions into the real
  user data dir.

## 0.8.1

172 commits since 0.8.0. Highlights:

### Features
- **Agent Client Protocol (ACP)**: `recursive acp` server implementing
  P0–P7 of ACP v1 — stdio JSON-RPC loop, session lifecycle, permission
  bridge, editor fs + MCP multi-transport (new `recursive::acp` module).
- **OTLP trace exporter**: feature-gated `otel` OpenTelemetry export in
  the CLI (Goal 325).
- **Sub-agents on by default**: backgroundable continued conversations,
  coordinator briefing methodology, and a multi-sub-agent E2E regression
  suite with aimock record/replay.
- **Compaction upgrade**: circuit breaker, opt-in Microcompactor, and
  post-compaction re-injection of the plan, todo list, recently-read
  files, and invoked skills after cross-turn compaction.
- **TUI select & copy**: selectable/copyable agent output (Goal 349);
  `/compact-before` and `/compact-after` commands (Goal 342); context
  gauge reads the effective provider catalog.
- **Config**: `AGENTS.md` is authoritative, `CLAUDE.md` is fallback only.

### Architecture & reliability
- `#![deny(clippy::unwrap_used, expect_used)]` rolled out workspace-wide
  across all 7 crates — the shipping `recursive` binary no longer carries
  production `.unwrap()`/`.expect()` in session-resume / control paths
  (Invariant #5, Goal 354).
- `src/compact.rs` promoted to `src/compact/` module; unified compaction
  threshold decision (Goal 330); CompactionRunner refactor with
  boundary-preserving validation (Goal 341/347).
- Recompaction-in-chain telemetry (Goal 338) and cache hit/miss metrics
  on `CompactionBoundary` (Goal 336).
- Edit staleness check decoupled from the full-content cache (Goal 348).

### Bug Fixes
- Mid-stream `Error::Cancelled` now persists the transcript (Invariant #7,
  Goal 353).
- Replaced unsound unmaintained `serde_yml 0.0.12` (RUSTSEC-2025-0068)
  with `serde_yaml_ng` (Goal 355).
- Cross-turn compaction sizes by `last_prompt_tokens`, not the accumulated
  sum; degenerate emergency compaction without hook events is rejected.
- TUI: pasted CR/CRLF normalized to real newlines; ESC double-press
  interrupt; thinking duration no longer accumulates across thoughts
  (Goal 352); `/clear` stops an active event-driven loop.
- SshTransport host key verification hardened (Goal 349).

### Dev & E2E
- Flow watchdog detects hung `recursive` processes (Goal 346); in-flight
  work preserved on flow kill (Goal 345).
- E2E record/replay unified onto a single MCP path with self-healing
  aimock mode.
- Flowcast 0.6 executor migration; fail-fast quality-gate preflight;
  `/loop` supervise shipped as a loadable skill with agent-controlled stop.

## 0.8.0

192 commits since 0.7.0. Highlights:

### Features
- **AG-UI interrupt/resume** (Pattern 2 HITL): pause agent runs for human
  approval and resume from the same session state.
- **CLI Claude Code JSON alignment**: `--output-format json` with
  bidirectional control channel for programmatic embedding.
- **SDK `query()` alignment**: subprocess CLI turn results match the
  control-channel protocol.
- **`config.toml`**: file-based config for search, stuck-detection, and
  limits sections (alongside existing env vars).
- **WebSearch zero-config fallback**: DuckDuckGo/Bing HTML scrape when no
  API key is configured.
- **TUI loop driver**: event-driven `/loop` with enforced `max_turns` cap;
  slash menu loads real skills from disk.

### Architecture & reliability
- Run-inner refactor: extracted step helpers from `RunCore::run_inner`
  (check_shutdown, enforce_transcript_budget, drain_mailbox, etc.).
- `SessionLifecycle` + documented lock hierarchy in runtime.
- Hard step cap (P3-1) and monotonic sequence numbers (P3-2) for
  multi-agent runs.
- Self-improve flow: agentic fix-loop replaces hard rollback; optional
  `--hitl ilink` backend for human-in-the-loop gates.
- Eliminated 6 flaky test failures; expanded mutation-test baseline
  across core, TUI, and tools.

### TUI & platform
- Windows CI fixes for recursive-tui tests; symlink handling in skill
  command tests.
- Mutation-test debt cleared across command_menu, markdown, modal, chat,
  completion, and related modules.

### Dev & E2E
- ArgusAI 0.14.x adoption with hardened E2E gate and MCP run path.
- Clippy lints surfaced to the self-improve agent for in-run fixes.

## 0.7.0

The "workspace split" release — 805 commits since 0.6.0. Highlights:

### Breaking
- **Workspace restructure**: TUI and CLI physically migrated into separate
  workspace crates (`recursive-cli`, `recursive-tui`, `recursive-agent`).
  The published `recursive` binary now lives in `recursive-cli`; the root
  crate is the library. Embedders depending on the old in-tree layout
  must update path deps.
- **Deleted deprecated types**: `Agent`, `StepEvent`, `AgentOutcome`
  removed (use `RunCore` / `AgentEvent`).
- **HTTP server security**: refuses 503 when no auth is configured
  (`RECURSIVE_HTTP_AUTH_KEYS` / `RECURSIVE_HTTP_AUTH_JWT_SECRET`).
  `RECURSIVE_HTTP_AUTH_INSECURE_OK=1` for local dev only.
- **`run_skill_script`** no longer wraps in `sh -c`; args are parsed with
  `shell-words` and exec'd directly (no shell injection).

### Providers & pricing
- Remote provider catalog with 7-day TTL cache
  (`recursive providers update|list|status`, `RECURSIVE_PROVIDERS_URL`,
  `RECURSIVE_PROVIDERS_AUTO_REFRESH`). `pricing_for` now resolves from
  the effective catalog (remote cache > bundled > `providers.d`).
- Dual-protocol `anthropic_api_base` in presets (OpenAI + Anthropic on
  one provider).

### LLM
- Anthropic `stream_with_search`: multi-round tool search across
  streaming calls.
- OpenAI provider software-layer ToolSearch fallback.
- Live reasoning streaming; reasoning tokens counted in cost total.

### Tools & skills
- `WebSearch` tool with multi-provider support + Jina zero-config fallback.
- `Glob`; tool names aligned with fake-cc conventions.
- Skill-hub: `find_skills` / `install_skill` tools.
- Partial-read guard for `StrReplace` (goal 261).

### HTTP API & sessions
- `recursive http` subcommand with graceful shutdown.
- Route-level auth bypass; HTTP session TTL reaper +
  `Config.subagent_max_depth`.
- Type-safe `SessionStatus` enum; `schema_version` on `SessionMeta`;
  auto-fill session `name` from first prompt.
- Native session-id resume (`recursive resume <id>` / `--from-file`)
  replaces transcript-replay resume.

### Multi-agent
- Coordinator mode + team/task tools; inter-worker messaging; parallel
  dispatch; `role_name` in `spawn_worker`.

### TUI
- Bottom-panel API + `CommandInteract` mode (in-layout slot replaces
  overlay popups); per-turn cache-hit rate; Claude-Code-style startup
  banner.

### Self-improve loop
- `--reviewer-agent` (claude support); `--allow-tools` flag; multi-round
  revision loop; reviewer with Read/Glob access.

### Internals
- Architecture review fixes (P0–P3); `session.rs` / `tools/mod.rs` split;
  unified `atomic_write`; configurable stuck-detection window/threshold.

## 0.2.0 (unreleased)

- **BREAKING (security)**: HTTP server now refuses requests with 503 when
  no auth is configured (SEC-003 / Goal 277). Operators must set
  `RECURSIVE_HTTP_AUTH_KEYS` or `RECURSIVE_HTTP_AUTH_JWT_SECRET`.
  For local dev only, `RECURSIVE_HTTP_AUTH_INSECURE_OK=1` restores the
  old pass-through behavior. Do NOT use this escape hatch in production.
- **BREAKING (security)**: `run_skill_script` no longer wraps script
  execution in `sh -c`. Args are parsed with `shell-words` and passed as
  discrete argv elements to a direct `exec` of the script. Shell injection
  via args is no longer possible. Skills that relied on `sh -c` globbing
  (e.g. `args: "*"`) will now see literal `*` — update scripts to expand
  globs internally (e.g. with `for f in "$@"; do ...; done`). Goal 283.
- Skill system v2 (refs, scripts, params, injection modes, composition)
- MCP HTTP+SSE transport
- MCP resources and prompts support
- Feature flags (mcp, web_fetch, anthropic)
- Structured error types
- 5 runnable examples
- 367+ tests

## 0.1.0 (initial release)

- Minimal ReAct agent loop
- OpenAI-compatible LLM provider
- Filesystem tools (read, write, list, patch)
- Shell tool with sandboxing and timeout
- Mock provider for offline testing
- CLI: run, repl, tools commands
- Hook system for lifecycle observation
- Transcript compaction
- MCP stdio transport
- Skill system v1