Skip to main content

Approve or deny your AI coding agent's risky commands from your phone, with an audit trail. Works with Claude Code and OpenAI Codex.

Project description

AgentGuard

A guardrail layer for autonomous coding agents. AgentGuard classifies the risk of every shell command and file edit your AI coding agent attempts, routes the risky ones to your phone for approval, and — critically — denies by default when no one responds. Every decision is logged.

Not a remote-control app. Anthropic's Remote Control already lets you drive a Claude session from your phone. AgentGuard is the policy layer underneath: it decides what an agent is allowed to do, enforces protected files unconditionally, fails safe, and is built to gate any agent — not just one vendor's.

Why it exists

Native permission prompts (and Remote Control's mirrored version of them) ask "allow this?" with no risk model, no protected-file enforcement, and no fail-safe: ignore the prompt and nothing is denied. AgentGuard adds the missing governance layer:

Native prompt / Remote Control AgentGuard
Risk classification CRITICAL → LOW, defaults to "ask"
Protected files (.env, CI, lockfiles, .claude/) Always re-affirm, bypass auto-allow
No-response behavior nothing denied default-deny (fail-safe timeout)
Phone-set guards / auto-rules yes
Audit trail every classify/approve/deny logged

How it works

A PreToolUse hook intercepts the agent's tool call, a classifier scores it, and:

  • LOW → auto-approve.
  • CRITICAL → auto-deny.
  • MEDIUM / HIGH → sent to your phone with a diff/snippet; blocks until you decide.
  • Protected file (gate config, secrets, supply-chain/CI) → always reaches you, regardless of score.
  • No decision within the timeoutdeny (fail-safe).

Install

pip install agentsguard            # the CLI command is `agentguard`
agentguard install-hooks          # wire hooks into this project (.claude/settings.local.json)
agentguard install-hooks --global # …or all projects (~/.claude/settings.json)

Then restart Claude Code (or run /hooks). It's idempotent and leaves any other hooks in place.

Approval channels

AgentGuard is transport-agnostic — the gate is the product, the channel is a detail:

  • Telegram (default, zero infra):
    agentguard init                 # bot token + chat id
    
  • Cloud relay + mobile app (approvals from anywhere):
    agentguard pair                 # link this machine to the phone app
    

Quick manual test (no agent needed):

agentguard approve-command "git push origin main"   # exits 0 (allow) / 1 (deny)

Approval modes (agentguard mode)

Mode Who approves Use when
phone (default) Only your phone. The local popup is suppressed — the hook tells Claude Code allow/deny directly, so work continues the instant you tap. You're away, or don't want anyone at the keyboard approving for you.
laptop Only the local prompt. No phone notifications; the hook steps aside. You're at the desk and don't want phone pings.

agentguard mode laptop takes effect immediately (read at runtime).

Claude Code hook

install-hooks wires the gating + notification hooks with the correct local path filled in. The gating hook looks like:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          { "type": "command", "command": "agentguard hook --timeout 1800", "timeout": 1800 }
        ]
      }
    ]
  }
}
  • Critical invariant: the inner --timeout must be the outer "timeout", or Claude Code kills the hook before your phone can respond. install-hooks keeps them matched.
  • Hook config changes take effect only after restarting Claude Code (snapshotted at session start). Hook code is live with an editable install.

Other commands

agentguard logs -n 20      # activity timeline
agentguard pending         # is a command awaiting me, or did it stop?
agentguard resume          # lift a Stop kill-switch
agentguard instructions    # show instructions sent from the phone

Storage

All state lives in ~/.agentguard/: config.json, approvals.json, instructions.json, audit_log.json.

License

Proprietary. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agentsguard-0.4.0.tar.gz (83.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agentsguard-0.4.0-py3-none-any.whl (90.5 kB view details)

Uploaded Python 3

File details

Details for the file agentsguard-0.4.0.tar.gz.

File metadata

  • Download URL: agentsguard-0.4.0.tar.gz
  • Upload date:
  • Size: 83.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for agentsguard-0.4.0.tar.gz
Algorithm Hash digest
SHA256 8ad7171ef16c9cf14041e748f0f945fee0f2ad77d83a158ff6ef85690e327d86
MD5 1f4614bfeb0df88bead25cb89e4e443f
BLAKE2b-256 3b3b7b8278421db1c0414a64e3e2efcfd0f3d54335e9f6b7d9ba782d4b0305f0

See more details on using hashes here.

File details

Details for the file agentsguard-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: agentsguard-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 90.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for agentsguard-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 54d3e3b3a00e297111a8a99fe038dc6f185800835b2b0fb896526dd4bc1be1f4
MD5 df867b870c6eadeb47512ba167804998
BLAKE2b-256 96d6d5d67a1bd4665ebac04a8e5140ff756074a01afe619c457e04834ab7a780

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page