The largest release in Anvil’s history is here. v2.2.15 ships today with a 6x expansion of the provider catalog, a first-class command tree for Cursor’s Cloud Agents, a cross-provider model picker that finally treats every backend as equal, and the completion of two foundational arcs that began in v2.2.5. 121 commits over v2.2.13. Every binary signed. Every byte yours.
Your tools, your terms
Every other AI coding assistant comes with a leash. One vendor’s pipe. One vendor’s pricing. One vendor’s rate limits. When that vendor changes something you don’t like, you’re stuck.
Anvil v2.2.15 is the inverse. Pick any model from any provider with a single /model press. Switch mid-conversation. Fail over when one throttles. When one gets expensive, change it. When the provider does something you don’t like, leave.
No account. No telemetry. No lock-in. A single ~24–42 MB binary, zero dependencies, 31 AI providers, seven platforms.
The provider catalog grew 6x
v2.2.13 shipped with five providers. v2.2.15 ships with thirty-one. Every implementation either uses a documented public API or identifies as Anvil honestly in headers. No IDE spoofing. No scraped credentials. No silent fallbacks.
- AWS Bedrock — hand-rolled SigV4 signing audited against AWS test vectors. No AWS SDK dependency = ~50 MB smaller binary.
InvokeModel+InvokeModelWithResponseStream. Run Claude, Llama, Mistral, Titan against your AWS account, your bill, your IAM. - Google Gemini OAuth + Antigravity — Code Assist OAuth with PKCE flow, dynamic-port localhost callback, atomic token save, pre-emptive refresh. Anvil identifies as
User-Agent: Anvil/2.2.15andx-goog-api-client: anvil-cli. Not VS Code. Not pretending to be. - GitHub Copilot — device flow auth. Use your existing Copilot subscription from the terminal.
- Azure OpenAI — deployment-name +
api-versionURL pattern. For teams locked into Azure. - Cursor Cloud Agents — public Cloud Agents API, repo-bound by design.
- 24 more OpenAI-compatible providers — Groq, Fireworks AI, Mistral, Perplexity, DeepSeek, Together AI, DeepInfra, Cerebras, NVIDIA NIM, HuggingFace, Moonshot AI, Nebius, Scaleway, STACKIT, Baseten, Cortecs, 302.AI, ZAI, OpenRouter, LMStudio, Chutes, MiniMax, OpenCode, OpenCode-Go.
/provider login <slug> runs the right flow for each: API-key paste with live validation for direct-key providers, OAuth PKCE for Google, device flow for Copilot, SigV4 for Bedrock. Configure priority chains. Automatic failover when one hits a rate limit. Per-provider budgets. Zero-cost local inference with Ollama or LMStudio.
Cursor lands as a first-class agent surface
Cursor’s Cloud Agents API doesn’t behave like a chat provider — it spawns autonomous agents against a specific GitHub repo and streams results over SSE. We didn’t shoehorn it into /model. We gave it its own command tree.
/cursor launch <prompt> — spawn an agent on the current workspace's GitHub repo /cursor list — show your active agents with status, model, repo, branch /cursor get <agent_id> — full agent record + recent runs /cursor cancel <agent_id> — terminate an in-flight run /cursor artifacts <agent_id> — list and download generated files /cursor stream <agent_id> <run_id> — re-attach to an SSE stream with Last-Event-ID resume
Repo-bound by design. git remote get-url origin is mandatory — Cursor errors loudly if the current workspace isn’t a GitHub repo. No silent failure, no fallback. Every subcommand passes the full 8-axis capability contract.
One picker, every provider, atomic switch
Type /model and press TAB. You used to see one provider’s models. Now you see every configured provider’s models in one TAB-completable list, provider-prefixed for clarity:
anthropic/claude-4.5-sonnet groq/llama-3.3-70b gemini/gemini-2.0-flash-thinking bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0 cursor/claude-4-sonnet-thinking ollama/qwen-coder ... 25+ more
Picking cursor/claude-4-sonnet-thinking performs an atomic switch: provider routing, system prompt identity, and TUI chrome all update together. No more “the chrome says Anthropic but the API is going to Groq.” Lists are live-fetched from each provider’s /models endpoint, cached per session. The static registry is fallback only.
Memory becomes whole
v2.2.5 introduced a seven-layer memory architecture: Sensory, Working, Episodic, Semantic, Procedural, Reflective, Long-term. The structure was right. The wiring wasn’t. v2.2.15 finishes the wiring.
- Retrieval-order block added to the system prompt — the model now knows which memory layers exist and when to consult them
WorkingMemorySnapshotlands asVec<PromptSection>PermissionMemorywired into the permission gate — past decisions actually influence future prompts/file-cachereal handler replaces the v2.2.5 stub- Egress allowlist wired into
settings.json+/policy view /memory whynow actually injects DailyStore daily summaries into the prompt — you can ask “why did you remember that?” and get the answer
Capabilities, contracts, enforced
Every Anvil capability now meets an 8-axis contract: definition / registration / completion / handler / dispatch / rendering / permission gate / OpenTelemetry + tests. The cheap-drift gate enforces it at workspace build time — a slash command can’t ship with a stub message. The compiler refuses.
Migrating from another assistant? anvil import claude-code
Switching from Claude Code? Anvil brings your investment forward verbatim, with provenance frontmatter so it’s clear what came from where:
- Memory entries (typical CC profile = 94 markdown files) →
~/.anvil/memory/withimported_fromstamps and content hashes for idempotent re-runs CLAUDE.mdfiles (global + per-project) →ANVIL.mdwith merge semantics that never clobber existing filessettings.jsonwith conflict detection — actual conflict counts surface, not booleans- Skills import with collision handling, disabled by default until you explicitly enable
- Plugin manifests with skills/agents fields
- Past sessions (up to ~1,800 JSONL files, ~1 GB) — gated behind
--include-sessions, summarized via your configured provider into~/.anvil/daily/. Resumable across runs.
The day-2 command anvil memory clean rewrites imported entries through a configurable LLM, normalizes vocabulary, and detects duplicate-meaning entries via Jaccard similarity + LLM judge. The first-run setup wizard offers the migration as an opt-in step.
Token economy + reliability
v2.2.15 stops paying for redundant work.
- File-fingerprint cache wired — the module shipped in v2.2.11 without callsites. v2.2.15 wires it into
read_file,write_file,edit_file, and the system prompt. Re-reads are free. - Command-output cache wired into
glob_searchandgrep_search - WebFetch + WebSearch get 5-min and 1-hour TTL caches
- Skill-chaining engine depth-3 wired (suggestion engine; full executor lands in v2.2.16)
- Auto-promote engine for
/memorynotes is active
Honesty contract codified
Several behavioral rules became test-suite-enforced contracts during this cycle:
- No silent deferral — completion claims that hide pending work fail the build gate
- 8-axis capability contract — every command ships all 8 axes or it does not ship
- Changelog preservation — historical changelog entries are byte-immutable on every release
- Live-model-list, not registry —
/modelreads live provider APIs; static catalog is fallback only - Atomic provider/model switch — routing + system prompt identity + TUI chrome update together, never separately
Seven platforms, SHA256-verified
macOS ARM64, macOS Intel, Linux x86_64, Linux ARM64, Windows x86_64, FreeBSD x86_64, NetBSD x86_64. Every binary signed by the release pipeline with paired .sha256 manifests at anvilhub.culpur.net/sha256/.
Install in seconds
# Homebrew (macOS + Linux) brew install culpur/anvil/anvil # Or one-liner installer curl -fsSL https://anvilhub.culpur.net/install.sh | bash
Configure your providers, pick your model with /model, and you’re coding.
Why now
The AI coding assistant market is consolidating around vendor lock-in. Single-provider clients. Single-API pipes. Single-tier pricing. Anvil rejects that direction. v2.2.15 is the largest commitment to optionality we’ve shipped — thirty-one providers, every implementation honest about what it is, atomic switching across them all, and your credentials in an AES-256-GCM vault that never touches anyone’s server.
Your providers. Your credentials. Your data. Your cost. Your terms.
Install Anvil v2.2.15 · Full changelog on GitHub · Product page
