audit-skills

agent
Security Audit
Warn
Health Warn
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Low visibility — Only 5 GitHub stars
Code Pass
  • Code scan — Scanned 2 files during light audit, no dangerous patterns found
Permissions Pass
  • Permissions — No dangerous permissions requested

No AI report is available for this listing yet.

SUMMARY

Language- and framework-agnostic audit checklists for AI coding agents — security, correctness, and operability. Works with Claude Code, GitHub Copilot, Cursor, Codex CLI, OpenCode, and any agent that can read files.

README.md

audit-skills

License: MIT
Latest tag
Validate
Format: Agent Skills
Audits: 35
Works with: Claude Code · Copilot · Cursor · Codex

Language- and framework-agnostic audit checklists for AI coding agents —
security, correctness, and operability. Works with Claude Code, GitHub
Copilot, Cursor, Codex CLI, OpenCode, and any agent that can read files.

Every checklist is written as invariants and detection smells, not
framework APIs, so the same content audits a Rails app, a Spring service,
or an Express API — the agent supplies the framework-specific translation.

Works with any language or framework. Each checklist names eight
common ecosystems in its concept glossary (Rails, Laravel, Django, Spring,
Node, Vapor, .NET, Go) — those are recognition shortcuts, not a
support list. The invariants and detection smells are framework-free, so
the audits apply equally to Phoenix, FastAPI, Ktor, or your in-house
stack: the agent supplies the translation.

What's inside

  • AGENTS.md — a one-page digest of all 35 invariants; copy its content
    into your project's AGENTS.md so every agent has it in context.
  • .agents/skills/audit/ — the router skill, with all 35 checklists and
    remediation patterns bundled under references/ (four categories: access
    & data security, input/API, correctness, operability), plus shared
    methodology files (scoping, adversarial verification, severity rubric).
  • .agents/skills/audit-* — thin per-topic wrapper skills so each checklist
    is individually invocable (/audit-idor, /audit-injection,
    /audit-fix-authz, …). They are command-only
    (disable-model-invocation: true): audit is the one auto-triggered
    entry point, which keeps 38 descriptions out of every session's context. Everything this package installs starts with
    audit, so it stays grouped among your other skills.

The audits

/audit runs the full audit — it identifies what the code does and applies
every matching checklist below. Each topic is also individually invocable
(click through to read the checklist itself).

Access & data security

Audit Checks for
/audit-authorization Server-side permission checks at the point of action — privilege escalation, UI-only gating, checks on read but not on mutate
/audit-authn-session Login, logout, and reset flows — session fixation, account enumeration, token expiry and single-use, remember-me storage
/audit-token-validation Inbound credential verification — JWT decode-without-verify, alg confusion, missing exp/aud/iss, kid/JWKS pitfalls, webhook HMACs and replay windows
/audit-idor Resources fetched or mutated by a request-supplied ID without verifying the requester may touch them
/audit-data-exposure Over-exposed responses, errors, and logs — whole-model serialization, stack traces, PII
/audit-crypto Password hashing, token randomness, constant-time comparison, homemade crypto, key handling
/audit-output-encoding XSS — user data rendered into HTML, JS, CSS, URLs, headers, or emails without context-appropriate encoding
/audit-tenant-isolation Cross-tenant leakage — unscoped queries, tenant-less cache keys, background jobs crossing tenants
/audit-csrf State-changing endpoints on cookie/session auth without CSRF token or origin verification
/audit-mass-assignment Request payloads bound wholesale onto models — writable role/owner/balance fields, denylists instead of allowlists

Input & API

Audit Checks for
/audit-injection SQL/NoSQL, command, template, and path injection — input concatenated into queries, shells, or templates
/audit-deserialization Untrusted bytes deserialized into objects — native deserializers, polymorphic JSON/XML typing, unsafe YAML, missing type allowlists, XXE
/audit-config Insecure configuration — debug in production, permissive CORS, missing security headers, cookie flags
/audit-secrets Hardcoded credentials, secrets in logs or version control, overly broad keys, no rotation path
/audit-api-validation Boundary validation — types, bounds, allowed fields, trusting client-computed values like prices or roles
/audit-file-handling Path traversal, unvalidated uploads, missing size limits, files served from the web root, zip-slip
/audit-ssrf Server-side requests to user-influenced URLs — allowlists, private IP ranges, redirect re-validation; includes open redirects
/audit-parser-differentials Inputs a validator accepts but the consumer reads differently — unanchored regexes, startswith allowlists, two URL parsers, validate-then-reparse

Correctness

Audit Checks for
/audit-atomicity Multi-store writes without a transaction — partial state surviving failures
/audit-idempotency Handlers that misbehave when run twice — webhooks, payments, queue redelivery, double submits
/audit-background-work Jobs and consumers — unbounded retries, poison messages, missing timeouts, duplicate or out-of-order delivery
/audit-state-management Race conditions — check-then-act on shared state without locks, atomic primitives, or constraints
/audit-exception-handling Swallowed errors, blanket catches, lost causes, missing cleanup, and wrong HTTP statuses (404 vs 403, 401, 422, 409)
/audit-discarded-async Fire-and-forget bugs — promises, futures, or reactive publishers created but never awaited, returned, or composed; bare subscribe; cold writes that silently never run
/audit-cardinality Operations assuming a query matches one row — UPDATE/DELETE on a non-unique column fanning out, findOne/.single() on non-unique fields, columns treated as unique without a DB constraint
/audit-numeric-precision Money in float, ad hoc rounding, integer overflow, division remainders that don't sum back, unit/currency mismatches carried only by variable name
/audit-time-clock Naive vs aware datetimes, server-local now(), wall-clock for elapsed time or expiry, DST and calendar math, cross-zone comparisons

Operability

Audit Checks for
/audit-nplus1 Queries — or HTTP/cache calls — made inside loops over collections
/audit-observability Silent failures — swallowed errors, logs without identifiers, no metric or alert path
/audit-migration-safety Schema changes that lock tables, destructive changes without expand-contract, unbatched backfills
/audit-resource-limits Unbounded work from input — missing pagination, size caps, rate limits, catastrophic regex
/audit-blocking-io-async Blocking calls on event loops or coroutines, CPU work on the scheduler, sync-over-async, missing timeouts
/audit-schema-design Missing indexes on FK columns and hot paths, ORM-only relationships without real foreign keys, defaulted ON DELETE, integrity rules only in app code, float money
/audit-statelessness State that breaks with a second replica or a deploy — in-memory sessions and counters, static mutable state, local-disk uploads, process-local locks and schedulers
/audit-caching Cache keys missing a user/tenant dimension, stale data after writes, stampede on a hot key, cached errors, per-user responses in a shared or CDN cache

Fixes

Skill Applies
/audit-fix-authz Remediation patterns for authorization, IDOR, and tenant-isolation findings — scoped queries, policy objects, deny-by-default
/audit-fix-async Remediation patterns for correctness findings — transactions, outbox, idempotency keys, locking, bounded retries
/audit-fix-observability Remediation patterns for observability gaps — structured logging, correlation IDs, RED metrics, symptom-based alerts

Install

Clone this repo once, next to your projects, and symlink each skill into
your project's skills folder. Nothing is copied, so updating the clone
updates every linked project.

git clone https://github.com/danygiguere/audit-skills ~/WebDevelopment/audit-skills
cd your-project && mkdir -p .agents/skills
for s in ~/WebDevelopment/audit-skills/.agents/skills/audit*; do
  ln -s "$s" .agents/skills/
done

Link every audit* folder: the topic skills read their checklists from the
audit skill's references/. If you commit the links, prefer relative ones
(e.g. ../../../audit-skills/.agents/skills/audit) so they resolve on any
machine with the same folder layout.

Add to your AGENTS.md

This repo's AGENTS.md is the one-page digest of all 35
invariants. Copy its content into your project's AGENTS.md (append it if
you already have one — never replace yours): merged there, it gives every
agent ambient awareness of the invariants on every prompt; without it, the
skills only activate when triggered. It holds only the invariants; the
topic-to-checklist map lives in the audit skill, loaded when an audit runs.

Claude Code note: Claude Code does not yet read .agents/skills/
(anthropics/claude-code#31005).
Bridge it with:

mkdir -p .claude && ln -s ../.agents/skills .claude/skills
echo '@AGENTS.md' > CLAUDE.md          # if you don't already have a CLAUDE.md

Use

  • Automatic — ask your agent to "review this endpoint" / "audit this
    diff"; audit triggers on its description and loads the matching
    checklists. The per-topic and fix skills only run by command.
  • By command — /audit for a full audit, or per topic:
    /audit-idor, /audit-injection, /audit-atomicity, … All of them
    audit your current diff by default; name a file, folder, or branch to
    audit something else.
  • By name — "run the idempotency checklist on this webhook handler".
  • Fixes — after findings are confirmed: /audit-fix-authz,
    /audit-fix-async, /audit-fix-observability (see "How fixes work").

How fixes work

Audits and fixes are deliberately separate steps. /audit and the
audit-* checklists only find and report — they never change code.
Fixing happens when you ask for it: say "fix those" after a report, or run
an audit-fix-* command.

Every finding has a fix available; what differs is where it lives:

Most topics — the fix is in the checklist itself. Each checklist's
Example section shows the vulnerable shape next to the fixed shape. For
topics like injection, secrets, output encoding, or N+1 queries, the fix is
mechanical and has one right answer (parameterize the query, move the secret
to the environment, bulk-load before the loop). When you say "fix it", the
agent applies that fixed shape — no extra command needed.

Eight topics — the fix is an architectural choice. Some findings have
several valid fixes with real trade-offs (an idempotency bug: dedupe table,
idempotency key, UPSERT, or an absolute-state write?). Those topics point to
a remediation playbook that walks the agent through choosing:

Findings from Playbook Command
authorization, IDOR, tenant isolation remediation/authz-patterns.md /audit-fix-authz
atomicity, idempotency, background work, state management remediation/async-patterns.md /audit-fix-async
observability remediation/observability-patterns.md /audit-fix-observability

Either way, the flow is the same: audit → confirmed findings → ask for the
fix.
Fixes follow the same rules everywhere: the smallest change that
restores the invariant, matching the surrounding code style, with a test
demonstrating the fix — and never mixed with unrelated refactoring.

Updating

Releases are git tags.
Run git pull in your clone (or git checkout <tag> to pin a release);
every linked project picks up the change. The digest in your AGENTS.md is
a copy — re-paste it when a release changes AGENTS.md.

License

MIT

Reviews (0)

No results found