About Anvil

Anvil is the AI coding assistant built for developers who demand control. Multi-provider, full-screen TUI, 1M token context, and intelligent context management β€” all in a 15MB binary.

What is Anvil?

Anvil is a terminal-native AI coding assistant that runs entirely in your terminal. Unlike web-based tools, Anvil lives where you work β€” in your shell, with direct access to your filesystem, build tools, and development environment.

Built by Culpur Defense and distributed as a single binary, Anvil connects to multiple AI providers and intelligently routes your requests. When Claude hits a rate limit, Anvil can automatically fall back to OpenAI or a local Ollama model without interrupting your flow.

The QMD (Query-Memory-Dispatch) system gives Anvil persistent memory across sessions. Your codebase knowledge, conversation history, and pinned context are always available, even when the context window fills up.

Features

🌍

18 Languages

Anvil ships in 18 locales β€” Tier-1 (en/es/zh-CN/fr/pt-BR/ru/ja/de) and Tier-2 (ko/it/tr/vi/pl/id/nl/sv/nb/uk). First-run wizard opens with a language picker, OS locale is auto-detected, and a soft drift gate keeps every translation in lockstep with the English seed.

🧠

Memory Cohesion Complete

All seven memory layers are GREEN end-to-end: Working / Episodic / Semantic / Procedural / Reflective / Long-term / Cache. /memory promote actually writes to disk, /memory prune episodic gets TTL retention with a trash-bin safety net, and the file-cache path-discovery bug is fixed.

πŸ—οΈ

Web MCP Builder

The /mcp builder TUI wizard now has a web counterpart on AnvilHub. The new /build page drives a three-step Prompt β†’ Spec β†’ Generate flow against anvil-mcp-builder, with vault-loaded operator OAuth tokens and publisher-gated sandbox detonation.

βœ…

15 CC Parity Fixes

A complete CC parity sweep against v2.1.144–v2.1.146 lands as 15 concrete fixes β€” 3 P0 (MCP pagination, spinner/elapsed-time freeze on refocus, MCP permissions.allow honored at dispatch), 4 P1, and 7 P2 β€” each with regression tests.

βš™οΈ

anvild Process

The OAuth-refresh + routines daemon now runs as a separate process named anvild across all 7 platforms (macOS LaunchAgent, Linux user-systemd, FreeBSD/NetBSD rc.d, Windows Task Scheduler). ps -ef no longer masquerades the daemon as the foreground TUI binary.

πŸ›‘οΈ

Release Pipeline Step-Gates

scripts/release.sh wraps every phase in START / OK / FAIL markers backed by JSON status persistence and an EXIT-trap silent-exit detector. Closes the v2.2.18 Phase 6 silent-exit class of bugs; scripts/test-release-gates.sh is the regression harness.

🌐

Live Remote Control

Type /remote-control and hand your session to any browser. A live, bidirectional terminal-to-browser bridge with real-time streaming, 98 commands, secure pairing, and full feature parity.

⚑

Multi-Provider Failover

Switch between Claude, OpenAI, Ollama, xAI, and Gemini instantly. Smart failover keeps you coding when rate limits hit β€” Anvil switches providers automatically without dropping context.

πŸ”

Encrypted Credential Vault

AES-256-GCM encrypted vault with Argon2id key derivation. Auto-detects API keys, SSH keys, and TLS certs. Credentials never touch disk unencrypted.

πŸ–₯

Full-Screen TUI

Live streaming responses, tabs, tool call visualization, focus view (Ctrl+O), thinking mode, and context-low warnings. Vim mode, mouse support, and customizable keybindings.

πŸ”§

90+ Commands & 45 Tools

Bash execution, file operations, web search, MCP protocol, LSP integration, image generation, conversation branching, and more. Everything you need without configuration.

πŸ›’

AnvilHub Marketplace

Install community-built skills, plugins, agents, and themes with a single command. Publish your own and extend Anvil for your workflow.

How It Works

1

Install

Run the installer or download the binary. Anvil is a single 15MB binary β€” no runtime dependencies.

2

Login

Run `anvil login` to authenticate with your AI provider. Supports OAuth for Anthropic and API keys for all providers.

3

Code

Run `anvil` in any project directory. Anvil reads your codebase context and you're ready to go.

4

Extend

Browse AnvilHub for skills and plugins that match your workflow. Install with `anvil install <package-name>`.

Built by Culpur Defense

Anvil is developed and maintained by Culpur Defense Inc. β€” a cybersecurity and defense technology company building tools for professionals who operate in high-stakes environments.

culpur.net β†’

Changelog

