원클릭으로
gh-compound
Document a recently solved problem to compound your team's knowledge or update CONCEPTS.md, the project's shared domain vocabulary.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Document a recently solved problem to compound your team's knowledge or update CONCEPTS.md, the project's shared domain vocabulary.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | gh:compound |
| description | Document a recently solved problem to compound your team's knowledge or update CONCEPTS.md, the project's shared domain vocabulary. |
Coordinate multiple subagents working in parallel to document a recently solved problem.
Captures problem solutions while context is fresh, creating structured documentation in docs/solutions/ 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.
/gh:compound # Document the most recent fix
/gh:compound [brief context] # Provide additional context hint
Repo name (pre-resolved): !bash scripts/resolve-repo-name.sh
Git branch (pre-resolved): !git rev-parse --abbrev-ref HEAD 2>/dev/null || true
If the lines above resolved to plain values (a folder name like my-repo and a branch name like feat/my-branch), pass them into the Session Historian dispatch in Phase 1 so the agent does not waste a turn deriving them. If they still contain backtick command strings or are empty, omit them from the dispatch and let the agent derive them at runtime.
These files are the durable contract for the workflow. Read them on-demand at the step that needs them — do not bulk-load at skill start.
references/schema.yaml — canonical frontmatter fields and enum values (read when validating YAML)references/yaml-schema.md — category mapping from problem_type to directory (read when classifying)references/concepts-vocabulary.md — CONCEPTS.md format and inclusion rules (read in Phase 2.4 when domain terms surface)assets/resolution-template.md — section structure for new docs (read when assembling)When spawning subagents, pass the relevant file contents into the task prompt so they have the contract without needing cross-skill paths.
Before presenting mode options to the user, log the skill start event so this execution appears on the task board:
gale-task log skill_started --skill gh:compound --title "<compound-topic>" to register this execution on the task board.gale-task is not on PATH or the command fails, skip and continue — this must never block the skill.Config:
At the start of execution, use your native file-read tool to read .compound-engineering/config.local.yaml from the repository root. If the file is missing in the current worktree, check the main repository root (the parent of .git/worktrees). If the file is missing or unreadable, do not block the workflow — proceed silently with default settings.
If the config file contains language: en, write documents in English.
If the file is missing, contains language: zh-CN, or has no language key, write documents in Chinese (default).
Present the user with two options before proceeding, using the platform's blocking question tool (AskUserQuestion in Claude Code, request_user_input in Codex, ask_user in Gemini, ask_user in Pi (requires the pi-ask-user extension)). If no question tool is available, present the options and wait for the user's reply.
1. Full (recommended) — the complete compound workflow. Researches,
cross-references, and reviews your solution to produce documentation
that compounds your team's knowledge.
2. Lightweight — same documentation, single pass. Faster and uses
fewer tokens, but won't detect duplicates or cross-reference
existing docs. Best for simple fixes or long sessions nearing
context limits.
Do NOT pre-select a mode. Do NOT skip this prompt. Wait for the user's choice before proceeding.
If the user chooses Full, ask one follow-up question before proceeding. Detect which harness is running (Claude Code, Codex, or Cursor) and ask:
Would you also like to search your [harness name] session history
for relevant knowledge to help the Compound process? This adds
time and token usage.
If the user says yes, dispatch the Session Historian in Phase 1. If no, skip it. Do not ask this in lightweight mode.
<critical_requirement> The primary output is ONE file - the final documentation.
Phase 1 subagents return TEXT DATA to the orchestrator. They must NOT use Write, Edit, or create any files. Only the orchestrator writes files: the solution doc in Phase 2, CONCEPTS.md when Phase 2.4 finds qualifying vocabulary, and — if the Discoverability Check finds a gap — a small edit to a project instruction file (AGENTS.md or CLAUDE.md). The instruction-file edit and vocabulary update are maintenance side effects, not second deliverables; they ensure future agents can discover and ground in the knowledge store.
</critical_requirement>
Before Phase 0.5, query the vector memory database for related solutions:
memory_root="$(gale-memory resolve-root 2>/dev/null || true)"
[ -n "$memory_root" ] && export HKT_MEMORY_DIR="$memory_root"
hkt-memory retrieve \
--query "<extracted query>" \
--layer all --limit 10 --min-similarity 0.35 \
--vector-weight 0.7 --bm25-weight 0.3
## Supplementary notes from HKTMemory
Source: vector database. Treat as additional context, not primary evidence.
[results here, each tagged with (similarity: X.XX)]
Before launching Phase 1 subagents, check the auto-memory block injected into your system prompt for notes relevant to the problem being documented.
## Supplementary notes from auto memory
Treat as additional context, not primary evidence. Conversation history
and codebase findings take priority over these notes.
[relevant entries here]
If no relevant entries are found, proceed to Phase 1 without passing memory context.
Launch research subagents. Each returns text data to the orchestrator.
Dispatch order:
Context Analyzer, Solution Extractor, and Related Docs Finder in parallel (background)session-historian in foreground — it reads session files outside the working directory that background agents may not have access to<parallel_tasks>
references/schema.yaml for enum validation and track classificationreferences/yaml-schema.md for category mapping into docs/solutions/[sanitized-problem-slug]-[date].mdcategory: field mapped from problem_type), category directory path, suggested filename, and which track appliesreferences/schema.yaml for track classification (bug vs knowledge)Bug track output sections:
Knowledge track output sections:
docs/solutions/ for related documentationSearch strategy (grep-first filtering for efficiency):
docs/solutions/<category>/ directorytitle:.*<keyword>tags:.*(<keyword1>|<keyword2>)module:.*<module name>component:.*<component>GitHub issue search:
Prefer the gh CLI for searching related issues: gh issue list --search "<keywords>" --state all --limit 5. If gh is not installed, fall back to the GitHub MCP tools (e.g., unblocked data_retrieval) if available. If neither is available, skip GitHub issue search and note it was skipped in the output.
</parallel_tasks>
galeharness-cli:session-historian~/.claude/projects/, ~/.codex/sessions/, ~/.cursor/projects/) which background agents may not have access tomode parameter so the user's configured permission settings applymodel: "sonnet" in Claude Code) — the synthesis feeds into compound assembly and doesn't need frontier reasoningDispatch prompt — keep tight. A long, keyword-rich prompt licenses the agent to keep widening. Use this shape:
Pre-resolved context (only if values resolved cleanly above; otherwise omit and let the agent derive): repo name, current git branch.
Time window: explicit 7 days unless the documented problem clearly spans a longer arc.
Problem topic: one sentence naming the concrete issue — error message, module name, what broke and how it was fixed. Not a paragraph; not a bullet list of related topics.
Filter rule (one line): "Only surface findings directly relevant to this specific problem. Ignore unrelated work from the same sessions or branches."
Output schema:
Structure your response with these sections (omit any with no findings):
- What was tried before
- What didn't work
- Key decisions
- Related context
Do not append additional context blocks, exclusion lists, or topic-keyword bullets — verbose dispatch prompts give the agent license to keep widening the search and rapidly compound wall time. If the agent needs keyword search, it owns that decision via the --keyword mode on gh-session-inventory.
<sequential_tasks>
WAIT for all Phase 1 subagents to complete before proceeding.
Document Language: When language: zh-CN (or default), write all prose content in Chinese. Keep section headers (## Problem, ## Solution, etc.) and YAML frontmatter keys in English. Translate paragraphs, list items, and table content. Do NOT translate code blocks, inline code, file paths, or URLs.
The orchestrating agent (main conversation) performs these steps:
Collect all text results from Phase 1 subagents
Check the overlap assessment from the Related Docs Finder before deciding what to write:
| Overlap | Action |
|---|---|
| High — existing doc covers the same problem, root cause, and solution | Update the existing doc with fresher context (new code examples, updated references, additional prevention tips) rather than creating a duplicate. The existing doc's path and structure stay the same. |
| Moderate — same problem area but different angle, root cause, or solution | Create the new doc normally. Flag the overlap for Phase 2.5 to recommend consolidation review. |
| Low or none | Create the new doc normally. |
The reason to update rather than create: two docs describing the same problem and solution will inevitably drift apart. The newer context is fresher and more trustworthy, so fold it into the existing doc rather than creating a second one that immediately needs consolidation.
When updating an existing doc, preserve its file path and frontmatter structure. Update the solution, code examples, prevention tips, and any stale references. Add a last_updated: YYYY-MM-DD field to the frontmatter. Do not change the title unless the problem framing has materially shifted.
Incorporate session history findings (if available). When the Session History Researcher returned relevant prior-session context:
Assemble complete markdown file from the collected pieces, reading assets/resolution-template.md for the section structure of new docs
Before writing the solution document, resolve the target directory:
gale-knowledge resolve-path --type solutions to get the target directory path (the command outputs a plain path string). If the command fails or gale-knowledge is not available, fall back to docs/solutions.<resolved-path>/[category]/ as the primary target directory for the solution document.docs/solutions/[category]/<filename>.md (dual-write). If this secondary write fails, log a warning but do not fail the workflow.references/schema.yaml<resolved-path>/[category]/) and secondary (docs/solutions/[category]/) paths.<resolved-path>/[category]/[filename].md) and the secondary path (docs/solutions/[category]/[filename].md).python3 scripts/validate-frontmatter.py <output-path> to catch silent-corruption parser-safety issues that the prose rules miss: malformed --- delimiter lines, unquoted # in scalar values (silent comment truncation), and unquoted : in scalar values (silent mapping confusion). Exit 0 means the doc is parser-safe; exit 1 means the script's stderr names the offending field(s) and what to fix — quote the value(s), re-write the doc, and re-run until exit 0. Do not declare success while validation fails. The script does not enforce schema rules and does not flag YAML reserved-indicator characters (those produce loud parser errors downstream rather than silent corruption — out of scope). Uses Python 3 stdlib only (no PyYAML or other deps).When creating a new doc, preserve the section order from assets/resolution-template.md unless the user explicitly asks for a different structure.
</sequential_tasks>
After successfully writing the solution doc to docs/solutions/:
title and category values from its YAML frontmattermemory_root="$(gale-memory resolve-root 2>/dev/null || true)"
[ -n "$memory_root" ] && export HKT_MEMORY_DIR="$memory_root"
hkt-memory store \
--content "<summary + repo-relative file path>" \
--title "<frontmatter title>" \
--topic "<frontmatter category>" \
--layer all
Stored to HKTMemory: [title] on success, or note the error (non-blocking — do not fail the compound workflow if HKTMemory is unavailable).Rationale: The vector database's job is discovery, not full-text storage. The document already lives in a git-managed file. Store the summary and path so retrieval can surface it; the agent reads the actual file when details are needed.
gale-task log memory_linked --memory-title "<frontmatter title>" to log the memory_linked event. If gale-task is not on PATH or the command fails, skip and continue.After the solution document is written and stored to HKTMemory:
gale-knowledge extract-project to get the project name. If the command fails or is not available, use the current directory basename as the project name instead.gale-knowledge commit --project "<project-name>" --type solution --title "<frontmatter-title>" to commit the knowledge document. If this command fails, log the error but continue — the document has already been written to disk.gale-knowledge is not on PATH, skip both steps and continue — this must never block the skill.After the solution doc is written, validated, and stored, scan the new or updated doc for project-specific terms whose meaning would not be obvious to a new engineer. Read references/concepts-vocabulary.md before deciding what qualifies.
CONCEPTS.md already defines the term accurately, do not edit it.CONCEPTS.md.Treat CONCEPTS.md as a glossary side effect of the learning capture, not as the primary deliverable.
After writing the new learning, decide whether this new solution is evidence that older docs should be refreshed.
gh:compound-refresh is not a default follow-up. Use it selectively when the new learning suggests an older learning or pattern doc may now be inaccurate.
It makes sense to invoke gh:compound-refresh when one or more of these are true:
It does not make sense to invoke gh:compound-refresh when:
Use these rules:
gh:compound-refresh with a narrow scope hint after the new learning is writtengh:compound-refresh as the next step with a scope hintWhen invoking or recommending gh:compound-refresh, be explicit about the argument to pass. Prefer the narrowest useful scope:
docs/solutions/patterns/Examples:
/gh:compound-refresh plugin-versioning-requirements/gh:compound-refresh payments/gh:compound-refresh performance-issues/gh:compound-refresh critical-patternsA single scope hint may still expand to multiple related docs when the change is cross-cutting within one domain, category, or pattern area.
Do not invoke gh:compound-refresh without an argument unless the user explicitly wants a broad sweep.
Always capture the new learning first. Refresh is a targeted maintenance follow-up, not a prerequisite for documentation.
After the learning is written and the refresh decision is made, check whether the project's instruction files would lead an agent to discover and search docs/solutions/ before starting work in a documented area. This runs every time — the knowledge store only compounds value when agents can find it.
Identify which root-level instruction files exist (AGENTS.md, CLAUDE.md, or both). Read the file(s) and determine which holds the substantive content — one file may just be a shim that @-includes the other (e.g., CLAUDE.md containing only @AGENTS.md, or vice versa). The substantive file is the assessment and edit target; ignore shims. If neither file exists, skip this check entirely.
Assess whether an agent reading the instruction files would learn three things:
module, tags, problem_type)This is a semantic assessment, not a string match. The information could be a line in an architecture section, a bullet in a gotchas section, spread across multiple places, or expressed without ever using the exact path docs/solutions/. Use judgment — if an agent would reasonably discover and use the knowledge store after reading the file, the check passes.
If the spirit is already met, no action needed — move on.
If not: a. Based on the file's existing structure, tone, and density, identify where a mention fits naturally. Before creating a new section, check whether the information could be a single line in the closest related section — an architecture tree, a directory listing, a documentation section, or a conventions block. A line added to an existing section is almost always better than a new headed section. Only add a new section as a last resort when the file has clear sectioned structure and nothing is even remotely related. b. Draft the smallest addition that communicates the three things. Match the file's existing style and density. The addition should describe the knowledge store itself, not the plugin — an agent without the plugin should still find value in it.
Keep the tone informational, not imperative. Express timing as description, not instruction — "relevant when implementing or debugging in documented areas" rather than "check before implementing or debugging." Imperative directives like "always search before implementing" cause redundant reads when a workflow already includes a dedicated search step. The goal is awareness: agents learn the folder exists and what's in it, then use their own judgment about when to consult it.
Examples of calibration (not templates — adapt to the file):
When there's an existing directory listing or architecture section — add a line:
docs/solutions/ # documented solutions to past problems (bugs, best practices, workflow patterns), organized by category with YAML frontmatter (module, tags, problem_type)
When nothing in the file is a natural fit — a small headed section is appropriate:
## Documented Solutions
`docs/solutions/` — documented solutions to past problems (bugs, best practices, workflow patterns), organized by category with YAML frontmatter (`module`, `tags`, `problem_type`). Relevant when implementing or debugging in documented areas.
c. In full mode, explain to the user why this matters — agents working in this repo (including fresh sessions, other tools, or collaborators without the plugin) won't know to check docs/solutions/ unless the instruction file surfaces it. Show the proposed change and where it would go, then use the platform's blocking question tool (AskUserQuestion in Claude Code, request_user_input in Codex, ask_user in Gemini, ask_user in Pi (requires the pi-ask-user extension)) to get consent before making the edit. If no question tool is available, present the proposal and wait for the user's reply. In lightweight mode, output a one-liner note and move on
WAIT for Phase 2 to complete before proceeding.
<parallel_tasks>
Based on problem type, optionally invoke specialized agents to review the documentation:
galeharness-cli:performance-oraclegaleharness-cli:security-sentinelgaleharness-cli:data-integrity-guardiangaleharness-cli:code-simplicity-reviewer, and additionally run the gale reviewer that matches the repo's primary stack:
galeharness-cli:gale-rails-reviewergaleharness-cli:gale-python-reviewergaleharness-cli:gale-typescript-reviewer</parallel_tasks>
<critical_requirement> Single-pass alternative — same documentation, fewer tokens.
This mode skips parallel subagents entirely. The orchestrator performs all work in a single pass, producing the same solution document without cross-referencing or duplicate detection. </critical_requirement>
The orchestrator (main conversation) performs ALL of the following in one sequential pass:
references/schema.yaml and references/yaml-schema.md, then determine track (bug vs knowledge), category, and filenamedocs/solutions/[category]/[filename].md using the appropriate track template from assets/resolution-template.md, with:
Lightweight output:
✓ Documentation complete (lightweight mode)
File created:
- docs/solutions/[category]/[filename].md
[If discoverability check found instruction files don't surface the knowledge store:]
Tip: Your AGENTS.md/CLAUDE.md doesn't surface docs/solutions/ to agents —
a brief mention helps all agents discover these learnings.
Note: This was created in lightweight mode. For richer documentation
(cross-references, detailed prevention strategies, specialized reviews),
re-run /compound in a fresh session.
No subagents are launched. No parallel tasks. One file written.
In lightweight mode, the overlap check is skipped (no Related Docs Finder subagent). This means lightweight mode may create a doc that overlaps with an existing one. That is acceptable — gh:compound-refresh will catch it later. Only suggest gh:compound-refresh if there is an obvious narrow refresh target. Do not broaden into a large refresh sweep from a lightweight session.
Organized documentation:
docs/solutions/[category]/[filename].mdCategories auto-detected from problem:
Bug track:
Knowledge track:
| ❌ Wrong | ✅ Correct |
|---|---|
Subagents write files like context-analysis.md, solution-draft.md | Subagents return text data; orchestrator writes one final file |
| Research and assembly run in parallel | Research completes → then assembly runs |
| Multiple files created during workflow | One solution doc written or updated: docs/solutions/[category]/[filename].md (plus an optional small edit to a project instruction file for discoverability) |
| Creating a new doc when an existing doc covers the same problem | Check overlap assessment; update the existing doc when overlap is high |
✓ Documentation complete
Auto memory: 2 relevant entries used as supplementary evidence
Subagent Results:
✓ Context Analyzer: Identified performance_issue in brief_system, category: performance-issues/
✓ Solution Extractor: 3 code fixes, prevention strategies
✓ Related Docs Finder: 2 related issues
✓ Session History: 3 prior sessions on same branch, 2 failed approaches surfaced
Specialized Agent Reviews (Auto-Triggered):
✓ performance-oracle: Validated query optimization approach
✓ gale-rails-reviewer: Code examples meet Rails conventions
✓ code-simplicity-reviewer: Solution is appropriately minimal
File created:
- docs/solutions/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?
1. Continue workflow (recommended)
2. Link related documentation
3. Update other references
4. View documentation
5. Other
After displaying the success output, present the "What's next?" options using the platform's blocking question tool (AskUserQuestion in Claude Code, request_user_input in Codex, ask_user in Gemini, ask_user in Pi (requires the pi-ask-user extension)). If no question tool is available, present the numbered options and wait for the user's reply before proceeding. Do not continue the workflow or end the turn without the user's selection.
Alternate output (when updating an existing doc due to high overlap):
✓ Documentation updated (existing doc refreshed with current context)
Overlap detected: docs/solutions/performance-issues/n-plus-one-queries.md
Matched dimensions: problem statement, root cause, solution, referenced files
Action: Updated existing doc with fresher code examples and prevention tips
File updated:
- docs/solutions/performance-issues/n-plus-one-queries.md (added last_updated: 2026-03-24)
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 /gh:compound [context] to document immediately without waiting for auto-detection. </manual_override> </auto_invoke>
Writes the final learning directly into docs/solutions/.
Based on problem type, these agents can enhance documentation:
/research [topic] - Deep investigation (searches docs/solutions/ for patterns)/gh:plan - Planning workflow (references documented solutions)After the compound workflow is fully complete (documentation written, discoverability check done), log the completion event:
gale-memory store-session-transcript --skill gh:compound --phase completed --source-mode compound_artifact --importance high --summary "<learning document title and reusable pattern>" --content "<problem, root cause, solution, artifacts written, verification, links>" to make the completed compound artifact session available to list-recent and session-search.gale-memory is not on PATH or the command fails, skip and continue — this must never block the skill.gale-task log skill_completed to record the completion event.gale-task is not on PATH or the command fails, skip and continue — this must never block the skill.Generate and critically evaluate grounded improvement ideas for the current project. Use when asking what to improve, requesting idea generation, exploring surprising improvements, or wanting the AI to proactively suggest strong project directions before brainstorming one in depth. Triggers on phrases like 'what should I improve', 'give me ideas', 'ideate on this project', 'surprise me with improvements', 'what would you change', or any request for AI-generated project improvement suggestions rather than refining the user's own idea.
Create structured plans for any multi-step task -- software features, research workflows, events, study plans, or any goal that benefits from structured breakdown. Also deepen existing plans with interactive review of sub-agent findings. Use for plan creation when the user says 'plan this', 'create a plan', 'write a tech plan', 'plan the implementation', 'how should we build', 'what's the approach for', 'break this down', 'plan a trip', 'create a study plan', or when a brainstorm/requirements document is ready for planning. Use for plan deepening when the user says 'deepen the plan', 'deepen my plan', 'deepening pass', or uses 'deepen' in reference to a plan.
[BETA] Execute work with external delegate support. Same as gh:work but includes experimental Codex delegation mode for token-conserving code implementation.
Execute work efficiently while maintaining quality and finishing features
Refresh stale or drifting learnings and pattern docs in docs/solutions/ by reviewing, updating, consolidating, replacing, or deleting them against the current codebase. Use after refactors, migrations, dependency upgrades, or when a retrieved learning feels outdated or wrong. Also use when reviewing docs/solutions/ for accuracy, when a recently solved problem contradicts an existing learning, when pattern docs no longer reflect current code, or when multiple docs seem to cover the same topic and might benefit from consolidation.
Start the dev server, open the feature in a browser, and iterate on improvements together. Manual invocation only — type /gh:polish to run it.