The codemate that remembers, reasons, and stays yours.
Anvil is a private memory and reasoning layer for the AI coding tools you already use. It remembers what you and your assistant learn, grounds every session in that knowledge, and convenes a room of expert critics when a decision is hard — all on your own machine, through your own models.
The environment
This is the Anvil desktop app. Read down the steps on the right — each one describes a part of the workshop floor. (Real screenshots, captured on a fresh demo instance with sample data and no provider keys set — so a housekeeping job fails, naming the keys it's missing; your own install shows your data.)
Top-right icons open every workspace — skills, the reading list, the blueprint, the board, the Crucible, the shell, and settings. The brand on the left always shows where you are.
The top pane narrates the daemon's work in plain language — "I looked through your memory and grounded the answer on 5 notes." No black box: you see it think.
The workspace renders the substrate as a graph (2D or a 3D galaxy). Each dot is a memory, coloured by whether it has held up or been corrected — grey means no evidence yet.
Filter the live workshop-floor stream by Thinking, Tool, Verifier, Memory, or Skill — a recall that grounded a turn, a route to a provider, a finding staged for review.
Ask directly from the chat bar — pick the project scope, the router role, and the permission mode for the turn, then send. Or type / for a command.
Prefer to watch it work from a terminal? anvil watch streams the same workshop-floor events to your shell, and anvil status is the one-line health ping.
What Anvil is
Modern AI coding assistants are brilliant and forgetful. They solve a hard problem with you on Monday and have no memory of it by Tuesday. They repeat the mistakes you already corrected. They can't tell you what your project decided six weeks ago, because nothing kept the decision.
Anvil is the layer that fixes that. It runs quietly on your machine as a small always-on service — a daemon — and becomes the durable brain for your assistant. As you work in Claude Code, Codex, or a similar tool, Anvil captures what was learned, distils it into clean memory, and feeds the right pieces back into future sessions automatically. When a choice is genuinely hard, it can convene a Crucible: a cast of directed expert personas who argue the problem from different angles and resolve it into a better answer than any single pass would give.
Everything stays local. Anvil reasons through the models you already have — your coding subscription, a free provider key, or a model running on your own hardware — and stores everything it learns in an encrypted store on your disk. There is no Anvil cloud your data flows through, and no third bill for tokens you're already paying for.
Remembers
A private, searchable memory that grows as you work and grounds every session — no more re-explaining your project.
Reasons
Multi-agent adversarial deliberation on demand — a room of critics that pressure-tests a decision before you commit to it.
Stays yours
Local-first by construction. Your knowledge is encrypted on your disk and reasoned over by your own models.
What it is, what it isn't, and what we set out to build
Anvil was built around a few firm convictions. Knowing them makes the rest of these docs click into place.
What we set out to accomplish
We wanted a coding assistant that compounds. Every corrected mistake, every architectural decision, every hard-won gotcha should make the next session smarter — automatically, without anyone remembering to write it down. And we wanted that intelligence to belong to you: portable, inspectable, deletable, and never held hostage in someone else's cloud.
What Anvil is
- A private brain & memory layer for your existing AI coder.
- A local, always-on service you own and run.
- A multi-provider router — use any model, fail over gracefully.
- An on-demand room of expert critics (the Crucible).
- A project memory: tasks, flow maps, decisions, reading.
What Anvil is not
- Not a chatbot or an IDE — it augments the coder you already use.
- Not a cloud service that ingests your code and data.
- Not a replacement for your model subscription — it rides it.
- Not a credential vault for your assistant's logins — those stay in the assistant's own app.
- Not autonomous behind your back: changes to your knowledge are review-gated.
The convictions underneath
What Anvil does — and what it deliberately doesn't
Most tools hand you a feature list and let you discover the edges yourself. Anvil keeps the whole truth inside the product: run anvil capabilities and it prints this exact map from your own build, in four honest states — shipped and working, partial by design, planned, and deliberately absent. Here it is.
- Recall from memory
- Semantic search across your stored memories, filtered by project, with provenance.
- Approve or deny staged findings
- Nothing staged grounds a turn until a human approves it — the Review tray, or
anvil review. - Session staging table
- Observations are captured from turn one, then distilled into one memory staged for approval when the session closes.
- Task tracking
- Create, list, update, complete and delete tasks — the board,
/taskin the viewer, oranvil task. - Fetch a web page & read a local file
- A turn can retrieve and summarise a URL, or read a file — read-only; there is no write counterpart.
- Encrypted secret vault
- Provider keys live in an age-encrypted vault; names are listable, values never leave it.
- Multi-provider routing
- Every role routed across providers with failover to free tiers.
- Query its own stores mid-turn
- A turn calls tools to read live state instead of answering from impression.
- Write a memory
- Memories are written by the distiller and by
/remember.Why: a turn can't write memory directly — it stages findings for approval, so nothing self-writes into your brain unreviewed. - Skills
- Skills are listable, inspectable, and triggerable metadata that shape how a turn is approached.Why: a skill instructs, it does not run code.
- Merge duplicate memories
- Preview runs in the viewer; applying a merge is CLI-only.Why: applying is irreversible and can merge away rows awaiting review, so it stays a deliberate act.
- Act on its own schedule
- Background loops distil, consolidate, enrich and back up on timers.Why: these maintain memory. Anvil does not pursue goals unprompted.
- Recall-usage report
- Which memories recall actually uses, to show what earns its place — CLI-only today (
anvil memory usage), no viewer surface yet. - Install or reload a skill live
- Import a SKILL.md and reload the catalogue without a restart — CLI-only today.
- Look at images
- A vision role exists in the router, but no pathway feeds it images yet.
- Run shell commands
- Anvil's reasoning turns cannot execute shell commands.Why: deliberate. Anvil reads and reasons; the agent driving it — Claude Code and similar — executes. Its only retrieval tools are web-fetch and file-read.
This map is maintained in the code, not in marketing — if a capability moves from Planned to Shipped, anvil capabilities and this section move with it.
How it works
Anvil has three moving parts you interact with, and one that hums along on its own.
The daemon (anvild)
The always-on heart. It owns the memory store, the router, the task board, and every background job. Your CLI and desktop app are thin clients that talk to it over a private local socket — nothing else can reach it.
The desktop app
A visual workshop: a live 3D view of what Anvil is doing, plus panels for memory, tasks, the blueprint, skills, the Crucible, providers, and settings. Everything you can do here is also a command — only the 3D view is view-only.
The CLI (anvil)
Every capability, from the terminal — scriptable, headless-friendly, and the source of the CLI examples throughout these docs. Whatever the app can do, the CLI can too.
The bridge to your coder
A small connector wires Anvil's memory and tools into Claude Code, Claude Desktop, Codex, or Copilot, so your assistant can recall, remember, and reason through Anvil without you leaving your editor.
From zero to grounded in a few minutes
Anvil ships as complete, pre-built binaries. Install them, start the daemon, connect your coder, and you're running.
1 · Install & start the daemon
Once installed, the daemon runs in the background and stays up across restarts. Confirm it's alive:
❯ anvil status anvild: up (~/.anvil/daemon.sock) plan: free
2 · Connect your assistant
The connect step wires Anvil's memory and tools into the coder you use. It writes only that assistant's own config and prints the directives that make Anvil its brain. Preview it first with --dry-run — it changes nothing.
❯ anvil connect --dry-run # see exactly what would change ❯ anvil connect --client code # wire into Claude Code ❯ anvil connect --client chatgpt # or Codex / ChatGPT
Clients: code, desktop, chatgpt, copilot, both, or all. Omit --client to auto-detect your installed assistant.
3 · Give Anvil a way to reason
Anvil reasons through the models you provide. Your coder covers assistant-driven work; for Anvil's own background reasoning (titling memories, distilling sessions), add one free provider key — it never touches your subscription. Keys live encrypted in the vault (see The vault).
4 · Confirm everything's healthy
❯ anvil doctor ✓ daemon responding on the IPC socket ✓ providers ready ✓ vault unlocked ✓ memory healthy ✓ recall alive — recall path healthy · overall: ✓ healthy
anvil import pulls provider keys and role chains across so you don't start from a blank slate.Everything Anvil gives you
Each component below explains what it is, how to use it in the desktop app, and — in the expandable panel — exactly how to do the same thing from the command line, with examples.
The Brain — memory
Anvil's memory is a private, semantic store of everything worth keeping: decisions, corrections, gotchas, facts about your project. You write to it in plain language and search it by meaning, not keywords — ask "how did we handle auth errors?" and the relevant notes surface even if they never used those words.
Most of the time you never touch it directly. As you work, Anvil captures findings, distils them into clean "Category · Name" entries, and — once you approve them — folds the right ones into future sessions automatically. Under the hood it keeps quality high on its own: near-duplicates are merged, facts a newer note has overtaken are quietly superseded, and its own recall quality is continuously measured. (The retrieval machinery that makes this fast and accurate is Anvil's own — you get the results without managing the mechanism.)
Your data is yours at every moment: export the whole corpus to a portable file, back it up on a schedule, and exercise a verifiable right to forget that purges matching rows and proves none remain. The store is encrypted at rest.
Write & recall
Save a note in plain language; search by meaning across the whole corpus.
Stays clean
De-duplication, supersession of stale facts, and self-audited recall quality run in the background.
Yours to move
Export, back up, restore, and verifiably forget — on any backend, any time.
/recall returns the top scored memories for a question, each with its similarity score and provenance. This is the brain grounding an answer.Type what you learned — no schema, no fields. Anvil generates a clean "Category · Name" title for you.
The optional check tells you instantly whether a note is genuinely new, a duplicate, an update, or a contradiction of something you already hold.
See what was just added, and search the whole corpus by meaning. Remove any row with a confirm-and-backup Undo — your data, always in your hands.
- Write a note. In the memory box, type the fact in plain language and press check.
❯ anvil memory write "Auth errors fall through the chain" - Confirm it's new. The check reports new / duplicate / update / contradiction so you never bloat the store or bury a real conflict.
- Recall it later, by meaning. Ask a question in your own words — the note surfaces even if it never used those words.
❯ anvil memory recall "how do we handle auth failures?" - Keep it yours. Back up on a schedule, export any time, and forget with proof.
❯ anvil memory backup # and: export / forget --yes
❯ From the CLI — write, recall, and manage memory›
# Write a note — a title is generated if you omit one ❯ anvil memory write "Auth errors fall through the chain, they never cap a provider" --tag auth # Search by meaning (semantic, not keyword) ❯ anvil memory recall "how do we handle authentication failures?" # See what you just added / check before saving ❯ anvil memory recent --limit 10 ❯ anvil memory classify "We use SQLCipher for the store" # new / duplicate / update / contradiction # Your data — export, back up, forget ❯ anvil memory export --out ~/anvil-memory.jsonl ❯ anvil memory backup # timestamped snapshot, with retention ❯ anvil memory forget --tag auth --yes # verifiable right-to-forget
Also available: count, usage (what's actually being retrieved), consolidate, lint, restore, expire, and per-row TTLs via --ttl.
Providers & routing
A provider is any model Anvil can reason through: your coding assistant, a hosted API, or a model running locally on your own hardware. A role (orchestrator, worker, verifier, vision…) is a job to be done, and each role has an ordered chain of providers to try. If the first is down, rate-limited, or over budget, the router falls through to the next — your work continues instead of failing.
This is what lets Anvil be genuinely model-agnostic. You can lead a role with a premium model and back it with a free one, put a verifier on a different model than the worker for an independent second opinion, or run entirely on local models with no cloud at all. Per-role budgets bound how hard a role may lean on premium providers before it degrades to a free hop. And before anything leaves your machine, the scrubber redacts credential-shaped strings.
Your coding assistant, a hosted API, or a model on your own hardware — Anvil reasons through whatever you give it. No lock-in to one vendor.
Each job (worker, verifier, vision…) leads with one provider and lists backups behind it. Put a verifier on a different model for a genuine second opinion.
If the lead is down, rate-limited, or over its budget, the router falls through to the next hop — your work continues instead of failing. Per-role budgets bound premium spend.
- See the whole picture. One command makes any routing failure legible.
❯ anvil providers list - Add a key (stored in the encrypted vault).
❯ anvil config set-key NVIDIA_NIM_API_KEY "$KEY" - Reorder a chain in
~/.anvil/config.tomlunder[[roles.chain]]— the lead is the first entry, backups follow. - Watch the spend.
❯ anvil budget
❯ From the CLI — inspect providers & reason directly›
# The whole routing picture at a glance ❯ anvil providers list # See per-role budgets and today's premium spend ❯ anvil budget # Ask the router to reason directly (streams tokens) ❯ anvil reason "draft a migration plan for the store schema" # Preview what the scrubber would redact before any send ❯ anvil redact "my key is sk-ant-... and the db is at /srv"
Set a provider key with anvil config set-key (or the vault — see below), and reorder a role's chain in ~/.anvil/config.toml under [[roles.chain]].
The Crucible
Some decisions deserve more than one pass. The Crucible convenes a cast of Embers — directed expert personas such as a Skeptic, a Pragmatist, and a Security Hawk — who open on a question, cross-examine each other's reasoning, and resolve it into a single sharpened answer. You get the disagreement and the synthesis, written so a non-technical reader can follow every step.
You choose the room. Fuse a persona with a skill (skeptic+rust-development) to give it domain teeth, pick how many cross-examination rounds to run, and decide whether the Embers must reach consensus or a neutral chair synthesizes. Save a room you like as a named cast and reuse it. Because a Crucible can spend real tokens, --plan previews the room, the knowledge in play, and a rough cost before you commit — no tokens used.
Directed personas — a Skeptic, a Pragmatist, a Security Hawk, or a room you build — open on the question from genuinely different angles.
Over the rounds you choose, the Embers sharpen or concede each other's points. You watch the reasoning happen, live and legible.
A neutral chair synthesizes the debate (or the room must reach consensus) into a single sharpened answer — which you can promote straight into memory.
- Preview the room first. See who'd convene and roughly what it'll cost — no tokens spent.
❯ anvil crucible "should we adopt an event bus here?" --plan - Run it — fuse a skill for domain teeth.
❯ anvil crucible "review this auth design" --embers skeptic+rust-development,pragmatist,security-hawk --rounds 2 - Keep the answer. Promote the resolution into durable memory, or mine it for reusable lessons.
❯ anvil crucible "…" --promote # or --learn - Save the room. Reuse a cast you like by name.
❯ anvil crucible "…" --save rust-review # then: anvil cast list
❯ From the CLI — run, preview, and save Crucibles›
# Preview the room and rough cost — spends nothing ❯ anvil crucible "should we adopt an event bus here?" --plan # Run it: a security-focused Rust room, 2 rounds, promote the answer ❯ anvil crucible "review this auth design" \ --embers skeptic+rust-development,pragmatist,security-hawk \ --rounds 2 --promote # Save the room for reuse, then run it by name ❯ anvil crucible "…" --save rust-review ❯ anvil cast list
--converge requires consensus; --build assembles the cast interactively; --history browses past debates; --learn extracts lessons into self-learning.
Connect your coder
Anvil is the brain for the assistant you already use. The connector registers Anvil's tools with your coder and hands it the directives that make it recall before answering, remember what it learns, and reach for a Crucible when a decision is hard. You keep using your own tool and your own subscription; Anvil rides alongside.
Sign-in always happens inside your assistant's own app, exactly as its terms require — Anvil never automates your login and never stores your assistant's credentials. Supported clients today are Claude Code, Claude Desktop, ChatGPT (Codex), and GitHub Copilot. After an Anvil update, --refresh re-applies the latest directives to everything already connected.
In the app: the Connect panel detects your installed assistants and wires them with a click, showing exactly what it will write first.
- Preview first — it writes nothing.
❯ anvil connect --dry-run - Wire your coder. Pick
code,desktop,chatgpt,copilot, orall. Omit--clientto auto-detect.❯ anvil connect --client code - Hand it the directives. The connector prints the "make Anvil your brain" rules — paste them into your assistant, or they're wired automatically.
- After an update, refresh. Re-apply the latest directives to everything already connected.
❯ anvil connect --refresh
❯ From the CLI — wire, preview, and refresh›
❯ anvil connect --dry-run # preview — writes nothing ❯ anvil connect --client all # wire every installed assistant ❯ anvil connect --refresh # re-apply directives after an update
Skills
A skill is a distilled, reusable playbook — "how we do X well" — that fires automatically when a session's context calls for it, injecting a short directive rather than a wall of text. Anvil ships a curated set of engineering best-practice skills (safe code changes, git discipline, systematic debugging, security fundamentals, test-driven development, and more) so your assistant follows good habits without being told each time.
You can search the catalogue by name and contents, read any skill, and — on a paid plan — author your own from a simple SKILL.md and attach on-demand sub-files (scripts, references) it can pull in when needed. Dropped-in skills go live immediately, no rebuild. Skills are portable in the open agentskills.io format, so you can export and share them.
In the app: the Skills panel lists the catalogue, shows each skill's body, and (on Pro) lets you create and edit your own.
- Find one. Search by name and contents, with AND/OR/NOT and field filters.
❯ anvil skill search 'name:deploy OR git' - Read it.
❯ anvil skill show systematic-debugging - Author your own (Pro) from a
SKILL.md— it goes live immediately, no rebuild.❯ anvil skill create < my-skill.md - Share it. Export in the portable open format.
❯ anvil skill export git-essentials --out git.md
❯ From the CLI — browse, search, author›
❯ anvil skill list ❯ anvil skill search 'name:deploy OR git' # AND / OR / NOT + field filters ❯ anvil skill show systematic-debugging # Author your own (Pro) — from a file or piped from chat ❯ anvil skill create < my-skill.md ❯ anvil skill export git-essentials --out git.md # portable open format
Tasks & the board
Anvil keeps a real task board — first-class records with priorities, status, projects, and optional automatic completion checks. Tasks aren't just a to-do list: they hang off your project's flow map (the blueprint), so the work you have left is always mapped onto the thing you're building. A task can carry a check — a command or a skill — that, when it passes, flips the task to done automatically.
Every task is a first-class record with a priority, status, and project — sorted so the work that matters sits on top.
Tasks hang off your project's blueprint, so what's left is always tied to the component it advances — never a floating to-do.
Give a task a check — a command or a skill. When it passes, the task flips to done on its own. The Done column stays capped so finished work never drowns the view.
- Add a task with a priority.
❯ anvil task add "Wire the vault into first-run" --priority high --project anvil - See what's active. The board hides parked work by default so you see only what's live.
❯ anvil task list --status open - Let a check close it. Attach a check and run it — a pass flips the task to done automatically.
❯ anvil task check 512 - Park what's not now. Drop a task off the active board without losing it, and bring it back when it's time.
❯ anvil task park 512 # later: anvil task unpark 512
❯ From the CLI — the full board from the terminal›
❯ anvil task add "Wire the vault into first-run" --priority high --project anvil ❯ anvil task list --project anvil --status open ❯ anvil task show 512 # id or unique prefix ❯ anvil task update 512 --status done ❯ anvil task check 512 # run its check; passes → done ❯ anvil task park 512 / unpark 512 # drop off / return to the active board
Export a project's tasks, blueprint, and roadmap together as a portable bundle with anvil export.
Blueprint & roadmap
The blueprint is a project's flow map — the logical order of what your app actually has to do, with each step's tasks hanging off it. It's not a file you maintain by hand: Anvil can compile one from scratch by reading your code tree, memory, and backlog, then keep it current as work lands. The roadmap is a strategic lens on top of it — flow-map nodes grouped into tracks with live task roll-ups, so you can see ship-sequence at a glance.
Each node is a real component of what you're building, in logical order. Anvil compiles the map by reading your code, memory, and backlog — you don't draw it by hand.
Every node shows its live task count, so you can see exactly where the remaining work sits across the whole system.
As work lands, a rebuild keeps the map honest. A large system folds into collapsible modules so it never becomes a hairball.
- Bootstrap a map from your code. Compile reads the tree and generates the full component set (dry-run unless
--apply).❯ anvil blueprint compile --project anvil --apply - Look at it.
❯ anvil blueprint show --project anvil - Keep it current. Rebuild folds new work in; status and prose apply, structural changes stage for approval.
❯ anvil blueprint rebuild --project anvil --apply - See the ship-sequence. The roadmap groups nodes into tracks with live roll-ups.
❯ anvil roadmap show --project anvil
❯ From the CLI — compile, view, and shape the map›
# Bootstrap a map from scratch by reading the code tree (dry-run unless --apply) ❯ anvil blueprint compile --project anvil --apply ❯ anvil blueprint show --project anvil ❯ anvil blueprint rebuild --project anvil --apply # keep an existing map current # The strategic lens ❯ anvil roadmap show --project anvil ❯ anvil roadmap add-track --project anvil --name "Ship prep"
The vault
Provider API keys are secrets, and Anvil treats them like it. The vault is an encrypted store, unlocked by a passphrase (and optionally your device biometrics), that holds your keys at rest so they never sit in plaintext config. On first init it prints a one-time recovery PDF — the only way back in if you forget the passphrase — which you print and store offline.
The vault has a full terminal path for headless machines (servers, CI, self-hosted) where there's no desktop to click. Lock it to drop keys from memory; unlock it to make them usable again. If you have keys in legacy plaintext config, import migrates them into the encrypted vault and securely wipes the plaintext.
Unlock to make your keys usable; lock to drop them from memory. A passphrase (and optionally your device biometrics) is the gate.
Provider API keys live inside the vault, encrypted on disk — never in plaintext config. Legacy plaintext keys can be migrated in and wiped.
On first init Anvil prints a one-time recovery page — the only way back if you forget the passphrase. Print it, store it offline, never cloud-sync it.
- Initialise it (headless-friendly — reads the passphrase from stdin). Save the recovery PDF it prints.
❯ printf '%s' "$PASSPHRASE" | anvil vault init --passphrase-stdin - Store your keys. Any key you set now lands encrypted inside it.
❯ anvil config set-key NVIDIA_NIM_API_KEY "$KEY" - Unlock / lock as needed.
❯ anvil vault unlock # and: anvil vault lock - Check the state any time.
❯ anvil vault status
❯ From the CLI — headless-friendly vault control›
# First run — set the passphrase (headless: read it from stdin) ❯ printf '%s' "$PASSPHRASE" | anvil vault init --passphrase-stdin ❯ anvil vault status # present / unlocked, key count, fingerprint ❯ anvil vault unlock # make keys usable for the daemon ❯ anvil vault lock # drop keys from memory ❯ anvil vault import # migrate legacy plaintext keys, then wipe them
Directives & base
Two mechanisms keep every session grounded before it even starts. Directives are standing operating rules that apply in every project — the cross-project constitution, injected on the first prompt of each session no matter where you're working. The base digest is the opposite lens: a compact, per-project brief compiled from that project's highest-signal memories, the one small doc a session should read before recalling anything else. Keep the directive set small — every session pays for it.
❯ From the CLI — set the standing rules›
❯ anvil directives # the global operating rules ❯ anvil memory write "Always back up before a destructive migration" --global ❯ anvil base --project anvil # the compiled per-project brief
Review & staging — the learning loop
This is the safety valve behind "Anvil learns as you work." Nothing it discovers is trusted automatically. While a session runs, findings land in a per-session staging table — a holding area that can never influence a live session. When the session closes, they're distilled into candidate memories and placed in the review inbox. Only after you approve an item can it ground a future turn.
Routine, low-stakes items can be auto-approved by a housekeeping pass; anything that changes a rule or installs a skill is always held for you. Every decision is logged, so a bad one can be traced to the exact moment it entered.
In the app: the review inbox shows each staged item with a plain-language recommended action — clearing it is one read and one keystroke.
❯ From the CLI — approve, deny, inspect›
❯ anvil review list ❯ anvil review triage # plain-language recommended action per item ❯ anvil review show a1b2 # full content before deciding ❯ anvil review approve a1b2 # or: anvil review deny a1b2 ❯ anvil staging list # what each live session has learned so far
Schedules
Anvil runs its own scheduler — no OS cron needed. Register a recurring reasoning turn with a standard five-field cron expression and a role, and Anvil fires it locally on cadence: a morning summary of today's tasks, a weekly review, a nightly digest. Enable, disable, or fire one on demand.
❯ From the CLI — recurring local reasoning›
❯ anvil schedule add --name morning --cron "0 8 * * 1-5" \ --role orchestrator --prompt "Summarise today's tasks" ❯ anvil schedule list ❯ anvil schedule run morning # fire now, ignore the cron
Reading list
A quick-capture list for URLs you want to research later, without breaking flow. Drop a link now, come back to it, mark it done with an outcome. Small, but it keeps research threads from getting lost.
❯ From the CLI — capture & track›
❯ anvil read add https://example.com/paper --note "retrieval eval method" ❯ anvil read list ❯ anvil read done 3 --outcome "adopted the bounded-window idea"
Image generation
Anvil can generate images through the same provider seam, local-first. The default backend runs on-device — your prompt never leaves the machine. A keyed cloud tier is available as an explicit, opt-in fallback (its key lives in the vault), and a non-private browser tier is deliberately refused.
❯ From the CLI — generate locally or via a keyed tier›
❯ anvil image generate "a forge glowing in a dark workshop" # on-device by default ❯ anvil image generate "…" --backend cloud # opt-in keyed tier (vault key)
Shell
Sometimes Anvil (or you) needs to run a real command — a build, a test, a check. The shell surface runs one allow-listed command through the daemon and returns its output, token-compacted. No pipes, no redirects, no shell hop: a single command whose name you've explicitly added to your allow-list. It's a deliberate, consented capability, not an open terminal.
In the app: the Shell panel runs an allow-listed command and renders the result inline as inert, untrusted text, and lets you edit the allow-list.
❯ From the CLI — one consented command›
# The command name must be listed in ~/.anvil/shell-allow.txt ❯ anvil shell "cargo test --workspace"
Self-improvement, under governance
Anvil watches its own performance and proposes ways to get better — but never changes itself behind your back. When a turn goes wrong, it can attribute the failure to a named cause, draft a self-RFC (an improvement proposal), and measure whether a change would actually help. Everything is propose-only: a human reads the proposal and decides whether it becomes a task. Every autonomous change the system does make to itself is written to a content-free, auditable, reversible change ledger, with rate-caps so it can never run away.
You never need to touch this to use Anvil — it's the machinery that keeps quality trending up. But it's fully inspectable when you want to look.
RFCs
Improvement proposals drafted from real, attributed failures. You decide what ships.
Change ledger
Every self-change recorded with its guard, revert handle, and before/after eval.
One health view
Correctness, recall quality, failure causes, and loop health in a single content-free snapshot.
❯ From the CLI — inspect the self-improvement loop›
❯ anvil substrate # one health view across the whole loop ❯ anvil rfc # proposals awaiting your call ❯ anvil change # the reversible self-change ledger ❯ anvil diagnosis # confirm the cause of a novel failure
Health & logs
Anvil is legible when something goes wrong. doctor gives one aggregate health report across the daemon, providers, vault, memory, and recall — and can write a shareable, issue-ready failure report (it never files the issue for you). status is a quick liveness ping. logs reads Anvil's own daily log files directly, so it answers "what went wrong and when" even while the daemon is down — which is exactly when you ask. activity replays a content-free trail of what each action did, so a session can be reconstructed from references without ever exposing your content.
❯ From the CLI — when you need to look under the hood›
❯ anvil doctor # one health report ❯ anvil doctor --report # write a shareable failure report ❯ anvil logs # reads the daily files directly — works when the daemon is down ❯ anvil activity # content-free trail of what each action did ❯ anvil snapshot # honest, token-budgeted workspace snapshot
Configuration — where to set what
Anvil keeps everything under one home directory. Two files carry your configuration; secrets live encrypted in the vault.
ANVIL_HOME environment variable to run isolated instances side by side.anvil config show prints it; anvil config sync merges in newly-shipped defaults after an upgrade without touching your values.anvil vault or Settings. Legacy plaintext keys can be migrated in and wiped.The config sections
Inside config.toml, each block tunes one part of the system. You rarely need most of them — defaults are sensible — but everything is adjustable:
| Section | Controls |
|---|---|
[[providers]] | Each model Anvil can reason through — its transport, endpoint, model, token ceiling, and sampling params. |
[[roles]] · [[roles.chain]] | The jobs (orchestrator, worker, verifier…) and the ordered provider chain each one tries, plus a per-role [roles.budget]. |
[memory] | The memory substrate: backend selection and recall behaviour. |
[reason] | Reasoning-turn policy, including the tool loop. |
[scrub] | The redaction policy applied before any non-local send. |
[vault] | Idle auto-lock policy for the secrets vault. |
[local_model] | Supervision for on-device models — the offline tier. |
[image] | The image-generation seam: default backend and cloud opt-in. |
[backup] · [tiering] | Automatic memory backups and hot/cold storage compaction. |
[base] · [identity] · [character] | The compiled base-digest caps, who work is attributed to, and the shipped-voice layer. |
[learning] · [substrate] | The self-refining loops and the self-improving substrate's budgets and cadence (conservative by default). |
anvil config sync — it adds any newly-shipped providers or roles you're missing while keeping every value you set.Plans & tiers
Anvil comes in three tiers. Memory, your data, and the local-first guarantees are never gated — the paid tiers add reasoning depth and, for teams, a shared substrate. Dropping to a lower tier degrades gracefully; it never deletes your knowledge or locks you out.
| Capability | Free | Pro | Enterprise |
|---|---|---|---|
| Private memory & recall (uncapped) | ✓ | ✓ | ✓ |
| Tasks, board & project scopes | ✓ | ✓ | ✓ |
| Connect your coder | ✓ | ✓ | ✓ |
| Encrypted vault | ✓ | ✓ | ✓ |
| Built-in best-practice skills | ✓ | ✓ | ✓ |
| The Crucible | — | ✓ | ✓ |
| Multi-provider routing & failover | — | ✓ | ✓ |
| Custom & full skill set | — | ✓ | ✓ |
| Blueprint, roadmap & project planning | — | ✓ | ✓ |
| Image generation | — | ✓ | ✓ |
| Shared central brain & team board | — | — | ✓ |
| Roles, access control & forensic audit | — | — | ✓ |
Activate a paid plan with a signed, offline license token — anvil license activate <token> — stored sealed and encrypted at rest. No plan phones home to decide what you can do.
Privacy & security
Local-first isn't a slogan here — it's the architecture. A few guarantees worth stating plainly.
Encrypted at rest
The memory store and the secrets vault are encrypted on disk. Nothing sensitive is stored in the clear.
Scrubbed before send
Credential-shaped strings are redacted before anything is sent to a non-local provider. Preview it with anvil redact.
No credential custody
Anvil never stores your assistant's login. Sign-in happens only inside your assistant's own app, as its terms require.
Yours to take or erase
Export everything at will; a verifiable right-to-forget purges matching rows and proves none remain.
Want the ground truth for what Anvil can do, what's planned, and what's deliberately absent? Run anvil capabilities — the maintained answer, so nobody has to infer it.
CLI reference
Everything in the app is a command. These are the top-level commands; each has --help with its full options. This is the complete surface — nothing in the product is app-only.
| Command | What it does |
|---|---|
status · stop | Ping the daemon; stop it gracefully. |
doctor · logs · activity · snapshot | Health report, direct log read, content-free action trail, honest workspace snapshot. |
memory | Write, recall, classify, back up, export, restore, forget, consolidate, audit — the whole brain. |
reason · redact | Ask the router to reason; preview what the scrubber would redact. |
crucible · cast | Run adversarial multi-agent reasoning; manage saved casts. |
connect | Wire Anvil into Claude Code / Desktop / Codex / Copilot. |
skill · persona | Browse, search, and author skills; manage per-role personas. |
task | The task board — add, list, update, check, park. |
blueprint · roadmap | Compile and view the project flow map and its strategic tracks. |
vault · license · auth | Encrypted secrets; plan tokens; provider authentication. |
providers · budget · config | The routing inventory, spend, and router config. |
directives · base | Global standing rules; the compiled per-project brief. |
review · staging | Approve or deny staged learnings; inspect what a session has learned. |
schedule · jobs | Recurring reason turns; Anvil's internal housekeeping jobs. |
image · read · shell | Local-first image gen; reading list; one allow-listed command. |
substrate · rfc · change · diagnosis · audit | The self-improving loop — inspect, review, and govern it. |
project · export · import | Project scopes; portable data bundles in and out. |
capabilities · uninstall | The maintained "what can it do"; remove everything Anvil registered. |
anvil <command> --help prints its full options and examples. Start with anvil --help.