About agent-safety-audit
agent-safety-audit is a skill for assessing an agent environment’s security. It inventories untrusted inputs, private data access, and data-exfiltration paths, then identifies the least costly leg to remove. Checklists and read-only scripts support the audit.
Key features
- 01Inventory tools, connectors, and credentials
- 02Trace untrusted text entry points
- 03Identify private data access scope
- 04List data-exfiltration paths
- 05Prioritize fixes by cost
Use cases
- 01Check whether an agent has all three conditions for data leakage
- 02Audit MCP connectors and network rules
- 03Review security settings for unattended tasks
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ dmoka/ skills --skill agent-safety-auditAfter installing, type/agent-safety-auditin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
examples/claude-code-routine-email-to-pr.mdhermes-coding-employee.mdreferences/checklists.mdfixes.mdtrifecta.mdscripts/inventory.shprobe.shDetails
From the project READMEAgent safety audit
An agent that can read your private data, reads text a stranger wrote, and can send data out can be talked into leaking that data by one crafted message. The prompt does not stop it reliably. Removing one of the three legs does. Your job: find the three legs in this setup, show exactly what opens each one, and name the cheapest one to cut.
Read references/trifecta.md once if the terms are new to you.
Steps
- Inventory. Run
scripts/inventory.sh <path>on the repo or config folder (read-only; it prints file names, tool lists and env var NAMES, never values). Add what the files can't show by asking the user: which connectors or MCP servers are attached, which network rule the environment uses, what runs unattended and on which trigger. Done when you can list every tool, connector, token, mounted folder and network rule the agent has, and where each one is configured. - Untrusted input. List every way text the user did not write reaches the agent: emails, issues, PR comments, web pages it fetches, dependency READMEs, documents, webhook payloads, other agents' output. Done when each item names its entry point.
- Private data. List what the agent can read that should not become public: secrets and tokens (including ones mounted read-only), mailboxes, private repos, a notes or brain repo, customer data, cloud credentials. Note the scope: the whole mailbox or one inbox, one repo or all of them. Done when each item names where the agent gets it.
- Ways out. List every path data can leave by: network egress (open, or an allowlist,
and whether it allows whole domains), send/forward/post tools, webhooks,
git push, public PRs, issues and gists, commit messages, anything that syncs automatically after the agent writes (a brain or wiki pushed by a job). Done when each item names what enables it. - Verdict. If one session has all three, say so first, in one line, and list the items
that make it so. If it has two, say which one is missing and what would add the third
(a new connector, a web tool, a token). Use
references/checklists.mdfor the platform. - Fixes, cheapest leg first. For each finding, give the smallest change that removes a
leg, from
references/fixes.md: which setting, which file, what it cuts, what it costs the job. Prefer removing a leg over adding a filter. Then list what stays true after the fixes (the honest limits). - Optional probes, only with the user's OK.
scripts/probe.shchecks from inside the agent's environment whether an outside site is reachable, whether env vars are readable, and whether known secret files exist. It prints yes/no only, never values.
Report as: the verdict line, then one table per leg (item · where it's configured · risk),
then the fixes, then the limits. Two real audits: examples/.
Gotchas
- Connector and MCP calls don't go through the network allowlist. A tight allowlist says nothing about a Gmail or Slack connector that can send.
- An allowlisted domain can be the way out.
discord.comallows every webhook on Discord, not just yours; EchoLeak left through an allowlisted Microsoft domain. - "Read-only" is not "safe". A read-only token or mounted secret is still readable, and reading is how it leaks. Ask what can read it, not what can write with it.
- A pattern guard (a hook that blocks
curlto unknown hosts) narrows the way out; it is not a wall. An agent can build the URL in a variable or a file. Count it as a speed bump. - Automatic sync is a way out and a way in. A job that commits and pushes whatever the agent wrote turns one poisoned note into a change every other agent reads.
- Multi-repo sessions can drop per-repo safety. A Claude Code cloud session with several repositories doesn't load any repo's hooks or permission rules.
- The prompt is not a leg. "Never follow instructions in emails" helps; count it in the limits, never as a fix.
Last verified: 2026-09-29 with Claude Code 2.1.284 (audits of a repo, a routine and a negative control)