This skill should be used when documenting a recently solved problem to compound your team's knowledge.
From soleurnpx claudepluginhub jikig-ai/soleur --plugin soleurThis skill uses the workspace's default tool permissions.
Coordinate multiple subagents working in parallel to document a recently solved problem.
Captures problem solutions while context is fresh, creating structured documentation in knowledge-base/project/learnings/ with YAML frontmatter for searchability and future reference. Uses parallel subagents for maximum efficiency.
Why "compound"? Each documented solution compounds your team's knowledge. The first time you solve a problem takes research. Document it, and the next occurrence takes minutes. Knowledge compounds.
skill: soleur:compound # Document the most recent fix
skill: soleur:compound [brief context] # Provide additional context hint
skill: soleur:compound --headless # Headless mode: auto-approve all prompts
If $ARGUMENTS contains --headless, set HEADLESS_MODE=true. Strip --headless from $ARGUMENTS before processing remaining args.
Branch safety check (defense-in-depth): Run git branch --show-current. If the result is main or master, abort immediately with: "Error: compound cannot run on main/master. Checkout a feature branch first." This check fires in all modes (headless and interactive) as defense-in-depth alongside PreToolUse hooks -- it fires even if hooks are unavailable (e.g., in CI).
When HEADLESS_MODE=true, forward --headless to the compound-capture invocation (e.g., skill: soleur:compound-capture --headless).
Load project conventions:
# Load project conventions
if [[ -f "CLAUDE.md" ]]; then
cat CLAUDE.md
fi
Read CLAUDE.md if it exists - apply project conventions during documentation.
HARD RULE: Before writing any learning, enumerate ALL errors encountered in this session. Output a numbered list to the user. This step cannot be skipped even if the session felt clean.
Check for session-state.md: Run git branch --show-current. If on a feat-* branch, check if knowledge-base/project/specs/feat-<name>/session-state.md exists. If it does, read it and include any forwarded errors from ### Errors in the inventory. These errors occurred in preceding pipeline phases (e.g., plan+deepen subagent) whose context was compacted.
Include:
If genuinely no errors occurred (including no forwarded errors), output: "Session error inventory: none detected."
This list feeds directly into the Session Errors section of the learning document. Every item on this list MUST appear in the final output unless the user explicitly excludes it.
FAILURE MODE THIS PREVENTS: Compound runs in pipeline mode, the model judges the session as "clean," and silently drops errors that happened earlier in the conversation (e.g., a skill-not-found error from one-shot Step 1 gets omitted because compound focuses only on the main implementation task).
After the learning file is written (by compound-capture Step 6), read it back and verify:
## Session Errors section with at least as many items as the inventory.**Prevention:** line proposing how to avoid it in future sessions.This gate closes the gap where errors were enumerated in conversation but never made it into the persisted document.
After verifying session errors are in the learning, determine if any error warrants a workflow change. For each session error, ask: "Could a rule, hook, or skill instruction have prevented this?"
This ensures session errors don't just get documented — they feed back into the rules and definitions that govern future sessions. The goal is a closed loop: error happens → gets documented → workflow changes → error cannot recur.
This command launches multiple specialized subagents IN PARALLEL to maximize efficiency:
knowledge-base/project/learnings/ for related documentationknowledge-base/project/learnings/ categoryBased on problem type detected, automatically invoke applicable agents:
performance-oraclesecurity-sentineldata-integrity-guardiankieran-rails-reviewer + code-simplicity-reviewerAfter all parallel subagents complete and before Constitution Promotion, scan the session for workflow deviations against hard rules. This phase runs sequentially (not as a parallel subagent) to respect the max-5 parallel subagent limit.
Close the gap between "we learned X" and "X is now enforced." The project has proven that hooks beat documentation — all existing PreToolUse hooks were added after prose rules failed. This phase detects deviations and proposes the strongest viable enforcement.
Gather rules. Read AGENTS.md and extract only ## Hard Rules and ## Workflow Gates items (Always/Never). Skip Prefer rules — they are advisory and flagging them adds noise.
Gather session evidence. Two sources:
knowledge-base/project/specs/feat-<name>/session-state.md for forwarded errors from preceding pipeline phases (pre-compaction deviations)Detect deviations. For each hard rule, check if session evidence shows a violation. Common examples:
git stash in a worktreemcp__plugin_playwright_playwright__browser_navigate call for that task. This catches laziness in handoff text that hooks cannot detect.Propose enforcement. For each detected deviation, first check if an existing PreToolUse hook already covers it by scanning .claude/hooks/*.sh comment headers. If a hook already enforces the rule, note "already hook-enforced" and skip the proposal. If no hook covers it, propose enforcement following the hierarchy:
Format output. For each deviation, produce:
### Deviation: [short description]
- **Rule violated:** [exact text from AGENTS.md or constitution.md]
- **Evidence:** [what happened in the session]
- **Existing enforcement:** [hook name if already covered, or "none"]
- **Proposed enforcement:** [hook/skill_instruction/prose_rule]
For hook proposals, include an inline draft script following .claude/hooks/ conventions:
#!/usr/bin/env bash
# PreToolUse hook: [what it blocks]
# Source rule: [AGENTS.md or constitution.md reference]
set -euo pipefail
INPUT=$(cat)
# [detection logic]
# If violation detected:
# jq -n '{ hookSpecificOutput: { permissionDecision: "deny", permissionDecisionReason: "BLOCKED: [reason]" } }'
Feed into learning document. For each detected deviation, add it to the learning file's ## Session Errors section (if not already present from Phase 0.5). Format: **[description]** — Recovery: [what fixed it] — Prevention: [proposed enforcement]. This ensures workflow violations are documented in the learning, not just proposed as hooks.
Feed into Constitution Promotion. Present each deviation to the user via the existing Accept/Skip/Edit gate in the Constitution Promotion section below. Accepted hook proposals should be manually copied to .claude/hooks/ after testing — never auto-install.
Rule budget count. After deviation analysis, count always-loaded rules: grep -c '^- ' knowledge-base/project/constitution.md + grep -c '^- ' AGENTS.md. Output: "Rule budget: N always-loaded rules (constitution: X, AGENTS.md: Y)". If N > 250, append: "[WARNING] Rule budget exceeded (N/250). Consider retiring hook-enforced rules or migrating advisory rules to skill/agent instructions."
If no deviations are detected, output: "Deviation Analyst: no violations found." followed by the rule budget count from step 8, then proceed to Knowledge Base Integration.
If knowledge-base/ directory exists, compound saves learnings there and offers constitution promotion:
If knowledge-base/ directory exists, save the learning file to knowledge-base/project/learnings/YYYY-MM-DD-<topic>.md (using today's date). Otherwise, fall back to knowledge-base/project/learnings/<category>/<topic>.md.
Learning format for knowledge-base/project/learnings/:
# Learning: [topic]
## Problem
[What we encountered]
## Solution
[How we solved it]
## Key Insight
[The generalizable lesson]
## Tags
category: [category]
module: [module]
HARD RULE: This phase MUST run even when compound is invoked inside an automated pipeline (one-shot, ship). The model has historically rationalized skipping this as "pipeline mode optimization" -- that is a protocol violation. Constitution promotion and route-to-definition are the phases that prevent repeated mistakes across sessions. If the pipeline is time-constrained, present proposals with a 5-second timeout per item, but never skip entirely.
Headless mode: If HEADLESS_MODE=true, auto-promote using LLM judgment. Review recent learnings, determine if any warrant constitution promotion, select the domain and category using LLM judgment, generate the principle text, and check for duplicates via substring match against existing rules in constitution.md. Skip any principle that is already covered. Append non-duplicate principles and commit. Do not prompt the user. For deviation analyst proposals, auto-accept hook proposals that have clear rule-to-hook mappings and skip ambiguous ones.
Interactive mode: After saving the learning, present two categories of proposals:
1. Deviation Analyst proposals (if any): If Phase 1.5 produced deviations, present each one with Accept/Skip/Edit. For accepted hook proposals, display the draft script and instruct the user to manually copy it to .claude/hooks/ after testing. For accepted skill instruction or prose rule proposals, apply the edit to the target file.
2. Constitution promotion: Prompt the user:
Question: "Promote anything to constitution?"
If user says yes:
knowledge-base/project/learnings/)knowledge-base/project/constitution.md under the correct sectiongit commit -m "constitution: add <domain> <category> principle"If user says no: Continue to next step
HARD RULE: This phase MUST run even in automated pipelines. See constitution promotion rule above.
After constitution promotion, compound routes the captured learning to the skill, agent, or command definition that was active in the session. This feeds insights back into the instructions that directly govern behavior, preventing repeated mistakes.
### Components Invoked for components from preceding pipeline phases.../ step before prescribing them."HEADLESS_MODE=true, do not apply the edit directly. Instead, file a GitHub issue to track the proposal. Use gh issue create with the title compound: route-to-definition proposal for <target-file-basename>, a body containing the proposed edit text and target file path and source learning file path, and --milestone "Post-MVP / Later". If the proposed edit is not actionable (empty or target file missing), skip silently. Do not prompt.See compound-capture Step 8 for the full flow.
Graceful degradation: Skips if plugins/soleur/ does not exist or no components detected in the session.
Update an existing learning:
Read the file in knowledge-base/project/learnings/, apply changes, and commit with git commit -m "learning: update <topic>".
Archive an outdated learning:
Move it to knowledge-base/project/learnings/archive/: mkdir -p knowledge-base/project/learnings/archive && git add knowledge-base/project/learnings/<category>/<file>.md && git mv knowledge-base/project/learnings/<category>/<file>.md knowledge-base/project/learnings/archive/. The git add ensures the file is tracked before git mv.Commit with git commit -m "learning: archive <topic>".
Delete a learning:
Only with user confirmation. git rm knowledge-base/project/learnings/<category>/<file>.md and commit.
Edit a rule: Read knowledge-base/project/constitution.md, find the rule, modify it, commit with git commit -m "constitution: update <domain> <category> rule".
Remove a rule: Read knowledge-base/project/constitution.md, remove the bullet point, commit with git commit -m "constitution: remove <domain> <category> rule".
On feature branches (feat-*, feat/*, fix-*, or fix/*), consolidation runs automatically after the learning is documented and before the decision menu. This ensures artifacts are always cleaned up as part of the standard compound flow, rather than relying on a manual menu choice.
The automatic consolidation:
feat/, feat-, fix/, or fix- prefix from the branch name, then globs knowledge-base/project/{brainstorms,plans}/*<slug>* and knowledge-base/project/specs/feat-<slug>/ (excluding */archive/)constitution.md, component docs, and project README.mdbash ./plugins/soleur/skills/archive-kb/scripts/archive-kb.sh to move all discovered artifacts to archive/ subdirectories via git mv with YYYYMMDD-HHMMSS timestamp prefix. Headless mode: auto-confirm archival without promptinggit revertIf no artifacts are found for the feature slug, consolidation is skipped silently. See the compound-capture skill for full implementation details.
Headless mode: If HEADLESS_MODE=true, skip worktree cleanup entirely (cleanup-merged handles this post-merge).
Interactive mode: At the end, if on a feature branch:
Question: "Feature complete? Clean up worktree?"
If user says yes:
git worktree remove .worktrees/feat-<name>
If user says no: Done
Organized documentation:
knowledge-base/project/learnings/[category]/[filename].mdCategories auto-detected from problem:
✓ Parallel documentation generation complete
Primary Subagent Results:
✓ Context Analyzer: Identified performance_issue in brief_system
✓ Solution Extractor: Extracted 3 code fixes
✓ Related Docs Finder: Found 2 related issues
✓ Prevention Strategist: Generated test cases
✓ Documentation Writer: Classified to performance-issues/, created complete markdown
Specialized Agent Reviews (Auto-Triggered):
✓ performance-oracle: Validated query optimization approach
✓ kieran-rails-reviewer: Code examples meet Rails standards
✓ code-simplicity-reviewer: Solution is appropriately minimal
✓ every-style-editor: Documentation style verified
File created:
- knowledge-base/project/learnings/performance-issues/n-plus-one-brief-generation.md
This documentation will be searchable for future reference when similar
issues occur in the Email Processing or Brief System modules.
What's next? (Headless mode: auto-selects "Continue workflow")
1. Continue workflow (recommended)
2. Add to Required Reading
3. Link related documentation
4. Update other references
5. View documentation
6. Other
This creates a compounding knowledge system:
The feedback loop:
Build → Test → Find Issue → Research → Improve → Document → Validate → Deploy
↑ ↓
└──────────────────────────────────────────────────────────────────────┘
Each unit of engineering work should make subsequent units of work easier—not harder.
<auto_invoke> <trigger_phrases> - "that worked" - "it's fixed" - "working now" - "problem solved" </trigger_phrases>
<manual_override> Use skill: soleur:compound [context] to document immediately without waiting for auto-detection. </manual_override> </auto_invoke>
compound-capture skill
Based on problem type, these agents can enhance documentation:
soleur:compound completes for deeper review/research [topic] - Deep investigation (searches knowledge-base/project/learnings/ for patterns)soleur:plan skill - Planning workflow (references documented solutions)