v2.2.33 — Canvas, Projects and the Vault

One AI. Every model.
Yours.

Your providers. Your credentials. Your data. Your cost. Anvil runs in your terminal, drives from your browser, and remembers across sessions — with a mind map of everything it's thinking. And a marketplace of everything the community builds for it.

35 providers · encrypted vault · 143 commands · zero telemetry

01 In your terminal the TUI — full-screen, keyboard-driven
anvil — main
SESSIONS
● main
AGENTS (GLOBAL)
none active
STATUS (ALL TABS)
running1 tab
pending0 perms
MEMORY
working17t
episodic421
semantic1c·1a
long-termL7
MIND MAP
nodes18
links5
MODEL
claude-opus-5
CONTEXT
14k/1M
KEYBINDS
? help · /quit exit
BUILD
v2.2.33
● mainF2/F3 switch · Ctrl+T new · /help
DECK: Conversation
[10:41] ◆ Connected to daemon session.
▌ Add a merge_sorted helper to src/utils.rs, with a unit test. Then run the tests.
▎ I'll add merge_sorted (two-pointer, O(n+m)) and a covering test.
◆ read_file {"path":"src/utils.rs"}
◆ edit_file src/utils.rs +18 lines
pub fn merge_sorted(a: &[i32], b: &[i32]) -> Vec<i32> {
let mut out = Vec::with_capacity(a.len()+b.len());
// interleave, then drain the tail…
}
▎ Running the tests to prove it works.
◆ bash cargo test merge_sorted
test result: ok. 1 passed; 0 failed; 0 ignored
Thinking…
Type a message or /command…Send
02 From your browser the web viewer — same live session
English ▾ Connected Disconnect
SESSIONS
● main
AGENTS (GLOBAL)
none active
STATUS (ALL TABS)
running1 tab
pending0 perms
MEMORY
working17t
episodic421
semantic1c·1a
long-termL7
MIND MAP
nodes18
links5
MODEL
claude-opus-5
CONTEXT
14k/1M
KEYBINDS
? help · /quit exit
BUILD
v2.2.33
DECK: Conversation · drag to copy · End to return to live
You
Add a merge_sorted helper to src/utils.rs that merges two sorted slices, with a unit test. Then run the tests.
Anvil
I'll add a merge_sorted function with a two-pointer merge and a covering test. First, let me look at the file.
read_file {"path":"src/utils.rs"}
edit_file {"path":"src/utils.rs", …}
Anvil
Added merge_sortedO(n+m), stable across duplicates:
RUST/// Merge two already-sorted slices into one sorted `Vec`. pub fn merge_sorted(a: &[i32], b: &[i32]) -> Vec<i32> { let mut out = Vec::with_capacity(a.len() + b.len()); let (mut i, mut j) = (0, 0); while i < a.len() && j < b.len() { if a[i] <= b[j] { out.push(a[i]); i += 1; } else { out.push(b[j]); j += 1; } } out.extend_from_slice(&a[i..]); out.extend_from_slice(&b[j..]); out }
Anvil
Now let me run the tests to prove it works.
bash cargo test merge_sorted
Anvil
running 1 test
test utils::tests::merges_sorted ... ok

test result: ok. 1 passed; 0 failed; 0 ignored

All green — the test covers interleaved values, empty inputs, and duplicates.
Thinking…
Why Anvil

Other assistants come with a leash.
Anvil is the inverse.

Most AI coding tools route through one vendor, hold your keys, and phone home. Anvil hands you the reins — every layer is yours to control.

🔌

Any provider

Anthropic, OpenAI, Gemini, xAI, Ollama, and 30 more. Switch mid-session with /model.

🔑

Your keys

Bring your own API keys, held in a local encrypted vault. Anvil never sees a key it didn't get from you.

🗄️

Your data

Sessions, memory, and your mind map live on your machine as plain files. They travel with you.

🛰️

Zero telemetry

No phoning home. What happens in your terminal stays in your terminal.

Teams & fleet

Expertise that costs nothing
until you actually use it.

A real agent library is dozens of specialists. Telling the model about all of them costs thousands of tokens of roster on every single turn — spent before any work happens, and growing every time you add an agent. Anvil refuses that trade.