v2.2.19LatestMay 22, 2026
  • βœ“chore: regenerate Cargo.lock + man/anvil.1 for v2.2.19
  • βœ“release: v2.2.19 β€” bump version + finalize release notes
  • βœ“feat(wizard): #768 move anvild install prompt into wizard alt-screen
  • βœ“feat(wizard): #767b Ctrl+B Back keybind on Choice + Confirm modals
  • βœ“fix(tui/vs): #769 add βŒ₯/Alt+drag selection hint to vertical-split rail
  • βœ“fix(modal): #767a ConfirmModal adaptive height β€” long body no longer hides buttons
  • βœ“fix(daemon): #766 follow-up β€” spawn_detached execs anvild not anvil
  • βœ“feat(daemon): #766 anvild as separate process name across 7 platforms
  • βœ“feat(install): #751 locale-aware installers (sh + ps1)
  • βœ“task #764 (v2.2.20): extend OAuth keepalive to Gemini (refresh) + Copilot (monitor+alert)
  • βœ“feat(daemon): #763 OAuth keepalive observability + Heartbeat events
  • βœ“fix(tui): #757 wrap-aware scroll prevents text from disappearing under input
  • βœ“feat(daemon): #761 anvild as single source-of-truth for OAuth refresh
  • βœ“fix(startup): #762 share startup hooks across --resume, --continue, run_repl
  • βœ“fix(health): #745 self-heal false-positives on OAuth + completions
  • βœ“fix(resume): #760 enter REPL after --resume instead of exiting to shell
  • βœ“fix(session): #758 use $ANVIL_CONFIG_HOME/sessions/ instead of CWD-relative
  • βœ“v2.2.19 #750: detect system locale at startup
  • βœ“man(anvil.1): regenerate from clap_mangen + tail on every release (task #752)
  • βœ“i18n: wire 42 new locales into SUPPORTED_LANGUAGES
  • βœ“i18n: add 42 new locales (EU official + non-EU European + major world)
  • βœ“i18n(v2.2.19): wire top-10 slash command output through t!() (task #754)
  • βœ“refactor(tui/clipboard): factor osc52_encode out of write_clipboard (#748)
  • βœ“feat(tui/clipboard): copy/paste/select always work alongside mouse capture (#748)
  • βœ“i18n: translate 12 fallback locales for v2.2.19 TUI chrome (ru/ko/id/it/nb/nl/pl/pt-BR/sv/tr/uk/vi)
  • βœ“i18n: add TUI layout keys to 12 remaining locale YAMLs (English fallback)
  • βœ“i18n: wire TUI layouts (classic, vertical_split, three_pane, journal) through t!()
  • βœ“feat(memory/L6): /reflect emits pattern recap + appends to daily summary (#735 RED)
  • βœ“fix(runtime/routines): switch proposal tests to tempfile to kill flake (#741)
  • βœ“feat(release): wire step-gates into release.sh + Phase 6 SSH hardening (#730)
  • βœ“feat(memory/L4): /memory show procedural consolidates goals + skills + cron (#734)
  • βœ“docs(anvilhub): Apache flushpackets=on spec for SSE token stream (#740)
  • βœ“docs(anvilhub): publisher-standing pre-check + ANVILHUB_BACKEND_URL (#738)
  • βœ“fix(memory/L3): /memory promote gains --target + nominated_at/source provenance (#733)
  • βœ“test(memory/L2): regression tests for /memory prune episodic trash-bin (#732)
  • βœ“fix(memory/L2): wire /memory prune episodic dispatch arm (#732 follow-up)
  • βœ“fix(memory/L7): drop stray #732 episodic match arm referencing missing fn (#736 follow-up)
  • βœ“fix(memory/L7): file-cache path discovery + /memory show cache + dry-run prune (#736)
  • βœ“i18n(v2.2.19): wire Tier-2 NATIVE_NAMES rows in wizard + Configure picker (#710)
  • βœ“feat(memory/L1): /memory layer 1 renders live working snapshot (#731)
  • βœ“feat(prompt-section): iter_by_kind() extension method (#731 prep)
  • βœ“i18n(v2.2.19): Tier-2 finisher β€” nl/sv/nb/uk + SUPPORTED extend (#710)
  • βœ“docs(v2.2.19): AnvilHub /build page spec + BuildClient component (#674 #675)
  • βœ“docs(parity): file-path corrections appendix from implementing agents (#713)
  • βœ“docs(memory): I.1 audit β€” 7-layer architecture status (#712)
  • βœ“i18n(v2.2.19): Tier-2 part 2 β€” id + pl + vi locales (#710)
  • βœ“fix(worktree): preserve original-CWD MCP config across EnterWorktree (#728)
  • βœ“i18n(v2.2.19): Tier-2 partial β€” it + ko + tr locales (#710 partial)
  • βœ“fix(branch): preserve session origin across EnterWorktree boundary (#724)
  • βœ“feat(worktree): capture original_dir + original_sessions_dir at EnterWorktree (#728 prep)
  • βœ“fix(plugins/watcher): skip non-.md changes + exclude build dirs to prevent FD exhaustion (#726)
  • βœ“test(security/mcp): regression tests for permissions.allow gate (#717 part 4)
  • βœ“fix(mcp): disk-bind unsupported image MIME types instead of aborting (#725)
  • βœ“fix(security/mcp): consult permissions.allow before prompter (#717 part 3)
  • βœ“fix(theme): don't reset theme on first /rename invocation (#727)
  • βœ“fix(security/mcp): parse permissions.allow into PermissionsConfig (#717 part 2)
  • βœ“fix(tools/read): fall back to text/image alternate path on mime-mismatch (#723)
  • βœ“fix(security/mcp): add PermissionAllowList matcher for permissions.allow (#717 part 1)
  • βœ“fix(tui): self-heal glyph corruption in long sessions via periodic full-redraw (#718)
  • βœ“fix(api): 15s timeout on side-channel calls to prevent 75s startup hang (#722)
  • βœ“fix(tui): spinner/elapsed-time wake independently of input events (#716)
  • βœ“fix(session): preserve model field on --resume (#721)
  • βœ“fix(skills): recursion guard for context:fork invocations (#720)
  • βœ“fix(mcp): pagination for tools/list + resources/list + prompts/list (#715)
  • βœ“fix(security/bash): enforce permission rules on bare env-var assignments (#719)
  • βœ“docs(parity): CC v2.1.144-146 audit + 15 FILE-AS-TASK specs (#713)
  • βœ“feat(i18n/A6): wizard language picker + Configure menu picker (#645)
  • βœ“docs(v2.2.19): no-deferrals β€” fold all stretch items into hero arcs (#704)
  • βœ“feat(i18n/A5): --lang CLI flag + boot-time set_locale + pt-BR in SUPPORTED + drift gate test (#645)
  • βœ“docs(v2.2.19): master tracker + 6 supporting design docs (#704)
  • βœ“test(ssh-webui): end-to-end integration tests for /ssh relay round-trip (#706 phase 3)
  • βœ“i18n(v2.2.19): translate Tier-1 locales (es, zh-CN, fr, pt-BR, ru, ja, de) from en.yml seed (#645)
  • βœ“feat(/ssh webui phase 1): backend relay events + anvil-cli dispatch (#706)
  • βœ“i18n(v2.2.19): extract wizard + TUI core + cmd_static + cmd_ai strings β†’ en.yml (#645)
  • βœ“release(scripts): add Phase 7 X announcement, renumber verify to Phase 9 (#659)
v2.2.18May 20, 2026

Web Viewer Parity + Mouse Capture Default-OFF + Autocompact Hardening:

  • βœ“Autocompact threshold now uses the context window (64K–200K+), not the output cap β€” sessions on long-context models run far longer before compaction (#697)
  • βœ“Mouse capture default-OFF on all platforms β€” restores terminal copy-paste for users who hadn't opted in (#696 P4)
  • βœ“/tab new/rename/switch + Ctrl+T in TUI + relay; per-tab routing for concurrent sessions (#696)
  • βœ“Web viewer default layout = vertical_split + tabs, matching TUI default
  • βœ“Relay: default-allow forwarding, slash completion, cost_type chip, collapsible tool cards, MemorySnapshot broadcast
  • βœ“Bracketed paste in textarea modals β€” multi-line paste works in /mcp builder and wizard fields (#685)
  • βœ“Alt-screen raw-mode restore fix β€” keyboard no longer stops working after inline-op cancel (#688)
  • βœ“MemorySnapshot uses layouts::common helpers for rail parity (#695)
  • βœ“PermissionPrompt end-to-end round-trip regression test (#677)
  • βœ“Release pipeline Phase 6 hardened against set -e silent-exit (#654)
v2.2.17May 18, 2026

Setup Wizard Rewrite, Autonomous Reflection, Sandbox Detonation, Source Viewer:

  • βœ“Setup wizard rewritten as a single continuous in-TUI alt-screen session β€” 9 modal steps from Welcome through to first prompt, no stdin prompts, no screen flicker (#642)
  • βœ“Autonomous reflection loop: StuckDetector catches ToolLoop / Thrashing / InferenceStall / Oscillation patterns and injects strategy-switch reminders before the next inference call (#636)
  • βœ“anvil-sandbox-runner binary ships with every release β€” detonates hub package installCmd in an OS sandbox and shows you the diff before anything touches your machine (#570)
  • βœ“AnvilHub source viewer end-to-end: all 558 packages have synthesized source archives + GitHub-style file browser with Shiki syntax highlighting and IndexedDB cache (#528)
  • βœ“Skill-chain builder β€” /builder React Flow canvas + /my-chains + anvil:// deep-link install; SKILL.md extended with inputs:/outputs: slots (#529)
  • βœ“TUI region-targeted partial repaints β€” DirtyRegions extended with per-area bits; photosensitivity gate preserved (no full-screen Clear without DirtyRegions::ALL) (#622/#629)
  • βœ“Reactive compaction: providers detect context-overflow errors, compact to half remaining, and retry the same turn without losing user input (#564)
  • βœ“HookEvent::Stop fires at end-of-turn when no tool_use; block decisions inject reason as synthetic user-text message (#566)
  • βœ“/rewind slash command with TUI picker and β€œSummarize up to here” force-compaction action (#557)
  • βœ“Rail keybinds wired (g/d/s/a/Ctrl+R) + drift test that asserts every advertised key has a handler (#634)
  • βœ“Session auto-titling: derive_title_from_first_message now actually fires on first user message (#580)
  • βœ“Tests: runtime 1106, anvil-cli 717, commands 235, api 330 β€” all green. Slash-command spec count 119; rail-keybinds drift gate added.
v2.2.16May 17, 2026
  • βœ“release: Anvil v2.2.16
  • βœ“chore: drop stale .claude/worktrees agent dirs from index
  • βœ“release(v2.2.16): hand-written release notes
  • βœ“test(v2.2.16): update layout_live_switch baselines for new default
  • βœ“prep(v2.2.16): bump version + flip default layout + wizard highlight
  • βœ“tui(classic): inline 7-layer MEMORY block above input (#607)
  • βœ“tui(paste): keystroke-burst detection for drag-and-drop (#604 Part C)
  • βœ“cli(cancel): wiremock integration test for Ctrl+C stream abort (#606)
  • βœ“cli(cancel): tokio::select! aborts blocking HTTP read on Ctrl+C (#605)
  • βœ“tui(paste): submit-time path detection + long-paste placeholder (#604)
  • βœ“runtime+cli(cancel): DefaultRuntimeClient honors set_cancel_token across all 7 providers
  • βœ“tui(vertical-split): close tool-call boxes, gate banner, style markdown, 2-decimal cost (#602)
  • βœ“runtime+tui(paste): first-class ContentBlock::Document for PDF + Office docs (#601)
  • βœ“tui(paste): consolidated handler + file-path detection, mouse capture OFF (#599)
  • βœ“feat(runtime): prefer anvilhub /api/version, fall back to GitHub
  • βœ“docs: clarify commit attribution for d219e18 / ccde10b
  • βœ“tui(vertical-split): commit #596 deliverables that the linter stripped from prior commit
  • βœ“tui(vertical-split): split-anchor rail, fold QMD into MEMORY, update banner (#596)
  • βœ“oauth: strict RFC 6749 token-exchange parser + startup validator (#595, BUG-14)
  • βœ“tui(vertical-split): rail owns all chrome, deck has input only (#594, BUG-13)
  • βœ“tui(vertical-split): rail sections β€” uppercase headers, cross-tab status aggregates, agent tab-binding (#588 polish)
  • βœ“tui(layouts): wizard + slugs + /layout --global + live preview page bumped to 8 variants (#588)
  • βœ“tui(three-pane): delete vim modal β€” always-on input, standard handler (#588, BUG-8)
  • βœ“tui(layouts): build real rail+deck vertical_split renderer matching mockup (#588)
  • βœ“tui(layouts): rename vertical_split renderer to classic + add TuiLayoutKind::Classic (#588)
  • βœ“tui(layouts): move layout from AnvilTui to Tab (per-tab layout state) (#588)
  • βœ“fix(model): async fetch_all_configured_models with timeout + Ctrl+C cancel (#BUG-7)
  • βœ“fix(tui): wire slash command completion popup into all 6 layouts (#BUG-6)
  • βœ“fix(tui): request redraw on every keystroke so input renders live across all layouts (#BUG-5)
  • βœ“feat(tui): make three-pane Insert mode discoverable with framed hint + ghost input (#BUG-4)
  • βœ“fix(tui): three-pane uses Constraint::Fill for CONTEXT band (#BUG-4)
  • βœ“fix(oauth): poll background callback channel each frame so login completes without requiring a keypress
  • βœ“fix(journal): clear header/input rows before draw to prevent stale-cell ghosting and add bg_primary to header
  • βœ“fix(api): 5xx errors name configured provider/gateway, not hardcoded Anthropic URL (#568, CC-143-B)
  • βœ“fix(session): title heuristic skips bare URL as first message (#563, CC-142-B)
  • βœ“fix(tui): welcome banner names active provider, not hardcoded Anthropic (#562, CC-141-B)
  • βœ“feat(mcp): ANVIL_MCP_TOOL_TIMEOUT env to override per-request fetch timeout (#559, CC-141-B)
  • βœ“feat(tui): spinner color warm greenβ†’amberβ†’red on elapsed time (#558, CC-141-F)
  • βœ“fix(tools): Read offset accepts string forms with whitespace/+ prefix (#555, CC-140-B)
  • βœ“chore(docs): file task #579 β€” migrate wizard.rs prompts to in-TUI modal
  • βœ“feat(tui): intercept /login and /provider login to open TUI modal (#578)
  • βœ“feat(tui): wire ProviderLoginModal key handler and OAuth listener (#578)
  • βœ“feat(tui): add ProviderLoginModal for in-TUI OAuth/API-key flows (#578)
  • βœ“fix(tui): clear terminal on /layout switch to drop stale cells (#bug-3)
  • βœ“fix(tui): force full repaint after inline OAuth/setup flows (#bug-2)
  • βœ“fix(vault): retry up to 3 times + pre-fill /vault unlock on failure (#bug-1)
  • βœ“tui(layouts): wire /layout command, set_layout(), intro toast + live-switch tests (v2.2.16 Step 3E)
  • βœ“tui(layouts): land Step 3 β€” layout renderers, dispatch, DirtyRegions widening (v2.2.16)
  • βœ“tui(layouts): land LayoutSnapshot extraction + golden baseline (v2.2.16 step 1)
  • βœ“tui(layouts): config schema + /layout slash command (8 axes) + wizard step (v2.2.16 step 2)
  • βœ“security(oauth): lenient scopes deserializer prevents auth lockout (#565, CC-143-B)
  • βœ“v2.2.16: verification gate, /hub status (all 8 axes), /plugin update REVOKED guard
  • βœ“v2.2.16: HubPackage verified-badge structs + require_verified config (AnvilHub F3)
  • βœ“release: prepend ~/.cargo/bin to PATH (brew-Rust shadowing fix, #534)
  • βœ“docs(v2.2.15): clear public README narrative β€” 35 providers, /cursor, /model
v2.2.15May 15, 2026
  • βœ“docs(v2.2.15): clear public README narrative β€” 35 providers, /cursor, /model
  • βœ“release(v2.2.15): bump workspace + release notes
  • βœ“v2.2.15: /model handler β€” atomic cross-provider switch + ambiguous-name guard
  • βœ“v2.2.15: /model TAB completion β€” provider-prefixed unified list
  • βœ“v2.2.15: cross-provider unified model list (fetch_all_configured_models)
  • βœ“v2.2.15: /cursor handler β€” all 6 subcommands end-to-end
  • βœ“v2.2.15: /cursor spec registration with full subcommand tree
  • βœ“v2.2.15: SlashCommand::Cursor variant + 6 subcommand enum
  • βœ“Release notes for v2.2.14
  • βœ“fix(bedrock): add crate_env_lock to three env-touching tests to prevent parallel flake
  • βœ“test(bedrock): SigV4 compliance tests against Python-verified vectors
  • βœ“feat(gemini-oauth): Google Code Assist OAuth provider replacing Antigravity OpenAI-compat stub
  • βœ“feat(cursor): Cursor Cloud Agents provider β€” real API replacing broken OpenAI-compat stub
  • βœ“Expand provider catalog from 5 to 35 providers across the open-source ecosystem
  • βœ“Phase 6.5g: OTel events verified, ProviderRewriter Debug derive, cleanup
  • βœ“Phase 6.5b-f: /memory clean slash command + dispatch + integration tests
  • βœ“Phase 6.5a: MemoryRewriter trait + MockRewriter + RewriteResult schema
  • βœ“Phase 6.3 follow-up: --include-sessions fails loud on missing provider
  • βœ“Phase 6.3e: --include-sessions flag + integration tests
  • βœ“Phase 6.3b-d: sessions composer wiring + nominations subdir + OTel
  • βœ“Phase 6.3a: SessionSummarizer trait + MockSummarizer + SummarizedSession schema
  • βœ“Phase 6 follow-up: return real conflict_count from run_settings_import
  • βœ“Phase 6 integration: orchestrate all 5 pipelines in run_import_pipeline_headless
  • βœ“Phase 6.4c: full report generator + OTel event wiring
  • βœ“Phase 6.4a: wizard migration step + skip flag
  • βœ“Phase 6.1c: dispatch handler wiring + serial test isolation fixes
  • βœ“Phase 6.1b: instructions discovery + ANVIL.md merge semantics
  • βœ“Phase 6.1a: memory entry discovery + translation
  • βœ“Phase 6.2c: plugin manifest translation (with Phase 5.1 skills/agents fields)
  • βœ“Phase 6.2b: skills import (disabled by default, collision handling)
  • βœ“Phase 6.2a: settings.json schema translation + conflict staging
  • βœ“Phase 6.0: Migration foundation (ImportArtifact, manifest, staging machinery)
  • βœ“Phase 5.4g: Rewrite parallel-tab dispatch test to use Barrier
  • βœ“Phase 5.4f: Inherit SandboxConfig through subagent spawn
  • βœ“Phase 5.4e: serialize auto_tune cache-mutation tests to fix workspace race
  • βœ“Phase 5.4d: pin defect #11 resolution in fetch_ollama_models_for_cache doc
  • βœ“Phase 5.4a/b: HOOKS.md + SANDBOX-MODES.md research documentation
  • βœ“feat(#8): wire CommandCacheManager into glob_search and grep_search
  • βœ“feat(#9): wire CommandCacheManager into WebFetch/WebSearch (5-min/1-hr TTL)
  • βœ“fix(#514): serialize TRACEPARENT env tests to eliminate workspace-parallel race
  • βœ“fix(#4,#5): plugin manifest skills/agents fields + skill root discovery
  • βœ“Phase 5.2a/b/c: ResultBlock schema, 45-tool formatter, subcommand vocab consts
  • βœ“Phase 5.1a CC-BUG-3/4: Thread parent permission_mode into spawned subagents
  • βœ“Phase 5.3 #19: wire mcp_tool hook entries from settings.json (Stream B)
  • βœ“Phase 5.3 #21: propagate TRACEPARENT to plugin tool subprocesses
  • βœ“Phase 5.3 #16: document permission decision chain and pin order invariant
  • βœ“Phase 5.3 #15: extend Gate 3 sync-LLM lint with 4 new blocked patterns
  • βœ“Phase 5.1a #20 #22: TeamDelegate delegations in agents-live + parent_agent_id
  • βœ“Phase 5.1a #1: Wire EgressPolicy::is_allowed into web_ops + automation_ops
  • βœ“Phase 5.0.5: Unify slash command dispatch (4 sites β†’ 1)
  • βœ“Phase 5.0: Bidirectional drift, menu-handler smoke, sync-LLM lint
  • βœ“Fix Anvil OAuth Max-plan 429: missing claude-code beta header + identity preamble
  • βœ“Wire DailyStore L2 episodic summaries into SystemPromptBuilder
  • βœ“Wire egress allowlist into settings.json + /memory show policy view
  • βœ“Serialize all ANVIL_CONFIG_HOME-mutating tests via #[serial(anvil_config_home)]
  • βœ“docs: overnight session summary for 2026-05-13
  • βœ“Phase 4.4 follow-up: update memory_show_nominations test for new banner phrasing
  • βœ“Phase 4.5: L1 β€” SYSTEM_PROMPT_DYNAMIC_BOUNDARY consumer for prompt-cache split
  • βœ“Phase 4.4: alias deprecations (file-cache, cmd-cache, history-archive, nominations)
  • βœ“Phase 4.3: L4 β€” /goal web_available audit (decision documented)
  • βœ“Phase 4.2: L7 β€” file-cache + cmd-cache size caps + LRU eviction
  • βœ“Phase 4.1: L2 β€” 90-day history retention with trash-bin + dry-run
  • βœ“Phase 3.7: L2 β€” fix /memory why daily-reconciliation help text
  • βœ“Phase 3.6: L5 β€” zero-injection integration test [SECURITY]
  • βœ“Phase 3.5: L7 β€” is_l5_path sentinel gates cache store/lookup [SECURITY]
  • βœ“Phase 3.4: L6 β€” PermissionEffect {Allow,Deny,Prompt} enum
  • βœ“Phase 3.3: L5 β€” wire classify_learning into nomination-emit (ANVIL_L5_AUTOROUTE) [SECURITY]
  • βœ“Phase 3.2: L3 β€” anvil-semantic QMD collection + nominated_from frontmatter
  • βœ“Phase 3.1: L3 β€” /memory promote writes ANVIL.md + atomic rename
  • βœ“Phase 2.8: spec + subcommand updates for /memory tier vocabulary
  • βœ“Phase 2.7: L7 β€” unified cache tier (file/cmd/qmd sub-views)
  • βœ“Phase 2.6: L6 β€” policy tier (grants + auto-deny + reviewer + egress)
  • βœ“Phase 2.5: L5 β€” identity tier (labels/keys + locked-state counts)
  • βœ“Phase 2.4: L4 β€” procedural tier (goals + skills + cron + routines stub)
  • βœ“Phase 2.3: L3 β€” semantic --pending recast (nominations alias)
  • βœ“Phase 2.2: L2 β€” episodic tier + daily sub-view
  • βœ“Phase 2.1: L1 β€” /memory why + show working introspects WorkingMemorySnapshot
  • βœ“/model picker reads live provider /models APIs, not static registry
  • βœ“Fix /model switch to atomically swap routing + prompt identity + chrome
  • βœ“Populate missing /cmd subcommand pickers + add drift-prevention test
  • βœ“Fix /model autocomplete regression β€” live provider-aware completions
  • βœ“Add missing /ollama spec + strengthen variant<->spec drift test
  • βœ“Wire /file-cache and /cmd-cache slash commands to real handlers (#490, L7)
  • βœ“Wire env::current_dir() into PermissionMemory load (#489 follow-up)
  • βœ“Wire PermissionMemory into the permission gate (#489, L6)
  • βœ“Update remaining test fixtures for Vec<PromptSection> migration
  • βœ“Flip system_prompt storage to Vec<PromptSection> end-to-end (Phase C+D of #486)
  • βœ“SystemPromptBuilder::build() returns Vec<PromptSection> (Phase B of #486)
  • βœ“Add PromptSection and WorkingMemorySnapshot types (Phase A of #486)
  • βœ“Fix /changelog freezing the TUI
  • βœ“Embed release notes into the binary
  • βœ“v2.2.14 Phase 1: retrieval-order block + 3 synthesis defect fixes + TUI placeholder
  • βœ“docs(research): seven-layer memory architecture + v2.2.14 arc plan
  • βœ“release(v2.2.14): bump workspace + release notes + README catchup
  • βœ“v2.2.14 BUG-fix: tab-2 missing Thinking + lost prompt + Apple Terminal Enter
  • βœ“v2.2.14 BUG-fix-real: render arbitration + instrumentation
  • βœ“v2.2.14 BUG-fix: tab-2 input echo missing while tab-1 streams
  • βœ“v2.2.14 TUI-2 (deep): true per-tab non-blocking turn waits
  • βœ“chore: fix anvil-cli test-target build + cross-module env-var test race
  • βœ“v2.2.14 TUI-3: queue user messages typed while a turn is streaming
  • βœ“v2.2.14 CC-DRIFT bundle: B4 agent panic, B6 compact usage, B8 mcp test
  • βœ“v2.2.14 TUI-2: cut in-flight wait latency from 80ms to 20ms
  • βœ“v2.2.14 CC-DRIFT-B5: OTEL TRACEPARENT propagation
  • βœ“v2.2.14 TUI-1: Ctrl+C cancels mid-flight streaming
  • βœ“v2.2.14 #474: rewire /ollama slash commands (W4-merge regression)
  • βœ“docs: record v2.2.14 audit verdicts for 4 VERIFY items
  • βœ“docs: mark CC-136-F2 SHIPPED in parity table
  • βœ“v2.2.14 CC-136-F2: autoMode.hard_deny short-circuit (#465)
  • βœ“v2.2.14 CC-139-F1: cross-session agent view via anvil agents subcommand (#462)
  • βœ“v2.2.14 CC-139-F5: transcript view nav keys (?, {, }, v) (#460)
  • βœ“v2.2.14 CC-136-B6 SECURITY: ReadOnly cannot be bypassed by env or Edit (#467)
  • βœ“v2.2.14 CC-139-B5 SECURITY: safe wildcard match primitive for tool allow-rules (#469)
  • βœ“v2.2.14 CC-136-B5 VERIFY: --resume/--continue on underscore paths (#466)
  • βœ“v2.2.14 CC-139-F16: subagent OTel headers (#461)
  • βœ“v2.2.14 CC-139-F4: /plugin details <name> with inventory + token cost (#459)
  • βœ“v2.2.14 CC-139-F3: /scroll-speed slash command + live mouse-wheel tuning (#458)
  • βœ“v2.2.14 CC-139-F2: unify /goal β€” auto-link active session on /goal new (#457)
  • βœ“v2.2.14 CC-133-F1: worktree.baseRef setting + apply at worktree-create (#463)
  • βœ“v2.2.14 W15b: wire auto-promote engine into read/bash + main.rs install (#394)
  • βœ“v2.2.14 W11: wire file-fingerprint cache into read/write/edit + system prompt (#390)
  • βœ“v2.2.14: hook args[] exec form + continueOnBlock for PostToolUse (#453, #454)
  • βœ“v2.2.14 CC-132-F1/CC-133-F4/CC-139-F8: per-session env propagation
  • βœ“v2.2.14 CC-132-F2: ANVIL_DISABLE_ALTERNATE_SCREEN env opt-out
  • βœ“.anvil-release.toml: fix WP path + pm2 process name drift
v2.2.13May 11, 2026
  • βœ“FreeBSD x86_64 + NetBSD x86_64 binaries β€” first-ever BSD support. Every binary SHA256-verified and signed by the release pipeline; paired .sha256 manifests served at anvilhub.culpur.net/sha256/.
  • βœ“Windows x86_64 is back. The v2.2.12 hold is fixed: ssh-agent auth is now #[cfg(unix)]-gated with a clean Windows stub. The rest of the SSH driver (key-file, password, kbd-interactive) works on Windows exactly as on Unix.
  • βœ“Seven platforms total β€” macOS ARM64, macOS Intel, Linux x86_64, Linux ARM64, Windows x86_64, FreeBSD x86_64, NetBSD x86_64.
  • βœ“Release pipeline hardening. Removed the | tail -1 mask that hid the v2.2.12 Windows build failure. Build errors now hard-fail instead of silently producing partial releases.
  • βœ“Routines foundation on disk. New crates/runtime/src/routines/ module with schedule grammar (duration, interval, cron, ISO timestamp), output archive with [SILENT] early-stop, and SHA-256 input-hash packet schema. 63 new tests. v2.2.14 daemon ships on top.
  • βœ“FreeBSD ARM64 and OpenBSD x86_64 are not in this release β€” the Rust toolchain does not publish a precompiled standard library for either target. Both are queued for v2.2.14.
v2.2.12May 11, 2026
  • βœ“v2.2.12: parallel inference, tool-call cards, SSH tabs, scrollback fix
  • βœ“v2.2.12 Bug3-C3: per-tab parallel inference via JoinHandle spawn
  • βœ“T5-Ssh-F: wire /ssh end-to-end + add integration test with in-process russh server
  • βœ“v2.2.12 T5-Ssh-E: modal SSH connection form overlay
  • βœ“v2.2.12 T5-Ssh-D: render vt100 SSH tab + forward keys + Ctrl+B escape
  • βœ“v2.2.12 T5-Ssh-D-checkpoint: SshTabState + async/sync bridge + key encoder
  • βœ“v2.2.12 T5-Ssh-C: vault HostCredential schema for SSH aliases
  • βœ“v2.2.12 T5-Ssh-B: russh driver + 4-method auth chain
  • βœ“v2.2.12 T5-Ssh-A: SlashCommand::Ssh β€” parser for embedded SSH client
  • βœ“v2.2.12 T4-O: hot-reload ANVIL.md / MEMORY.md when they change on disk
  • βœ“v2.2.12 T4-M: /doctor release β€” pre-flight self-check for the release pipeline
  • βœ“v2.2.12 T4-L: mark interrupted turns visibly when partial response preserved
  • βœ“fix(release): require RELEASE-NOTES-<TAG>.md or hard-fail; never ship empty body
  • βœ“v2.2.12 T4-K: auto-show diff summary after file-modifying turns
  • βœ“v2.2.12 T4-N: /clear wipes the TUI's visible state, adds --all for workspace
  • βœ“v2.2.12 T3-I: /fork uses Arc-shared snapshots when log unchanged
  • βœ“v2.2.12 T3-H/T3-Exit-UX/T3-J: session friendly names + resume-by-name + exit banner
  • βœ“v2.2.12 T1-#400: TUI accepts live typing while a turn is in flight
  • βœ“v2.2.12 T1-A/B/C/D: harden release pipeline against the v2.2.11 incidents
  • βœ“v2.2.12 T2-G: introduce RedrawScheduler for the TUI
  • βœ“fix(release): stop globally rewriting every version mention in public README
v2.2.11Outweigh-them-allMay 9, 2026

The release where the agent learned to know itself, the operator learned to shape it, and ten core surfaces landed in one cut.

  • βœ“release(v2.2.11): self-awareness β€” agent knows its own version, model, and provider in every turn
  • βœ“feat(prompt): system prompt now references current Anvil version + loaded model + provider
  • βœ“W1 hook events: full catch-up with CC parity β€” PreToolUse, PostToolUse, UserPromptSubmit, SessionStart, SessionEnd, PreCompact, Notification
  • βœ“W2 effort slider: /effort low|medium|high β€” tune reasoning depth per turn, persisted per session
  • βœ“W3 goal persistence: per-session goals survive /clear and reconnect, surfaced in status line
  • βœ“W4 named profiles: save and switch (provider, model, effort, output style) tuples by name
  • βœ“W5 published JSON schema: settings.json fully typed, IDE-completable, anvilhub.culpur.net/schema/settings.json
  • βœ“W6 OpenTelemetry events: OTEL_EXPORTER_OTLP_ENDPOINT support, permission_decision + tool_call + token_usage spans
  • βœ“W7 custom output styles: define your own /output-style names in settings, ship them as plugins
  • βœ“W8 reviewer-agent approval gate: optional second-agent review before file writes β€” configurable threshold
  • βœ“W9 anvil mcp-server mode: run Anvil itself as an MCP server β€” expose agents and tools to any MCP client
  • βœ“W10 requirements.toml admin policy floor: enforce minimum versions, required plugins, denied domains org-wide
  • βœ“feat(skills): rename CLAUDE.md β†’ ANVIL.md across user-facing strings + anvil-md-curator skill
  • βœ“fix(build): rerun build.rs when current branch ref changes (GIT_SHA stayed stale on rebuild)
  • βœ“fix(w3): goals slash command implementation, not stub β€” persistence, completion tracking, status line
  • βœ“fix(w1): hook events were declared but unwired; tests added covering all 7 event types end-to-end
  • βœ“fix(w6): OTel permission_decision span unwired; W5 schema tightening for required fields
v2.2.10May 7, 2026
  • βœ“release(v2.2.10): TUI usability patch β€” wrap, native-select, tool-result summaries
  • βœ“fix(tui): wrap long lines, restore native selection, give tool results meaning
  • βœ“fix(release): regenerate sha256 manifests every build + verify-before-release
  • βœ“fix(release): correct repo target on gh release calls
v2.2.9May 6, 2026
  • βœ“release(v2.2.9): wave 2 β€” OAuth paste-code, alwaysLoad MCP, plugin zip/URL + version bump
  • βœ“feat(v2.2.9): CC parity catch-up v2.1.118 β†’ v2.1.131
v2.2.8April 22, 2026
  • βœ“See commit history for details
v2.2.8April 22, 2026
  • βœ“docs(v2.2.8): release notes + rollback runbook
  • βœ“fix(cli): remove unused format_suggestions import; bump workspace to v2.2.8
  • βœ“feat(v2.2.8): integrate F1 /agent compose + F3 skill-eval CLI + F5 loader forward-compat + F6 embed bundled plugins
  • βœ“feat(config): add output_style axis β€” /output-style precise|condensed (v2.2.8)
  • βœ“feat(skills): bundle terse skill β€” token-economy mode with Auto-Clarity
  • βœ“feat(commands): trait-based agent composition engine (Anvil v2.2.8)
  • βœ“Add three-arm skill evaluation harness (skill_evals module)
  • βœ“feat(commands): add YAML front-matter trigger keywords to skill system
  • βœ“feat(cli): /model warning + Ctrl+U/Ctrl+Y readline kill-yank + PAI survey
  • βœ“fix(agents): correct module path in Bug #83 Part B subagent inheritance test
  • βœ“fix(api): make HTTP request timeout configurable via ANVIL_API_TIMEOUT_MS (Bug #84)
  • βœ“test(permissions,file_ops,agents): document DangerFullAccess stability invariants (Bug #83)
  • βœ“fix(api): add 5-minute dead-air timeout to OpenAI-compat stream (Bug #82)
  • βœ“fix(api): use max(Retry-After, backoff) on 429 retries (Bug #81)
  • βœ“feat(sandbox): Claude-Code-style permission modes with on-the-fly switching
  • βœ“feat(ollama): honor ANVIL_OLLAMA_NUM_CTX / ANVIL_CONTEXT_SIZE for context window
  • βœ“fix(runtime): don't fail turn when Ollama returns empty stream after tool result
  • βœ“docs(readme): update for v2.2.8 β€” badges, Windows binary name, new commands
  • βœ“docs: Anvil v2.2.8 release-complete report
v2.2.7April 21, 2026
  • βœ“release: Anvil v2.2.7
  • βœ“test(runtime): fix parallel-test races for v2.2.7 release gate
  • βœ“fix(installer): close e2e test blockers B-1/B-2 + shell completion T9
  • βœ“fix(hub): use CARGO_PKG_VERSION for install-telemetry client string
  • βœ“security: fix 3 pre-release blockers in v2.2.7 installers
  • βœ“docs: add v2.2.7 release notes
  • βœ“feat(setup): curated Ollama model menu with explicit per-model confirmation
  • βœ“feat(installer): add cross-OS installers + anvil check/upgrade/uninstall for v2.2.7
  • βœ“feat(tui): add in-TUI scrollback ring buffer + compile fix for share command
  • βœ“fix(cross-platform): replace Unix-only env lookups with portable alternatives
  • βœ“fix(ollama): add multi-format tool-call parser and fail-loud warnings
v2.2.6April 20, 2026

Web Config, AnvilHub Installer, Deep Autocomplete β€” full browser parity with TUI:

  • βœ“17 web config panels: providers, vault, notifications, SSH, Docker/K8s, memory, and more
  • βœ“Full Status Line editor in browser: 36 widgets, 16 presets, drag-and-drop, live preview
  • βœ“AnvilHub installer: search, install, restart prompt β€” vault-gated, telemetry-tracked
  • βœ“Deep hierarchical autocomplete: /vault store <Tab> β†’ 21 credential types
  • βœ“8 previously-broken TUI handlers now working: /mcp, /plugins, /session, /daily, and more
  • βœ“New commands: /tab, /fork, /share, /audit, /restart
  • βœ“Self-respawn on macOS/Linux after plugin installs
v2.2.5April 19, 2026

Intelligent Memory System β€” 6-tier architecture, self-improving knowledge base:

  • βœ“Sensitivity classifier: auto-routes credentials to vault, infra to encrypted memory
  • βœ“Knowledge nominations: AI discovers patterns, users review and promote to CLAUDE.md
  • βœ“Private project memory: AES-256-GCM encrypted infrastructure details
  • βœ“Daily summaries: auto-generated task reconciliation, flags forgotten items
  • βœ“558 AnvilHub packages: 512 skills across 30 categories
v2.2.4April 16, 2026

Security Hardening + Optimization β€” 17 audit findings fixed, zero warnings:

  • βœ“Constant-time HMAC verification, plugin command injection prevention
  • βœ“Path traversal protection, cryptographic session IDs
  • βœ“110 functions made const fn, redundant clones eliminated
  • βœ“main.rs modularized into 3 focused modules
  • βœ“RC widget: live client count with connect/disconnect signals
  • βœ“Zero compiler warnings, 428 tests, 0 failures
v2.2.3April 15, 2026

Six Major Features β€” interactive editor, productivity, MCP, history, plugins, agents:

  • βœ“Interactive Status Line Editor β€” full TUI editor with 6 sub-screens + WebUI drag-and-drop visual editor
  • βœ“37 widgets, 16 presets (8 emoji-rich themes), per-widget category colors
  • βœ“Code Productivity Dashboard β€” live git diff tracking, /productivity command
  • βœ“MCP Server Manager β€” /mcp command, live McpStatus widget
  • βœ“Session History Browser β€” /history-archive stats with model breakdown
  • βœ“Plugin System UI β€” web viewer management panel with config toggles
  • βœ“Agent Panel Expansion β€” web viewer agent management buttons
v2.2.2April 14, 2026

Customizable Widget-Based Status Line β€” 8 presets for different workflows:

  • βœ“Widget-based status line system β€” 28 widget types, dynamic rendering
  • βœ“8 presets: default, minimal, developer, token-heavy, git-heavy, compact, cost-focused, streamer
  • βœ“/configure statusline command with full tab completion
  • βœ“Web viewer config panel gains Status Line preset selector
  • βœ“Dynamic footer height β€” 2-line presets maximize content area
v2.2.1April 14, 2026

URL rendering fix, context-aware vault, CI/CD automation:

  • βœ“URL rendering fix β€” terminal hyperlinks render correctly across all providers
  • βœ“Context-aware vault β€” vault auto-selects credentials based on active project context
  • βœ“CI/CD automation β€” /cicd command scaffolds pipelines for GitHub Actions and GitLab CI
v2.2.0April 14, 2026

Typed Credential Vault β€” the vault is now the single source of truth for ALL sensitive data:

  • βœ“Typed credential entries β€” name, type, value, tags, created_at, rotated_at
  • βœ“Vault covers API keys, SSH keys, TLS certs, tokens, and environment secrets in one place
  • βœ“/vault add β€” interactive typed credential entry with category selection
  • βœ“/vault rotate β€” rotate any credential in-place, preserving audit history
  • βœ“/vault export β€” encrypted vault export for backup and migration
  • βœ“/vault inject β€” load vault secrets into shell env for any subprocess
  • βœ“Audit trail v2 β€” every vault access logged with timestamp, operation, and credential type
v2.1.4April 14, 2026

Browser configuration panel, Gemini provider, slash command execution in web viewer:

  • βœ“Browser-based visual configuration panel
  • βœ“Google Gemini as 5th provider
  • βœ“Slash commands execute from web viewer
  • βœ“30+ commands with subcommand completions
v2.1.3April 14, 2026

Focus view, context warnings, stalled stream recovery β€” 6 improvements:

  • βœ“Edition 2024 mode β€” optimized session defaults and provider routing for 2024-era models
  • βœ“Focus view β€” /focus hides sidebars and agent panels for distraction-free single-pane mode
  • βœ“Context-low warning β€” proactive alert before auto-compaction fires when context nears capacity
  • βœ“Stalled stream handling β€” detects and recovers from stuck token streams without losing the response
  • βœ“WebFetch cleanup β€” improved HTML-to-text extraction, strips nav, footer, and cookie banners automatically
  • βœ“/loop and /proactive β€” new slash commands for recurring prompt loops and proactive agent nudges
v2.1.2April 14, 2026

Credential scanner, egress control, conversation branching β€” 16 new features:

  • βœ“Credential auto-detection β€” scans env vars, dotfiles, SSH keys, TLS certs, auto-vaults provider keys
  • βœ“Network egress control β€” configurable domain allowlist, default: AI provider APIs only
  • βœ“Signed session transcripts β€” HMAC-SHA256 audit trail in ~/.anvil/audit/
  • βœ“Conversation branching β€” /fork to snapshot and branch conversations
  • βœ“Markdown session export β€” /export md with code blocks and token summary
  • βœ“Clickable URLs β€” OSC 8 hyperlinks in system messages
  • βœ“Remote control browser auto-open β€” /remote-control launches browser automatically
  • βœ“Expanded cost tracking β€” OpenAI, xAI, Ollama pricing alongside Anthropic
  • βœ“Inline image rendering β€” iTerm2/Kitty graphics protocol support
  • βœ“Smart context compaction β€” preserves 6 recent messages, code blocks, file paths
  • βœ“Tool output redaction logging β€” secrets redacted and logged to audit trail
  • βœ“SSH key and TLS certificate vault storage β€” /vault ssh and /vault certs

8 commits: 827d941..fb33055

v2.1.1April 13, 2026

Live streaming, remote control, and thinking mode:

  • βœ“Live streaming responses β€” real-time token-by-token rendering in the TUI
  • βœ“Remote control β€” type /remote-control to share your session via browser WebSocket
  • βœ“Web viewer at passage.culpur.net/viewer for real-time session observation
  • βœ“Thinking mode β€” visible reasoning indicator with /think toggle
  • βœ“Background turn execution β€” TUI stays responsive during API calls via scoped threads
  • βœ“WebSocket relay infrastructure β€” secure pairing with 6-digit codes, multi-client support
  • βœ“Cross-platform release pipeline β€” automated builds for macOS, Linux, and Windows

5 commits: 30bf569..2108c93

v2.1.0April 8, 2026

Security-first release β€” encrypted vault, file sandbox, modular architecture:

  • βœ“AES-256-GCM encrypted credential vault with Argon2id KDF β€” all API keys encrypted at rest
  • βœ“Setup wizard vault password step β€” credentials encrypted before touching disk
  • βœ“Session-based vault unlock β€” one password prompt per session, KEK zeroed on exit
  • βœ“Automatic migration from plaintext credentials.json to encrypted vault
  • βœ“File write sandbox β€” writes blocked outside project root (PermissionDenied)
  • βœ“Project root detection via .git, Cargo.toml, package.json markers
  • βœ“Native Ollama /api/chat with NDJSON streaming and think: true/false
  • βœ“Multi-line input β€” footer expands 1-5 lines dynamically with word-wrap
  • βœ“Ctrl+C clear input / double-tap exit (CC parity)
  • βœ“Codebase modularized β€” main.rs 15,756 β†’ 4,770 lines, 134 module files
  • βœ“Content filter: modern OpenAI key formats (sk-proj-*, sk-svcacct-*)
  • βœ“Clippy warnings: 470 β†’ 0, strict compilation mode
  • βœ“394 tests passing, zero unsafe code

11 commits: aeeeff2..4bb283f

v2.0.0April 7, 2026

Full CC 2.1.94 parity β€” 3 commits:

  • βœ“Permission memory β€” persistent tool approval decisions per project
  • βœ“Content filtering / prompt injection defense
  • βœ“Configurable keybindings via ~/.anvil/keybindings.json
  • βœ“Agent SendMessage / Continue for multi-turn agent conversations
  • βœ“Worktree isolation for agents β€” git worktree per agent
  • βœ“/fast mode toggle β€” lower token budget for quick responses
  • βœ“Rich slash command help with examples
  • βœ“Clipboard image paste support
  • βœ“Background agent desktop notifications
  • βœ“/review-pr β€” AI-powered pull request review
  • βœ“First-run setup wizard with 5-step provider configuration

3 commits: dc1d81a..6ce5d4d

Ready to get started?

Install Anvil in seconds on macOS, Linux, or Windows.

Install Now