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.
The product model
The screenshot below is the full Proofpane build — every capability in one place, including the built-in governed assistant. That is not what every employee sees.
Audit, compliance mapping, policies, evidence export, cost metering, workflows and the governed assistant — the whole surface, shown above.
Each client receives a desktop carved from the full product around its governed use cases — not a one-size install.
Inside the same client, people see different interfaces, actions and permissions according to role — an underwriter's screen is not the admin's.
And the server runs wherever you need it. Proofpane ships as Docker images — our cloud, your cloud, or entirely on your own hardware behind the firewall. Same product, same evidence chain.
The one integration that matters on day one: your identity provider. Proofpane plugs into your existing single sign-on via OIDC — Entra ID, Google and Okta all speak it — and role-level isolation is enforced from the first login: each person sees exactly what their role allows, nothing more. Whether GCP, AWS or Azure sits underneath makes no difference; identity is the seam that matters, and it is a small one.
The universal layer
Whatever shape the client desktop takes, every employee machine installs the same small Proofpane tray daemon. It sits in the menu bar and does its job quietly:
Official vendor hooks — no spyware, no traffic interception. And the interception toggle you can spot in there? OFF, by design.
The install
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.