
Project Audit
Run a capped, script-driven discovery pass over a repo to map CLAUDE.md, skills layout, ai-context docs, and global versus local agent config before fixing setup drift.
Install
npx skills add https://github.com/fearovex/claude-config --skill project-auditWhat is this skill?
- Phase A discovery is one consolidated shell call—audit run budget of maximum 3 total Bash calls
- Detects global-config layouts via `install.sh`/`sync.sh` or `skills/_shared` versus `.claude/skills`
- Emits structured facts: CLAUDE.md presence, ai-context files (stack, architecture, conventions, known-issues, changelog-
- Consumed by `SKILL.md` as reference for automated project structure audits
Adoption & trust: 1 installs on skills.sh; 1 GitHub stars; 3/3 security scanners passed (skills.sh audits); trending (+100% hot-view momentum).
Recommended Skills
Journey fit
Agent project structure is established and maintained while you build with Claude/Cursor-style tooling. The Phase A shell script inventories `.claude/skills`, `ai-context/*`, and install/sync scripts—canonical agent-tooling hygiene, not app feature code.
Common Questions / FAQ
Is Project Audit safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Project Audit
# project-audit — Phase A Discovery Script > Reference file consumed by `SKILL.md`. Phase A is the single consolidated > shell call that gathers all structural facts from the project. Maximum 3 > total Bash calls per audit run; this script counts as 1. ## Reference script ```sh #!/usr/bin/env bash # project-audit discovery — Phase A # Usage: bash <(echo "$SCRIPT") [project_root] PROJECT="${1:-.}" f() { [ -f "$PROJECT/$1" ] && echo 1 || echo 0; } d() { [ -d "$PROJECT/$1" ] && echo 1 || echo 0; } lc() { [ -f "$PROJECT/$1" ] && wc -l < "$PROJECT/$1" || echo 0; } echo "CLAUDE_MD_EXISTS=$(f .claude/CLAUDE.md)" echo "ROOT_CLAUDE_MD_EXISTS=$(f CLAUDE.md)" echo "ENGRAM_REACHABLE=<check via mem_context>" echo "INSTALL_SH_EXISTS=$(f install.sh)" echo "SYNC_SH_EXISTS=$(f sync.sh)" # Global-config detection for LOCAL_SKILLS_DIR if [ "$INSTALL_SH_EXISTS" = "1" ] && [ "$SYNC_SH_EXISTS" = "1" ]; then LOCAL_SKILLS_DIR="skills" IS_GLOBAL_CONFIG=1 elif [ -d "$PROJECT/skills/_shared" ]; then LOCAL_SKILLS_DIR="skills" IS_GLOBAL_CONFIG=1 else LOCAL_SKILLS_DIR=".claude/skills" IS_GLOBAL_CONFIG=0 fi echo "LOCAL_SKILLS_DIR=$LOCAL_SKILLS_DIR" echo "IS_GLOBAL_CONFIG=$IS_GLOBAL_CONFIG" echo "STACK_MD_EXISTS=$(f ai-context/stack.md)" echo "ARCH_MD_EXISTS=$(f ai-context/architecture.md)" echo "CONV_MD_EXISTS=$(f ai-context/conventions.md)" echo "ISSUES_MD_EXISTS=$(f ai-context/known-issues.md)" echo "CHANGELOG_MD_EXISTS=$(f ai-context/changelog-ai.md)" echo "CLAUDE_MD_LINES=$(lc CLAUDE.md)" echo "STACK_MD_LINES=$(lc ai-context/stack.md)" # Orphaned changes — detected via engram search for stale SDD state artifacts ORPHANED="<detected via mem_search for sdd/*/state artifacts older than 14 days>" echo "ORPHANED_CHANGES=${ORPHANED:-NONE}" # SDD phase skills present SDD_COUNT=0 for phase in explore propose spec design tasks apply verify archive; do [ -f "$HOME/.claude/skills/sdd-$phase/SKILL.md" ] && SDD_COUNT=$((SDD_COUNT+1)) done echo "SDD_SKILLS_PRESENT=$SDD_COUNT" echo "FEATURE_DOCS_CONFIG_EXISTS=<check config.yaml at project root if it exists>" echo "ANALYSIS_REPORT_EXISTS=$(f analysis-report.md)" echo "ANALYSIS_REPORT_DATE=$(head -5 "$PROJECT/analysis-report.md" 2>/dev/null | grep 'Last analyzed:' | awk '{print $3}' || echo '')" echo "ROOT_SETTINGS_JSON_EXISTS=$(f settings.json)" echo "DOTCLAUDE_SETTINGS_JSON_EXISTS=$(f .claude/settings.json)" echo "SETTINGS_LOCAL_JSON_EXISTS=$(f settings.local.json)" echo "ADR_DIR_EXISTS=$(d docs/adr)" echo "ADR_README_EXISTS=$(f docs/adr/README.md)" echo "ENGRAM_HAS_SPECS=<check via mem_search for sdd/*/spec artifacts>" ``` ## Output key schema Each key is a `key=value` line in stdout: - `CLAUDE_MD_EXISTS` — 1 if `.claude/CLAUDE.md` exists, 0 if absent - `ROOT_CLAUDE_MD_EXISTS` — 1 if root `CLAUDE.md` exists, 0 if absent - `ENGRAM_REACHABLE` — 1 if Engram MCP is reachable, 0 if not - `INSTALL_SH_EXISTS` — 1 if `install.sh` exists at project root, 0 if absent - `SYNC_SH_EXISTS` — 1 if `sync.sh` exists at project root, 0 if absent - `LOCAL_SKILLS_DIR` — string: `"skills"` (global-config detected via Condition A or B) or `".claude/skills"` (standard project) - `IS_GLOBAL_CONFIG` — 1 if the project IS the global-config repo itself (install.sh + sync.sh, OR `skills/_shared/` present); 0 for any other project. Used by D1, D2, D4a to skip checks that don't apply when auditing the methodology repo itself. - `STACK_MD_EXISTS` — 1 if `ai-context/stack.md` exists, 0 if absent - `ARCH_MD_EXISTS` — 1 if `ai-context/architecture.md` exists, 0 if absent - `CONV_MD_EXISTS` — 1 if `ai-context/conventions.md` exists, 0 if absent - `ISSUES_MD_EXISTS` — 1 if `ai-context/known-issues.md` exists, 0 if absent - `CHANGELOG_MD_EXISTS` — 1 if `ai-context/changelog-ai.md` exists, 0 if absent - `CLAUDE_MD_LINES` — integer line count of root `CLAUDE.md` (0 if absent) - `STACK_MD_LINES` — integer line count of `ai-context/stack.md` (0 if absent) - `ORPHANED_CHANGES` — comma-separated names of orphaned change dirs, or `NONE