This repository distributes the compound-engineering plugin from a portable source of truth, then generates platform-specific outputs for Claude Code and Copilot.
compound-engineering-plugin/
├── portable/
│ └── compound-engineering/ # Canonical portable source
├── .claude-plugin/
│ └── marketplace.json # Generated Claude marketplace catalog
├── .github/
│ ├── agents/ # Generated Copilot agents
│ ├── skills/ # Generated Copilot skills
│ └── copilot-mcp-config.json # Generated Copilot MCP config
├── docs/ # Documentation site (GitHub Pages)
│ ├── index.html # Landing page
│ ├── css/ # Stylesheets
│ ├── js/ # JavaScript
│ └── pages/ # Reference pages
└── plugins/
└── compound-engineering/ # Generated Claude plugin
├── .claude-plugin/
│ └── plugin.json # Plugin metadata
├── agents/ # Specialized AI agents
├── commands/ # Slash commands
├── skills/ # Skills
├── mcp-servers/ # MCP servers (context7)
├── README.md # Plugin documentation
└── CHANGELOG.md # Version history
Each unit of engineering work should make subsequent units of work easier -- not harder.
When working on this repository, follow the compounding engineering process:
- Plan -- Understand the change needed and its impact
- Delegate -- Use AI tools to help with implementation
- Assess -- Verify changes work as expected
- Codify -- Update this CLAUDE.md with learnings
All workflows write output to {project_root}/docs/:
docs/ideation/-- Ideation artifacts (generated by/workflows:ideate)docs/plans/-- Implementation plans (generated by/workflows:plan)docs/brainstorms/-- Brainstorm documents (generated by/workflows:brainstorm)docs/solutions/-- Compounded learnings (generated by/workflows:compound)docs/execution-sessions/-- Work session logs (generated by/workflows:work)
Workflows create the docs/ directory if it does not exist.
Gitignore convention: Projects should ignore ephemeral output but keep solutions:
docs/ideation/
docs/plans/
docs/brainstorms/
docs/execution-sessions/
# Do NOT ignore docs/solutions/ -- these are institutional knowledgeWhen agents, commands, or skills are added/removed, follow this checklist:
# Count agents
find portable/compound-engineering/agents -name '*.md' | wc -l
# Count commands
find portable/compound-engineering/commands -name '*.md' | wc -l
# Count skills
find portable/compound-engineering/skills -mindepth 1 -maxdepth 1 -type d | wc -lThe portable source is canonical. Generated descriptions still appear in multiple places and must match everywhere:
-
portable/compound-engineering/plugin.yaml-- base metadata -
plugins/compound-engineering/.claude-plugin/plugin.json--descriptionfield -
.claude-plugin/marketplace.json-- plugindescriptionfield -
plugins/compound-engineering/README.md-- intro paragraph
Format: "Includes X specialized agents, Y commands, and Z skill(s)."
When adding new functionality, bump the version in:
-
portable/compound-engineering/plugin.yaml--version - Rebuild outputs with
bun run build:platforms
bun run build:platforms-
plugins/compound-engineering/README.md-- list all components -
plugins/compound-engineering/CHANGELOG.md-- document changes -
CLAUDE.md-- update structure diagram if needed
Run the release-docs command to update all documentation pages:
claude /release-docscat .claude-plugin/marketplace.json | jq .
cat plugins/compound-engineering/.claude-plugin/plugin.json | jq .# Ensure counts in descriptions match actual files
grep -o "Includes [0-9]* specialized agents" plugins/compound-engineering/.claude-plugin/plugin.json
find portable/compound-engineering/agents -name '*.md' | wc -l- Create
portable/compound-engineering/agents/new-agent.md - Rebuild outputs with
bun run build:platforms - Update README.md agent list
- Test with
claude agent new-agent "test"
- Create
portable/compound-engineering/commands/new-command.md - Rebuild outputs with
bun run build:platforms - Update README.md command list
- Test with
claude /new-command
- Create skill directory:
portable/compound-engineering/skills/skill-name/ - Add skill structure:
skills/skill-name/ ├── SKILL.md # Skill definition with frontmatter (name, description) └── scripts/ # Supporting scripts (optional) - Rebuild outputs with
bun run build:platforms - Update README.md with skill documentation
- Update CHANGELOG.md with the addition
- Test with
claude skill skill-name
Skill file format (SKILL.md):
---
name: skill-name
description: Brief description of what the skill does
---
# Skill Title
Detailed documentation...-
Install the marketplace locally:
claude /plugin marketplace add https://github.com/The-Rabak/compound-engineering-plugin
-
Install the plugin:
claude /plugin install compound-engineering
-
Test agents and commands:
claude /workflows:review claude agent rabak-laravel-reviewer "test message"
Before committing, ensure JSON files are valid:
cat .claude-plugin/marketplace.json | jq .
cat plugins/compound-engineering/.claude-plugin/plugin.json | jq .Follow these patterns for commit messages:
Add [agent/command name]-- Adding new functionalityRemove [agent/command name]-- Removing functionalityUpdate [file] to [what changed]-- Updating existing filesFix [issue]-- Bug fixesSimplify [component] to [improvement]-- Refactoring
This section captures important learnings as we work on this repository.
The counts appear in multiple places (plugin.json, marketplace.json, README.md) and must all match. Use the verification commands in the checklist above.
portable/compound-engineering/ is now the canonical source. plugins/compound-engineering/ and .github/ are generated outputs and should be rebuilt with bun run build:platforms after portable changes.
Custom fields in marketplace.json (downloads, stars, rating, categories, trending) may confuse users or break compatibility. Only include fields from the official spec.