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:
+26
-11
@@ -178,7 +178,8 @@ Write-Host ""
|
||||
Write-Info "Installation will create:"
|
||||
Write-Host " • Skill: $skillsDir\claudeforge-skill\"
|
||||
Write-Host " • Skill: $skillsDir\karpathy-guidelines\"
|
||||
Write-Host " • Command: $commandsDir\enhance-claude-md\"
|
||||
Write-Host " • Command: $commandsDir\enhance-claude-md.md"
|
||||
Write-Host " • Command: $commandsDir\sync-claude-md.md"
|
||||
Write-Host " • Agent: $agentsDir\claude-md-guardian.md"
|
||||
Write-Host ""
|
||||
|
||||
@@ -231,17 +232,29 @@ if (Test-Path $nestedKarpathy) {
|
||||
}
|
||||
Write-Success "Karpathy guidelines installed → $karpathyPath\"
|
||||
|
||||
# Install slash command
|
||||
Write-Info "Installing /enhance-claude-md command..."
|
||||
$commandPath = "$commandsDir\enhance-claude-md"
|
||||
if (Test-Path $commandPath) {
|
||||
Write-Warning "Existing command found. Creating backup..."
|
||||
# Install slash commands. Each .md file in command/ becomes its own
|
||||
# top-level command file so it registers as /<name>. README.md is skipped.
|
||||
Write-Info "Installing slash commands..."
|
||||
|
||||
# Migrate legacy bundle directory if present.
|
||||
$legacyBundle = "$commandsDir\enhance-claude-md"
|
||||
if (Test-Path $legacyBundle) {
|
||||
Write-Warning "Legacy command bundle found. Creating backup..."
|
||||
$backupName = "enhance-claude-md.backup.$(Get-Date -Format 'yyyyMMdd_HHmmss')"
|
||||
Move-Item -Path $commandPath -Destination "$commandsDir\$backupName" -Force
|
||||
Move-Item -Path $legacyBundle -Destination "$commandsDir\$backupName" -Force
|
||||
Write-Success "Backup created"
|
||||
}
|
||||
Copy-Item -Path "command" -Destination $commandPath -Recurse -Force
|
||||
Write-Success "Command installed → $commandPath\"
|
||||
|
||||
Get-ChildItem -Path "command" -Filter "*.md" -File | Where-Object { $_.Name -ne "README.md" } | ForEach-Object {
|
||||
$cmdTarget = Join-Path $commandsDir $_.Name
|
||||
if (Test-Path $cmdTarget) {
|
||||
Write-Warning "Existing $($_.Name) found. Creating backup..."
|
||||
$backupName = "$($_.Name).backup.$(Get-Date -Format 'yyyyMMdd_HHmmss')"
|
||||
Move-Item -Path $cmdTarget -Destination (Join-Path $commandsDir $backupName) -Force
|
||||
}
|
||||
Copy-Item -Path $_.FullName -Destination $cmdTarget -Force
|
||||
Write-Success "Command installed → $cmdTarget"
|
||||
}
|
||||
|
||||
# Install guardian agent
|
||||
Write-Info "Installing claude-md-guardian agent..."
|
||||
@@ -363,12 +376,14 @@ Write-Host ""
|
||||
if ($scope -eq "user-level") {
|
||||
Write-Host " Remove-Item -Recurse -Force ~\.claude\skills\claudeforge-skill"
|
||||
Write-Host " Remove-Item -Recurse -Force ~\.claude\skills\karpathy-guidelines"
|
||||
Write-Host " Remove-Item -Recurse -Force ~\.claude\commands\enhance-claude-md"
|
||||
Write-Host " Remove-Item -Force ~\.claude\commands\enhance-claude-md.md"
|
||||
Write-Host " Remove-Item -Force ~\.claude\commands\sync-claude-md.md"
|
||||
Write-Host " Remove-Item -Force ~\.claude\agents\claude-md-guardian.md"
|
||||
} else {
|
||||
Write-Host " Remove-Item -Recurse -Force .\.claude\skills\claudeforge-skill"
|
||||
Write-Host " Remove-Item -Recurse -Force .\.claude\skills\karpathy-guidelines"
|
||||
Write-Host " Remove-Item -Recurse -Force .\.claude\commands\enhance-claude-md"
|
||||
Write-Host " Remove-Item -Force .\.claude\commands\enhance-claude-md.md"
|
||||
Write-Host " Remove-Item -Force .\.claude\commands\sync-claude-md.md"
|
||||
Write-Host " Remove-Item -Force .\.claude\agents\claude-md-guardian.md"
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
Reference in New Issue
Block a user