ai-audit
Skill9 starsChanged 23 days agoMITView on GitHub
Audits an AI/LLM codebase across nine surfaces using the SCAN method and returns a ship/conditional/hold verdict. Use when asked to review, audit, or security-check an AI agent, LLM app, RAG pipeline, or prompt/tool-calling system for AI-specific risks. Static analysis only.
4 other projects use a version of this.
Adopted by
Most recently taken up by
- Bartosh16/claude-skillstheir own version, first seen Aug 28, 2026
- AlonMiz/ai-audittheir own version, first seen Aug 25, 2026
- Ajeesh25353646/claude-skillstheir own version, first seen Jun 3, 2026
- kumaran-is/claude-code-onboardingtheir own version, first seen May 25, 2026
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 4
- kumaran-is/claude-code-onboarding★ 35same name
- AlonMiz/ai-audit★ 4same name
- Bartosh16/claude-skills★ 3same name
- Ajeesh25353646/claude-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository22 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- bulk-readSkill
- canon-slidesSkill
- captureSkill
- context-checkSkill
- context-doctorSkill
- dead-code-cleanupSkill
- doc-auditSkill
- learnings-sweepSkill
- mikadoSkill
- mutation-testSkill
- output-validatorSkill
- promote-learningsSkill
- pr-reviewSkill
- repo-auditSkill
- repo-workflow-auditSkill
- sdlc-auditSkill
- skill-evalSkill
- skill-exportSkill
- sprintSkill
- wrapupSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
14 rules. 0 are common, 9 are distinctive, and 5 are very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
9
Distinctive
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 27
Static analysis only: Read the code. Never run the system, call the model API, or execute the agent.
- Very specific: line 64
Check: is retrieved/tool/third-party content concatenated into a prompt without a trust boundary or delimiting?
- Distinctive: line 72
Check: read the tool/function definitions.
- Distinctive: line 79
Check: are system prompts / keys hardcoded where the model or logs can echo them?
- Very specific: line 88
Check: is model output used unsanitized in a shell command, SQL string, eval/exec, file path, or rendered as HTML/markdown without escaping?
- Distinctive: line 94
Check: are there max-token / max-turn / timeout bounds on model calls?
- Distinctive: line 100
Check: are retries bounded with backoff?
- Distinctive: line 110
Check: are RAG sources validated/trusted, or can any writer inject retrievable content?
- Very specific: line 118
Check: are prompts/completions/tool calls logged in a structured, traceable way (without leaking secrets — cross-check secret-surface)?
- Very specific: line 126
Check: can a prompt/model/retrieval-config change be rolled back without a redeploy?
- Very specific: line 154
Write the report inline and to critique/ai-audit.md in the audited repo (create critique/ if absent), with the run DateTime as the first …
- Distinctive: line 187
Non-AI repo: if there's no model/agent code, do not manufacture findings — report a limited-scope Scope note and stop.
- Distinctive: line 189
Theoretical risk is not a finding: No identified sink + plausible path → don't report it.
- Distinctive: line 195
No score, no OWASP numbers: If you're tempted to write "8/10" or "LLM01", stop — use surface names and the three-tier verdict.
“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
AI Audit
Static audit of an AI/LLM codebase across nine AI-specific surfaces, producing a
ship | conditional | hold verdict. Human-facing name: AI System Audit.
A composition overlay, not a replacement. It delegates general vulnerabilities to
security-review (skills/wrapup/gates/security-review.md) and does not re-implement repo-audit
(code quality), doc-audit (doc accuracy), or context-check (context load). It adds the nine
AI-specific surfaces those skills don't cover.
When to use
Triggers: "audit this AI agent", "review our LLM app for security", "is this RAG pipeline safe to
ship", "check our prompt/tool-calling code". Not for general repo health (repo-audit), a single
sprint diff (sprint's own review/eval gates), or governance/compliance sign-off (out of scope —
see below).
Operating constraints
- Static analysis only. Read the code. Never run the system, call the model API, or execute the agent. No dynamic probing.
- Evidence, not theory. Report a finding only at HIGH or MEDIUM confidence — an identified
sink plus a plausible attacker-controlled (or unbounded) path. Do not flag worst-case speculation.
Same bar as
security-review. - No numeric score. A single number hides which surface is weak. Report per-surface ratings and one verdict, never a percentage or grade.
- No OWASP
LLMxxnumbering in the report. Use the canon surface names below. (The mapping exists for the auditor's reference only.) - Input is a directory or a file list, not a single file — AI systems span prompt templates, tool/function definitions, agent orchestration, retrieval/RAG config, and deployment manifests.
SCAN
Apply four phases in order:
- Scope. Define the system boundary before checking anything: what the AI does, which tools it can call, what data it reads/writes, and what trust/permissions it's granted. List the files that make up each (prompts, tool defs, orchestration, retrieval config, deploy manifests). If the target has no LLM/agent code at all, say so and stop with a limited-scope note — do not invent AI findings for a non-AI repo.
- Check. Evaluate each of the nine surfaces below against its risk patterns. Classify every
finding as blocking, conditional, or advisory. Cite
file:linefor each. - Anchor. Map findings to the highest-leverage fix points — the single change that removes the most risk (e.g. one output-sanitization boundary covering many sinks). Group findings by fix, not just by surface.
- Note. Produce the verdict with rationale, and surface any gap that needs a human decision before shipping (including the out-of-scope items below).
The nine surfaces
Priority reflects severity × how reviewable it is in static code. Check P0 first.
P0 — check first
input-trust — all untrusted input reaching the model: user prompts, retrieved documents, tool
outputs, agent-to-agent messages, file/email/web content.
- Check: is retrieved/tool/third-party content concatenated into a prompt without a trust boundary or delimiting? Are system and user roles separated? Is there any indirect-injection path (RAG doc or tool output that can carry instructions)?
- Blocking if: attacker-controllable text reaches the prompt with no separation and the model's output drives a privileged action.
agency-scope — how much the model can do autonomously: tool permissions, action scope,
human-in-the-loop gates, irreversibility controls.
- Check: read the tool/function definitions. Are destructive/irreversible tools (delete, send, pay, deploy, write) gated by a human confirmation or a scope limit? Is tool access least-privilege, or does the agent hold broad credentials? Can one model turn chain multiple state-changing calls?
- Blocking if: the model can trigger an irreversible/external-effect action with no human gate and no scope bound.
secret-surface — what the model can expose: system prompts, PII, credentials, internal config.
- Check: are system prompts / keys hardcoded where the model or logs can echo them? Are prompts and completions logged or cached with secrets/PII in them? Is there an instruction that assumes the system prompt is confidential (it is not — treat as extractable)?
- Blocking if: a credential or PII is reachable in a context window, log, or cache the model or an external caller can read.
P1
output-handling — LLM output passed to downstream systems, shells, eval, DB, or a UI.
- Check: is model output used unsanitized in a shell command, SQL string,
eval/exec, file path, or rendered as HTML/markdown without escaping? Are model-proposed actions validated before execution? - Blocking if: model output reaches a code/command/markup sink with no validation or escaping.
resource-control — token budgets, rate limits, retry caps, cost alerts, per-feature spend.
- Check: are there max-token / max-turn / timeout bounds on model calls? Rate limiting on user-facing endpoints? A cost/quota guard or alert? Unbounded loops that call the model?
- Blocking if: a user-reachable path can drive unbounded model calls/tokens with no cap (DoS / cost runaway).
retry-idempotency — retry logic and state-changing tool calls.
- Check: are retries bounded with backoff? Is transient-vs-semantic failure routed differently (a bad-output retry shouldn't hammer)? Are state-changing tool calls idempotent / deduplicated so a retry doesn't double-execute? Is there a hard stop to human review on repeated failure?
- Blocking if: a retried state-changing call can double-execute, or retries are unbounded.
P2 — read-and-reason (config understanding, not just grep)
data-integrity — provenance and access control of everything that feeds the model: RAG
sources, embedding stores, fine-tune/training data, model artifacts, dependencies. (Collapses
supply-chain + poisoning + RAG/embeddings — one fix space.)
- Check: are RAG sources validated/trusted, or can any writer inject retrievable content? Is the embedding/vector store access-controlled? Are model artifacts and AI dependencies pinned and from a trusted source?
- Blocking if: untrusted writers can insert content that is later retrieved into a prompt, or model artifacts load from an unpinned/untrusted source.
observability — can you see what the system did? structured logging, tracing, cost dashboards,
quality-drift detection, incident classification.
- Check: are prompts/completions/tool calls logged in a structured, traceable way (without leaking
secrets — cross-check
secret-surface)? Is there cost/latency instrumentation? Any drift or quality monitoring? - Advisory/conditional (rarely blocking): absent observability is a ship risk, not usually an exploit — rate conditional when an incident would be undiagnosable.
deployment-gates — feature flags, canary/staged rollout, rollback paths (prompt, model,
retrieval config), post-launch review.
- Check: can a prompt/model/retrieval-config change be rolled back without a redeploy? Is there a flag/canary for risky AI features? Is there a post-launch review path?
- Conditional if: no rollback path exists for the prompt/model/config that most affects behavior.
Delegation and out of scope
- Delegate general vulnerabilities (injection, auth, SSRF, deserialization, hardcoded secrets in
non-AI code) to
security-review— reference its findings; do not re-run or duplicate them. Out of scope — report as human-review items, never as code findings or a fabricated pass:
- Governance / policy (accountability, EU AI Act, model cards, decommissioning) — not inferable from code.
- Fairness / bias — requires training data and output distribution analysis, not code review.
Name these in the Note as "requires human review" so their absence isn't mistaken for a clean pass.
Verdict
| Verdict | Criteria |
| ship | No blocking findings on any surface. Advisory/conditional items documented and triaged. |
| conditional | One or more blocking findings, but each has a concrete, scoped fix. Safe to ship once the fixes are verified. |
| hold | Blocking findings whose fix needs an architectural change, an external dependency, or a human governance decision first. |
Any surface with an unresolved blocking finding forces at least conditional; a blocking finding with no scoped fix forces hold.
Report
Write the report inline and to critique/ai-audit.md in the audited repo (create critique/ if
absent), with the run DateTime as the first line. Match repo-audit's shape, plus a file:line
evidence path on every finding — AI findings are non-obvious and the evidence link is what makes
them trustworthy.
AI audit run: MM-DD-YYYY hh:mm AM/PM
## AI Audit: <repo-name>
Scope: <what the AI does; files/areas reviewed>
### <surface-name> — [pass | conditional | blocking] (P0|P1|P2)
- file:line — <finding>. <why it matters>. [blocking|conditional|advisory]
Recommendation: <one actionable sentence, anchored to the highest-leverage fix>
<... one section per surface actually in scope ...>
### Out of scope (human review)
- Governance/policy: <not assessed — why>
- Fairness/bias: <not assessed — why>
### Summary
Delegated to security-review: <verdict/pointer, or "not run">
Top priority: <the one fix to make first, and why>
ai-audit verdict: ship | conditional | holdOmit surface sections that don't apply to the target (say which and why in Scope). The final
ai-audit verdict: line is required.
Gotchas
- Non-AI repo: if there's no model/agent code, do not manufacture findings — report a limited-scope Scope note and stop. A clean small surface is a real result.
- Theoretical risk is not a finding. No identified sink + plausible path → don't report it. This skill's credibility is the HIGH/MEDIUM bar.
- Don't double-count with
security-review. A generic hardcoded secret is its finding;secret-surfaceis specifically about what the model/prompt/context can expose. - Observability/deployment-gates rarely block. Their absence is usually a ship risk (conditional), not an exploit — don't inflate to blocking without an incident-impact argument.
- No score, no OWASP numbers. If you're tempted to write "8/10" or "LLM01", stop — use surface names and the three-tier verdict.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

