mirror of
https://github.com/alirezarezvani/ClaudeForge.git
synced 2026-07-04 02:43:15 -04:00
feat(plugin): ship as Claude Code plugin with 150-line cap and sync command
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.
This commit is contained in:
+28
-8
@@ -159,7 +159,8 @@ echo ""
|
||||
print_info "Installation will create:"
|
||||
echo " • Skill: $SKILLS_DIR/claudeforge-skill/"
|
||||
echo " • Skill: $SKILLS_DIR/karpathy-guidelines/"
|
||||
echo " • Command: $COMMANDS_DIR/enhance-claude-md/"
|
||||
echo " • Command: $COMMANDS_DIR/enhance-claude-md.md"
|
||||
echo " • Command: $COMMANDS_DIR/sync-claude-md.md"
|
||||
echo " • Agent: $AGENTS_DIR/claude-md-guardian.md"
|
||||
echo ""
|
||||
|
||||
@@ -203,15 +204,32 @@ cp -r skill/karpathy-guidelines "$SKILLS_DIR/karpathy-guidelines"
|
||||
rm -rf "$SKILLS_DIR/claudeforge-skill/karpathy-guidelines"
|
||||
print_success "Karpathy guidelines installed → $SKILLS_DIR/karpathy-guidelines/"
|
||||
|
||||
# Install slash command
|
||||
print_info "Installing /enhance-claude-md command..."
|
||||
# Install slash commands. Each .md file in command/ is installed as its own
|
||||
# top-level command file so it registers as /<name> rather than as a nested
|
||||
# /<dir>:<name>. README.md and other non-command files are skipped.
|
||||
print_info "Installing slash commands..."
|
||||
|
||||
# Migrate legacy bundle directory if present.
|
||||
if [ -d "$COMMANDS_DIR/enhance-claude-md" ]; then
|
||||
print_warning "Existing command found. Creating backup..."
|
||||
print_warning "Legacy command bundle found. Creating backup..."
|
||||
mv "$COMMANDS_DIR/enhance-claude-md" "$COMMANDS_DIR/enhance-claude-md.backup.$(date +%Y%m%d_%H%M%S)"
|
||||
print_success "Backup created"
|
||||
fi
|
||||
cp -r command "$COMMANDS_DIR/enhance-claude-md"
|
||||
print_success "Command installed → $COMMANDS_DIR/enhance-claude-md/"
|
||||
|
||||
for cmd_file in command/*.md; do
|
||||
cmd_basename=$(basename "$cmd_file")
|
||||
# Skip the directory's own README.
|
||||
if [ "$cmd_basename" = "README.md" ]; then
|
||||
continue
|
||||
fi
|
||||
cmd_target="$COMMANDS_DIR/$cmd_basename"
|
||||
if [ -f "$cmd_target" ]; then
|
||||
print_warning "Existing $cmd_basename found. Creating backup..."
|
||||
mv "$cmd_target" "$cmd_target.backup.$(date +%Y%m%d_%H%M%S)"
|
||||
fi
|
||||
cp "$cmd_file" "$cmd_target"
|
||||
print_success "Command installed → $cmd_target"
|
||||
done
|
||||
|
||||
# Install guardian agent
|
||||
print_info "Installing claude-md-guardian agent..."
|
||||
@@ -319,12 +337,14 @@ echo ""
|
||||
if [ "$SCOPE" == "user-level" ]; then
|
||||
echo " rm -rf ~/.claude/skills/claudeforge-skill"
|
||||
echo " rm -rf ~/.claude/skills/karpathy-guidelines"
|
||||
echo " rm -rf ~/.claude/commands/enhance-claude-md"
|
||||
echo " rm -f ~/.claude/commands/enhance-claude-md.md"
|
||||
echo " rm -f ~/.claude/commands/sync-claude-md.md"
|
||||
echo " rm -f ~/.claude/agents/claude-md-guardian.md"
|
||||
else
|
||||
echo " rm -rf ./.claude/skills/claudeforge-skill"
|
||||
echo " rm -rf ./.claude/skills/karpathy-guidelines"
|
||||
echo " rm -rf ./.claude/commands/enhance-claude-md"
|
||||
echo " rm -f ./.claude/commands/enhance-claude-md.md"
|
||||
echo " rm -f ./.claude/commands/sync-claude-md.md"
|
||||
echo " rm -f ./.claude/agents/claude-md-guardian.md"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
Reference in New Issue
Block a user