Install
Two commands, entirely in your terminal - no app to open. Install the binary, then link this device. After you link, Surfil connects itself to the coding agents you already use.
surfil login needs an active plan to link against. The shortest way in is 14 days of Pro for $1: start the trial. It becomes $25/mo on day 15 unless you cancel, and we mail you 3 days before.1 · Install
On macOS or Linux, run:
curl -fsSL https://surfil.com/install.sh | shOn Windows, in PowerShell, run (CLI only: this installs the binary, not interception):
irm https://surfil.com/install.ps1 | iexIf the installer prints a PATH line, run that line too (once) so your shell can find surfil:
export PATH="$HOME/.local/bin:$PATH"2 · Link this device
Run this and approve the code in the browser tab it points you to:
surfil loginThe private key is generated on-device and never leaves it - only the public key is registered, and your role in the browser is a single yes/no approval. The moment it links, Surfil auto-detects and connects your installed agents through reversible contracts, so it starts working with them right away.
Agents it connects
On link, Surfil connects every tool it can - each by its real mechanism, never an over-claim. Run surfil doctor to see which you have and how each one connects:
surfil doctor- Claude Code - full: base URL (its settings.json env block) + MCP servers.
- Env-routed CLIs - Codex, opencode, Aider, ShellGPT, mods, llm, Open Interpreter and more honour the standard provider env vars, so the shell profile block routes them.
- MCP hosts - Cursor, Windsurf, Claude Desktop, Cline: Surfil's MCP server plugs into their config. Their model completions run through their own backend, so their base URL is not redirected here.
- Detected - Copilot, VS Code, Zed, Gemini CLI, Continue: recognised, with a manual option where the editor allows it (below).
Every change is reversible - each file is snapshotted byte-exact and surfil uninstall restores it. Detection is local and read-only; nothing about which tools you have leaves your machine.
ANTHROPIC_BASE_URL pointing straight at the provider, and an inherited environment variable beats any config file. Its bundled engine routes correctly once that variable is removed, which is how we know the cause rather than guessing it. So anything you do inside the desktop app is not measured, not screened and not in any figure Surfil shows you. Claude Code in a terminal, launched after surfil connect, is intercepted normally.Connect a GUI editor manually
Editors like Cursor and Zed keep their model calls on their own backend, so Surfil cannot redirect them from a config file. Where the editor exposes a custom base-URL setting, point it at the on-device proxy yourself - no CA, no interception of anything else:
surfil connectIt prints the exact clicks per editor and the local endpoint to paste (http://127.0.0.1:8788/v1). For Cursor this covers its chat/plan panel; features that use Cursor's own backend are unchanged.
Build from source
For a platform without a prebuild yet, build it yourself. With Rust installed, run:
cargo build --release -p surfil-cliThen put the binary on your PATH:
install -m 0755 runtime/target/release/surfil ~/.local/bin/surfilAnd link the device the same way:
surfil loginUninstall
Restores every agent config from its byte-exact snapshot and removes the runtime:
surfil uninstallNext
- Quickstart - from install to your first verified receipt.
- Zero-trace - exactly what leaves the device (and what never does).