🧮

Twelve names, not a roster

The model sees twelve squad names and a one-line brief each — about 300 tokens, and that cost is fixed. No agent names, no counts. Add a hundred specialists and it does not grow by a line.

🎯

Ask for a capability

You ask for security testing, not for a name you had to memorise. The host resolves the concrete specialist from the full roster and loads it for that job — then lets it go.

📦

Grow it from the marketplace

Install a whole new squad here and it becomes routable immediately — no Anvil update, no waiting on a release that knows your team.

An empty squad says so

Ask for a capability nobody on the team has and Anvil refuses — rather than quietly handing the job to a general-purpose agent and letting you believe a specialist did it.

📡

Every machine you own

/fleet sends one task to every eligible Anvil on your account and collects the answers — routed by capability, so the work lands somewhere that can actually run it.

📋

No silent half fan-out

It names what was sent, what was refused, and who was never eligible. A fan-out that reports only its successes looks identical to one that lost half your fleet.

The mind map

It thinks in a map.

A living, force-directed graph of your work — wired into Anvil's memory so it reflects what it's actually learning. Drive it from the browser: drag anything, zoom to the cursor, click any node for its full notes.

anvil · mind mapforce-directed
Product Planning · 18 nodes · 5 links
🌐

Force-directed

Nodes repel so the graph stays readable at hundreds of nodes.

🧠

Memory-aware

Today's memories auto-populate; toggle to a color-coded Memory Graph.

With atmosphere

An ambient starfield drifts behind it — on the web and in the terminal.

Live control

Terminal and browser, one session.

Start in the terminal, hand off to a paired browser tab, and back again — it's the same live session the whole time, never a copy. Nothing is lost in the handoff.

  • Pair a browser with one command; drive the exact session you're running.
  • The web viewer renders like a product — message cards, glowing code panels, real markdown.
  • Hand off without flashing or losing history; wake the terminal and it's all there.
anvil — local control● paired
LIVE SESSION IN BROWSER
session360943
clients1 · local
context14k / 1M
press any key to continue in the TUI
Seven-layer memory

It remembers what matters.

Anvil remembers across sessions — working, episodic, semantic, procedural, reflective, and a long-term knowledge archive. Click any layer to browse what it knows.

  • Every memory is a card with a colored type badge and full text on click.
  • Memories link to each other and to your mind-map thoughts.
  • All local — it's your knowledge, and it stays yours.
anvil — memory
Chose two-pointer merge over sort()
feedbackinputs already sorted → O(n+m)
Ship the onboarding flow before API v2
projectopen task · linked from "This week"
Pricing settled on three tiers
reference↳ knowledge doc "launch-plan"
Prefer named functions over closures here
feedbackreadability in the hot path
By the numbers

Everything, on your terms.

35AI providers
138slash commands
7native platforms
0telemetry calls
Anthropic ClaudeOpenAIGoogle GeminixAI Grok OllamaMistralDeepSeekGroq+ 27 more
Community marketplace

And everything built for it.

Skills, plugins, agents, and themes from the community — install any of them into Anvil with one command.

564
Total Packages
3
Total Downloads
1
Authors

Share your work

Built a useful Anvil skill or plugin? Publish it to AnvilHub and share it with the community.

Publish a Package
Get Anvil

One command. Seven targets.

Native binaries for every platform your team runs.

install & run
$ curl -fsSL https://anvilhub.culpur.net/install.sh | sh
✓ Anvil v2.2.33 installed
$ anvil
⚒ Anvil v2.2.33 · ready
  Model: claude-opus-5
  Context: 1M tokens
  Provider: Anthropic
install
macOS / Linux  curl -fsSL https://anvilhub.culpur.net/install.sh | bash
Windows        irm https://anvilhub.culpur.net/install.ps1 | iex
macOS
Apple Silicon
native
macOS
Intel · x86_64
native
Linux
x86_64 · gnu
native
Linux
arm64 · gnu
native
Windows
x86_64 · msvc
native
FreeBSD
x86_64
native
NetBSD
x86_64
native

Need a FIPS-validated build for regulated environments? See Anvil FIPS.