Files
ClaudeForge/command/enhance-claude-md.md
T
Claude 0a34178e22 feat(plugin): fix guardian hooks, add InstructionsLoaded enforcement, .claude/rules emitter, AGENTS.md interop
Closes the gap between ClaudeForge and the Anthropic docs at
code.claude.com/docs/en/memory (and its linked hooks / skills / plugins
pages). Five tightly-scoped changes, each verified by smoke test.

A. Fix guardian hook frontmatter shape (agent/claude-md-guardian.md)

   The previous array-of-{event, commands} shape did not match the
   documented schema (hooks: { EventName: [{ matcher, hooks: [{ type,
   command }] }] }), so the guardian's hooks silently did not fire.
   Rewritten to the canonical keyed-object shape with PostToolUse,
   PreToolUse, SessionStart, and the new InstructionsLoaded event.

B+C. Plugin-level hooks/hooks.json + hooks/validate-claude-md.py

   New deterministic enforcement of the 150-line cap. The validator
   script reads the hook payload from stdin, extracts any referenced
   CLAUDE.md path (supports both PostToolUse tool_input.file_path and
   InstructionsLoaded path / file shapes), and exits 2 with stderr
   feedback when the file is over 150 lines. Wired to both PostToolUse
   on Write|Edit and InstructionsLoaded on every load_reason
   (session_start, nested_traversal, path_glob_match, include, compact).
   The cap is now enforced at every load *and* write, not only when the
   guardian decides to run sync.

