From dotforge
Audits Claude Code project configuration against a dotforge template. Detects stack, checks config coherence, evaluates settings, rules, hooks, and generates scored report with gaps.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dotforge:audit-projectThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Run a full audit of the Claude Code configuration for the current project.
Run a full audit of the Claude Code configuration for the current project.
Use detection rules from $DOTFORGE_DIR/stacks/detect.md.
Auto-detect project tier based on signals:
packages/ or apps/): recommended items 8-10 become semi-obligatory (each worth 0-2 instead of 0-1)Detection signals:
find . -name '*.py' -o -name '*.ts' -o -name '*.js' -o -name '*.go' -o -name '*.java' -o -name '*.swift' | xargs wc -l).github/workflows/, .gitlab-ci.yml, Jenkinsfile, .circleci/packages/, apps/, lerna.json, pnpm-workspace.yaml, turbo.jsonSave tier in registry entry.
Before scoring, validate internal coherence. Run $DOTFORGE_DIR/tests/test-config.sh <project-dir> or perform equivalent checks inline:
globs: or paths: frontmatter (with alwaysApply: false for lazy loading)If coherence check finds critical failures (missing hooks, invalid JSON), report them in a ── COHERENCE ── section BEFORE the score. These are configuration bugs, not gaps.
Read $DOTFORGE_DIR/audit/checklist.md for evaluation criteria.
Read $DOTFORGE_DIR/audit/scoring.md for weights and caps.
For each checklist item, verify existence and quality:
.claude/? Does it have explicit permissions? Does it have a deny list?.claude/rules/? Does it have frontmatter with globs: or paths:?.claude/hooks/block-destructive.sh exist?test -x or check permissions).claude/settings.json under hooks?permissions.defaultMode: "auto", is the deny list complete? (auto-pass if not auto)sandbox.enabled: true with at least one restriction OR project demonstrably handles no secrets (auto-pass)chmod +x)MEMORY.md a concise index (<200 lines AND <25KB), not a content dump? If errors are tracked, CLAUDE_ERRORS.md exists with table format (Type column). Penalize dumping content into the index — only first 200 lines / 25KB are injected per session.settings.local.json rather than polluting versioned settings.json? Auto-pass if no local overrides needed.attribution.commit/attribution.pr set (not the deprecated includeCoAuthoredBy)? Auto-pass if the default co-author is acceptable. For self-hosted forges, check prUrlTemplate..claude/commands/?.claude/agents/ + agents.md rule in rules?Tier adjustments (dimension A):
simple: items 14-15 score 0 don't penalize (treated as N/A)complex: items 14-15 become semi-obligatory (each 0-2 instead of 0-1).claude/hooks/generated/*.sh exist AND referenced in settings.json?workflows/ with at least one .js containing export const meta?.claude/rules/domain/ with last_verified <90 days? Report stale count.dotforge_version == $DOTFORGE_DIR/VERSION?A project scoring B=0 (native-first) is a valid, non-penalized outcome. Never recommend adopting dotforge machinery just to raise B.
Use weights from $DOTFORGE_DIR/audit/scoring.md:
Dimension A — Native Health (the primary score):
native_health_obligatory = sum(items 1-5) — maximum 10native_health_recommended = sum(items 6-15) — maximum 10native_health = native_health_obligatory * 0.7 + native_health_recommended * 0.3 — max 10.0native_health = min(native_health, 10)Security cap: If item 2 (settings.json) or item 4 (block-destructive) is 0, native_health max = 6.0.
Dimension B — dotforge Adoption (informational):
6. forge_adoption = sum(items B1-B4) — 0 to 4. Does NOT enter native_health.
7. Label: 0=None, 1-2=Partial, 3=Most, 4=Full.
Format:
═══ AUDIT dotforge: {{project}} ═══
Date: {{YYYY-MM-DD}}
Detected stack: {{stacks}}
Tier: {{simple|standard|complex}}
dotforge version: {{version from last bootstrap/sync if detectable}}
Native Health: {{X.X}}/10 {{level}}
dotforge Adoption: {{N}}/4 {{None|Partial|Most|Full}} (informational — does not affect Native Health)
═ DIMENSION A — NATIVE HEALTH ═
── OBLIGATORY ──
{{✅|⚠️|❌}} CLAUDE.md ({{0-2}}) — {{detail: which sections exist/missing}}
{{✅|⚠️|❌}} settings.json ({{0-2}}) — {{detail: deny list yes/no, permissions}}
{{✅|⚠️|❌}} Rules ({{0-2}}) — {{detail: N rules, globs yes/no}}
{{✅|⚠️|❌}} Hook block-destructive ({{0-2}}) — {{detail: executable yes/no, wired yes/no}}
{{✅|⚠️|❌}} Build/test commands ({{0-2}}) — {{detail: which ones and whether they match the stack}}
── RECOMMENDED ──
{{✅|⚠️}} .gitignore — {{detail}}
{{✅|⚠️}} Prompt injection scan — {{detail}}
{{✅|⚠️}} Auto mode safety — {{detail: auto mode active/inactive, deny list complete/incomplete}}
{{✅|⚠️}} OS sandboxing — {{detail: enabled/disabled, secret indicators yes/no}}
{{✅|⚠️}} Hook lint — {{detail: executable yes/no}}
{{✅|⚠️}} Auto-memory well used — {{detail: MEMORY.md lines/KB, index vs dump, CLAUDE_ERRORS yes/no}}
{{✅|⚠️}} Permission cascade — {{detail: settings.local.json used / no local overrides}}
{{✅|⚠️}} Attribution configured — {{detail: attribution.* set / deprecated includeCoAuthoredBy / default ok}}
{{✅|⚠️}} Custom commands — {{detail: N commands}}
{{✅|⚠️}} Agents — {{detail}}
═ DIMENSION B — DOTFORGE ADOPTION ═ (informational)
{{✅|—}} B1 v3 behaviors compiled — {{detail: N generated hooks, settings reference yes/no}}
{{✅|—}} B2 v4 workflow availability — {{detail: N .js workflows OR "none"}}
{{✅|—}} B3 domain rules — {{detail: N rules, M stale >90d}}
{{✅|—}} B4 sync recency — {{detail: project version vs current VERSION}}
── DOMAIN KNOWLEDGE ──
Role defined: {{✓ if ## Role exists in CLAUDE.md with content | ✗ otherwise}}
Domain rules: {{N files in .claude/rules/domain/ | "none"}}
Stale (>90 days): {{N files with last_verified older than 90 days | "none"}}
Coverage: {{list glob patterns from domain rules → cross-reference with git log --name-only -30 to estimate % of recent edits covered}}
Note: Domain knowledge is informational only — does not affect the audit score.
If no domain rules exist and the project has business logic, suggest: /forge domain extract
── CRITICAL GAPS ──
1. {{what is missing}} → {{recommended action}}
2. ...
── NEXT STEP ──
Run `/forge sync` to apply the dotforge template and close the gaps.
If the project has CLAUDE_ERRORS.md, scan it for recurring patterns:
CLAUDE_ERRORS.md and group errors by Area column$DOTFORGE_DIR/practices/inbox/ and active/ for existing practices covering that patternpractices/inbox/ using the capture format:
source_type: cross-projecttags: [error-promotion, <area>]── ERROR PATTERNS ──This closes the Memory → Learning synergy: recurring project errors feed the practices pipeline.
For each obligatory item scored 0 or 1, and each recommended item scored 0:
practices/inbox/ or active/ for that gappractices/inbox/:
source_type: audit-gaptags: [audit-gap, <item-name>]── CAPTURED GAPS ──This closes the Audit → Learning synergy: detected gaps feed back into the practices pipeline.
If $DOTFORGE_DIR/registry/projects.yml exists, update the project entry:
score: with native_health (the primary score — preserves trend continuity with prior audits)forge_adoption: with the dimension-B value (0-4)last_audit: with the current datedotforge_version: with the VERSION version if the project was bootstrappedlast_sync: preserve the existing value (do not modify here)notes: brief summary of the audithistory: append a new entry {date: YYYY-MM-DD, score: X.X, adoption: N, version: <dotforge_version>}. Never overwrite previous entries — this enables trending over time.Transition note: the two-dimension model (v4.x) changes how scores compose vs the single-score model. Native-first projects (no behaviors/workflows) will show HIGHER native_health than their old single score because dimension-B items no longer penalize them. Expect a one-time step in the history trend at the first two-dimension audit; this is by design, not a regression.
npx claudepluginhub luiseiman/dotforge --plugin dotforgeBuilds accessible UIs with shadcn/ui components on Radix UI + Tailwind CSS, plus canvas visuals. For React apps (Next.js, Vite, Remix, Astro), design systems, responsive layouts, themes, dark mode, prototypes.