CLAUDE.md Link Check (forked, read-only)
Optional path-glob: $ARGUMENTS (default . — entire tree).
Run these steps in order. Do not modify any file.
- Inventory.
find <root> -name "CLAUDE.md" -type f -not -path "*/.git/*" -not -path "*/node_modules/*". Also include.claude/rules/*.md. Record paths. - Extract candidates from each file:
- Chain imports — lines matching
^@\S+. The literal after@is a relative path. - Markdown links —
[text](target)wheretargetis not an HTTP(S) URL, notmailto:, not a bare anchor#section.
- Chain imports — lines matching
- Resolve each candidate relative to the file containing it (use
Readon the parent file to confirm position, thentest -e <resolved-path>orGlob).- For
@../CLAUDE.mdinsideskill/CLAUDE.md, resolved path isCLAUDE.md. - For
[Backend](backend/CLAUDE.md)inside the root, resolved path isbackend/CLAUDE.md.
- For
- Return the report in this exact shape:
## Link Check
Files inspected: <count>
References checked: <chain_imports> @-imports, <md_links> markdown links
### Broken
- <file>:<line> — `<original-target>` → does not resolve (expected `<absolute-path>`)
- ... (omit section if empty)
### Clean
<count> references resolved.
- If everything resolves, return exactly
## Link Check\n\nAll <N> references resolved across <M> files.. Do not pad.
Hard rule: never invent a fix. Report the broken target verbatim. Repair is the user's call (or /sync-claude-md's).