Control the tool call, control the agent. See and stop what your coding agent actually does — every command, edit, and fetch — with one control layer that works the same across Claude Code, Cursor, and Codex. Free, on your machine, no account.
curl -sf https://agenticcontrolplane.com/install.sh | bash -s -- --localOne command. It detects whichever agents you run and puts the same guardrails in front of all of them:
- A safety floor nothing can cross —
rm -rf /,mkfs,ddto a disk, a fork bomb, a force-push tomainare blocked regardless of your policy (and regardless of how the command is spelled). - Your rules, one file —
~/.acp/policy.json:allow/ask/denyper tool, applied identically to every agent. - A log of what actually happened —
tail -f ~/.acp/audit.jsonland watch the calls your agent made, on-device. Nothing leaves your machine.
The same policy that stops Claude Code stops Codex. You configure control once, not once per vendor. Outgrow on-device? Re-run without --local to connect a workspace — team control, cost X-ray, and a shared console across everyone's agents. The local runtime is the free individual on-ramp; the cloud is the team upgrade.
Works on macOS + Linux. Requires Node 18+ and one of: Claude Code, Cursor, OpenAI Codex CLI, OpenClaw.
Want the long version first? Every file the installer writes, in plain language · getting started · per-client guides for Claude Code and Codex CLI
For whichever AI clients it detects:
- Writes
~/.acp/govern.mjs— a shared hook dispatcher script that sends every tool call to the ACP governance API and enforces allow/deny decisions locally. - Registers PreToolUse + PostToolUse hooks in the client's config:
- Claude Code:
~/.claude/settings.json - Cursor:
~/.cursor/hooks.json - Codex:
~/.codex/hooks.json
- Claude Code:
- For Codex only — wires three layers:
- Enables
[features].codex_hooks = truein~/.codex/config.toml - Adds
[mcp_servers.acp]for non-Bash tool governance via MCP (with runtime credential substitution — no API key in your dotfiles) - Writes an ACP section in
~/.codex/AGENTS.mdinstructing Codex to callacp_checkbefore non-Bash tool invocations
- Enables
- Opens a browser for OAuth to provision an ACP workspace and mint an API key
- Saves the key to
~/.acp/credentials(mode 0600) - Installs the
claude-acpcost-X-ray wrapper (~/.acp/bin) and adds one marked PATH line (# acp-installer) to your shell rc
In --local mode, steps 4–6 and every other piece of cloud wiring are skipped entirely: no OAuth, no MCP server, no cost wrapper, no shell-rc edits. Hooks + the on-device engine only. (Codex note: its hooks cover shell commands today; non-Bash Codex tools aren't hookable yet — in cloud mode the MCP connector covers them.)
The installer is idempotent: running it again upgrades existing entries in place without duplicating them or touching unrelated hooks/policies you've configured.
- Source:
install.sh— one self-contained script, read it top-to-bottom - SHA-256:
https://agenticcontrolplane.com/install.sh.sha256— auto-updates on every Agentic Control Plane release - License: MIT
- Dry read:
curl -sf https://agenticcontrolplane.com/install.sh | less - Commit history: every change is here in this repo
The canonical install URL is agenticcontrolplane.com/install.sh (served from the marketing site). This repo is the auditable mirror.
- Run any non-interactive commands without prompting if creds already exist (it asks "Reconfigure? (y/N)")
- Install to directories you don't own (
$HOME/.acp/,$HOME/.codex/,$HOME/.claude/,$HOME/.cursor/only) - Phone home to any server other than
api.agenticcontrolplane.comand (during auth)cloud.agenticcontrolplane.com— and in--localmode, nothing leaves your machine at all (decisions run on-device from~/.acp/decide.mjs+~/.acp/policy.json; no network calls) - Modify anything outside the client config files documented above (cloud mode adds exactly one marked PATH line to your shell rc for
claude-acp; local mode touches no rc files) - Install binaries or compile anything — it's a pure shell + Node.js script
# Remove the ACP directory (credentials + govern.mjs)
rm -rf ~/.acp
# Remove the hooks from each detected client's config:
# - ~/.claude/settings.json remove the "govern.mjs" entries under hooks.PreToolUse[] and hooks.PostToolUse[]
# - ~/.cursor/hooks.json remove the "govern.mjs" entries under hooks.preToolUse[] and hooks.postToolUse[]
# - ~/.codex/hooks.json remove the "govern.mjs" entries under hooks.PreToolUse[] and hooks.PostToolUse[]
# - ~/.codex/config.toml remove the [mcp_servers.acp] block and [features].codex_hooks line
# - ~/.codex/AGENTS.md remove the block between <!-- acp:begin --> and <!-- acp:end --> markers
# - ~/.zshrc / ~/.bashrc remove the PATH line marked "# acp-installer" (cloud mode only)A one-line uninstall.sh is planned. Until then, the blocks above are small enough to remove by hand.
- Install broke something: open an issue here → github.com/agentic-control-plane/acp-install/issues
- Governance behavior questions: agenticcontrolplane.com/faq
- Integration details per client: agenticcontrolplane.com/integrations
MIT — see LICENSE.
Not a coding-agent CLI? Framework agents use acp-governance-sdks; Hermes Agent uses hermes-acp-plugin (pip install hermes-acp).