One binary. Pair once. Connect any MCP-speaking AI client. ~5 minutes start to first audited tool call. Works with Claude Desktop, Codex, Cursor, Continue, OpenClaw, Hermes Agent — anything that speaks MCP. Available today on macOS Apple Silicon (arm64), macOS Intel (x86_64), Linux x86_64, and Windows x86_64.
One single-file binary (~13 MB). No dependencies, no installer wizard.
macOS users get a real .app bundle — download, unzip, double-click.
Available for macOS Apple Silicon macOS Intel Linux x86_64 Windows x86_64
Universal one-liner — auto-detects platform + arch:
curl -fsSL https://app.proofpane.com/install.sh | bash
Works on macOS (arm64 + x86_64), Linux x86_64, and Windows x86_64
(run from WSL or Git Bash). Binaries served from
https://app.proofpane.com/daemon/.
Proofpane Daemon.app ·
sha256
· native macOS Apple Silicon (arm64) + Intel (x86_64)
curl from terminal (see the CLI section below) — bypasses the browser entirelyProofpane Daemon.app to your /Applications folderApple Developer ID signing + notarisation (no warnings at all) is on the roadmap.
Same binary that lives inside the .app, served as a bare file
so curl-based installers stay one-liners.
curl -fSL https://app.proofpane.com/daemon/airgov_daemon-darwin-x86_64 \ -o /usr/local/bin/proofpane chmod +x /usr/local/bin/proofpane # Strip the Gatekeeper quarantine flag set by curl on macOS xattr -d com.apple.quarantine /usr/local/bin/proofpane 2>/dev/null || true proofpane --help
SHA-256: airgov_daemon-darwin-x86_64.sha256
curl -fSL https://app.proofpane.com/daemon/airgov_daemon-darwin-arm64 \ -o /usr/local/bin/proofpane chmod +x /usr/local/bin/proofpane # Strip the Gatekeeper quarantine flag set by curl on macOS xattr -d com.apple.quarantine /usr/local/bin/proofpane 2>/dev/null || true proofpane --help
Native arm64 build for M1/M2/M3/M4 — no Rosetta needed.
SHA-256: airgov_daemon-darwin-arm64.sha256
curl -fSL https://app.proofpane.com/daemon/airgov_daemon-linux-x86_64 \ -o /usr/local/bin/proofpane chmod +x /usr/local/bin/proofpane proofpane --help
Linux x86_64 build.
SHA-256: airgov_daemon-linux-x86_64.sha256
# Run from WSL or Git Bash: curl -fSL https://app.proofpane.com/daemon/airgov_daemon-windows-x86_64.exe \ -o "$HOME/bin/proofpane.exe" chmod +x "$HOME/bin/proofpane.exe" proofpane --help
Windows x86_64 build. Authenticode signing is on the roadmap so SmartScreen stays quiet.
SHA-256: airgov_daemon-windows-x86_64.exe.sha256
In the Proofpane app: Devices → Pair new device → copy the 6-character code (valid for 5 minutes).
Then in your terminal:
AIRGOV_CLOUD_URL=https://api.proofpane.com \ proofpane pair J2W-UCF-LCL
You should see:
Pairing with https://api.proofpane.com Code: J2W-UCF-LCL Name: MacBookPro (Darwin) Paired successfully. device_id: 831aecd2-dc82-4590-8b1a-a2e031d82108 config: /Users/yilu/.airgov/config.json --- Auto-configuring detected MCP clients --- Detected: Claude Desktop, Claude Code (CLI), Cursor, VS Code Copilot, Codex app ✓ Claude Desktop: configured ✓ Claude Code (CLI): configured ✓ Cursor: configured ✓ VS Code Copilot: configured ✓ Codex app: configured ✓ Pair + MCP client setup both done. Restart the apps above to pick up the new server.
The pair command auto-detects every supported MCP client and writes its
config in the right shape (JSON / TOML / YAML). One-time setup,
one command. The token in ~/.airgov/config.json is what
authenticates every subsequent tool-call audit row.
Need to skip the auto MCP install? Add --no-auto-install-mcp to the pair
command — you can run proofpane install-mcp separately later.
The pair step already wrote the proofpane entry into every detected
client's config. Now just restart them so the changes take effect:
claude invocation picks it upWant to inspect / change what was written? Three useful flags:
proofpane install-mcp --list — show which clients were detected + format usedproofpane install-mcp --dry-run — preview the diff without writingproofpane uninstall-mcp — clean removal; preserves your other MCP serversPrefer to edit the config files yourself? The exact JSON / TOML / YAML the auto-installer writes is below — pick your client to see the snippet:
Edit ~/Library/Application Support/Claude/claude_desktop_config.json
(macOS) or the equivalent on your OS. Add a proofpane entry under
mcpServers:
{
"mcpServers": {
"proofpane": {
"command": "proofpane",
"args": ["mcp"],
"env": {
"CP_VENDOR": "claude_desktop",
"CP_AGENT": "default"
}
}
}
}
Fully restart Claude Desktop. The Proofpane MCP server appears under Settings → Connectors as Connected.
Settings → Connectors → Connect to a custom MCP. Fill the form:
Name proofpane
Transport STDIO
Command to launch proofpane
Arguments mcp
Environment vars CP_VENDOR = codex_desktop
CP_AGENT = default
Working directory (leave blank or set to project root)
Save. Codex spawns the daemon on first tool call.
Settings → MCP → Add server:
{
"mcpServers": {
"proofpane": {
"command": "proofpane",
"args": ["mcp"],
"env": {
"CP_VENDOR": "cursor",
"CP_AGENT": "default"
}
}
}
}
Reload Cursor. Tools surface in the agent panel.
Edit ~/.continue/config.json:
{
"experimental": {
"modelContextProtocolServers": [
{
"transport": {
"type": "stdio",
"command": "proofpane",
"args": ["mcp"],
"env": {
"CP_VENDOR": "continue",
"CP_AGENT": "default"
}
}
}
]
}
}
Anything that speaks MCP works. The shape is always:
proofpane (or full path if not on PATH)["mcp"]CP_VENDOR (descriptive label),
CP_AGENT (agent-policy lookup key)
That's it. The daemon answers the MCP initialize handshake,
advertises its tool catalog, and routes every tools/call through
the policy gate + audit chain.
slack-mcp__send_message), and routes calls through the same
policy / HITL / DLP / audit pipeline. The per-row toggle is the killswitch:
click off → SIGTERM lands in <2 s, no client restart needed.
CP_AGENT, the daemon denies every tool call. This is intentional:
a fresh install can't read your filesystem until you say which paths are allowed.
In the app: MCP Setup → Agent Policies → New policy. Reasonable starter:
Agent name default (matches CP_AGENT)
Description Dev workstation
Allowed paths ~/projects/**
/tmp/**
Denied paths ~/.ssh/**
~/.aws/**
/etc/**
/var/log/**
Bash policy ask (HITL prompt for every bash)
Default decision deny (catch-all: refuse the unknown)
Valid until (blank = permanent)
Save. Tool calls into allowed paths execute immediately; bash routes through Slack / Tray HITL approval; everything else is denied with the matched rule recorded on the audit row.
In your AI client, ask:
What files are in the current directory?
Then open app.proofpane.com/agent-activity — the unified agent activity dashboard (MCP-native + broker traffic on one chain; filter by Source to slice). The By client + version card should show one row:
client version calls denied Codex 26.429.30905 1 0
That's the MCP initialize handshake's clientInfo flowing
through. Every subsequent tool call increments calls; any
policy denial increments denied. Six years from now, a regulator
opens the Evidence Pack for this window and sees the same row, same hash,
same answer.
Prefer to verify from the terminal? The daemon ships a
one-shot health subcommand:
airgov_daemon health
Prints the resolved config path, the paired cloud URL, the device id, and a ready / not-ready line summarising reachability of the cloud control plane. Handy from CI / shell scripts.
For native-OS HITL approval pop-ups (when an agent hits a bash gate or a high-risk skill output): a small system-tray app that subscribes to your org's HITL queue and surfaces approve / deny prompts without context-switching.
"Not paired" after running proofpane pair
Pairing codes expire in 5 minutes — generate a fresh one. Also check the
cloud URL matches your deployment:
AIRGOV_CLOUD_URL=https://api.proofpane.com.
"No policy configured for agent X" on every tool call
Your CP_AGENT env value (default default) must
exact-match a policy's Agent name. Open
MCP Setup and either
create the policy or rename the existing one.
Audit rows not showing on /agent-activity
You're probably looking at the wrong org. The daemon writes to whichever org
it paired against — check ~/.airgov/config.json's device_id
against your Devices list, and
make sure the logged-in org matches.
macOS Gatekeeper blocks the binary on first run
The binary is unsigned in early-access. Remove the quarantine attribute:
xattr -d com.apple.quarantine /usr/local/bin/proofpane.
A signed build ships with the first paid release.
Codex / client doesn't see Proofpane after config
Most MCP clients only re-read config on full restart (not in-app reload). Quit completely and re-launch.