Files
ClaudeForge/command/sync-claude-md.md
T
Claude 45767e8840 feat(skills): three forked task-style audit skills + /sync-claude-md --weekly orchestration
Three new task-style skills, each using Anthropic's context: fork + agent:
Explore so the work happens in an isolated subagent context and only a
short summary returns to the main session.

skill/claude-md-drift-audit/SKILL.md (51 lines):
  Walks the last N days of git history (default 7) and flags CLAUDE.md
  lines that reference deleted paths, renamed paths, or removed
  dependencies from that window. Returns a punch list with file:line.
  Read-only. Standalone invocation: /claude-md-drift-audit [days=7].

skill/claude-md-link-check/SKILL.md (51 lines):
  Verifies every @path chain import and every relative markdown link
  inside every CLAUDE.md resolves to an existing file. Returns broken
  links with file:line. Read-only. Standalone: /claude-md-link-check
  [path-glob].

skill/claude-md-dependency-rescan/SKILL.md (54 lines):
  Re-detects the project's tech stack from package.json /
  requirements.txt / pyproject.toml / go.mod / Cargo.toml and diffs
  against every CLAUDE.md's Tech Stack section. Returns added /
  removed / renamed per file. Read-only. Standalone:
  /claude-md-dependency-rescan [manifest-path].

command/sync-claude-md.md:
  - argument-hint and when_to_use mention --weekly.
  - New Phase 0 (only when --weekly is passed): invoke the three skills
    above in parallel via the Skill tool, aggregate findings into
    ## Weekly Audit Summary, then proceed to existing Phase 1.
  - Without --weekly, Phase 0 is skipped entirely (no behaviour change
    for normal sync runs).

.claude-plugin/plugin.json:
  skills array now lists all five entries (existing two + three new).

Verified (6/6 smoke tests):
  - Plugin manifest is valid JSON; 5 skills registered; all 8
    referenced paths resolve on disk.
  - Each new SKILL.md parses; context=fork, agent=Explore, both
    description and when_to_use present, allowed-tools is a list,
    body ≤ 60 lines.
  - Each body is imperative (numbered steps present, not reference
    material — fork-context requires explicit task instructions).
  - Sync command body contains Phase 0, all three skill references,
    parallel-invocation language, and Skill in allowed-tools.
  - Skill name in frontmatter matches the directory name for every
    new skill (so /claude-md-drift-audit etc. register correctly).
2026-05-19 02:04:00 +00:00

6.5 KiB

description, argument-hint, when_to_use, allowed-tools, disallowedTools, permissions
description argument-hint when_to_use allowed-tools disallowedTools permissions
Walk every CLAUDE.md in the project, prune stale references (removed deps, deleted paths, broken modular links), enforce the 150-line cap by splitting into sub-files, and repair the root ↔ subdirectory chain (markdown links + @path imports). [--weekly | --dry-run | --paths-only | <directory>] Run after refactors, dependency changes, deleted directories, or when any single CLAUDE.md is near the 150-line cap. Use --weekly for a periodic audit pass that parallel-invokes the drift-audit, link-check, and dependency-rescan forked skills before doing the normal sync work. Also run before cutting a release so the documentation tag-snapshot is truthful.
Read
Edit
Write
Glob
Grep
Skill
Bash(ls:*)
Bash(find:*)
Bash(git status:*)
Bash(git diff:*)
Bash(wc:*)
Bash(grep:*)
Bash(cat:*)
Bash(test:*)
WebFetch
WebSearch
allow
Bash(ls:*)
Bash(find:*)
Bash(git status:*)
Bash(git diff:*)
Bash(wc:*)
Bash(grep:*)
Bash(cat:*)
Bash(test:*)
Read
Edit
Write
Glob
Grep
Skill

/sync-claude-md — CLAUDE.md Sync & Cleanup

This command keeps every CLAUDE.md in the project current, lean, and chained. Apply the Karpathy behavioural guidelines (~/.claude/skills/karpathy-guidelines/SKILL.md) while running it: state assumptions, keep changes surgical, define verification per step.


Phase 0: Weekly Audit (only when --weekly is passed)

