Anvil — a local TUI for any coding agent (Claude Code, Codex, …) with projects, conversations, and cross-conversation memory.
Project description
Anvil
A local TUI for any coding agent — Claude Code, OpenAI Codex, and whatever comes next. Anvil gives you projects, persistent conversations, file editing, and cross-conversation memory in one keyboard-driven terminal app.
┌──────────────────────┬──────────────────────────────────┐
│ PROJECTS │ [chat 1][chat 2][+] (tabs) │
│ • my-website ├──────────────────────────────────┤
│ • side-project │ user: ... │
│ │ assistant: ... │
│ FILES │ 🔧 Read foo.py │
│ └ src/ │ │
│ │ │
│ CONVERSATIONS │ │
│ ● first pass ├──────────────────────────────────┤
│ bug fix │ > type message… 📎 Paste │
└──────────────────────┴──────────────────────────────────┘
Why Anvil?
If you use Claude Code or Codex from the CLI, you already know the pain: each conversation lives in its own terminal window, scrollback is fragile, attaching images is awkward, and switching between projects means a tangle of tabs. Anvil keeps the same agents — same auth, same models — but adds the things a full app gives you:
- Multiple projects with their own conversation history and memory.
- Tabs for parallel conversations in the same project.
- A file tree + in-app editor for small reads/edits without leaving the app.
- Mac-native shortcuts (Cmd+C, Cmd+W, Cmd+,) via a custom Terminal profile.
- Agent-agnostic engine layer — point a project at Claude Code today, Codex tomorrow, or both side-by-side.
Anvil is a wrapper, not a replacement. It uses your existing Claude Code OAuth or Codex API key — Anvil never sees your tokens.
Install
Homebrew (recommended for Mac):
brew tap sagar-1199/anvil
brew install --cask anvil
This installs the anvil CLI and copies Anvil.app to /Applications.
Launch from Spotlight or the Applications folder.
Pipx (Mac + Linux):
pipx install anvil-harness
anvil
You'll also need at least one agent CLI installed (see below).
Agent setup
Anvil shows a one-time setup wizard on first launch that walks you through this, but for reference:
| Agent | Install | Auth |
|---|---|---|
| Claude Code | npm install -g @anthropic-ai/claude-code |
claude (OAuth flow) |
| Codex CLI | npm install -g @openai/codex |
codex login or set OPENAI_API_KEY |
| Mock | (built in) | none — offline echo |
Anvil never sends your credentials anywhere. It calls your local agent CLI
directly; auth lives wherever those CLIs put it (~/.claude/, ~/.codex/).
Configuration
Two layers, both edited from the in-app Settings screen (Ctrl+, or Cmd+,):
~/.anvil/config.toml— global defaults (agent, model, telemetry opt-in).<project>/.harness/config.toml— per-project overrides (only fields that differ from global).
You should never need to hand-edit these. The Settings screen is the canonical UI; the files exist so power users can sync them via dotfiles.
Keyboard
| Shortcut | Action |
|---|---|
| Ctrl+N | New chat |
| Ctrl+O | Open project |
| Ctrl+, | Settings |
| Ctrl+Shift+M | Switch agent for current chat |
| Ctrl+Shift+I | Attach image |
| Ctrl+Shift+V | Smart paste (text or image) |
| Ctrl+Shift+W | Close tab |
| Ctrl+S | Save file (in editor tab) |
Mac users with the bundled Terminal profile installed get the Cmd+ versions of these as well (Cmd+W, Cmd+C, Cmd+,).
Contributing
Want to add support for a new agent (Gemini, Cursor Agent, aider, …)? See CONTRIBUTING.md. The agent interface is three methods and one registration line.
Development
git clone https://github.com/sagar-1199/anvil-harness
cd anvil-harness
uv sync
uv run anvil
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file anvil_harness-0.1.1.tar.gz.
File metadata
- Download URL: anvil_harness-0.1.1.tar.gz
- Upload date:
- Size: 37.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b47ea8c9f6e1df93485e40cb0438482dc17800d40a8a4193003efbc59bb2304a
|
|
| MD5 |
8e5a3cd21466dc5cec15f97906ac425a
|
|
| BLAKE2b-256 |
862cfd4b4db7e55e014bb375ae78ea4dc2a40ff2192780b915e682df6effe7f9
|
File details
Details for the file anvil_harness-0.1.1-py3-none-any.whl.
File metadata
- Download URL: anvil_harness-0.1.1-py3-none-any.whl
- Upload date:
- Size: 41.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
45a747f21486c6fe9dfad19d68a631165eb1272f97e93fb96ad12c0de9204e19
|
|
| MD5 |
ba59effd0792086de8a0fdb371eca740
|
|
| BLAKE2b-256 |
06e8c236ddb597ad3d94880fb083e56fbb5011f86b2532805828071c2e99ce67
|