Skip to content

culpur/anvil

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

113 Commits
 
 
 
 

Repository files navigation


⚒ Anvil

The only AI coding assistant that doesn't lock you in.

Version Platform 35 AI Providers License

Your providers. Your credentials. Your data. Your cost.
35 AI providers, one terminal. Switch freely. Own your workflow.

DownloadAnvilHubChangelogProduct Page



Why Anvil?

Other AI coding assistants come with a leash. One vendor's pipe, one vendor's pricing, one vendor's rate limits — and when that vendor changes something you don't like, you're stuck. Your code, your data, your costs all flow through infrastructure you don't control.

Anvil is the inverse. Pick your provider. Use your own API keys, or run everything locally through Ollama. Switch between models mid-conversation. When one hits a rate limit, fall over to the next. When one gets expensive, change it. When the provider does something you don't like, leave.

No account required. No telemetry. No lock-in. A single ~24–42 MB binary, zero dependencies, 35 providers, seven platforms.


What you keep control of

🔑 Your providers 35 providers including Anthropic (Max-plan OAuth supported), OpenAI, Google Gemini (Code Assist OAuth), AWS Bedrock (manual SigV4, no AWS SDK), Cursor Cloud Agents, GitHub Copilot, Azure OpenAI, Ollama (local + cloud), Groq, Fireworks, Mistral, Perplexity, DeepSeek, Together AI, DeepInfra, Cerebras, NVIDIA NIM, HuggingFace, Moonshot, Nebius, Scaleway, STACKIT, Baseten, Cortecs, 302.AI, ZAI, OpenRouter, LMStudio, Chutes, MiniMax. Configure priority chains. Automatic failover when one throttles. Never locked in.
🔒 Your credentials Typed credential vault — AES-256-GCM encrypted with Argon2id. API keys, SSH keys, TLS certs, TOTP codes, DB URLs. Nothing touches disk unencrypted.
🛡 Your data Single binary, zero telemetry, local Ollama support. Run air-gapped. Your prompts and code never leave your machine unless you send them.
💰 Your cost Per-provider budgets. Per-session cost tracking. Hard caps. See what every token costs before you spend it. Run Ollama for zero-cost inference.
📡 Your access Type /remote-control and hand any session to any browser. Pair with a 6-digit code. Full bidirectional control. Code from your phone.
🏡 Your deployment Run on your laptop. Run on a server. Share a session across devices. Nothing to install on the browser side.

Who this is for

  • Privacy-conscious developers who don't want every prompt going to a cloud API — and can't afford a $50K local-inference stack
  • Consultants and contractors juggling credentials across clients, needing isolation between projects
  • Open-source maintainers tired of single-provider lock-in
  • Teams who want deployment choice — cloud providers, local Ollama, or a mix

Live Remote Control

No other AI coding assistant does this.

you@workstation:~$ anvil
> /remote-control
  Remote control active: https://passage.culpur.net/viewer#abc123
  Pairing code: 847291
  Open the URL on any device and enter the code.

Open that URL on your phone, your tablet, a colleague's laptop, or a monitor across the room. Enter the 6-digit code. You're connected.

  • Full bidirectional control — type messages, run commands, manage tabs from any device
  • Real-time streaming — see AI responses token-by-token in the browser
  • Same slash commands as the terminal, with deep autocomplete
  • Configure from the browser — swap providers, change models, manage credentials
  • Encrypted — secure WebSocket relay with automatic reconnection

Perfect for pair programming, teaching, demos, monitoring long-running tasks, or coding from your phone while your workstation does the heavy lifting.


What's new in v2.2.21 — Durable Daemon Sessions, the Relay Bridge, and the Big Modularization

v2.2.21 is the largest single-release reshape since v2.0. Session execution moves out of the TUI and into the anvild daemon — close your terminal and the session keeps running; reopen anywhere and reattach. A browser can pair to a live session over an encrypted relay and drive it. Underneath, the biggest modularization pass in project history split the codebase into 31 focused crates, three of the planned performance wins landed, and a cluster of P0 daemon bugs were found and fixed under live verification. FreeBSD x86_64 and NetBSD x86_64 now ship as prebuilt binaries.

Durable daemon sessions (D.1–D.4)

Session execution now lives in anvild, not the TUI process. The session protocol contract (SessionRequest / SessionEvent) defines the on-wire types; a SessionActor hosts the conversation inside the daemon; the TUI is repointed as a thin viewer over a Unix socket. Close the TUI — the session keeps running. Reopen it, or attach from elsewhere, and you reattach to the same live session. Crash the daemon, restart it, and the session replays from the journal. Multi-client attach means more than one viewer can watch the same session, with peer-attach / peer-detach events.