D. ContentGenerator.generate_rules_file() (skill/generator.py)

   Emits path-scoped .claude/rules/*.md instruction files with name,
   description, and paths: glob frontmatter. Claude loads these
   lazily — only when accessing files matching the globs — so
   file-type-specific guidance no longer has to live in the root
   CLAUDE.md. Validates that paths is non-empty (ValueError otherwise).

E. AGENTS.md / .cursorrules / .windsurfrules interop

   command/enhance-claude-md.md Phase 1 now lists which sibling
   instruction files exist. ContentGenerator.generate_root_file() reads
   project_context['existing_instruction_files'] and prepends an
   ## External Instructions section with @AGENTS.md (etc.) imports, so
   repos already using other agent tooling can adopt ClaudeForge
   without losing their existing instructions.

Smoke tests (all pass):
- Guardian hooks frontmatter parses as a dict with 4 events, each
  carrying matcher + nested hooks array of {type, command} entries.
- hooks.json is valid JSON; PostToolUse matcher = Write|Edit;
  InstructionsLoaded matcher covers all five load_reason values.
- validate-claude-md.py: small file -> rc 0, bloated file (200 lines)
  -> rc 2 with stderr referencing the 150 cap, InstructionsLoaded
  payload shape also handled, non-CLAUDE.md paths ignored, no stdin
  -> rc 0.
- generate_rules_file emits valid frontmatter with paths glob and
  raises ValueError when paths is empty.
- generate_root_file inserts @AGENTS.md and @.cursorrules imports
  when existing_instruction_files lists them; omits the section
  otherwise.
- Regression: large-fullstack root still 52 lines with chain imports
  intact; all five sub-CLAUDE.md files in this repo still pass
  validator (status = pass).

Docs:
- agent/CLAUDE.md updated to show the canonical hook shape and the
  hook-driven validator wiring.
- skill/CLAUDE.md notes generate_rules_file and AGENTS.md interop.
- CHANGELOG.md documents all five changes under Unreleased.
2026-05-19 02:04:00 +00:00

6.1 KiB

description, permissions, hooks
description permissions hooks
Initialize or enhance CLAUDE.md files using the claude-md-enhancer skill with interactive workflow and 100% native format compliance
allow
Bash(ls:*)
Bash(find:*)
Bash(git status:*)
Read
Glob
Skill
matcher once commands
true
echo "Starting CLAUDE.md enhancement workflow"

CLAUDE.md Enhancer Command

This command uses the claude-md-enhancer skill to initialize or enhance CLAUDE.md files for your project.


Phase 1: Discovery - Check Current State

Check if CLAUDE.md exists

!ls -la CLAUDE.md 2>/dev/null || echo "CLAUDE.md not found"

Check for modular CLAUDE.md files

!find . -name "CLAUDE.md" -type f -not -path "./node_modules/*" -not -path "./.git/*" | head -10

Get repository status

!git status --short 2>/dev/null || echo "Not a git repository"

Check project structure

!ls -la

Check for sibling agent / rule files

If AGENTS.md, .cursorrules, or .windsurfrules exists, ClaudeForge will preserve it and chain it from the root CLAUDE.md via @AGENTS.md (or the equivalent) instead of overwriting. Detect them now:

!for f in AGENTS.md .cursorrules .windsurfrules; do [ -f "$f" ] && echo "found: $f ($(wc -l < "$f") lines)" || echo "absent: $f"; done

Deep project scan via Explore agent

For non-trivial repositories, delegate the codebase walk to the Explore subagent so the discovery does not bloat this command's context window. Ask it a single, scoped question — for example:

Walk this repository and report: project type (web_app / api / fullstack / cli / library / mobile / desktop), languages and frameworks detected, primary tech stack files (package.json, requirements.txt, pyproject.toml, go.mod, Cargo.toml), team-size indicators (number of contributors, CODEOWNERS), workflow indicators (.github/workflows, Dockerfile, CI configs), and any subdirectories that warrant their own CLAUDE.md (backend/, frontend/, database/, docs/, .github/). Return findings as a compact JSON object. Under 250 words.

Use the general-purpose subagent only for research that requires synthesising findings across multiple agents (e.g. comparing detected stack against template registry). Keep agent prompts self-contained and ask for short, structured reports.


Phase 2: Analysis - Determine Action

Based on the discovery above, I need to determine the appropriate action:

If CLAUDE.md does NOT exist → Interactive Initialization Workflow If CLAUDE.md exists → Analysis and Enhancement Workflow

For New Projects (No CLAUDE.md):

The claude-md-enhancer skill will:

  1. Explore your repository structure
  2. Detect project type, tech stack, team size, development phase
  3. Show you the discoveries and ask for confirmation
  4. Create customized CLAUDE.md file(s) after your approval
  5. Apply 100% native format compliance (project structure diagrams, setup instructions, architecture sections)

For Existing Projects (CLAUDE.md exists):

The claude-md-enhancer skill will:

  1. Analyze current CLAUDE.md for quality and completeness
  2. Calculate quality score (0-100)
  3. Identify missing sections
  4. Provide actionable recommendations
  5. Offer to enhance with missing native format sections

Phase 3: Task - Execute with Skill or Agent

Option A: Direct Skill Invocation

I can invoke the claude-md-enhancer skill directly to handle the appropriate workflow based on what I discovered above.

The skill provides:

  • 100% Native Format Compliance: All generated files follow official Claude Code format with project structure diagrams, setup instructions, architecture sections, and file structure explanations
  • 🆕 Interactive Initialization: For new projects, explores repository and asks for confirmation before creating files
  • Intelligent Analysis: For existing projects, scans and evaluates for quality and completeness
  • 🚀 Smart Generation: Creates customized CLAUDE.md files from scratch
  • 🔧 Enhancement: Adds missing sections and improves existing files
  • 📦 Modular Architecture: Supports context-specific files (backend/, frontend/, database/)

Always-On: Karpathy Behavioral Guidelines

Every generated or enhanced CLAUDE.md MUST include a ## Behavioral Guidelines section summarising the four Karpathy principles (Think Before Coding, Simplicity First, Surgical Changes, Goal-Driven Execution) with a link to the installed karpathy-guidelines skill.

The claude-md-enhancer skill inserts this section automatically — both in template_selector.customize_template() for new files and in generator.merge_with_existing() for enhanced files. Do not strip it during enhancement; if it is missing from an existing CLAUDE.md, treat that as a required addition.

The full skill is installed at ~/.claude/skills/karpathy-guidelines/SKILL.md (or ./.claude/skills/karpathy-guidelines/SKILL.md for project-level installs).

For ongoing maintenance and automatic updates throughout your project lifecycle, I can invoke the claude-md-guardian agent instead:

When to use the agent:

  • After feature completion
  • After major refactoring
  • When new dependencies are added
  • After architecture changes
  • For periodic CLAUDE.md synchronization

Agent benefits:

  • 🔄 Auto-Sync: Updates CLAUDE.md based on detected changes
  • 🎯 Smart Detection: Only updates when significant changes occur
  • Token-Efficient: Uses haiku model for routine updates
  • 📦 Milestone-Aware: Triggers after completion signals
  • Native Format: Ensures 100% Claude Code format compliance

Your Task

I'm ready to proceed. What would you like me to do?

For new projects: I'll run the interactive initialization workflow (skill) For existing projects: I'll analyze your current CLAUDE.md and suggest improvements (skill) For maintenance: I'll invoke claude-md-guardian agent to check for updates and synchronize

Please confirm how you'd like to proceed, or let me know if you have specific requirements (e.g., "Create a CLAUDE.md for my Python FastAPI project" or "Invoke claude-md-guardian to update my CLAUDE.md").