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.
claude-md-guardian Agent
Background maintenance agent that keeps CLAUDE.md files synchronized with project changes.
Overview
The claude-md-guardian is a specialized Claude Code agent that monitors your project and automatically updates CLAUDE.md files when significant changes occur. It works independently in the background without interrupting development workflows.
Key Features
- 🔄 Auto-Sync: Updates CLAUDE.md based on git changes
- 🎯 Smart Detection: Only updates when significant changes occur
- ⚡ Token-Efficient: Uses haiku model for routine updates
- 🔇 Silent Operation: No interruptions during active development
- 📦 Milestone-Aware: Triggers after feature completion, refactoring, etc.
- ✨ Native Format: Ensures 100% Claude Code format compliance
When It's Invoked
Automatic Triggers
SessionStart (beginning of each session):
- Checks git changes since last update
- Silent exit if no significant changes
- Updates only when needed
Manual Triggers
After Major Milestones:
- ✅ Feature completion
- ✅ Major refactoring
- ✅ New dependencies added
- ✅ Architecture changes
- ✅ Configuration updates
Via Commands:
/enhance-claude-mdslash command- Direct invocation: "Claude, invoke claude-md-guardian"
Installation
Option 1: User-Level (Recommended)
Available in all your Claude Code projects:
# Copy agent to user directory
cp agent/claude-md-guardian.md ~/.claude/agents/
# Restart Claude Code
Option 2: Project-Level
Available only in current project:
# Create agents directory
mkdir -p .claude/agents
# Copy agent
cp agent/claude-md-guardian.md .claude/agents/
# Restart Claude Code
Option 3: With SessionStart Hook
Automatically check for updates at session start:
# Add to .claude/settings.json or ~/.claude/settings.json
{
"hooks": {
"SessionStart": {
"command": "echo 'Checking CLAUDE.md updates...'",
"timeout": 5000,
"description": "Trigger claude-md-guardian awareness"
}
}
}
Note: The hook creates awareness, but the agent only updates if significant changes detected.
v2.0.0 Update: Hooks now support advanced features like run_in_background, environment variables, and conditional execution. See docs/MIGRATION_V2.md for details.
Prerequisites
Required:
claudeforge-skillmust be installed- User-level:
~/.claude/skills/claudeforge-skill/ - Project-level:
.claude/skills/claudeforge-skill/ - v2.0.0: Auto-migrates from old
claude-md-enhancername
- User-level:
Optional (but recommended):
/enhance-claude-mdslash command- Git repository (for change detection)
Usage Examples
Example 1: Session Start (Auto)
# You start Claude Code session
# Agent checks changes automatically
Agent: ✓ CLAUDE.md current (no significant changes detected)
# Silent - continues session normally
Example 2: After Feature Completion (Manual)
You: "Feature complete - user authentication system implemented"
You: "Claude, invoke claude-md-guardian to update CLAUDE.md"
Agent: Analyzing changes for user authentication feature...
Updates applied:
- Architecture: Added authentication flow
- API Documentation: New /auth endpoints
- Security Practices: JWT implementation notes
- Database: User table schema
✅ CLAUDE.md updated to reflect authentication system
Example 3: New Dependencies Added
# You added react-query and tailwindcss to package.json
# Next session starts
Agent: Detected 2 new dependencies.
Updating CLAUDE.md:
- Tech Stack section (added React Query, Tailwind CSS)
- Setup & Installation (updated installation steps)
✅ CLAUDE.md updated (2 sections modified)
Example 4: Via Slash Command
/enhance-claude-md
# Slash command discovers changes and invokes agent
Agent: 🔄 Analyzing project changes...
Updates applied:
- Project Structure: New components/ directory
- File Structure: Updated directory explanations
- Common Commands: Added new npm scripts
✅ CLAUDE.md synchronized (3 sections modified)
What the Agent Does
1. Change Detection
Analyzes git history for:
- New dependencies (package.json, requirements.txt, etc.)
- New directories/file structure changes
- Configuration updates (.env.example, config files)
- Architecture pattern changes
2. Scope Determination
Minor Updates (1-2 sections):
- New dependency added
- Single directory created
- Minor configuration change
Moderate Updates (3-4 sections):
- Multiple dependencies
- Structure reorganization
- Feature completion
Major Updates (Full quality check):
- Architecture refactoring
- Multiple major changes
- First-time generation
3. Targeted Updates
Uses claude-md-enhancer skill to update only affected sections:
- Tech Stack: Dependency changes
- Project Structure: Directory changes
- Setup & Installation: Configuration changes
- Architecture: Pattern changes
- Common Commands: Script changes
4. Validation
Ensures all updates follow:
- Native Claude Code format (project structure diagrams, etc.)
- 100% format compliance
- Critical validation rule
Token Efficiency
Model Selection
haiku (default):
- Routine updates
- Dependency additions
- Minor structure changes
- Cost-effective for background tasks
sonnet (escalation):
- Major architecture changes
- First-time CLAUDE.md generation
- Complex modular setups
Update Strategy
Targeted (default):
- Edit specific sections only
- Preserve existing content
- Minimal token usage
Full (when necessary):
- Complete quality check
- Comprehensive enhancement
- Only for major milestones
Coordination with Other Agents
Works AFTER These Agents Complete
rr-frontend-engineer- Frontend featuresrr-backend-engineer- Backend APIsrr-fullstack-engineer- Integration work- Any agent marking tasks "completed"
Independent Operation
- ✅ Doesn't block other agents
- ✅ Runs in background
- ✅ No interruptions to development
- ✅ Reports when done
Never Invoked During
- ❌ Active development by other agents
- ❌ Minor code edits (typos, comments)
- ❌ Test-only changes
- ❌ Multiple times per session (unless milestones)
Output Formats
Silent (No Changes)
✓ CLAUDE.md current (no significant changes detected)
Concise (Minor Updates)
✅ CLAUDE.md updated:
- Tech Stack: Added 2 dependencies
- Setup: New environment variable
Changes: 2 sections, 8 lines
Detailed (Major Milestone)
🔄 Major changes detected - Full quality check performed
Updates applied:
- Architecture: New microservices pattern documented
- Tech Stack: 5 new dependencies added
- Setup & Installation: Updated for monorepo
- Common Commands: Added 3 new scripts
Quality Score: 75 → 88 (+13)
Changes: 6 sections, 45 lines
✅ CLAUDE.md fully synchronized
Configuration
Sensitivity Adjustment
In the agent file, you can adjust when updates trigger:
# Current thresholds (in agent logic):
- Minimum files changed: 5
- Dependency threshold: 1 new dependency
- Structure change: 1 new directory
Hook Timeout
{
"hooks": {
"SessionStart": {
"timeout": 5000 // 5 seconds
}
}
}
Troubleshooting
Agent Not Triggering
Problem: Agent doesn't update CLAUDE.md Solutions:
- Check
claude-md-enhancerskill is installed - Verify git repository exists
- Ensure changes meet significance threshold
- Manually invoke: "Claude, invoke claude-md-guardian"
Too Many Updates
Problem: Agent updates too frequently Solutions:
- Increase significance thresholds in agent
- Remove SessionStart hook
- Use manual invocation only
Skill Not Found Error
Problem: "claudeforge-skill not found" Solution:
# Install the skill
cp -r skill ~/.claude/skills/claudeforge-skill/
# Restart Claude Code
# Note: v2.0.0 auto-migrates from old claude-md-enhancer name
Integration
With claudeforge-skill
The agent uses this skill as its core capability:
Agent detects changes → Invokes skill → Skill updates sections → Agent validates
v2.0.0: Uses new permissions: syntax for tool access control.
With /enhance-claude-md Command
The slash command can invoke the agent:
/enhance-claude-md
# → Discovery → Analysis → Invokes claude-md-guardian → Updates
With Development Workflow
1. Developer works on feature
2. Other agents (frontend/backend) build code
3. Feature marked complete
4. claude-md-guardian invoked
5. CLAUDE.md updated
6. Ready for next feature
Best Practices
When to Invoke Manually
- ✅ After completing major feature
- ✅ After significant refactoring
- ✅ Before creating pull request
- ✅ After adding multiple dependencies
- ✅ After architecture changes
When to Let Auto-Trigger Handle It
- ✅ Session start checks
- ✅ Routine dependency updates
- ✅ Minor structure changes
When NOT to Invoke
- ❌ During active development
- ❌ After minor code changes
- ❌ Multiple times without actual changes
Version
- Version: 2.0.0
- Last Updated: January 2026
- Compatible: Claude Code 2.1.4+
- Dependencies: claudeforge-skill v2.0.0+
- Migration: See docs/MIGRATION_V2.md for upgrade guide
Related Resources
- Skill:
skill/(claudeforge-skill) - Slash Command:
command/(enhance-claude-md) - Agent File:
agent/claude-md-guardian.md
Quick Start: Copy agent to ~/.claude/agents/, restart Claude Code, and the guardian will automatically maintain your CLAUDE.md files!