AAnvilv0.0.1
Local-first · your models · your machine

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.

One always-on daemon Encrypted at rest Full CLI parity Bring your own tools
A guided walk

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.)

The workshop floor — the flow graph wires the five roles (orchestrator, worker, verifier, vision, offline) to every configured provider, with the live activity stream on the left and memory anchored at the far right of the graph. Toggle 2D / 3D at the top.
1The panel switcher

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.

2What Anvil is doing

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.

3Your memory, as a living graph

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.

4The event stream

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.

5Reason with any model

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.

The same substrate as a 3D galaxy — the Anvil core at the centre, everything clustered by kind — tools, curated notes, projects, skills, roles and providers.

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.

Introduction

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.

Principles

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

Local-first
Your data lives on your disk. Anvil reasons through your models. There is no central server your knowledge passes through to work.
Degrade, never brick
Lose a network, a key, or a plan and Anvil keeps working with less — it never deletes your memory or locks you out.
Encrypted at rest
Nothing is stored in the clear except derived, non-sensitive artifacts. The memory store and the secrets vault are encrypted.
Nothing grounds unreviewed
What Anvil learns is staged. A candidate memory can never influence a session until it has been approved.
Bring your own everything
Your coder, your models, your keys. Anvil runs a full workload with or without any particular vendor.
Honest scope

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.

Shippedworking today
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, /task in the viewer, or anvil 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.
Partialbounded on purpose
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.
Plannedon the roadmap
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.
Absentdeliberately not here
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.

Architecture

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.

Local by constructionThe daemon binds a private, per-instance channel on your machine. Clients on the same machine connect to it; nothing off-machine can. When Anvil calls a model, that call goes to whichever provider you configured — and sensitive strings are scrubbed before any non-local send.
Getting started

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:

terminal
 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.

terminal
 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

terminal
 anvil doctor
✓ daemon      responding on the IPC socket
✓ providers   ready
✓ vault       unlocked
✓ memory      healthy
✓ recall      alive — recall path healthy
· overall: ✓ healthy
OptionalComing from another agent framework? anvil import pulls provider keys and role chains across so you don't start from a blank slate.
The components

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.

PrivateMemory is never gated behind a plan and never capped. Your brain is yours regardless of tier.

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 in action — /recall returns the top scored memories for a question, each with its similarity score and provenance. This is the brain grounding an answer.
1Write in plain language

Type what you learned — no schema, no fields. Anvil generates a clean "Category · Name" title for you.

2Check before you save

The optional check tells you instantly whether a note is genuinely new, a duplicate, an update, or a contradiction of something you already hold.

3Browse & recall

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.

How to · capture and find knowledge
  1. 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"
  2. Confirm it's new. The check reports new / duplicate / update / contradiction so you never bloat the store or bury a real conflict.
  3. 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?"
  4. 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
anvil 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.

Per-role provider chains — each role leads with your preferred model and falls through to the next on failure; a missing key is flagged inline. (A key-less demo instance, so some chains show KEY MISSING.)
1Any model is a provider

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.

2Roles lead with a chain

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.

3Graceful failover

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.

How to · manage routing
  1. See the whole picture. One command makes any routing failure legible.
    anvil providers list
  2. Add a key (stored in the encrypted vault).
    anvil config set-key NVIDIA_NIM_API_KEY "$KEY"
  3. Reorder a chain in ~/.anvil/config.toml under [[roles.chain]] — the lead is the first entry, backups follow.
  4. Watch the spend.
    anvil budget
From the CLI — inspect providers & reason directly
anvil providers / reason
# 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.

Where it runsThe Crucible reasons through your model — it is work you request, run on the provider you already use. Its result can optionally be promoted into durable memory or mined for transferable lessons.
A resolved Crucible — a cast of directed personas argued the decision over four rounds and reconciled it. The opening statements cite the project’s own board tickets by number.
1A cast of expert critics

Directed personas — a Skeptic, a Pragmatist, a Security Hawk, or a room you build — open on the question from genuinely different angles.

2They cross-examine each other

Over the rounds you choose, the Embers sharpen or concede each other's points. You watch the reasoning happen, live and legible.

3Resolved into one answer

A neutral chair synthesizes the debate (or the room must reach consensus) into a single sharpened answer — which you can promote straight into memory.

A Crucible caught mid-argument — the live debate streams into the activity pane as each persona weighs in, round by round, with the active reasoning path lit in the graph. This is Anvil reasoning in real time, not a canned replay.
How to · pressure-test a hard decision
  1. 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
  2. Run it — fuse a skill for domain teeth.
    anvil crucible "review this auth design" --embers skeptic+rust-development,pragmatist,security-hawk --rounds 2
  3. Keep the answer. Promote the resolution into durable memory, or mine it for reusable lessons.
    anvil crucible "…" --promote # or --learn
  4. 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
anvil crucible
# 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.

How to · make Anvil your assistant's brain
  1. Preview first — it writes nothing.
    anvil connect --dry-run
  2. Wire your coder. Pick code, desktop, chatgpt, copilot, or all. Omit --client to auto-detect.
    anvil connect --client code
  3. Hand it the directives. The connector prints the "make Anvil your brain" rules — paste them into your assistant, or they're wired automatically.
  4. 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
 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.

The skills catalogue — Anvil’s curated engineering best-practice skills, each with its tags and a one-line description, searchable and inspectable.
How to · use and author skills
  1. Find one. Search by name and contents, with AND/OR/NOT and field filters.
    anvil skill search 'name:deploy OR git'
  2. Read it.
    anvil skill show systematic-debugging
  3. Author your own (Pro) from a SKILL.md — it goes live immediately, no rebuild.
    anvil skill create < my-skill.md
  4. Share it. Export in the portable open format.
    anvil skill export git-essentials --out git.md