Named, multi-tab sessions (#911)

Daemon sessions became first-class and human-addressable. The session manifest gained a name and last_active_at_ns; a Rename IPC verb carries it on the wire. The TUI drives the full lifecycle — /session list|rename|kill over one-shot IPC, then /session new|open|load|close mapped onto TUI tabs with per-tab daemon routing. The capstone is same-cwd auto-resume: reopen Anvil in a directory that already has a live daemon session and it reattaches instead of starting cold.

Relay bridge — attach from the browser (#914, #917, #919–#921)

anvil routined relay start pairs a browser viewer to a live daemon session over a passage WebSocket and auto-opens it; pairing returns a full PIN. #917 (P0) fixed a daemon-side tool-dispatch name-drift bug where every tool fell through to a stub — daemon-hosted sessions now execute real tools. #919 adds viewer UX (input echo, thinking spinner, live context). #920 wires /permissions end-to-end over the relay. #921 adds a ring recorder so resume/replay carries the actual conversation — a viewer pairing mid-session sees history, not a blank pane.

Performance — pooling, parallel tools, faster search (#898, #899, #900)

A shared reqwest::Client across the workspace ends the per-call TLS handshake + DNS lookup and keeps HTTP/2 connections warm (#898). Read-only tools now run in parallel: when the model requests two or more read-only tools in one batch (read_file, grep_search, glob_search, web fetches), they fan out across worker threads and merge back in original order; mutating tools still run sequentially through the permission gate (#899). grep_search is now gitignore-aware and streams — it walks and searches simultaneously, respects .gitignore, and skips binaries, so it no longer drowns in node_modules/ or target/ (#900).

The big modularization — 31 crates

anvil-cli was split into anvil-ollama, anvil-mcp-builder, anvil-tui, and anvil-wizard. Thirteen crates were extracted from runtime across two rounds — anvil-vault, anvil-journal, anvil-permissions, anvil-oauth, anvil-hooks, anvil-mcp, anvil-memory, anvil-curator, anvil-search, anvil-relay, anvil-reflection, anvil-skill-chain-exec, anvil-routines — with intermediate crates breaking the dependency cycles. runtime shrank from roughly 70K to about 57.7K lines; the workspace now has 31 crates. Supporting work: an anvil-e2e integration-test crate and compile-time locale-key drift detection.

Daemon hardening — P0 fixes (#902–#917)

The daemon execution path was load-bearing for the first time, and live verification surfaced a cluster of P0s — every one fixed: wiring the real provider runtime into the daemon (#905), connecting the attach forwarder task (#906, with an e2e gate in #910), binding REPL session I/O to the long-lived runtime (#903), reading the correct PID file (#904), and a /heal probe that checks actual process liveness (#902). Auto-compaction now actually compacts (#913). And the security P0: anvild binary downgrade-prevention (#827).

Quality

3,926 tests passing, zero failures. Several latent shared-state test races (process-global locale, env-var, and atomic flags that only flaked under specific parallel scheduling) were tracked down and serialized. IPC gained a dual-transport abstraction (Unix sockets + Windows named pipes) so the daemon runs natively on all seven platforms.

Compatibility

v2.2.21 is a drop-in upgrade from v2.2.20. Config, vault, and session formats are forward-compatible — no migration steps required. The daemon-default execution path is opt-in for now: sessions run in-process unless you pass anvil --daemon. If you have stale anvild processes from binaries you've moved or trashed, kill them before upgrading — anvil --update refuses to run while stale daemons are alive and prints the exact PIDs.


Install

Seven platforms, SHA256-verified, single binary, no runtime required.

# Homebrew (macOS & Linux)
brew install culpur/anvil/anvil

# Or download directly
curl -fsSL https://anvilhub.culpur.net/install.sh | bash
Platform Download
macOS ARM (M1/M2/M3/M4) anvil-aarch64-apple-darwin
macOS Intel anvil-x86_64-apple-darwin
Linux x86_64 anvil-x86_64-unknown-linux-gnu
Linux ARM64 anvil-aarch64-unknown-linux-gnu
Windows x86_64 anvil-x86_64-pc-windows-gnu.exe
FreeBSD x86_64 anvil-x86_64-unknown-freebsd
NetBSD x86_64 anvil-x86_64-unknown-netbsd

No account. No sign-in. Download, run, configure your providers.


35 providers, one terminal

Provider Models Auth
Anthropic claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5 OAuth (Max plan supported) or API Key
OpenAI GPT-5, o3, o4-mini API Key
OpenAI Codex codex-mini API Key
Google Gemini OAuth + Antigravity Gemini 2.5 Pro, Gemini 2.5 Flash, Gemini 2.0 Flash Thinking Code Assist OAuth (PKCE)
AWS Bedrock Anthropic Claude family, Llama, Mistral, Titan manual SigV4 (no AWS SDK)
Cursor Cloud Agents claude-4-sonnet-thinking, sonnet-4, sonnet-3-7-thinking API Key + GitHub repo binding
GitHub Copilot gpt-5, gpt-5-mini, gpt-4.1, gpt-4o, sonnet-4, opus-4.5 Device flow
Azure OpenAI (deployment-name based) API Key + api-version
xAI Grok-4, Grok-4-mini, Grok-3 API Key
Ollama (recommended) Llama, Qwen, Mistral, DeepSeek, Gemma, GPT-OSS Local — no key needed
Ollama Cloud kimi-k2.6:cloud, gpt-oss:120b-cloud ed25519 device key (via local daemon)
Groq Llama 3.3 70B, Mixtral, DeepSeek R1 API Key
Fireworks AI Llama 3.1/3.2 family, Mixtral, DeepSeek API Key
Mistral Mistral Large, Codestral, Mixtral API Key
Perplexity sonar, sonar-pro, sonar-reasoning API Key
DeepSeek deepseek-chat, deepseek-coder, deepseek-r1 API Key
Together AI Llama, Qwen, Mistral, Mixtral, DeepSeek API Key
DeepInfra Llama, Qwen, DeepSeek, Mistral API Key
Cerebras Llama 3.1/3.3, Qwen API Key
NVIDIA NIM Llama 3.x, Nemotron family API Key
HuggingFace Inference-API hosted models API Token
Moonshot AI Kimi K2, moonshot-v1 API Key
Nebius Llama, Qwen, DeepSeek API Key
Scaleway Llama, Mistral API Key
STACKIT Llama 3.1 API Key
Baseten Llama, Qwen, DeepSeek API Key
Cortecs Llama, Qwen, Mistral API Key
302.AI OpenAI-compatible aggregator API Key
ZAI OpenAI-compatible aggregator API Key
OpenRouter 200+ models from every major provider API Key
LMStudio local OpenAI-compatible server Local — no key needed
Chutes OpenAI-compatible aggregator API Key
MiniMax minimax-text, abab models API Key

Configure priority chains. Automatic failover when one hits a rate limit. Per-provider budgets. Cost tracking per session. Zero-cost local inference with Ollama or LMStudio. No IDE spoofing, no scraped credentials. Every provider implementation either uses a documented public API or identifies as Anvil honestly in headers.


Quick Start

anvil                               # Start interactive session
/remote-control                     # Share via browser
/model claude-opus-4-7              # Switch model
/provider anthropic                 # Switch provider
/vault add                          # Store a credential
/ssh myserver                       # Open SSH tab
/productivity                       # Session stats
/mcp list                           # MCP server status
/fork experiment                    # Branch the conversation
/focus                              # Distraction-free mode
/export md                          # Export as Markdown

Also in the box

120+ slash commands (including the new /cursor command tree and /memory clean / /cursor stream / anvil agents cross-session monitor). 35 AI providers. 45 built-in tools. MCP integration. Per-tab parallel inference. SSH tabs. Tool-call cards with Ctrl+O expand. Multi-tab sessions. Git integration. Code productivity dashboard. Session history search. 37-widget configurable status line with 16 presets. Vim keybindings. Focus view. File sandbox with permission modes. 7-language i18n. AnvilHub marketplace for skills, plugins, agents, and themes. Web UI with full configuration parity. First-run setup wizard. CC→Anvil migration (anvil import claude-code). anvil(1) manpage. All of it optional. None of it required.

Feature list is in the changelog below and anvilhub.culpur.net/about. The feature list isn't the story. The freedom is.


Links

🏠 Product Page culpur.net/anvil
📦 Marketplace anvilhub.culpur.net
📖 Full Changelog anvilhub.culpur.net/about
💬 Issues github.com/culpur/anvil/issues

License

Copyright (c) 2024-2026 Culpur Defense Inc. All rights reserved.


Changelog

v2.2.21 — June 15, 2026

Durable Daemon Sessions, the Relay Bridge, and the Big Modularization.

  • Durable daemon sessions (D.1–D.4, #841–#844) — session execution moves out of the TUI into anvild. SessionRequest / SessionEvent define the on-wire contract; a SessionActor hosts the conversation in the daemon; the TUI is a thin viewer over a Unix socket. Close the TUI and the session keeps running; reopen or attach from elsewhere and reattach to the same live session; crash and restart the daemon and the session replays from the journal. Multi-client attach with peer-attach / peer-detach events.
  • Named, multi-tab sessions + same-cwd auto-resume (#911) — the session manifest gains name + last_active_at_ns; a Rename IPC verb carries it. /session list|rename|kill over one-shot IPC; /session new|open|load|close mapped onto TUI tabs with per-tab daemon routing. Reopen Anvil in a directory with a live daemon session and it reattaches instead of starting cold.
  • Relay bridge — attach from the browser (#914, #917, #919–#921)anvil routined relay start pairs a browser viewer to a live session over a passage WebSocket and auto-opens it. #917 (P0) fixed a daemon tool-dispatch name-drift bug where every tool hit a stub. #919 viewer UX (input echo, thinking spinner, live context). #920 /permissions end-to-end over the relay. #921 ring recorder so resume/replay carries the actual conversation.
  • Performance: shared HTTP client + parallel tools + gitignore search (#898, #899, #900) — one shared reqwest::Client ends per-call TLS handshakes (#898); read-only tools in a batch fan out across worker threads and merge in original order, mutating tools still gated sequentially (#899); grep_search walks-and-searches simultaneously, respects .gitignore, and skips binaries (#900).
  • The big modularization — 31 crates (#867, #873–#896)anvil-cli split into anvil-ollama / anvil-mcp-builder / anvil-tui / anvil-wizard; thirteen crates extracted from runtime (anvil-vault, anvil-journal, anvil-permissions, anvil-oauth, anvil-hooks, anvil-mcp, anvil-memory, anvil-curator, anvil-search, anvil-relay, anvil-reflection, anvil-skill-chain-exec, anvil-routines) with intermediate crates breaking cycles. runtime shrank ~70K → ~57.7K lines; workspace now 31 crates. Plus an anvil-e2e test crate and compile-time locale-key drift detection.
  • Daemon hardening — P0 fixes (#902–#917, #827) — wire the real provider runtime into the daemon (#905); connect the attach forwarder task (#906, e2e gate #910); bind REPL session I/O to the long-lived runtime (#903); read the correct PID file (#904); /heal checks actual process liveness (#902); auto-compaction now actually compacts (#913); anvild binary downgrade-prevention (#827, P0 security).
  • 3,926 tests passing, zero failures — latent shared-state test races (process-global locale, env-var, atomic flags) tracked down and serialized. IPC gained a dual-transport abstraction (Unix sockets + Windows named pipes) so the daemon runs natively on all seven platforms.
  • Seven platforms — macOS ARM64, macOS Intel, Linux x86_64, Linux ARM64, Windows x86_64, FreeBSD x86_64, NetBSD x86_64. Every binary SHA256-verified.

v2.2.20 — May 31, 2026

Signed Provenance, Anti-Skills, Event Routines, A/B Curator, Memory Federation + Forge Screensaver.

  • F1 — Signed skill provenance — every skill carries a signed provenance.jsonl ledger keyed by an ed25519 keypair at ~/.anvil/keys/skill_signing.ed25519 (0600). The verifier walks the ledger from genesis on every load; a broken chain surfaces as a P0 in /skill why <name>. Trust-on-first-use pins an imported skill's pubkey. New anvil skill why|pubkey|verify.
  • F4 — Anti-skills (negative learning) — the curator records failure modes as MemoryType::AntiPattern entries with their own retrieval-order block. Anti-skills annotate rather than block; the proposal flow shows a "you tried something similar on YYYY-MM-DD and it scored N% worse" footnote.
  • F6 — Event-triggered routines — anvild routines accept FileWatch / Webhook / Process / Log triggers in addition to cron. Webhook listener is axum 0.8, localhost-only by default. tick_routines() pulled out as a pure function; four integration tests cover fire/GC/Ask/re-arm.
  • F3 — Curator A/B evaluation — new skills run an A/B pass against a held-out batch; winners promote, losers go to the anti-skill pool. Additive, escalate-only: a worse candidate cannot replace a better incumbent. Surfaced in REPORT.md + run.json (ab_decisions).
  • F2 — Cross-machine memory federation — x25519 key agreement, HKDF-SHA256 derivation, AES-256-GCM (fresh nonce per call), ed25519 signatures, trust-on-first-use peer pinning. anvil memory sync|peer add|peer list.
  • Forge screensaver — video-driven two-phase animation; the source mp4 is baked once into a 665 KB gzipped cell-grid bundle include_bytes!-d into the binary, no ffmpeg at build or run time. Falls back to overlay-only if the asset is missing.
  • 3,061 tests passing, 0 failing — up from 2,922 at the start of the arc (+139). Three crates/commands/ parallel-test flakes pinned to a serial_test::serial token.
  • Seven platforms — macOS ARM64, macOS Intel, Linux x86_64, Linux ARM64, Windows x86_64, FreeBSD x86_64, NetBSD x86_64. Every binary SHA256-verified.

v2.2.19 — May 22, 2026

18 Languages. Memory Cohesion Complete. The Web-Based MCP Builder.

  • Internationalization — 18 locales — the TUI, wizard, slash-command output, and remote-control viewer all flow through rust-i18n v4 in Rust and the new viewer.locales.js runtime in the browser. Tier-1 ships English, Spanish, Simplified Chinese, French, Brazilian Portuguese, Russian, Japanese, German — 264 keys each. Tier-2 adds Korean, Italian, Turkish, Vietnamese, Polish, Indonesian, Dutch, Swedish, Norwegian Bokmål, Ukrainian. Locale selection persists to ~/.anvil/config.json, falls back to $LANG on first launch, applies immediately to every wizard step. /configure menu has a Language Picker submenu rendering native scripts (한국어, Русский, 中文). Viewer ships 176 fully-wired keys covering chrome plus vault.* and config.* panels; live re-render walker on locale switch with no page reload.
  • Seven-layer memory — all GREEN — the 2026-05-21 cohesion audit found Layer 3 (Semantic), Layer 6 (Reflective), and Layer 7 (Cache) still partial. v2.2.19 closes all three. Layer 3: /memory promote <nomination-id> now actually persists nominated facts to disk — the v2.2.14 stub flipped a status flag without ever calling MemoryManager::save(). Full chain writes the fact and appends provenance comments before marking the nomination accepted. New --target <file> flag. Layer 7: file-cache path-discovery bug fixed; memory_budget no longer checks a path that doesn’t exist in the project-scoped layout. /memory show cache enumerates file-cache, command-cache, and QMD-cache stats. /memory prune cache --dry-run walks both FileCacheManager and CommandCacheManager. Layers 1, 2, 4: /memory layer 1 renders a live snapshot via PromptSectionsExt::iter_by_kind(). /memory show episodic unifies daily summaries, history archives, workspace sessions. /memory prune episodic adds TTL retention with a trash-bin safety net. /memory show procedural consolidates GoalManager + skills + CronManager.
  • AnvilHub /build page + anvil-mcp-builder micro-service — the v2.2.18 /mcp builder TUI wizard now has a web counterpart. Three endpoints: POST /api/builder/spec (LLM-generated spec from free-text, SSE-streamed), POST /api/builder/generate (turns spec into a base64 tarball — Node.js, TypeScript, or Python templates), POST /api/builder/sandbox (extracts the tarball and runs anvil-sandbox-runner network-cut). Operator OAuth token loaded from the Anvil vault at startup, never from .env. Sandbox endpoint gated on publisher standing — user must be in the anvilhub-publishers Authentik group OR have at least one HubPackage published. 5-minute Map cache; falls closed on backend error.
  • MCP pagination (CC v2.1.144-B6 / v2.1.146-B2) — MCP client now consumes the full nextCursor / has_more pagination chain for tools/list, resources/list, resources/templates/list, prompts/list. Previously MCP servers with paginated responses had everything beyond page 1 silently dropped.
  • Spinner/elapsed-time freeze fix (CC v2.1.145-B3) — TUI render queue wakes from a wall-clock timer in addition to input events. After terminal refocus or resize, the spinner and elapsed-time display no longer freeze until next keypress. New RedrawReason::TerminalStructural routes Resize/FocusGained/FocusLost through the soft draw path (no ANSI clear flash, per the photosensitivity rule from v2.2.17).
  • MCP permissions.allow honored (CC community #61077 SECURITY)permissions.allow rules with patterns like mcp__server__tool or mcp__server__* are now consulted at MCP tool dispatch time. Previously the allowlist was loaded but the MCP dispatch path bypassed it and always prompted.
  • Bash env-var permission bypass (CC v2.1.145-B1 SECURITY) — Bash patterns of the form KEY=VALUE command are decomposed and the command portion checked against the allowlist.
  • Skill fork-context recursion guard (CC v2.1.145-B4) — a skill cannot transitively invoke itself; recursion check uses the full skill ancestry chain.
  • Resume session model preservation (CC community #61068)anvil --resume restores the model that was active when the session was saved, not the global default.
  • CC parity P2 sweep — API startup 15s timeout for side-channel calls (#722), mime-type magic-number fallback in Read (#723), /branch history recovery post-EnterWorktree via worktree_ops::original_sessions_dir() (#724), MCP image fallback for unsupported MIME — saves to ~/.anvil/mcp-images/<sha256>.<ext> (#725), skill watcher FD exhaustion prevention — excludes target/, node_modules/, .git/, dist/, build/, .cache/, .next/, __pycache__/ (#726), theme color reset on first /session rename fixed (#727), EnterWorktree MCP config preservation via snapshot before set_current_dir (#728).
  • anvild separate process name across 7 platforms (#766) — the background OAuth-refresh + routines daemon now runs as anvild, not anvil daemon foreground. New anvild_path_from(anvil_binary) helper rewrites the binary path used by every supervisor unit — macOS LaunchAgent, Linux user-systemd, FreeBSD/NetBSD rc.d, Windows Task Scheduler — plus the in-TUI daemon::spawn_detached fallback. ps -ef | grep daemon now shows anvild. install.sh and install.ps1 create the anvild symlink (Unix) or hardlink (Windows NTFS) alongside the main binary.
  • Wizard P0 bundle — Ollama modal clipping, daemon prompt alt-screen, vertical-split hint (#767, #768, #769)ConfirmModal height now derived from body wrap so Yes/No buttons stay visible regardless of body length; new Ctrl+B Back keybind. The “Install anvild as background service?” prompt moved into the alt-screen as Step 8 of 9 (no more drop-to-CLI mid-wizard). New 1-line hint above BUILD section in the rail bottom group: &#8997;+drag deck only on macOS, Alt+drag deck only on Linux/Windows/BSD. i18n keys added across all 18 locales.
  • Release-pipeline step-gates (#714, #730)scripts/release.sh now wraps every phase in step "PN: <description>" + ok "PN" / fail "PN" markers. New scripts/release-helpers/step-gates.sh provides primitives + JSON status persistence + an EXIT-trap silent-exit detector. Closes the v2.2.18 Phase 6 silent-exit class. scripts/test-release-gates.sh runs release.sh in --dry-run and asserts every expected phase fires START + terminal marker exactly once.
  • Net +50 tests across the workspace — i18n drift gate + picker invariant + 8 locale-load; +9 episodic / +6 promote / +6 cache / +5 working / +3 procedural for memory cohesion; +35 across all 15 CC-parity fixes; +7 publisher-standing tests in the new micro-service.
  • Seven platforms — macOS ARM64, macOS Intel, Linux x86_64, Linux ARM64, Windows x86_64, FreeBSD x86_64, NetBSD x86_64. Every binary SHA256-verified.

v2.2.18 — May 20, 2026

The Web Viewer Lands. Autocompact Gets Honest. Mouse Capture Off by Default.

  • Web viewer — full TUI parity (#680, #681, #683, #692, #695, #696)passage relay and AnvilHub viewer get a tab-routing rewrite matching the TUI’s per-tab architecture. /tab new, /tab rename, /tab switch, Ctrl+T. Per-tab user_message and slash_result routing (no more cross-tab leakage). Default layout vertical_split + tabs. Cost-type chip (OAuth / local / cloud) instead of fabricated dollar figures. Cached + broadcast MemorySnapshot so the memory rail populates on reconnect. SessionMeta carries context_max and build_sha. Default-allow forwarding for unhandled viewer messages. Collapsible tool cards. Always-visible slash bar with Cmd+K palette.
  • Autocompact threshold fix (#697 CRITICAL)maybe_auto_compact was measuring against max_output_tokens (8K–16K) instead of context_window (64K–200K+). Sessions on long-context models were compacting at roughly 6K input tokens. Now reads session.context_window and ignores max_output_tokens entirely. New OTel span anvil.autocompact.threshold emits context_window, used_tokens, threshold_pct, triggered. /compact why prints the full threshold calculation.
  • Mouse capture default OFF (#696 P4) — mouse capture disabled by default on all platforms, restoring terminal copy-paste (Cmd+C / Ctrl+Shift+C / Ctrl+C) for users who hadn’t opted in. One-time first-run toast shows /config mouse_capture true and --mouse. mouse_capture_default_off_regression test asserts the default at the type level.
  • Bracketed paste in textarea modals (#685) — multi-line paste now works inside /mcp builder and other wizard textareas. Wires tui::paste::handle_paste into the textarea event loop with normalization.
  • Per-tab relay routing (#696)relay::user_message and relay::slash_result route to active Tab.id rather than broadcasting. Concurrent inference in two tabs no longer leaks between them.
  • OAuth / local / cloud cost label (#696 P1) — TUI status footer shows a semantic cost-type chip instead of a fabricated dollar amount for providers where per-token cost is not knowable.
  • MemorySnapshot rail parity (#695) — vertical-split rail uses layouts::common helpers instead of a hand-rolled draw path. Same fidelity as the classic inline view.
  • Alt-screen raw mode restore (#688)restore_alt_screen re-enables raw mode on return from inline operations. Was the root cause of “keyboard stops working after /mcp builder cancel” in v2.2.17.
  • FORCE_FULL_REDRAW consumption (#688) — consumed inside handle_repl_command_tui so the blank-screen-after-cancel regression cannot recur.
  • Mouse capture + alt-screen pairing (#688) — mouse capture state is paired with alt-screen state. Enabling mouse capture outside the alt-screen no longer leaves the terminal inconsistent after exit.
  • Force full redraw after inline-op restore (#687) — any inline operation that restores the alt-screen forces a full redraw. Eliminates partial-frame artifacts.
  • Textarea keybinds corrected (#686)Enter submits, Ctrl+N inserts a newline. Previously inverted.
  • /mcp builder long-description textarea (#684) — long-description field is now a multi-line textarea modal instead of a single-line input.
  • PermissionPrompt round-trip regression test (#677) — end-to-end test fires a tool call that requires a permission prompt, verifies the prompt renders, sends the approval, asserts the turn completes. Guards permission-prompt state from desyncing with the turn loop.
  • Release-pipeline Phase 6 silent-exit guard (#654)scripts/release.sh Phase 6 wraps every SSH hop in an explicit || { echo "Phase 6 SSH failed"; exit 1; } guard. Previously a failed remote call could terminate the script with exit 0, leaving subsequent surface updates unrun.
  • anvil-release MCP host targeting fix (#698 CRITICAL)anvilhub_pm2_host reverted to dev0001 after #655 incorrectly routed pm2 ops to CT 113 (which is dead). Apache vhost has always proxied anvilhub.culpur.net to dev0001:3100.
  • Seven platforms — macOS ARM64, macOS Intel, Linux x86_64, Linux ARM64, Windows x86_64, FreeBSD x86_64, NetBSD x86_64. Every binary SHA256-verified.

v2.2.17 — May 18, 2026

The Setup Wizard, Reflection, Sandboxing, and the Source Viewer.

  • New first-run wizard — welcome card → nine modal steps → vault unlock → main TUI, all in one alt-screen. Per-step descriptions explain why each question is asked. OAuth waits poll on 100 ms and stream the elapsed counter live. Step 9 is CC migration in-modal. Brighter grey font for modal text.
  • Autonomous reflection loop — stuck-detector switches strategy and writes a multi-attempt scratchpad when a turn loops without progress.
  • anvil-sandbox-runner companion binary — hub-install detonation runs in an isolated binary, shipped alongside anvil on all seven platforms.
  • AnvilHub source viewer — every one of the 558 HubPackages has a viewable source archive; 547 packages got synthesized Documentation tabs from DB columns.
  • Vertical-split rail-stays-painted fix (#648) — ratatui swap_buffers contract violation in the #574 region-gated repaint surfaced as blank/garbage rails after wizard exit. All three layouts now always paint every region every frame.
  • TUI flash eliminated on Gnome Terminal/alacritty (#622, #629) — full-screen Clear() is now gated on DirtyRegions::ALL and commit_pending_redraw no longer routes TextDelta through terminal.clear(). Photosensitivity hazard during streaming output resolved.
  • Wizard mouse-capture default OFF (#623) — native text selection now works cross-platform. Banner is no longer Mac-only.
  • /agent compose + /agent traits rewired (#624) — no more println! corrupting the alt-screen. 23 BUG sites fixed in the broader println audit (#626), with #![deny(clippy::print_stdout, clippy::print_stderr)] on every TUI-touching file and a regression test to block future drift.
  • In-TUI ConfirmModal + PasswordModal — vault unlock for returning users is now a modal in the existing alt-screen, not a CLI prompt; ConfirmModal supports two-button destructive-action confirmation.
  • Vertical-split Shift+drag deck-only selection (#625) — rail no longer comes along when you select conversation text.
  • Vertical-split rail keybinds wired (#634) — g / d / s / a / Ctrl+R now work in the rail, with a drift gate to keep them wired.
  • Reactive compaction sizes from actual overflow (#564) — summary-size budget is now seeded from the real overflow delta, not a fixed guess.
  • ANVIL_STOP_HOOK_BLOCK_CAP (#566) — caps Stop-hook blocking to prevent infinite-loop runaway if a hook mis-fires.
  • Session auto-titling wired (#580)derive_title_from_first_message() now actually drives the trigger.
  • Hook PWD refresh after worktree switch (#561) — PWD-relative hooks no longer go stale when EnterWorktree runs.
  • Welcome banner names active provider for 3P users (#562) — no more hardcoded Anthropic when you're on Groq/Bedrock/etc.
  • release-surfaces.yaml enforcement gate (#614) — one manifest is the single source of truth for every public surface; scripts/verify-release-surfaces.sh is the gate.
  • AnvilHub /sha256/2.2.17.txt published — out-of-band checksum manifest for primary-source SHA256 verification.
  • install.sh + install.ps1 rebuilt — live versions on anvilhub.culpur.net updated to the proper /api/version-aware variants. Fixes the tag_name regex breakage (#619) and the hardcoded windows-msvc Windows target (#612).
  • Seven platforms — macOS ARM64, macOS Intel, Linux x86_64, Linux ARM64, Windows x86_64, FreeBSD x86_64, NetBSD x86_64. Every binary SHA256-verified.

v2.2.16 — May 17, 2026

The TUI Layout System. Eight live-switchable layout variants on a per-tab TuiLayoutConfig. New default: Vertical Split + Tabs.

  • TUI Layout System — four layout architectures (Vertical Split / Classic / Three-Pane / Journal) × tabs/no-tabs = eight variants, every one a real renderer. Per-tab TuiLayoutConfig. /layout list, /layout <alias>, /layout <alias> --global (writes to ~/.anvil/config.json), /layout reset. State-machine contract enforced by integration tests; shared session state (log, input, model) survives the switch; terminal clear on switch so previous cells don't bleed.
  • New default: Vertical Split + Tabs — persistent left rail (sessions, agents, tools, MEMORY, gate state) next to a swappable right deck. Rail owns all chrome (banner, status, model, cost); deck has input only. Mouse-draggable split anchor. Migration-safe: users with an explicit tui_layout setting keep their value; only upgraders without the key see the change, plus a one-time intro toast.
  • Wizard step 7 highlight — first-run setup wizard now defaults to Vertical Split (option [1]); Classic moves to [2]. New installs that just press Enter land on the rail+deck view.
  • Slash-completion popup wired into all renderers — completion works regardless of which layout is active. Every render path also redraws on every keystroke so input is live.
  • Three-pane Insert discoverability — framed hint + ghost input makes the always-on input legible; CONTEXT band uses Constraint::Fill so it actually fills available height. Vim modal removed — typing always edits the input.
  • Paste handling rebuild — consolidated paste handler routes terminal bracketed paste, OSC52, and drag-and-drop file paths. Mouse capture is off by default so native terminal copy works. ContentBlock::Document is wired end-to-end for PDF and Office docs — dropping a .pdf attaches it as a document block to the next request. Long-paste placeholder collapses multi-KB pastes to a [Pasted N chars] token in history. Keystroke-burst detection converts drag-and-drop on terminals without OSC52 into a single paste.
  • Ctrl+C mid-stream cancel across all 7 providersDefaultRuntimeClient honors the cancel token in every provider implementation. tokio::select! wraps the blocking HTTP read so the connection actually closes when the token fires. New wiremock integration test covers the cancel path end-to-end.
  • Vertical-split rail polish — uppercase section headers, cross-tab status aggregates, tool-call boxes close cleanly, markdown styled, cost rendered to 2 decimals, QMD folded into MEMORY, agent tab-binding, split-anchor draggable.
  • AnvilHub verification gate/hub status ships all 8 axes, HubPackage carries verified-badge structs, require_verified config gate, /plugin update REVOKED guard, update probe prefers anvilhub /api/version and falls back to GitHub Releases.
  • TUI correctness long tail/vault unlock retries up to 3 times and pre-fills the prompt on failure; welcome banner names the active provider, not hardcoded Anthropic; session-title heuristic skips a bare URL as first message; 5xx errors name the configured provider/gateway; spinner color warms warm-green→amber→red on elapsed time; Read offset accepts string forms with whitespace/+ prefix; ANVIL_MCP_TOOL_TIMEOUT env override per request; async fetch_all_configured_models with timeout + Ctrl+C cancel; strict RFC 6749 token-exchange parser + startup validator; lenient scopes deserializer prevents OAuth lockout; ProviderLoginModal for in-TUI OAuth/API-key flows; layout-switch terminal clear prevents stale-cell ghosting.
  • Seven platforms — macOS ARM64, macOS Intel, Linux x86_64, Linux ARM64, Windows x86_64, FreeBSD x86_64, NetBSD x86_64. Every binary SHA256-verified.

v2.2.15 — May 15, 2026

The largest release in Anvil's history. 121 commits over v2.2.13. Supersedes the corrupted v2.2.14 tag (never published).

  • Provider catalog 5 → 31 — AWS Bedrock (manual SigV4, no AWS SDK), Google Gemini OAuth + Antigravity (Code Assist OAuth with honest Anvil identification — not VS Code spoofing), GitHub Copilot (device flow), Azure OpenAI (deployment-name + api-version), Cursor Cloud Agents (repo-bound), plus 24 OpenAI-compatible providers: Groq, Fireworks, Mistral, Perplexity, DeepSeek, Together AI, DeepInfra, Cerebras, NVIDIA NIM, HuggingFace, Moonshot, Nebius, Scaleway, STACKIT, Baseten, Cortecs, 302.AI, ZAI, OpenRouter, LMStudio, Chutes, MiniMax, OpenCode, OpenCode-Go.
  • /cursor first-class command tree — six TAB-completable subcommands (launch, list, get, cancel, artifacts, stream) for Cursor's public Cloud Agents API. Repo-bound by design — git remote get-url origin is mandatory.
  • /model cross-provider unified picker — one TAB-completable list across every configured provider, provider-prefixed (anthropic/claude-4.5-sonnet, groq/llama-3.3-70b, cursor/claude-4-sonnet-thinking). Atomic switch updates routing + system prompt identity + TUI chrome together. Live-fetched from each provider's /models endpoint; static registry is fallback only.
  • Memory Cohesion Arc — the seven-layer memory system from v2.2.5 (Sensory / Working / Episodic / Semantic / Procedural / Reflective / Long-term) cohesion-tested end-to-end. Retrieval-order block in system prompt, WorkingMemorySnapshot as Vec<PromptSection>, PermissionMemory wired into permission gate, /file-cache real handler, egress allowlist in settings + /policy view, /memory why injecting daily summaries.
  • Capability Cohesion Arc — every Anvil capability now meets an 8-axis contract (definition / registration / completion / handler / dispatch / rendering / permission gate / OTel + tests). Build-time drift gate enforces it. Slash dispatch unified at one site. Stub messages banned.
  • CC→Anvil migrationanvil import claude-code brings prior assistant work forward verbatim with provenance frontmatter. Memory entries get imported_from stamps. Project instruction files merged without clobbering. Settings get conflict detection. Skills get collision handling. Past sessions (up to ~1,800 JSONL, ~1 GB) optionally summarized into daily records. The day-2 command anvil memory clean rewrites entries through a configurable LLM and detects duplicate meanings via Jaccard similarity. First-run wizard offers migration as opt-in.
  • CC parity catch-up v2.1.132 → v2.1.139 — 17 features + 7 security/verify items: ANVIL_PROJECT_DIR / ANVIL_SESSION_ID / ANVIL_DISABLE_ALTERNATE_SCREEN / ANVIL_EFFORT env propagation, transcript view nav, cross-session anvil agents live monitor, worktree.baseRef, autoMode.hard_deny short-circuit, hook continueOnBlock, hook args string[] exec form, /scroll-speed with live preview, anvil plugin details, subagent OTel headers with parent-agent-id, plus security gates on --resume/--continue underscore paths, plan-mode + Edit allow rule write blocking, MCP content-block result visibility, Skill(name *) wildcard delimiter check, settings hot-reload on symlinks, stream-idle false-fire elimination, multi-image paste correctness.
  • Token economy + reliability — file-fingerprint cache wired into read_file/write_file/edit_file/system prompt (shipped dormant in v2.2.11). Command-output cache wired into glob_search and grep_search. WebFetch + WebSearch get 5-min and 1-hour TTL caches. Skill-chaining engine depth-3 wired (suggestion engine; executor lands in v2.2.16). Auto-promote engine for /memory notes active.
  • Honesty contract codified — test-suite-enforced contracts: no silent deferral, 8-axis capability contract, CC-only naming, changelog preservation (historical entries byte-immutable), migration instinct (bring everything verbatim-with-flag), live-model-list (not registry), atomic provider/model switch.
  • Seven platforms — macOS ARM64, macOS Intel, Linux x86_64, Linux ARM64, Windows x86_64, FreeBSD x86_64, NetBSD x86_64. Every binary SHA256-verified.

v2.2.14 — (internal-only, never publicly released)

v2.2.14 was tagged internally but never published as binaries due to a release-pipeline incident. All v2.2.14 work is included in v2.2.15 above (Memory Cohesion Arc, Capability Cohesion Arc, CC parity v2.1.132-139, per-tab parallel inference fixes, file-fingerprint cache wiring, auto-promote engine).

v2.2.13 — May 11, 2026

Windows is back, BSD joins, routines on disk — seven platforms now.

  • FreeBSD x86_64 + NetBSD x86_64 binaries — first-ever BSD support. Every binary SHA256-verified and signed by the release pipeline, with paired .sha256 manifests at anvilhub.culpur.net/sha256/.
  • Windows x86_64 is back — the v2.2.12 hold is fixed. ssh-agent auth is now #[cfg(unix)]-gated with a clean Windows stub. The rest of the SSH driver (key-file, password, kbd-interactive) works on Windows exactly as on Unix.
  • Seven platforms total — macOS ARM64, macOS Intel, Linux x86_64, Linux ARM64, Windows x86_64, FreeBSD x86_64, NetBSD x86_64.
  • Release pipeline hardening — build errors now hard-fail instead of silently producing partial releases (the v2.2.12 incident where the Windows build failed silently and a stale artifact was published).
  • Routines foundation on disk — schedule grammar (duration, interval, cron, ISO timestamp), output archive with [SILENT] early-stop, and SHA-256 input-hash packet schema. 63 new tests. The v2.2.14 daemon ships on top.
  • ✓ FreeBSD ARM64 and OpenBSD x86_64 are not in this release — the Rust toolchain does not publish a precompiled standard library for either target. Both are queued for v2.2.14.
  • ✓ 1,146 workspace tests passing across every crate. Zero failures. Zero warnings.

v2.2.12 — May 11, 2026

Parallel and Transparent — the app gets out of your way.

  • ✓ Per-tab parallel inference — each tab owns its own Arc<Mutex<ConversationRuntime>> and runs turns on dedicated worker threads; fire prompts in multiple tabs simultaneously
  • ✓ Mid-turn TUI responsiveness — Ctrl+T, F2/F3, /ssh, and cross-tab submit all respond immediately during streaming; the app is interactive throughout a turn
  • ✓ Tool-call cards — every Glob/Grep/Read/Write/Edit/Bash/WebSearch/MCP call renders a bordered card with actual input (pattern, path, command) the moment it fires; Ctrl+O expands to full JSON + result
  • ✓ SSH tabs — /ssh host opens a modal connection form with russh backend, vt100 rendering, Ctrl+B prefix keys; connections saved as vault HostCredential aliases
  • ✓ Tab bar markers — * (unread), &#9888; (pending permission), &#215; (clickable close); terminal-friendly navigation (F2/F3/Ctrl+arrow/Alt+digit/click)
  • ✓ Session continuity — anvil --continue honors saved model from .meta.json sidecar; Ollama sessions reconnect without credential errors; exit prints resume commands
  • ✓ Scrollback fix — HISTORICAL VIEW was showing only 1–4 chars per assistant line; pending text growth now invalidates cached scrollback line vectors
  • /quit no longer deadlocks — self-recursive mutex in record_daily fixed
  • ✓ First-run setup wizard — mouse capture, theme, permission mode opt-ins on first launch; anvil setup / anvil --first-run to reconfigure
  • ✓ anvil(1) manpage ships with Homebrew installs
  • /clear clears workspace context across all tabs, not just the active one
  • ✓ Release pipeline hardening — tag-vs-HEAD pre-flight, build-from-tag, php-lint guard, changelog.json render-time injection on AnvilHub
  • ✓ 318 tests passing, ~22 MB binary

v2.2.11 — May 9, 2026

Outweigh-them-all release — self-awareness plus ten core surfaces in one cut.

  • ✓ System prompt now leads with "You are Anvil v2.2.11" and references the currently loaded model + provider in every turn — no more hallucinating a different identity
  • W1 hook events: PreToolUse, PostToolUse, UserPromptSubmit, SessionStart, SessionEnd, PreCompact, Notification — full CC parity
  • W2 effort slider: /effort low|medium|high — tune reasoning depth per turn, persisted per session
  • W3 goal persistence: per-session goals survive /clear and reconnect, surfaced in status line
  • W4 named profiles: save and switch (provider, model, effort, output style) tuples by name
  • W5 published JSON schema: settings.json fully typed, IDE-completable, served at anvilhub.culpur.net/schema/settings.json
  • W6 OpenTelemetry events: OTEL_EXPORTER_OTLP_ENDPOINT support, permission_decision + tool_call + token_usage spans
  • W7 custom output styles: define your own /output-style names in settings, ship them as plugins
  • W8 reviewer-agent approval gate: optional second-agent review before file writes, configurable threshold
  • W9 anvil mcp-server mode: run Anvil itself as an MCP server — expose agents and tools to any MCP client
  • W10 requirements.toml admin policy floor: enforce minimum versions, required plugins, denied domains org-wide
  • ✓ Rename CLAUDE.mdANVIL.md across user-facing strings + the anvil-md-curator skill
  • ✓ Build-time fix: cargo:rerun-if-changed now watches the actual ref file, not just .git/HEAD — GIT_SHA stays current across rebuilds

v2.2.10 — May 6, 2026

TUI usability patch.

  • ✓ TUI: long lines wrap instead of right-truncating
  • ✓ TUI: native terminal selection restored (Shift-drag works again)
  • ✓ TUI: tool-result summaries now actually summarize
  • ✓ Release pipeline: regenerate sha256 manifests every build + verify-before-release
  • ✓ Release pipeline: fix repo target on gh release calls

v2.2.9 — May 6, 2026

Claude Code parity catch-up.

  • ✓ Claude Code parity: --print/--agent honor frontmatter, plugin prune, scroll snap
  • ✓ Subagent summaries, /mcp tool count, API 400 error surfacing
  • ✓ OTEL env vars, MCP reconnect summary, worktree HEAD detection
  • ✓ Spinner red on errors, theme refresh, env vars (DISABLE_UPDATES, HIDE_CWD, EFFORT, AI_AGENT)
  • ✓ Long URL clickability, /clear tab title cleanup, editor handoff hardening

v2.2.8 — April 22, 2026

PAI-inspired composition, learning, and robustness.

  • /agent compose <traits...> "<task>" — trait-based agent composition engine, 30-trait catalogue (expertise × personality × approach), dimension-conflicts hard-error by default. Adapted from Miessler's Personal_AI_Infrastructure.
  • ✓ Skill front-matter triggers with suggest-not-auto UX — three bundled reference skills (security-audit, code-review, terse). Never auto-inject (prompt-injection vector); user confirms via /skill load <name>.
  • ✓ Prompt-type hooks — plugin lifecycle hooks can now inject a string into the next model turn with {tool_name} / {cwd} / {date} / {model} interpolation. Backward-compatible with bare-string command hooks.
  • anvil skill-eval — three-arm evaluation harness (__baseline__ / __terse__ / <skill>) with honest caveats baked into every report. Adapted from caveman.
  • /output-style precise|condensed — user-selectable global response style. Precise (default) preserves full sentences; condensed activates the bundled terse skill. Never auto-applies condensed — Auto-Clarity rules still fire for security / irreversible / multi-step / consent contexts even when condensed.
  • ✓ Plugin loader is forward-compatible — a single bad manifest no longer crashes the entire binary. PluginLoadDiagnostic surfaces per-plugin warnings on stderr.
  • ✓ Bundled plugins are now embedded in the binary via include_dir — Homebrew users' bundled plugins are visible; developers' installed binaries no longer depend on their live source tree.
  • ✓ Claude-Code-parity bug fixes: 429 Retry-After minimum; 5-min stream dead-air timeout; configurable request timeout (ANVIL_API_TIMEOUT_MS); /model warns on mid-conversation switch; DangerFullAccess stability invariants.
  • ✓ 756 tests passing.

v2.2.7 — April 21, 2026

Cross-OS installers, anvil upgrade, shell completions, curated Ollama menu, Windows fixes, release-pipeline hardening.

  • install.sh (macOS/Linux) and install.ps1 (Windows) with SHA256 verification from anvilhub.culpur.net with GitHub fallback — aborts on dual failure, no unverified binary ever lands
  • anvil upgrade, anvil --check, anvil --setup, anvil --uninstall — full lifecycle from the binary itself
  • ✓ Shell completions for bash, zsh, fish, and PowerShell — all 101 slash commands, subcommands, flags, provider and model names
  • ✓ First-run wizard: curated Ollama model menu — Llama 3.x, Qwen 3 / 2.5-Coder, Mistral Nemo, Gemma 3, Phi 4, Code Llama, Codestral, per-model confirmation
  • ✓ TUI scrollback + text selection via Shift-drag pass-through to the terminal emulator
  • ✓ Windows: correct HOME / PATH / PATHEXT handling, .exe on respawn, cmd.exe-aware install detection
  • ✓ QMD cross-platform discovery — no more hard-coded Unix socket paths
  • ✓ Ollama tool-use: multi-format parser (Anthropic, OpenAI, XML, JSON-fence, natural language) with fail-loud on ambiguity
  • ✓ Remote-control 503 fixed — relay WebSocket process declaration corrected
  • ✓ Release pipeline: per-binary embedded-version audit gate — makes the v2.2.6 Windows-exe-labeled-as-2.2.1 class of bug impossible
  • ✓ 618 tests passing, zero warnings

v2.2.6 — April 20, 2026

Command Parity, Deep Autocomplete, Web Config, AnvilHub Installer.

  • ✓ 17 web config panels — vault, notifications, SSH, Docker/K8s, memory, and more
  • ✓ Full Status Line editor in browser — 36 widgets, 16 presets, drag-and-drop, live preview
  • ✓ AnvilHub installer — search, install, restart prompt — vault-gated, telemetry-tracked
  • ✓ Deep hierarchical autocomplete — /vault store <Tab> → 21 credential types
  • ✓ 8 previously-broken TUI handlers now working — /mcp, /plugins, /session, /daily, and more
  • ✓ New commands — /tab, /fork, /share, /audit, /restart
  • ✓ Self-respawn on macOS/Linux after plugin installs

v2.2.5 — April 19, 2026

Intelligent Memory System — six major features.

  • ✓ Interactive Status Line Editor — full TUI editor with 6 sub-screens + WebUI drag-and-drop visual editor
  • ✓ 37 widgets, 16 presets (8 emoji-rich themes), per-widget category colors
  • ✓ Code Productivity Dashboard — live git diff tracking, /productivity command
  • ✓ MCP Server Manager — /mcp command, live McpStatus widget
  • ✓ Session History Browser — /history-archive stats with model breakdown
  • ✓ Plugin System UI — web viewer management panel with config toggles
  • ✓ Agent Panel Expansion — web viewer agent management buttons

v2.2.4 — April 16, 2026

Security Hardening + Optimization — 17 audit findings fixed.

  • ✓ Constant-time HMAC verification, plugin command injection prevention
  • ✓ Path traversal protection, cryptographic session IDs
  • ✓ 110 functions made const fn, zero compiler warnings
  • ✓ RC widget: live client count with connect/disconnect signals

v2.2.3 — April 15, 2026

Six Major Features — interactive editor, productivity, MCP, history, plugins, agents.

  • ✓ Interactive Status Line Editor — 37 widgets, 16 presets, visual editor
  • ✓ Code Productivity Dashboard — live git diff tracking
  • ✓ MCP Server Manager, Session History Browser, Plugin UI, Agent Panel

v2.2.2 — April 14, 2026

Customizable Widget-Based Status Line — 8 presets for different workflows.

  • ✓ Widget-based status line system — 28 widget types, dynamic rendering
  • ✓ 8 presets: default, minimal, developer, token-heavy, git-heavy, compact, cost-focused, streamer
  • /configure statusline command with full tab completion
  • ✓ Web viewer config panel gains Status Line preset selector
  • ✓ Dynamic footer height — 2-line presets maximize content area

v2.2.1 — April 14, 2026

URL rendering fix, context-aware vault, CI/CD automation.

  • ✓ URL rendering fix — terminal hyperlinks render correctly across all providers
  • ✓ Context-aware vault — vault auto-selects credentials based on active project context
  • ✓ CI/CD automation — /cicd command scaffolds pipelines for GitHub Actions and GitLab CI

v2.2.0 — April 14, 2026

Typed Credential Vault — the vault is now the single source of truth for ALL sensitive data.

  • ✓ Typed credential entries — name, type, value, tags, created_at, rotated_at
  • ✓ Vault covers API keys, SSH keys, TLS certs, tokens, and environment secrets
  • /vault add — interactive typed credential entry with category selection
  • /vault rotate — rotate any credential in-place, preserving audit history
  • /vault export — encrypted vault export for backup and migration
  • /vault inject — load vault secrets into shell env for any subprocess
  • ✓ Audit trail v2 — every vault access logged with timestamp, operation, and credential type

v2.1.4 — April 14, 2026

Browser configuration panel, Gemini provider, slash command execution in web viewer.

  • ✓ Browser-based visual configuration panel
  • ✓ Google Gemini as 5th provider
  • ✓ Slash commands execute from web viewer
  • ✓ 30+ commands with subcommand completions

v2.1.3 — April 14, 2026

Edition 2024, dependency modernization, Claude Code parity.

  • ✓ Focus view — /focus hides sidebars and agent panels for distraction-free mode
  • ✓ Context-low warning — proactive alert before auto-compaction fires
  • ✓ Stalled stream handling — detects and recovers from stuck token streams
  • /loop and /proactive — recurring prompt loops and proactive agent nudges

v2.1.2 — April 14, 2026

Credential scanner, egress control, conversation branching — 16 new features.

  • ✓ Credential auto-detection — scans env vars, dotfiles, SSH keys, TLS certs
  • ✓ Network egress control — configurable domain allowlist
  • ✓ Signed session transcripts — HMAC-SHA256 audit trail
  • ✓ Conversation branching — /fork to snapshot and branch
  • ✓ Markdown session export — /export md with code blocks
  • ✓ Remote control browser auto-open
  • ✓ Expanded cost tracking — OpenAI, xAI, Ollama pricing
  • ✓ Smart context compaction — preserves recent messages and code blocks

v2.1.1 — April 13, 2026

Live streaming responses, thinking status indicator, remote control.

  • ✓ Live streaming responses — real-time token-by-token rendering
  • ✓ Remote control — /remote-control to share sessions via browser
  • ✓ Thinking mode — /think enables extended reasoning

v2.1.0 — April 8, 2026

Encrypted vault, file sandbox, modular architecture — security-first release.

v2.0.0 — April 8, 2026

Full Claude Code Parity — multi-agent system, TUI tabs, context management.

v1.0.4 — April 7, 2026

Multi-agent system — 7 agent types with task orchestration.

v1.0.3 — April 7, 2026

VS Code extension, 21 new features, credential vault, 86 commands.

v1.0.2 — April 7, 2026

Internationalization — 7 languages, 20 features.

v1.0.1 — April 3, 2026

Cross-compilation CI pipeline — 5-platform builds, theme system, QMD documentation.

v1.0.0 — April 2, 2026

Initial release. Terminal-native AI coding assistant with credential vault and TUI.


About

Anvil - AI Coding Assistant by Culpur Defense

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors