Audit
Production-grade configuration management for Claude Code. Hooks, agents, skills, multi-project orchestration.
npx -y skills add claude-hangar/claude-hangar --skill 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
- 1 stars1 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.
What its author says it does
Copied from the file, not written here
Systematic website audit (stack detection, 9 phases). Use when: "audit", "website audit", "site audit", "check website".
SKILL.md
18.9 KB, as published. Nobody here has run it
Skill: audit
Systematic website audit with a three-layer depth model. Automatically detects the stack, loads relevant supplements, and performs structured checks — for any web project.
Architecture: Three-Layer Model
Layer 1: Base Phase (phases/*.md) ~50 lines, universal
Layer 2: Stack Supplement (stacks/*/*.md) ~80 lines, framework-specific
Layer 3: Project Override (audit-context.md) ~20-40 lines, project-specific
Per phase, only the relevant supplements are loaded. Result: ~100-140 lines of check instructions per phase — comparable to a dedicated skill.
Dual-Layer: Source + Live
Each phase has two check levels:
| Layer | Method | Example |
|---|---|---|
| Source-Layer | Read code/config, grep, AST | Check package.json, read CSP in config |
| Live-Layer | Browser/tool-based | curl -sI, Lighthouse, Playwright, axe-core |
Rule: A check is only considered complete when BOTH layers have been verified (where applicable). Example: "CSP configured" (Source) + "CSP header is actually sent" (Live) = complete.
Not all checks have both layers — e.g. "TypeScript strict mode" is purely source. During phase execution, document which layer was checked per check.
Check Priorities + Completeness Tracking
See
_shared/audit-patterns.md(MUST/SHOULD/COULD markers, completeness counting). Phase with <100% MUST-checks can NOT be marked asdone.
5 Modes
| Mode | Trigger | Description |
|---|---|---|
start | /audit start | Detect stack, create phase plan, execute first 2 phases |
continue | /audit continue | Continue next phases or fix max 5 findings |
status | /audit status | Show progress, statistics, open findings |
report | /audit report | Generate structured Markdown report |
auto | /audit auto | Fully autonomous run — all phases + fixes without prompts |
Mode: start
Step 1 — Auto-Detection (no user input needed)
Scan files and detect stack:
| File/Pattern | Detects | Stack-Key |
|---|---|---|
package.json > astro | Astro | frontend: "astro" |
package.json > @sveltejs/kit | SvelteKit | frontend: "sveltekit" |
package.json > svelte (without Kit) | Svelte (standalone) | frontend: "svelte" |
package.json > next | Next.js | frontend: "next" |
package.json > nuxt | Nuxt | frontend: "nuxt" |
hugo.toml / config.toml with Hugo | Hugo | frontend: "hugo" |
package.json > fastify | Fastify | backend: "node-fastify" |
package.json > express | Express | backend: "node-express" |
svelte.config.js + @sveltejs/adapter-node | SvelteKit Server | backend: "node-sveltekit" |
package.json > tailwindcss | Tailwind CSS | css: "tailwind" |
tailwind.config.* OR @import "tailwindcss" | Tailwind v4 | css: "tailwind-v4" |
Dockerfile / docker-compose.* | Docker | deployment: ["docker"] |
traefik.* / Labels with traefik | Traefik | deployment: +["traefik"] |
nginx.conf / /etc/nginx/ | nginx | deployment: +["nginx"] |
*.db / better-sqlite3 / sqlite3 | SQLite | database: "sqlite" |
package.json > drizzle-orm / pg / postgres | PostgreSQL + Drizzle | database: "postgresql" |
docker-compose.* > postgres image | PostgreSQL (Docker) | database: "postgresql" |
package.json > bcryptjs / bcrypt / argon2 | Auth (Custom) | auth: "custom" |
playwright.config.* | Playwright | testing: ["playwright"] |
.github/workflows/ | GitHub Actions | ci: "github-actions" |
Version Detection: For each detected stack, extract version from package.json or config.
Tailwind v4 detection: @import "tailwindcss" in CSS OR tailwindcss >= 4.0 in package.json.
Step 2 — Context Enrichment
- Project CLAUDE.md read (if available) — architecture, conventions
- audit-context.md load (if in project root) — project-specific context
- Existing docs scan:
AUDIT-FINDINGS*.md,TODO*.md,GO-LIVE*.md - {{REGISTRY_FILE}} match: If project name is in project registry > identify assigned servers
- Existing state file (.audit-state.json) check > auto-migrate if v1 (see State-Migration)
Step 3 — User Query
Show detection result as table:
Stack Detection:
+-------------+------------------+---------+
| Category | Detected | Version |
+-------------+------------------+---------+
| Frontend | Astro | 6.x |
| CSS | Tailwind CSS v4 | 4.x |
| Deployment | Docker, Traefik | — |
| Testing | Playwright | — |
+-------------+------------------+---------+
Detected servers: {{SERVER_NAMES}}
Project context: audit-context.md found
Existing docs: AUDIT-FINDINGS-2026-02-13.md, TODO-SEO.md
Then ask user (AskUserQuestion):
- Audit scope: Complete (all 9 phases) vs. focused (specific phases)
- External repos: Include related projects? (if defined in audit-context.md)
- Server access: Enable SSH checks? (if servers detected)
- Phase order: Sequential (01>08, default) vs. Smart Order (Security>Performance>Code>Rest, recommended)
[CHECKPOINT: decision] — User selects audit scope and phase order.
Step 4 — Create state file and start first 2 phases
Create state file .audit-state.json (schema see below).
Then execute the first 2 phases according to phase execution flow.
Mode: continue
- Read
.audit-state.json - Identify next pending phase(s)
- Generate smart recommendation (see below)
- User chooses: follow recommendation, different phase, or fix findings
- Write state immediately after each phase/fix
Smart Recommendation
Decision logic: See
_shared/audit-patterns.md(CRITICAL>HIGH>Phases>Remaining). Show recommendation as first option in AskUserQuestion.
Fixing Findings
- Always fix highest severity first: CRITICAL > HIGH > MEDIUM > LOW
- Per fix: Show problem > Load fix template (if in
fix-templates.md) > User confirmation > Implement > Test - Update fix status in state (
"status": "fixed","fixedIn": "Session N") - No auto-fix — every fix requires user confirmation (except
automode)
[CHECKPOINT: verify] — After each fix: show result, user confirms.
Mode: status
Read state file and display:
Audit: Project Name (started YYYY-MM-DD)
Stack: Astro 6, Tailwind v4, Docker, Traefik
Phases:
[done] 01 Baseline Analysis (Session 1, 3 Findings, MUST 100%)
[done] 02 Security (Session 1, 5 Findings, MUST 100%)
[wip] 03 Performance (in progress)
[wait] 04 SEO
[wait] 05 Accessibility
[wait] 06 Code Quality
[wait] 07 Privacy/GDPR
[wait] 08 Infrastructure
[wait] 09 Content & Design
Findings: 8 total
CRITICAL: 1 (open: 1)
HIGH: 3 (open: 2, fixed: 1)
MEDIUM: 3 (open: 3)
LOW: 1 (open: 1)
Completeness:
MUST-Checks: 28/28 (100%)
Total: 42/50 (84%)
Layer: Source done, Live done (2 phases)
Mode: report
Generate structured Markdown report based on templates/report.md.
- Read state file
- Group all findings by phase
- Report with Executive Summary, Findings per Phase, Recommendations
- Include trend analysis (if history available):
Trend (recent audits): CRITICAL: 5 > 2 > 0 (resolved) HIGH: 8 > 6 > 4 (declining) MEDIUM: 12 > 10 > 7 (declining) Total: 25 > 18 > 11 Assessment: Project is steadily improving. - Save report as
AUDIT-REPORT-{YYYY-MM-DD}.mdin project root - If previous reports exist: Diff section (new/resolved since last report)
Mode: auto
Fully autonomous audit run without prompts. For experienced users who want the entire audit in one go.
Flow
- Check orchestrator context: If
.audit-orchestrator-state.jsonexists:- Read
phaseMapping.audit.delegated> skip delegated phases - Read
sequencingReason> understand context - Example: If
code-qualitydelegated to/project-audit> skip Phase 06
- Read
- Auto-detection as in
start - All phases run through (no 2-phase limit, skip delegated phases)
- Document findings with fix templates from
fix-templates.md - Context management: When context is running low:
- Write state immediately
- Create task in
.tasks.jsonwith handoff note - Recommend: "New session with
/audit continue"
- At the end: automatically generate report
Context Protection in Auto Mode
- Findings are collected but not fixed immediately (documented only)
- Per phase: If >10 findings > close phase, start next
- Write state after EVERY phase immediately
- At context limit: clean abort with complete state
- Fixes can be done in follow-up sessions with
/audit continue
When to Recommend Auto Mode
- User says "check everything", "fully autonomous", "full audit"
- Auditing multiple projects in sequence
- First overview of a new project
Phase Execution
For each phase:
-
Load base: Read
phases/{NN}-{name}.md— universal check items -
Load supplements: For each detected stack, load the matching file, ONLY the section relevant to the current phase
Phase Supplement Sections 01-baseline-analysis §Baseline-Analysis 02-security §Security 03-performance §Performance 04-seo §SEO 05-accessibility §Accessibility 06-code-quality §Code-Quality 07-privacy §Privacy 08-infrastructure §Infrastructure 09-content-design §Content-Design -
Project override: If
audit-context.mdexists > include relevant section -
Existing findings: Check previous audit docs, do not create duplicates
-
Execute checks: Systematically work through all loaded checks
- Source layer: Read and analyze code/config
- Live layer: Execute tools (curl, Lighthouse, Playwright, axe) where applicable
-
Document findings: Each finding with ID, severity, description, location
-
Count completeness: MUST/SHOULD/COULD checks (executed vs. skipped)
- Skipped MUST-checks: document reason
- Phase with <100% MUST-checks: status remains
in-progress
-
Update state: Set phase status to
done, enter findings + completeness
[CHECKPOINT: verify] — After each phase: show findings + completeness to user, get confirmation.
Finding-IDs
| Phase | Prefix | Example |
|---|---|---|
| 01-baseline-analysis | IST | IST-01 |
| 02-security | SEC | SEC-01 |
| 03-performance | PERF | PERF-01 |
| 04-seo | SEO | SEO-01 |
| 05-accessibility | A11Y | A11Y-01 |
| 06-code-quality | CODE | CODE-01 |
| 07-privacy | GDPR | GDPR-01 |
| 08-infrastructure | INFRA | INFRA-01 |
| 09-content-design | CD | CD-01 |
Severity Definitions
| Level | Criteria | Examples |
|---|---|---|
| CRITICAL | Security vulnerability, data loss, outage | Open port, missing auth, SQL Injection |
| HIGH | Functional bug, performance >2s, missing validation | LCP >4s, no rate limiting, XSS |
| MEDIUM | Code quality, missing tests, UX issue | Missing alt texts, no error handling |
| LOW | Cosmetic, best practice, nice-to-have | Outdated dependency, missing docs |
Prioritization: CRITICAL > HIGH > MEDIUM > LOW. Security before functional before visual.
State Schema v2.1 (.audit-state.json)
Complete state schema (JSON example) + migrations v1>v2 and v2>v2.1: See state-schema.md
Supplement Loading Logic
Per phase, the skill loads only relevant stack supplements. Each stack file is structured by sections.
Example Phase 02-security:
> Always: phases/02-security.md (base)
> If frontend=astro: + stacks/frontend/astro.md §Security
> If css=tailwind-v4: (no Security section > load nothing)
> If deployment includes docker: + stacks/deployment/docker.md §Security
> If deployment includes traefik: + stacks/deployment/traefik.md §Security
> If backend=node-fastify: + stacks/backend/node-fastify.md §Security
> If database=sqlite: + stacks/database/sqlite.md §Security
> If testing includes playwright: + stacks/testing/playwright.md §Security
Supplement file locations:
| Stack-Key | Supplement Path |
|---|---|
frontend: "astro" | stacks/frontend/astro.md |
frontend: "sveltekit" | stacks/frontend/sveltekit.md |
frontend: "next" | stacks/frontend/next.md |
frontend: "hugo" | stacks/frontend/hugo.md |
backend: "node-fastify" | stacks/backend/node-fastify.md |
backend: "node-sveltekit" | stacks/backend/node-sveltekit.md |
css: "tailwind-v4" | stacks/css/tailwind-v4.md |
deployment: "docker" | stacks/deployment/docker.md |
deployment: "traefik" | stacks/deployment/traefik.md |
deployment: "nginx" | stacks/deployment/nginx.md |
database: "sqlite" | stacks/database/sqlite.md |
database: "postgresql" | stacks/database/postgresql.md |
testing: "playwright" | stacks/testing/playwright.md |
If a stack is detected but no supplement exists > use base phase only, no error.
Phase Order
Two modes for the order of phases:
Sequential (Default)
01-baseline-analysis > 02-security > 03-performance > 04-seo > 05-accessibility > 06-code-quality > 07-privacy > 08-infrastructure > 09-content-design
Smart Order (Recommended)
Prioritized by impact — finds critical issues first:
02-security > 03-performance > 08-infrastructure > 01-baseline-analysis > 06-code-quality > 04-seo > 05-accessibility > 07-privacy > 09-content-design
Logic: Security issues are most urgent, followed by performance (user impact), then infrastructure (stability). SEO/A11y/Privacy are important but less time-critical.
User chooses at start. Store in state as "phaseOrder": "sequential" or "smart".
Fix Templates
For common findings there are ready-made fix templates in fix-templates.md.
Per finding type: code snippet, config change, verify step.
Usage: When a finding matches a template:
- Load template from
fix-templates.md - Adapt to project
- Get user confirmation
- Implement and verify
Verification-Depth + Fix Protocol
See
_shared/audit-patterns.md(4-Level Verification, Stub-Detection, 5-Step Fix-Protocol). Level 4 (Functional) is mandatory when live layer is available. READ + VERIFY never skip.
Context Protection (CRITICAL)
Base rules: See
_shared/audit-patterns.md(Max 2 phases, state immediately, no auto-fix).
Website audit specific:
- SSH readonly during audit — write only during explicit fix with user confirmation
- Dual-Layer: Per phase, document whether source layer, live layer, or both were checked
- Anti-rationalization — Do not skip MUST-checks or reduce severity because "it looks fine". See
_shared/anti-rationalization.md
Smart Next Steps
After completing the audit (report generated or all phases done), recommend suitable follow-up skills to user. Recommendations based on findings and detected stack:
| Condition | Recommendation | Justification |
|---|---|---|
| Astro project detected | /astro-audit | Check version-specific migration/best-practices |
| SvelteKit project detected | /sveltekit-audit | SvelteKit/Svelte 5 version checks + best practices |
| PostgreSQL/Drizzle detected | /db-audit | Database schema, migrations, security, performance |
| Custom auth detected (bcryptjs etc.) | /auth-audit | Auth security, session management, OWASP ASVS |
| >3 HIGH/CRITICAL findings | /adversarial-review audit | Check report for completeness |
| Phase 09 (Content) findings >0 | /polish scan | Design improvements based on findings |
| Phase 09 (Content) findings >0 | /design-system | Check palette, typography, UX rules against curated databases |
| Claude Code project (.claude/ present) | /security-scan | MCP permissions, hook safety, secret detection |
| Audit completed | /lesson-learned session | Extract learnings from audit process |
| No /project-audit state present | /project-audit start | Check code/CI/CD quality |
Output in report: Replace {NEXT_STEPS} placeholder with concrete recommendation list.
Output after last phase: "Next steps:" + 2-3 most relevant recommendations.
Files in This Skill
audit/
├── SKILL.md <- This file
├── state-schema.md # State Schema v2.1 + Migrations
├── fix-templates.md # Quick-Fix templates for common findings
├── phases/
│ ├── 01-baseline-analysis.md # Versions, Config, Architecture
│ ├── 02-security.md # OWASP, Headers, Secrets, Auth
│ ├── 03-performance.md # Lighthouse, CWV, Caching, Images
│ ├── 04-seo.md # Meta, Structured Data, Sitemap
│ ├── 05-accessibility.md # WCAG AA, Contrast, ARIA, Keyboard
│ ├── 06-code-quality.md # Linting, Types, Dependencies
│ ├── 07-privacy.md # Cookies, Fonts, Analytics
│ ├── 08-infrastructure.md # VPS, Docker, Proxy, Backup
│ └── 09-content-design.md # Content, Typography, Colors, Consistency
├── stacks/
│ ├── frontend/astro.md # Astro-specific checks
│ ├── frontend/sveltekit.md # SvelteKit-specific checks
│ ├── frontend/next.md # Next.js-specific checks
│ ├── frontend/hugo.md # Hugo-specific checks
│ ├── backend/node-fastify.md # Fastify-specific checks
│ ├── backend/node-sveltekit.md # SvelteKit server-side checks
│ ├── css/tailwind-v4.md # Tailwind v4-specific checks
│ ├── deployment/docker.md # Docker-specific checks
│ ├── deployment/traefik.md # Traefik-specific checks
│ ├── deployment/nginx.md # nginx-specific checks
│ ├── database/sqlite.md # SQLite-specific checks
│ ├── database/postgresql.md # PostgreSQL + Drizzle checks
│ └── testing/playwright.md # Visual & E2E testing checks
└── templates/
└── report.md # Markdown report template