From the CLI — browse, search, author
anvil skill
 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.

The project board — tasks by state (open / in progress / done) and priority, here for a demo “Harbor” service.
1Real tasks, real priorities

Every task is a first-class record with a priority, status, and project — sorted so the work that matters sits on top.

2Mapped to what you're building

Tasks hang off your project's blueprint, so what's left is always tied to the component it advances — never a floating to-do.

3Auto-completing checks

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.

How to · run your work on the board
  1. Add a task with a priority.
    anvil task add "Wire the vault into first-run" --priority high --project anvil
  2. See what's active. The board hides parked work by default so you see only what's live.
    anvil task list --status open
  3. Let a check close it. Attach a check and run it — a pass flips the task to done automatically.
    anvil task check 512
  4. 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
 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.

The Blueprint flow map — a project’s components across ingress, core, data and ops, each tagged Built / Partial / Gap with its open-task count.
1Your system, as a map

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.

2Tasks hang off the map

Every node shows its live task count, so you can see exactly where the remaining work sits across the whole system.

3Stays current on its own

As work lands, a rebuild keeps the map honest. A large system folds into collapsible modules so it never becomes a hairball.

The Roadmap over the same blueprint — the work grouped into tracks with live progress roll-ups.
How to · map a project
  1. 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
  2. Look at it.
    anvil blueprint show --project anvil
  3. Keep it current. Rebuild folds new work in; status and prose apply, structural changes stage for approval.
    anvil blueprint rebuild --project anvil --apply
  4. 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
anvil blueprint / roadmap
# 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.

Keep it safeThe recovery PDF unlocks the vault. Anyone who has it can too — print it, store it somewhere physical, and never cloud-sync it. If you lose both your passphrase and the page, the vault is gone by design; Anvil holds no backup.
The encrypted secrets vault — unlocked here, showing the stored secret names and their set status. Values never appear and never leave the vault. (A demo vault, not real keys.)
1Locked or unlocked

Unlock to make your keys usable; lock to drop them from memory. A passphrase (and optionally your device biometrics) is the gate.

2Keys, encrypted at rest

Provider API keys live inside the vault, encrypted on disk — never in plaintext config. Legacy plaintext keys can be migrated in and wiped.

3Your recovery PDF

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.

How to · set up and use the vault
  1. Initialise it (headless-friendly — reads the passphrase from stdin). Save the recovery PDF it prints.
    printf '%s' "$PASSPHRASE" | anvil vault init --passphrase-stdin
  2. Store your keys. Any key you set now lands encrypted inside it.
    anvil config set-key NVIDIA_NIM_API_KEY "$KEY"
  3. Unlock / lock as needed.
    anvil vault unlock # and: anvil vault lock
  4. Check the state any time.
    anvil vault status
From the CLI — headless-friendly vault control
anvil vault
# 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 / base
 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 / staging
 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
 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.

The reading list — captured URLs with the research intent behind each, so a thread you meant to follow up never gets lost.
From the CLI — capture & track
anvil read
 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
 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.

The shell surface — one allow-listed command runs through the daemon; anything not on the allow-list is staged for review, never run silently.
From the CLI — one consented command
anvil shell
# 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 / rfc / change
 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 / logs / activity
 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
Reference

Configuration — where to set what

Anvil keeps everything under one home directory. Two files carry your configuration; secrets live encrypted in the vault.

~/.anvil/
Your Anvil home — the store, config, logs, backups, and the daemon socket all live here. Relocate the whole instance with the ANVIL_HOME environment variable to run isolated instances side by side.
config.toml
Router config: providers, roles and their chains, budgets, and every subsystem's tunables. Edit it directly or through Settings. anvil config show prints it; anvil config sync merges in newly-shipped defaults after an upgrade without touching your values.
the vault
Provider API keys, encrypted at rest under your passphrase. Managed with 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:

SectionControls
[[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).
TipAfter a binary upgrade, run anvil config sync — it adds any newly-shipped providers or roles you're missing while keeping every value you set.
Reference

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.

CapabilityFreeProEnterprise
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.

Reference

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.

Telemetry stanceAnvil's health, logs, and alarms carry counts, rates, and cause-codes only — never the content of a memory. What you learn stays on your machine.

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.

Reference

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.

CommandWhat it does
status · stopPing the daemon; stop it gracefully.
doctor · logs · activity · snapshotHealth report, direct log read, content-free action trail, honest workspace snapshot.
memoryWrite, recall, classify, back up, export, restore, forget, consolidate, audit — the whole brain.
reason · redactAsk the router to reason; preview what the scrubber would redact.
crucible · castRun adversarial multi-agent reasoning; manage saved casts.
connectWire Anvil into Claude Code / Desktop / Codex / Copilot.
skill · personaBrowse, search, and author skills; manage per-role personas.
taskThe task board — add, list, update, check, park.
blueprint · roadmapCompile and view the project flow map and its strategic tracks.
vault · license · authEncrypted secrets; plan tokens; provider authentication.
providers · budget · configThe routing inventory, spend, and router config.
directives · baseGlobal standing rules; the compiled per-project brief.
review · stagingApprove or deny staged learnings; inspect what a session has learned.
schedule · jobsRecurring reason turns; Anvil's internal housekeeping jobs.
image · read · shellLocal-first image gen; reading list; one allow-listed command.
substrate · rfc · change · diagnosis · auditThe self-improving loop — inspect, review, and govern it.
project · export · importProject scopes; portable data bundles in and out.
capabilities · uninstallThe maintained "what can it do"; remove everything Anvil registered.
Discover anythingEvery command self-documents: anvil <command> --help prints its full options and examples. Start with anvil --help.