When the user invokes /sync-claude-md --weekly, run the three audit skills in parallel via the Skill tool before touching any file. Each is forked (context: fork, agent: Explore) so its work happens in an isolated context and only the summary returns:

  1. Skill(claude-md-drift-audit) — references against last 7 days of git history.
  2. Skill(claude-md-link-check)@path imports and markdown links resolve.
  3. Skill(claude-md-dependency-rescan) — Tech Stack sections vs. manifest files.

Issue all three in a single message so they execute concurrently. Wait for all three to return, then aggregate their findings into one report at the top of this run — ## Weekly Audit Summary with one subsection per skill. If any audit returns findings, proceed to Phase 1 with those findings in mind so the sync work resolves them. If all three are clean, skip to Phase 4 (chain repair) — no edits required.

When --weekly is not passed, skip this phase entirely and start at Phase 1.


Phase 1: Inventory

Discover every CLAUDE.md in the project (skipping vendor directories) and report sizes.

!find . -name "CLAUDE.md" -type f -not -path "./node_modules/*" -not -path "./.git/*" -not -path "./vendor/*" -not -path "./dist/*" -not -path "./build/*" -print -exec wc -l {} \;

Then capture the project signal that drives staleness checks:

!ls -la package.json requirements.txt pyproject.toml go.mod Cargo.toml 2>/dev/null || true !git status --short 2>/dev/null || echo "Not a git repository" !git diff --name-status HEAD~10 -- . 2>/dev/null | head -50 || true


Phase 2: Per-File Audit

For each CLAUDE.md found, run the claude-md-enhancer skill's analyzer to compute:

  • Current line count (hard cap: 150 lines)
  • Sections present and their freshness
  • Anti-patterns (TODO/placeholder text, hardcoded secrets, generic content)
  • References to files, directories, packages, or scripts that may be stale

Stale references to flag and remove unless the user objects:

  1. Dependency references — packages mentioned in CLAUDE.md but absent from package.json / requirements.txt / pyproject.toml / go.mod / Cargo.toml.
  2. File / directory references — paths in the project structure section that no longer exist on disk.
  3. Script references — commands in Quick Reference / Common Operations that point to removed npm scripts or Makefile targets.
  4. Modular link targets[Backend Guidelines](backend/CLAUDE.md) or @backend/CLAUDE.md imports where the target file no longer exists.
  5. Version drift — version numbers / "What's New in vX.Y" sections referencing releases older than what CHANGELOG.md shows as current.

For each finding, show the offending line(s) with file:line references before editing.


Phase 3: Enforce the 150-Line Cap

Any CLAUDE.md exceeding 150 lines must be split. Prefer this order:

  1. Move detail to existing sub-files. If backend/CLAUDE.md exists, push backend-specific content there.
  2. Create a new sub-file in the appropriate directory (e.g. database/CLAUDE.md) using claude-md-enhancer.generate_context_file(). The generator automatically prepends a back-link to the root.
  3. Update the root file's navigation — both the human-readable bullets and the @path/to/CLAUDE.md chain imports — using claude-md-enhancer.

After splitting, re-validate every modified file with BestPracticesValidator and confirm line count ≤ 150.


Phase 4: Re-chain Root ↔ Sub Files

Verify the bidirectional chain:

  • Root CLAUDE.md must contain a Quick Navigation block listing every existing sub-CLAUDE.md, plus a @<relative-path> import line for each.
  • Every sub-CLAUDE.md must contain a back-link at the top pointing to ../CLAUDE.md (or the correct relative path) with both a markdown link and a @../CLAUDE.md import.

Repair any missing or broken chain links. Remove chain entries for sub-files that have been deleted.


Phase 5: Cleanup & Report

After edits, regenerate validator output for each file and show:

  • Files modified
  • Lines removed (stale content)
  • Sections added / split / removed
  • Final line count per file (must all be ≤ 150)
  • Remaining warnings the user should review manually

Do not commit. Leave the diff staged-but-uncommitted so the user can review with git diff and choose when to commit.


When to Run

  • After completing a feature, major refactor, or dependency change.
  • When claude-md-guardian flags drift on session start.
  • Whenever any single CLAUDE.md grows past ~120 lines (warning threshold).
  • Before cutting a release — keeps documentation truthful at the tag boundary.

Companion Tools

  • /enhance-claude-md — initialise or upgrade a CLAUDE.md when one is missing or thin.
  • claude-md-guardian agent — runs sync automatically on session start when changes are detected.
  • karpathy-guidelines skill — behavioural rules applied to every edit this command makes.