Agent config security audit
Skill yeaight7/agent-powerups/skills/agent-config-security-audit
Use when modifying agent config files, committing configuration changes, onboarding a repository with existing agent configs, or running a periodic config hygiene check.From its SKILL.md
npx -y skills add yeaight7/agent-powerups --skill agent-config-security-auditAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.6 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
Agent Config Security Audit
Systematic security review of agent configuration files. Run before committing config changes or onboarding a new repository.
When to Use
- After modifying any agent config file (
.claude/settings.json,.claude/mcp.json, AGENTS.md, hooks) - Before committing configuration changes to version control
- When onboarding a project with existing agent configs
- Periodic hygiene check (monthly or after a major dependency update)
Scope
Audit every config file present:
| File | Agent |
|---|---|
.claude/settings.json | Claude Code |
.claude/mcp.json (or project-root mcp.json) | Claude Code |
.codex/config.toml | Codex |
docs/AGENTS.md (project root) | Generic/Codex |
docs/CLAUDE.md (project root) | Claude Code |
hooks/ | Any |
plugins/*/plugin.json | Agent Powerups |
.apx/relay/*.json | apx relay |
Audit Checklist
Secrets and Credentials
- No API keys, tokens, or passwords hardcoded in any config file
- All secrets referenced as
$ENV_VARorprocess.env.*— never literal values -
.envand.env.localfiles are in.gitignore - MCP server
envfields contain variable references, not values
P0 (block immediately): Hardcoded secret in any committed file.
Permissions and Allow Lists
-
allowedToolsis scoped — noBash(*)wildcard granting unrestricted shell access -
deniedToolslist is present and non-empty for risky operations - MCP server tool scopes match the stated purpose of the server
- No
--no-verify,--force, or safety-bypass flags in hook commands
P0: Bash(*) or equivalent wildcard in allow list.
P1: No deniedTools list when Bash is in scope.
Hooks
- Hook commands use fixed strings — no
${file},${input}, or other user-interpolated variables - No outbound network calls (
curl,wget) in hooks without explicit user knowledge - Errors in safety hooks are not silently suppressed (
2>/dev/null,|| true) - PreToolUse hooks for high-risk tools (file delete, shell exec) are present
P0: Command injection via interpolation in any hook. P1: Silent error suppression on a security or quality hook.
MCP Servers
- Each server is from a known, trusted source
- No
npx -ywithout a pinned version or digest - Each server has a
descriptionfield - Servers not in active use are removed or disabled
P1: Unpinned npx -y auto-install in MCP server config.
AGENTS.md / CLAUDE.md
- No auto-run instructions that would execute arbitrary commands on session start
- No instructions that unconditionally override safety behavior
- Prohibitive instructions present (explicit list of what the agent must NOT do)
- No prompt injection patterns (user-controlled values inlined into instructions)
P1: Auto-run instruction with shell exec; unconditional safety override.
Plugin Manifests
- Each plugin's manifest (
plugins/NAME/.codex-plugin/plugin.json) declares tool access scoped to its purpose - No plugin grants broader access than it needs
- Plugin version pinned, not
latest
Relay Config (if present)
- Relay session files (
.apx/relay/) are in.gitignore - No secrets in relay artifact files
Classification
| Severity | Definition | Response |
|---|---|---|
| P0 | Can directly compromise security or leak secrets | Fix before any commit; do not push |
| P1 | Increases attack surface or weakens safety controls | Fix before merging; document exception if deferred |
| Note | Best practice not followed, no direct risk | Fix in follow-up; log as tech debt |
Report Format
Agent Config Security Audit — <project>/<date>
P0 findings:
[P0] <file>:<line> — <description>
Fix: <what to change>
P1 findings:
[P1] <file>:<line> — <description>
Fix: <what to change>
Notes:
[Note] <file> — <description>
Summary: <N> P0, <N> P1, <N> Notes
If no findings: state "No findings." explicitly.
Verification
- Every config file present in the repo was checked against its checklist section — none skipped
- Each finding is classified P0/P1/Note with file, location, and a concrete fix
- The summary line is present, or "No findings." is stated explicitly
- No commit or push was recommended while a P0 finding remains unfixed
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.
Gives 0 of the 12 instructions most project setup skills give in ~1.1k tokens
Counted across 1,553 of the 3,091 authors here whose files we hold, read 2026-09-06
- Write the configuration filein 36 of 1553
- Create the directory structurein 35 of 1553, across 33 files
- Verify the setupin 31 of 1553, across 28 files
- Run the setup scriptin 30 of 1553, across 29 files
- Pre-determine the required sample sizein 29 of 1553, across 12 files
- Check if the configuration already existsin 29 of 1553
- Document every testin 26 of 1553, across 10 files
- Start with a hypothesisin 26 of 1553, across 11 files
- Ask one question at a timein 22 of 1553
- Test a single variable per testin 21 of 1553, across 9 files
- Read product marketing context before asking questionsin 19 of 1553, across 8 files
- Do not peek and stop earlyin 18 of 1553, across 7 files
Said here and by no other author read
- Audit every config file present
- Scope allowed tools without wildcards
- Ensure denied tools list is non-empty
- Use fixed strings in hook commands
- Pin MCP server versions or digests
- Classify findings as P0, P1, or Note
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.