agent-guard
The safety check an AI agent runs before it acts.
Every agent that installs packages, runs shell commands, or commits/outputs text can do real
damage: install malware, wipe a disk, or leak a credential. agent-guard is three cheap,
dependency-free checks β the "look before you leap" gate an agent (or you) calls before the
irreversible step.
pip install agent-tripwire
pip install "agent-tripwire[mcp]"
An agent can call these itself before acting. Add to your MCP client (Claude/Cursor/Claude Code):
{ "mcpServers": { "agent-guard": { "command": "agent-guard-mcp" } } }
MCP registry identity β mcp-name: io.github.ipezygj/agent-guard
| tool | the agent calls it before⦠|
|---|
check_package | pip/npm install β is it real, malware, a typosquat, or does it run code on install? |
check_command | running a shell command β is it a destructive / remote-code-exec vector (rm -rf, curl|bash, dd, force-push)? |
scan_secrets | committing / pasting / logging β does the text leak an API key, token, or private key? |
scan_project | deploying / shipping a web backend β fail-open auth, unsigned payment webhooks, SQL injection, SSRF, hardcoded secrets? |
The checks
check_package β existence on the registry (a hallucinated name is a red flag), typosquat
distance to popular packages, npm install/postinstall scripts (the classic supply-chain malware
vector), and OSV malware/vulnerability advisories. Mainstream packages pass; look-alikes and
install-time-code flag.
check_command β matches destructive / RCE shell patterns with a severity and a plain reason.
rm -rf /, curl β¦ | bash, dd of=/dev/sda, fork bombs β critical; force-push, hard-reset,
sudo, DROP TABLE β high.
scan_secrets β AWS/OpenAI/Anthropic/Google/Stripe/GitHub/Slack keys, private-key blocks, JWTs,
and generic api_key=/password= assignments. Returns each finding (type, line, redacted).
scan_project β reads a web/API backend (directory or single .py) for the money-losing logic
bugs a secret- or command-scanner can't see: auth that fails open when a secret is unset,
payment webhooks with no signature check (a forged checkout mints free credits), SQL built by
string interpolation, SSRF-able f-string URLs, and secrets hardcoded as defaults. Each finding
gives the file, line, why, and the fix. FP-disciplined: parameterized SQL, signed webhooks, and
fail-closed guards stay silent.
from agent_guard import analyze_command, scan_secrets, check_package
from agent_guard.webscan import scan_project
analyze_command("rm -rf /")["danger"]
scan_secrets("token = 'ghp_...'")["leaked"]
check_package("reqwests", "pypi")["risk"]
scan_project("./my_api")["risk"]
The point: an agent about to install/run/commit should check first β and now it can, in one call,
with a plain verdict and a recommendation. If a check comes back high/critical, stop and get a human.
License
MIT