claude-skill-prereq-audit
Skill Prerequisite Check
Scan installed skills, discover their tool/MCP/auth dependencies via heuristic parsing, check if everything is installed and authenticated, and offer to fix issues interactively.
When to Use
- Setting up a new machine
- After installing new skills
- Verifying environment is ready for all skills
- Debugging "tool not found" errors during skill execution
Arguments
Parse from the user's invocation:
- Skill names: Any tokens after the command → filter to those skills only
- Default: scan all skills in
~/.claude/skills/and.claude/skills/
Workflow
Phase 1: Discover Skills
- Glob for
~/.claude/skills/*/SKILL.mdand.claude/skills/*/SKILL.md - Follow symlinks
- If user specified skill names, filter the list to matching directory names
- Exclude this skill (
skill-prereq-check) from the scan list — its own SKILL.md contains tool references as parsing examples, not actual dependencies - Read each SKILL.md file
Phase 2: Parse Prerequisites
For each SKILL.md, extract dependencies using these heuristics:
CLI tools:
- Extract command names (first token of each line) from fenced code blocks marked as
bash,shell, orsh - Also scan
## Prerequisitessections and prose for backtick-quoted tool names followed by "CLI", "installed", or "required" - Ignore shell builtins and coreutils:
echo,cat,ls,mkdir,cd,grep,sed,awk,rm,cp,mv,date,wc,head,tail,sort,uniq,export,set,test,true,false,if,then,else,fi,for,do,done,while,case,esac,command,which,local,return,read,shift,printf,declare - Ignore git subcommands: the tool is
git, notgit commit - Deduplicate per skill
MCP servers:
- Scan for
mcp__<server>__patterns — extract<server>as the MCP server name - Also scan for
<Name> MCP serveror<Name> MCP toolsin prose — extract<Name>lowercased - Deduplicate per skill
gh extensions:
- Scan for
gh <word>where<word>is NOT a built-in gh command:pr,issue,release,api,auth,repo,project,run,extension,gist,ssh-key,gpg-key,secret,variable,codespace,label,ruleset,cache,attestation,status,browse,search,workflow,config,alias - Record as gh extension dependency
Auth hints:
- Scan for
auth status,auth login,auth test,auth check,authenticatedwithin 200 characters of a tool name - Mark that tool as needing an auth check
Phase 3: Check Dependencies
Run checks for all discovered dependencies. Use parallel Bash calls where possible. Deduplicate check commands across skills — if multiple skills depend on the same tool, run the check once and reuse the result.
CLI tools:
- Run
command -v <tool>— if exit code 0, installed; otherwise missing - If auth hint exists for this tool, run
timeout 10 <tool> auth status 2>&1(or use the Bash tool's timeout parameter set to 10000ms) and check exit code. If exit code != 0, trytimeout 10 <tool> auth check 2>&1. If both fail, mark auth as "FAIL". If the command times out, mark auth as "TIMEOUT". If no auth hint, mark as "—"
MCP servers:
- Use ToolSearch with query
+<server>to check if anymcp__<server>__*tools are available in the session - If tools found → installed = "yes". If auth tool was referenced in the skill (e.g.
auth_test), call it to verify. Otherwise auth = "—" - If no tools found → installed = "no", auth = "—"
gh extensions:
- Run
gh extension listonce (cache the result) - Check if each extension name appears as a suffix in any line of the output (e.g., the line contains
/<extension-name>or ends with the extension name)
Phase 4: Present Results
Print a table grouped by skill:
## Prerequisite Check
| # | Skill | Tool | Type | Installed | Auth |
|---|-------|------|------|-----------|------|
| 1 | slack-triage | slack | mcp | yes | yes |
| 2 | meeting-scheduler | gws | cli | yes | FAIL |
| 3 | daily-report | gh | cli | yes | yes |
| 4 | daily-report | slackcli | cli | no | — |
| 5 | oss-release | oss-watch | gh-ext | no | — |
Summary: N skills checked, M tools found, X issues
- "yes" = check passed
- "FAIL" = check ran and failed
- "—" = not applicable (not installed, or no auth pattern detected)
- Number each row for reference in the fix phase
If no issues found, print "All prerequisites satisfied." and stop.
Phase 5: Interactive Fix
If issues exist, ask: "Want me to fix any of these? (e.g. '2, 4' or 'all' or 'done')"
For each selected item, attempt the appropriate fix:
| Type | Issue | Fix Strategy |
|---|---|---|
| cli | not installed | Try brew install <tool>. If brew doesn't have it, search web for install instructions |
| cli | auth FAIL | Run <tool> auth login (interactive) |
| mcp | not available | Tell user: "Add the <server> MCP server to your Claude config. I can't auto-configure this." |
| gh-ext | not installed | Run gh extension install <owner/repo> — search GitHub for the extension first |
After each fix attempt, re-run the check for that item and show the updated row.
When all selected fixes are attempted, re-print the full table with updated results.
Error Handling
- If
~/.claude/skills/doesn't exist, report "No skills directory found at ~/.claude/skills/" and check only.claude/skills/ - If a tool's auth check hangs (>10s), kill it and mark as "TIMEOUT"
- If
brewis not installed, suggest manual install instructions instead
Examples
Example 1: Check all skills
User: "check prerequisites"
Action: Scan all skills, parse deps, check each, show table
Example 2: Check specific skills
User: "/skill-prereq-check slack-triage meeting-scheduler"
Action: Scan only those two skills, parse deps, check, show table
Example 3: Fix issues
User: (after seeing table) "fix 2, 5"
Action: Run `gws auth login` for item 2, `gh extension install` for item 5, re-check