Anvil v2.2.15: 31 Providers, One Binary, Zero Lock-In

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.15 and x-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-version URL 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
  • WorkingMemorySnapshot lands as Vec<PromptSection>
  • PermissionMemory wired into the permission gate — past decisions actually influence future prompts
  • /file-cache real handler replaces the v2.2.5 stub
  • Egress allowlist wired into settings.json + /policy view
  • /memory why now 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/ with imported_from stamps and content hashes for idempotent re-runs
  • CLAUDE.md files (global + per-project) → ANVIL.md with merge semantics that never clobber existing files
  • settings.json with 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_search and grep_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 /memory notes 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/model reads 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

Scroll to Top