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).
Wave 3 - adoption hardening. Patterns adapted (in original prose, with
attribution) from MIT-licensed shanraisshan/claude-code-best-practice.
Commands (command/enhance-claude-md.md, command/sync-claude-md.md):
- Add allowed-tools / disallowedTools / argument-hint / when_to_use so the
commands auto-suggest in the slash menu and avoid permission prompts.
- disallowedTools blocks WebFetch + WebSearch on both commands.
- Drop the previous broken hooks block (array-of-{matcher, commands} shape
did not match canonical schema; was never firing).
Skills:
- skill/karpathy-guidelines/SKILL.md: paths: glob over 23 code-file
extensions, so the guardrails auto-load only when editing source, not
markdown or data.
- skill/SKILL.md: model: haiku, effort: medium, paths: scoped to CLAUDE.md
+ AGENTS.md + .claude/rules/*.md so validator/generator passes run
cheaply without changing the user-facing model.
CLAUDE.local.md personal tier:
- skill/validator.py BestPracticesValidator now accepts filename=; any
*.local.md basename waives the 150-line cap.
- hooks/validate-claude-md.py reads the exempt suffix from hooks-config.
- .gitignore covers CLAUDE.local.md, **/CLAUDE.local.md,
.claude/settings.local.json, hooks/hooks-config.local.json.
Layered hook config:
- hooks/hooks-config.json: committed defaults
(validateClaudeMd.enabled/maxLines/exemptFilenameSuffix/exitCodeOnViolation,
stopAuditLine.enabled).
- hooks/validate-claude-md.py merges hooks-config.json +
hooks-config.local.json key-by-key; honours enabled=false (silent
exit 0), configurable cap, configurable exit code.
Stop audit hook:
- hooks/audit-claude-md.py walks the project tree, prints one stderr
line: total tracked / OVER cap / near cap (>=80%). Respects
stopAuditLine.enabled from config.
- hooks/hooks.json registers Stop event with matcher "".
Guardian fail-closed contract:
- agent/claude-md-guardian.md Safety & Validation section now explicitly
requires Skill-tool invocation (no inline paraphrase of SKILL.md),
abort on missing validated output, never auto-commit, and respect
local hook config.
Verified (8/8 smoke tests):
- Both commands parse with new fields and no broken hooks block.
- karpathy paths: 23 globs, includes .py/.ts/.go/.rs.
- skill model=haiku effort=medium with CLAUDE.md path scope.
- Validator: *.local.md (300 lines) -> pass; CLAUDE.md (300) -> fail;
legacy ctor without filename -> default behavior preserved.
- hooks-config.json valid; validateClaudeMd.enabled=true, maxLines=150.
- Hook validator: default rc=2 on bloated, rc=0 when local override
disables it, rc=0 on *.local.md (exempt).
- Stop hook entry present; audit script: rc=0 with "5 CLAUDE.md tracked".
- Regression: large-fullstack root still 52 lines with chain imports.
Turns ClaudeForge into an installable Claude Code plugin and adds the
missing pieces for a clean lifecycle: hard line-cap enforcement, modular
chaining via @path imports, a sync/cleanup command, and Explore-agent
delegation for project discovery.
- .claude-plugin/plugin.json: plugin manifest registering both skills,
both commands, and the guardian agent (installable via /plugin marketplace
add alirezarezvani/ClaudeForge && /plugin install claudeforge)
- skill/validator.py: MAX_RECOMMENDED_LINES 300 -> 150 (warning at 120)
- skill/template_selector.py: target_lines capped at 150 across all
team sizes (solo 75 / small 100 / medium 125 / large 150) so any
single CLAUDE.md fits within the cap; bigger projects spread content
across modular sub-files
- skill/analyzer.py: length thresholds, quality scoring, and recommendations
rebased on the 150 cap (was 300/400)
- skill/generator.py: modular root now emits @path imports next to the
human-readable links; every sub-CLAUDE.md gets a back-link header
pointing to ../CLAUDE.md (markdown + @import) for bidirectional chaining
- command/sync-claude-md.md: new /sync-claude-md command that inventories
every CLAUDE.md, prunes stale references, enforces the 150 cap by
splitting into sub-files, and repairs the root <-> sub chain
- command/enhance-claude-md.md: discovery phase now delegates the deep
codebase scan to the Explore subagent to keep context lean
- install.sh / install.ps1: each command in command/ installs as its own
~/.claude/commands/<name>.md (legacy bundle backed up on upgrade)
- skill/SKILL.md, CLAUDE.md, README.md, CHANGELOG.md: docs updated for
the plugin install path, sync command, and new line cap
Verified via smoke test: validator constants, template targets, generator
output line counts across 5 presets (all <= 150), context files with
backlinks, @-import chain in modular root, idempotent merge_with_existing,
validator status transitions at the new cap, analyzer quality differential,
and plugin manifest JSON shape with all referenced paths existing on disk.