Run the agent on your dev machine and steer it from your phone, tablet, or laptop. Kick off a task, pocket your phone, and get pulled back by a push when it finishes — or needs your call on something risky.
I'll add a retry loop with jittered backoff around sendFcm() and cap it at 5 attempts.
Edit src/push/fcm.tscheck_circlePushed. Opening a PR now…
gh pr createcheck_circleClaude Code can be driven through the Agent SDK, which streams typed events: text, tool calls, diffs, permission requests, usage. So Anvil never scrapes a terminal grid. A daemon renders those events once and every device shows the same clean conversation.
Reflowable markdown, syntax-highlighted code, tables, math, and live mermaid diagrams — rendered once on the daemon, identical on every device. Real text inputs; ⇧⏎ is a newline.
Pick up your phone mid-conversation and it reconciles to exactly where your laptop left off. No "disconnect the other client" dance — nothing is bound to one screen size.
Each task spins up its own git worktree off a base branch. Branch, diffstat, and the full lifecycle — commit, push, PR, merge — are first-class buttons, not shell incantations.
The daemon owns the session lifecycle end-to-end, so sessions are legible, killable, and resumable from any device.
Auto-allows ordinary tool use and prompts only on genuinely risky ops — rm -rf, force-push, secret access. Tune autonomy per session from bypass to prompt-all.
A notification when a session needs a decision or a turn completes — with Allow / Deny right on the notification. Web Push today; FCM and APNs in the native shells.
A persistent, server-side PTY per session with durable scrollback that survives device switches — for the moments a conversation isn't the right tool.
Open a doc and chat about it side-by-side. It re-renders in place as Claude edits it, with select-to-cite straight back into the conversation.
Drop images, PDFs, and files into a turn. Generated reports, archives, and media come back as download cards — with best-effort Tailscale Taildrop to your device.
A device-synced prompt library in the composer, plus /-autocomplete for your Claude Code user and project skills — your shortcuts follow you everywhere.
When Claude needs a decision, its multiple-choice questions become native cards you can answer from any device — no half-finished turns waiting on a keystroke.
One client manages anvild across several Macs on a single Max plan, with a persistent concierge session that sees — and spins up — work across the fleet.
Installable app shell, light/dark themes, and an outbox that queues your actions while offline and flushes them on reconnect. It just keeps up.
Connect a Todoist project and Anvil bundles related tasks into units of work, writes an implementation plan for each, and — on a nightly schedule — kicks off the builds. You review, not babysit.
anvil:* status per task (planned → building → review → done) keeps the grid and your Todoist in sync.Opt a unit into the fully unattended pipeline and it runs a cross-model gauntlet built on one rule: the author and the reviewer of any artifact must be different models. It ships by opening a PR whose body is a Design History File tracing every decision.
On your Max subscription. Strongest at planning and judgment, so it owns design and the final blind validation — and audits GLM's requirements.
Cheap, capable agentic work via OpenRouter, driven through the SDK. Does the coding and test-writing — and red-teams Claude's design. Decorrelated by construction.
Bounded loopbacks keep the two models from ping-ponging forever; critical findings escalate to a human; a hard guard denies dangerous tools since there's no one to ask; and a "decorative adversary" metric flags any reviewer that starts rubber-stamping. Autonomy you can actually leave running.
anvild hosts Claude Code, renders every event once, owns the git worktrees, and serves the clients over Tailscale. Nothing is exposed to the public internet.
The daemon isn't on the public internet. Your Mac and your devices talk directly over an encrypted Tailscale network — MagicDNS and ACLs, no ports to forward, no login server to trust.
Anvil only ever drives Claude through the Agent SDK on your Max subscription. It refuses to start if an API key is present — so a stray key can't quietly switch you to pay-per-token billing.
One conservative, reviewable table stands between "mostly autonomous" and an unattended rm -rf, force-push, or secret read. Anything on it blocks the session and asks you — from any device.
The web client is the daily driver and the shared render surface bundled into each native app — so mermaid, math, and select-to-cite work identically everywhere.
Served by the daemon at /. Installable PWA, offline-tolerant.
Kotlin WebView shell with native FCM push and ADB-over-Tailscale.
SwiftUI shell across Mac, iPhone, and iPad, with APNs push.
Menu-bar control panel — stand up the daemon and join a fleet, no terminal.
# 1 · install deps (Bun ≥ 1.3.14) cd anvild && bun install # 2 · authenticate with your Max subscription (one-time) export CLAUDE_CODE_OAUTH_TOKEN="$(claude setup-token)" # 3 · run the daemon — serves the web client on :7701 bun run start → open http://localhost:7701 # 4 · reach it from your phone over Tailscale tailscale serve --bg --https=443 http://localhost:7701 → https://<your-magicdns-host>/
claude setup-token authenticates the Agent SDK. No API keys in the environment.:7701. Open it in any browser on the machine.tailscale serve and every device you own can drive it. For an always-on, terminal-free setup, use the menu-bar Server app.Kick off the work on your workstation, walk away, and come back when Anvil taps you on the shoulder. Open source, private, and yours to run.