Skip to content

surface

What AI runs here, and what it costs.

One binary, one local scan, no account. It reads the transcripts, history and config already on your disk, then tells you what runs here and what it cost.

curl -fsSL https://raw.githubusercontent.com/holistic-ai/surface/main/install.sh | sh
irm https://raw.githubusercontent.com/holistic-ai/surface/main/install.ps1 | iex
powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://raw.githubusercontent.com/holistic-ai/surface/main/install.ps1 | iex"

irm and iex are PowerShell only, so cmd hands the job over.

cargo install surface-cli

Every release ships SHA256SUMS, and the installer checks the download against it before it moves anything. All the ways in.

Why surface

AI tooling arrives one install at a time — an agent in ~/.local/bin, an assistant in /Applications, an extension in a .vscode directory, a browser tab doing the rest. None of it is written down. Neither is the bill: the tokens are spent here, but the invoice arrives monthly, aggregated, detached from the work that caused it.

surface answers both from local files only. It reads the transcripts your tools already write and the history databases already on disk, then prices them against LiteLLM's public rate table. No daemon, no account, no telemetry — one optional request, for prices.

It is narrow on purpose: no message content, no URLs, no paths. The AI-domain filter runs inside SQLite, so the rest of your browsing never reaches memory, and working directories become owner/name before anything is stored. Privacy has the full list.

What is inside

Installation

cargo install, a prebuilt binary, or a build with no C toolchain at all.

Quickstart

First scan, first dashboard, and what the first run costs you in time.

Core concepts

The scan, the ledger, the price table and the repo attribution — five ideas.

The dashboard

Five views, every key, and what each column actually measures.

Costs

Where the money figures come from, and the four ways they can be wrong.

Privacy

What is read, what is stored, what is never touched, and what is unreadable.

Quickstart

cargo install surface-cli   # crate name; the binary is `surface`
surface

That is the whole setup — no config file, no login. To pipe the same scan into something else:

surface --json --offline | jq '.usage.totals_by_tool'

At a glance

Binary ~2 MB, static, no runtime dependencies
Warm scan ~400 ms — 6 ms tools, 330 ms browser history, 50 ms transcripts
Cold scan ~19 s once, reading 900 MB of transcripts; ~50 ms thereafter
Coverage 18 AI tools · 30 AI domains · 10 browsers · 3 token sources
Platforms macOS, Linux, Windows — x86-64 and arm64
Privilege Runs unprivileged. Never elevates, never prompts
Network One optional request, for model prices. --offline skips it

New here?

Start with Installation, then the Quickstart. If you want to know why a number says or unpriced before you trust it, read Core concepts and then Costs.