@every-env/compound-plugin 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/{plugins/compound-engineering → .claude}/commands/release-docs.md +0 -1
  2. package/.claude-plugin/marketplace.json +2 -2
  3. package/.github/workflows/ci.yml +1 -1
  4. package/.github/workflows/deploy-docs.yml +3 -3
  5. package/.github/workflows/publish.yml +37 -0
  6. package/README.md +12 -3
  7. package/docs/index.html +13 -13
  8. package/docs/pages/changelog.html +39 -0
  9. package/docs/plans/2026-02-08-feat-convert-local-md-settings-for-opencode-codex-plan.md +143 -0
  10. package/docs/plans/2026-02-08-feat-simplify-plugin-settings-plan.md +195 -0
  11. package/docs/plans/2026-02-09-refactor-dspy-ruby-skill-update-plan.md +104 -0
  12. package/docs/plans/2026-02-12-feat-add-cursor-cli-target-provider-plan.md +306 -0
  13. package/docs/specs/cursor.md +85 -0
  14. package/package.json +1 -1
  15. package/plugins/compound-engineering/.claude-plugin/plugin.json +2 -2
  16. package/plugins/compound-engineering/CHANGELOG.md +38 -0
  17. package/plugins/compound-engineering/README.md +5 -3
  18. package/plugins/compound-engineering/commands/workflows/brainstorm.md +6 -1
  19. package/plugins/compound-engineering/commands/workflows/compound.md +1 -0
  20. package/plugins/compound-engineering/commands/workflows/review.md +23 -21
  21. package/plugins/compound-engineering/commands/workflows/work.md +29 -15
  22. package/plugins/compound-engineering/skills/dspy-ruby/SKILL.md +539 -396
  23. package/plugins/compound-engineering/skills/dspy-ruby/assets/config-template.rb +159 -331
  24. package/plugins/compound-engineering/skills/dspy-ruby/assets/module-template.rb +210 -236
  25. package/plugins/compound-engineering/skills/dspy-ruby/assets/signature-template.rb +173 -95
  26. package/plugins/compound-engineering/skills/dspy-ruby/references/core-concepts.md +552 -143
  27. package/plugins/compound-engineering/skills/dspy-ruby/references/observability.md +366 -0
  28. package/plugins/compound-engineering/skills/dspy-ruby/references/optimization.md +440 -460
  29. package/plugins/compound-engineering/skills/dspy-ruby/references/providers.md +305 -225
  30. package/plugins/compound-engineering/skills/dspy-ruby/references/toolsets.md +502 -0
  31. package/plugins/compound-engineering/skills/setup/SKILL.md +168 -0
  32. package/src/commands/convert.ts +10 -5
  33. package/src/commands/install.ts +10 -5
  34. package/src/converters/claude-to-codex.ts +7 -2
  35. package/src/converters/claude-to-cursor.ts +166 -0
  36. package/src/converters/claude-to-droid.ts +174 -0
  37. package/src/converters/claude-to-opencode.ts +8 -2
  38. package/src/targets/cursor.ts +48 -0
  39. package/src/targets/droid.ts +50 -0
  40. package/src/targets/index.ts +18 -0
  41. package/src/types/cursor.ts +29 -0
  42. package/src/types/droid.ts +20 -0
  43. package/tests/codex-converter.test.ts +62 -0
  44. package/tests/converter.test.ts +61 -0
  45. package/tests/cursor-converter.test.ts +347 -0
  46. package/tests/cursor-writer.test.ts +137 -0
  47. package/tests/droid-converter.test.ts +277 -0
  48. package/tests/droid-writer.test.ts +100 -0
  49. package/plugins/compound-engineering/commands/technical_review.md +0 -8
@@ -2,7 +2,6 @@
2
2
  name: release-docs
3
3
  description: Build and update the documentation site with current plugin components
4
4
  argument-hint: "[optional: --dry-run to preview changes without writing]"
5
- disable-model-invocation: true
6
5
  ---
7
6
 
8
7
  # Release Documentation Command
@@ -11,8 +11,8 @@
11
11
  "plugins": [
12
12
  {
13
13
  "name": "compound-engineering",
14
- "description": "AI-powered development tools that get smarter with every use. Make each unit of engineering work easier than the last. Includes 29 specialized agents, 24 commands, and 18 skills.",
15
- "version": "2.31.0",
14
+ "description": "AI-powered development tools that get smarter with every use. Make each unit of engineering work easier than the last. Includes 29 specialized agents, 22 commands, and 19 skills.",
15
+ "version": "2.33.0",
16
16
  "author": {
17
17
  "name": "Kieran Klaassen",
18
18
  "url": "https://github.com/kieranklaassen",
@@ -11,7 +11,7 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
 
13
13
  steps:
14
- - uses: actions/checkout@v4
14
+ - uses: actions/checkout@v6
15
15
 
16
16
  - name: Setup Bun
17
17
  uses: oven-sh/setup-bun@v2
@@ -24,13 +24,13 @@ jobs:
24
24
  runs-on: ubuntu-latest
25
25
  steps:
26
26
  - name: Checkout
27
- uses: actions/checkout@v4
27
+ uses: actions/checkout@v6
28
28
 
29
29
  - name: Setup Pages
30
- uses: actions/configure-pages@v4
30
+ uses: actions/configure-pages@v5
31
31
 
32
32
  - name: Upload artifact
33
- uses: actions/upload-pages-artifact@v3
33
+ uses: actions/upload-pages-artifact@v4
34
34
  with:
35
35
  path: 'plugins/compound-engineering/docs'
36
36
 
@@ -0,0 +1,37 @@
1
+ name: Publish to npm
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ publish:
9
+ runs-on: ubuntu-latest
10
+ permissions:
11
+ contents: read
12
+ id-token: write
13
+
14
+ steps:
15
+ - uses: actions/checkout@v6
16
+
17
+ - name: Setup Bun
18
+ uses: oven-sh/setup-bun@v2
19
+ with:
20
+ bun-version: latest
21
+
22
+ - name: Install dependencies
23
+ run: bun install
24
+
25
+ - name: Run tests
26
+ run: bun test
27
+
28
+ - name: Setup Node.js for npm publish
29
+ uses: actions/setup-node@v4
30
+ with:
31
+ node-version: "20"
32
+ registry-url: "https://registry.npmjs.org"
33
+
34
+ - name: Publish to npm
35
+ run: npm publish --provenance --access public
36
+ env:
37
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
package/README.md CHANGED
@@ -12,9 +12,9 @@ A Claude Code plugin marketplace featuring the **Compound Engineering Plugin**
12
12
  /plugin install compound-engineering
13
13
  ```
14
14
 
15
- ## OpenCode + Codex (experimental) Install
15
+ ## OpenCode, Codex, Droid & Cursor (experimental) Install
16
16
 
17
- This repo includes a Bun/TypeScript CLI that converts Claude Code plugins to OpenCode and Codex.
17
+ This repo includes a Bun/TypeScript CLI that converts Claude Code plugins to OpenCode, Codex, Factory Droid, and Cursor.
18
18
 
19
19
  ```bash
20
20
  # convert the compound-engineering plugin into OpenCode format
@@ -22,6 +22,12 @@ bunx @every-env/compound-plugin install compound-engineering --to opencode
22
22
 
23
23
  # convert to Codex format
24
24
  bunx @every-env/compound-plugin install compound-engineering --to codex
25
+
26
+ # convert to Factory Droid format
27
+ bunx @every-env/compound-plugin install compound-engineering --to droid
28
+
29
+ # convert to Cursor format
30
+ bunx @every-env/compound-plugin install compound-engineering --to cursor
25
31
  ```
26
32
 
27
33
  Local dev:
@@ -31,8 +37,11 @@ bun run src/index.ts install ./plugins/compound-engineering --to opencode
31
37
  ```
32
38
 
33
39
  OpenCode output is written to `~/.config/opencode` by default, with `opencode.json` at the root and `agents/`, `skills/`, and `plugins/` alongside it.
34
- Both provider targets are experimental and may change as the formats evolve.
35
40
  Codex output is written to `~/.codex/prompts` and `~/.codex/skills`, with each Claude command converted into both a prompt and a skill (the prompt instructs Codex to load the corresponding skill). Generated Codex skill descriptions are truncated to 1024 characters (Codex limit).
41
+ Droid output is written to `~/.factory/` with commands, droids (agents), and skills. Claude tool names are mapped to Factory equivalents (`Bash` → `Execute`, `Write` → `Create`, etc.) and namespace prefixes are stripped from commands.
42
+ Cursor output is written to `.cursor/` with rules (`.mdc`), commands, skills, and `mcp.json`. Agents become "Agent Requested" rules (`alwaysApply: false`) so Cursor's AI activates them on demand. Works with both the Cursor IDE and Cursor CLI (`cursor-agent`) — they share the same `.cursor/` config directory.
43
+
44
+ All provider targets are experimental and may change as the formats evolve.
36
45
 
37
46
  ## Sync Personal Config
38
47
 
package/docs/index.html CHANGED
@@ -4,7 +4,7 @@
4
4
  <head>
5
5
  <meta charset="utf-8" />
6
6
  <title>Compounding Engineering - AI-Powered Development Tools for Claude Code</title>
7
- <meta content="Your code reviews just got 12 expert opinions in 30 seconds. 28 specialized agents, 24 workflow commands, and 15 skills that make today's work easier than yesterday's." name="description" />
7
+ <meta content="Your code reviews just got 12 expert opinions in 30 seconds. 29 specialized agents, 23 workflow commands, and 18 skills that make today's work easier than yesterday's." name="description" />
8
8
  <meta content="width=device-width, initial-scale=1" name="viewport" />
9
9
 
10
10
  <!-- Open Graph -->
@@ -12,7 +12,7 @@
12
12
  <meta property="og:site_name" content="Compounding Engineering" />
13
13
  <meta property="og:locale" content="en_US" />
14
14
  <meta property="og:title" content="Compounding Engineering - AI Development Tools" />
15
- <meta property="og:description" content="Get 12 expert code reviews in 30 seconds. 28 specialized agents that make today's work easier than yesterday's." />
15
+ <meta property="og:description" content="Get 12 expert code reviews in 30 seconds. 29 specialized agents that make today's work easier than yesterday's." />
16
16
  <meta name="twitter:card" content="summary_large_image" />
17
17
  <meta name="twitter:title" content="Compounding Engineering" />
18
18
  <meta name="twitter:description" content="12 expert code reviews in 30 seconds. Make today's work easier than yesterday's." />
@@ -155,13 +155,13 @@
155
155
  <div class="hero-decoration"></div>
156
156
  <div class="heading hero centered">
157
157
  <a href="https://github.com/EveryInc/compound-engineering-plugin/releases" class="eyebrow">
158
- <i class="fa-solid fa-rocket"></i> Version 2.28.0 released!
158
+ <i class="fa-solid fa-rocket"></i> Version 2.32.2 released!
159
159
  </a>
160
160
  <h1 class="balanced" style="margin-bottom: 32px;">
161
161
  Your Code Reviews Just Got 12 Expert Opinions. In 30 Seconds.
162
162
  </h1>
163
163
  <p class="paragraph m secondary balanced" style="margin-bottom: 32px;">
164
- Here's what happened when we shipped yesterday: security audit, performance analysis, architectural review, pattern detection, and eight more specialized checks—all running in parallel. No meetings. No waiting. Just answers. That's compounding engineering: 28 specialized agents, 24 workflow commands, and 15 skills that make today's work easier than yesterday's.
164
+ Here's what happened when we shipped yesterday: security audit, performance analysis, architectural review, pattern detection, and eight more specialized checks—all running in parallel. No meetings. No waiting. Just answers. That's compounding engineering: 29 specialized agents, 23 workflow commands, and 18 skills that make today's work easier than yesterday's.
165
165
  </p>
166
166
  <div class="button-group margin-paragraph centered">
167
167
  <a href="#install" class="button primary">
@@ -179,17 +179,17 @@
179
179
  <div class="stats-container">
180
180
  <div class="stat-card">
181
181
  <div class="stat-icon"><i class="fa-solid fa-users-gear"></i></div>
182
- <div class="stat-number">28</div>
182
+ <div class="stat-number">29</div>
183
183
  <div class="stat-label">Specialized Agents</div>
184
184
  </div>
185
185
  <div class="stat-card">
186
186
  <div class="stat-icon"><i class="fa-solid fa-terminal"></i></div>
187
- <div class="stat-number">24</div>
187
+ <div class="stat-number">23</div>
188
188
  <div class="stat-label">Slash Commands</div>
189
189
  </div>
190
190
  <div class="stat-card">
191
191
  <div class="stat-icon"><i class="fa-solid fa-wand-magic-sparkles"></i></div>
192
- <div class="stat-number">15</div>
192
+ <div class="stat-number">18</div>
193
193
  <div class="stat-label">Intelligent Skills</div>
194
194
  </div>
195
195
  <div class="stat-card">
@@ -244,7 +244,7 @@
244
244
  The <code>security-sentinel</code> has checked 10,000 PRs for SQL injection. The <code>kieran-rails-reviewer</code> never approves a controller with business logic. They don't get tired, don't skip Friday afternoon reviews, don't forget the conventions you agreed on in March. Run <code>/work</code> and watch your plan execute with quality gates that actually enforce your standards—every single time.
245
245
  </p>
246
246
  <div class="pillar-tools">
247
- <span class="tool-tag">27 specialized agents</span>
247
+ <span class="tool-tag">29 specialized agents</span>
248
248
  <span class="tool-tag">/work</span>
249
249
  <span class="tool-tag">dhh-rails-style skill</span>
250
250
  <span class="tool-tag">git-worktree skill</span>
@@ -292,7 +292,7 @@
292
292
  <section id="agents">
293
293
  <div class="heading">
294
294
  <h2 class="no-top-margin">
295
- <i class="fa-solid fa-users-gear color-accent"></i> 27 Specialized Agents
295
+ <i class="fa-solid fa-users-gear color-accent"></i> 29 Specialized Agents
296
296
  </h2>
297
297
  <p class="paragraph m secondary">
298
298
  Think of them as coworkers who never quit. The security-sentinel has seen every SQL injection variant. The kieran-rails-reviewer enforces conventions with zero compromise. The performance-oracle spots N+1 queries while you're still reading the PR. Run them solo or launch twelve in parallel—your choice.
@@ -531,7 +531,7 @@
531
531
  <section id="commands">
532
532
  <div class="heading">
533
533
  <h2 class="no-top-margin">
534
- <i class="fa-solid fa-terminal color-accent"></i> 19 Powerful Commands
534
+ <i class="fa-solid fa-terminal color-accent"></i> 23 Powerful Commands
535
535
  </h2>
536
536
  <p class="paragraph m secondary">
537
537
  Slash commands that replace entire workflows. <code>/review</code> is your code review committee. <code>/plan</code> is your research team. <code>/triage</code> sorts 50 todos in the time it takes you to read five. Each one automates hours of work into a single line.
@@ -683,7 +683,7 @@
683
683
  <section id="skills">
684
684
  <div class="heading">
685
685
  <h2 class="no-top-margin">
686
- <i class="fa-solid fa-wand-magic-sparkles color-accent"></i> 12 Intelligent Skills
686
+ <i class="fa-solid fa-wand-magic-sparkles color-accent"></i> 18 Intelligent Skills
687
687
  </h2>
688
688
  <p class="paragraph m secondary">
689
689
  Domain expertise on tap. Need to write a Ruby gem? The andrew-kane-gem-writer knows the patterns Andrew uses in 50+ popular gems. Building a Rails app? The dhh-rails-style enforces 37signals conventions. Generating images? The gemini-imagegen has Google's AI on speed dial. Just invoke the skill and watch it work.
@@ -825,7 +825,7 @@
825
825
  <section id="mcp-servers">
826
826
  <div class="heading">
827
827
  <h2 class="no-top-margin">
828
- <i class="fa-solid fa-server color-accent"></i> Two MCP Servers
828
+ <i class="fa-solid fa-server color-accent"></i> 1 MCP Server
829
829
  </h2>
830
830
  <p class="paragraph m secondary">
831
831
  Playwright gives Claude a browser—it can click buttons, take screenshots, fill forms, and validate what your users actually see. Context7 gives it instant access to docs for 100+ frameworks. Need to know how Next.js handles dynamic routes? Context7 fetches the answer in real-time instead of hallucinating from outdated training data.
@@ -989,7 +989,7 @@ skill: gemini-imagegen</code></pre>
989
989
  <span class="cta-badge"><i class="fa-solid fa-bolt"></i> Free & Open Source</span>
990
990
  <h2>Install Once. Compound Forever.</h2>
991
991
  <p class="paragraph m cta-subheading">
992
- <strong>Your next code review takes 30 seconds.</strong> The one after that? Even faster. That's compounding. Get 27 expert agents, 19 workflow commands, and 12 specialized skills working for you right now.
992
+ <strong>Your next code review takes 30 seconds.</strong> The one after that? Even faster. That's compounding. Get 29 expert agents, 23 workflow commands, and 18 specialized skills working for you right now.
993
993
  </p>
994
994
  <div class="button-group margin-paragraph centered">
995
995
  <a href="#install" class="button primary cta-primary">
@@ -48,6 +48,8 @@
48
48
  <div class="nav-section">
49
49
  <h3>On This Page</h3>
50
50
  <ul>
51
+ <li><a href="#v2.32.2">v2.32.2</a></li>
52
+ <li><a href="#v2.32.1">v2.32.1</a></li>
51
53
  <li><a href="#v2.6.0">v2.6.0</a></li>
52
54
  <li><a href="#v2.5.0">v2.5.0</a></li>
53
55
  <li><a href="#v2.4.1">v2.4.1</a></li>
@@ -86,6 +88,43 @@
86
88
  <a href="https://keepachangelog.com/">Keep a Changelog</a> conventions.
87
89
  </p>
88
90
 
91
+ <!-- Version 2.32.2 -->
92
+ <section id="v2.32.2" class="version-section">
93
+ <div class="version-header">
94
+ <h2>v2.32.2</h2>
95
+ <span class="version-date">2026-02-12</span>
96
+ </div>
97
+
98
+ <div class="changelog-category changed">
99
+ <h3><i class="fa-solid fa-arrows-rotate"></i> Changed</h3>
100
+ <ul>
101
+ <li>
102
+ <strong><code>/release-docs</code> command moved from plugin to local <code>.claude/commands/</code></strong> -
103
+ This is a repository maintenance command and should not be distributed to users. Command count reduced from 24 to 23.
104
+ </li>
105
+ </ul>
106
+ </div>
107
+ </section>
108
+
109
+ <!-- Version 2.32.1 -->
110
+ <section id="v2.32.1" class="version-section">
111
+ <div class="version-header">
112
+ <h2>v2.32.1</h2>
113
+ <span class="version-date">2026-02-12</span>
114
+ </div>
115
+
116
+ <div class="changelog-category changed">
117
+ <h3><i class="fa-solid fa-arrows-rotate"></i> Changed</h3>
118
+ <ul>
119
+ <li>
120
+ <strong><code>/workflows:review</code> command</strong> - Added <code>learnings-researcher</code>
121
+ agent to the parallel review phase. The review now searches <code>docs/solutions/</code> for past
122
+ issues related to the PR's modules and patterns, surfacing "Known Pattern" findings during synthesis.
123
+ </li>
124
+ </ul>
125
+ </div>
126
+ </section>
127
+
89
128
  <!-- Version 2.6.0 -->
90
129
  <section id="v2.6.0" class="version-section">
91
130
  <div class="version-header">
@@ -0,0 +1,143 @@
1
+ ---
2
+ title: Convert .local.md Settings for OpenCode and Codex
3
+ type: feat
4
+ date: 2026-02-08
5
+ ---
6
+
7
+ # Convert .local.md Settings for OpenCode and Codex
8
+
9
+ ## Overview
10
+
11
+ PR #124 introduces `.claude/compound-engineering.local.md` — a YAML frontmatter settings file that workflow commands (`review.md`, `work.md`) read at runtime to decide which agents to run. The conversion script already handles agents, commands, skills, hooks, and MCP servers. It does **not** handle `.local.md` settings files.
12
+
13
+ The question: can OpenCode and Codex support this same pattern? And what does the converter need to do?
14
+
15
+ ## Analysis: What `.local.md` Actually Does
16
+
17
+ The settings file does two things:
18
+
19
+ 1. **YAML frontmatter** with structured config: `review_agents: [list]`, `plan_review_agents: [list]`
20
+ 2. **Markdown body** with free-text instructions passed to review agents as context
21
+
22
+ The commands (`review.md`, `work.md`) read this file at runtime using the Read tool and use the values to decide which Task agents to spawn. This is **prompt-level logic** — it's instructions in the command body telling the AI "read this file, parse it, act on it."
23
+
24
+ ## Key Insight: This Already Works
25
+
26
+ The converter already converts `review.md` and `work.md` command bodies verbatim (for OpenCode) or as generated skills (for Codex). The instructions that say "Read `.claude/compound-engineering.local.md`" are just markdown text inside the command body. When the converter outputs them:
27
+
28
+ - **OpenCode**: The command template includes the full body. The AI reads it, follows the instructions, reads the settings file.
29
+ - **Codex**: The command becomes a prompt + generated skill. The skill body includes the instructions. The AI reads it, follows the instructions, reads the settings file.
30
+
31
+ **The `.local.md` file itself is not a plugin component** — it's a runtime artifact created per-project by the user (via `/compound-engineering-setup`). The converter doesn't need to bundle it.
32
+
33
+ ## What Needs Attention
34
+
35
+ ### 1. Setup Command Has `disable-model-invocation: true`
36
+
37
+ `setup.md` has `disable-model-invocation: true`. The converter already handles this correctly:
38
+
39
+ - **OpenCode** (`claude-to-opencode.ts:117`): Skips commands with `disableModelInvocation`
40
+ - **Codex** (`claude-to-codex.ts:22`): Filters them out of prompts and generated skills
41
+
42
+ This means `/compound-engineering-setup` won't be auto-invocable in either target. That's correct — it's a deliberate user action. But it also means users of the converted plugin have **no way to run setup**. They'd need to manually create the `.local.md` file.
43
+
44
+ ### 2. The `.local.md` File Path Is Claude-Specific
45
+
46
+ The commands reference `.claude/compound-engineering.local.md`. In OpenCode, the equivalent directory is `.opencode/`. In Codex, it's `.codex/`. The converter currently does **no text rewriting** of file paths inside command bodies.
47
+
48
+ ### 3. Slash Command References in Config-Aware Sections
49
+
50
+ The commands say things like "Run `/compound-engineering-setup` to create a settings file." The Codex converter already transforms `/command-name` → `/prompts:command-name`, but since setup has `disable-model-invocation`, there's no matching prompt. This reference becomes a dead link.
51
+
52
+ ### 4. `Task {agent-name}(...)` Syntax in Review Commands
53
+
54
+ `review.md` uses `Task {agent-name}(PR content)` — the Codex converter already transforms these to `$skill-name` references. OpenCode passes them through as template text.
55
+
56
+ ## Proposed Solution
57
+
58
+ ### Phase 1: Add Settings File Path Rewriting to Converters
59
+
60
+ Both converters should rewrite `.claude/` paths inside command bodies to the target-appropriate directory.
61
+
62
+ **File:** `src/converters/claude-to-opencode.ts`
63
+
64
+ Add a `transformContentForOpenCode(body)` function that replaces:
65
+ - `.claude/compound-engineering.local.md` → `.opencode/compound-engineering.local.md`
66
+ - `~/.claude/compound-engineering.local.md` → `~/.config/opencode/compound-engineering.local.md`
67
+
68
+ Apply it in `convertCommands()` to the command body before storing as template.
69
+
70
+ **File:** `src/converters/claude-to-codex.ts`
71
+
72
+ Extend `transformContentForCodex(body)` to also replace:
73
+ - `.claude/compound-engineering.local.md` → `.codex/compound-engineering.local.md`
74
+ - `~/.claude/compound-engineering.local.md` → `~/.codex/compound-engineering.local.md`
75
+
76
+ ### Phase 2: Generate Setup Equivalent for Each Target
77
+
78
+ Since `setup.md` is excluded by `disable-model-invocation`, the converter should generate a **target-native setup instruction** that tells users how to create the settings file.
79
+
80
+ **Option A: Include setup as a non-auto-invocable command anyway** (recommended)
81
+
82
+ Change the converters to include `disable-model-invocation` commands but mark them appropriately:
83
+ - **OpenCode**: Include in command map but add a `manual: true` flag or comment
84
+ - **Codex**: Include as a prompt (user can still invoke it manually via `/prompts:compound-engineering-setup`)
85
+
86
+ This is the simplest approach — the setup instructions are useful even if not auto-triggered.
87
+
88
+ **Option B: Generate a README/instructions file**
89
+
90
+ Create a `compound-engineering-settings.md` file in the output that documents how to create the settings file for the target platform. More complex, less useful.
91
+
92
+ **Recommendation: Option A** — just stop filtering out `disable-model-invocation` commands entirely. Both OpenCode and Codex support user-invoked commands/prompts. The flag exists to prevent Claude from auto-invoking during conversation, not to hide the command entirely.
93
+
94
+ ### Phase 3: Update Tests
95
+
96
+ **File:** `tests/converter.test.ts`
97
+
98
+ - Add test that `.claude/` paths in command bodies are rewritten to `.opencode/` paths
99
+ - Update existing `disable-model-invocation` test to verify the command IS included (if Option A)
100
+
101
+ **File:** `tests/codex-converter.test.ts`
102
+
103
+ - Add test that `.claude/` paths are rewritten to `.codex/` paths
104
+ - Add test that setup command is included as a prompt (if Option A)
105
+ - Add test that slash command references to setup are preserved correctly
106
+
107
+ ### Phase 4: Add Fixture for Settings-Aware Command
108
+
109
+ **File:** `tests/fixtures/sample-plugin/commands/settings-aware-command.md`
110
+
111
+ ```markdown
112
+ ---
113
+ name: workflows:review
114
+ description: Run comprehensive code reviews
115
+ ---
116
+
117
+ Read `.claude/compound-engineering.local.md` for agent config.
118
+ If not found, use defaults.
119
+ Run `/compound-engineering-setup` to create settings.
120
+ ```
121
+
122
+ Test that the converter rewrites the paths and command references correctly.
123
+
124
+ ## Acceptance Criteria
125
+
126
+ - [ ] OpenCode converter rewrites `.claude/` → `.opencode/` in command bodies
127
+ - [ ] Codex converter rewrites `.claude/` → `.codex/` in command/skill bodies
128
+ - [ ] Global path `~/.claude/` rewritten to target-appropriate global path
129
+ - [ ] `disable-model-invocation` commands are included (not filtered) in both targets
130
+ - [ ] Tests cover path rewriting for both targets
131
+ - [ ] Tests cover setup command inclusion
132
+ - [ ] Existing tests still pass
133
+
134
+ ## What We're NOT Doing
135
+
136
+ - Not bundling the `.local.md` file itself (it's user-created per-project)
137
+ - Not converting YAML frontmatter format (both targets can read `.md` files with YAML)
138
+ - Not adding target-specific setup wizards (the instructions in the command body work across all targets)
139
+ - Not rewriting `AskUserQuestion` tool references (all three platforms support equivalent interactive tools)
140
+
141
+ ## Complexity Assessment
142
+
143
+ This is a **small change** — mostly string replacement in the converters plus updating the `disable-model-invocation` filter. The `.local.md` pattern is prompt-level instructions, not a proprietary API. It works anywhere an AI can read a file and follow instructions.
@@ -0,0 +1,195 @@
1
+ ---
2
+ title: Simplify Plugin Settings with .local.md Pattern
3
+ type: feat
4
+ date: 2026-02-08
5
+ ---
6
+
7
+ # Simplify Plugin Settings
8
+
9
+ ## Overview
10
+
11
+ Replace the 486-line `/compound-engineering-setup` wizard and JSON config with the `.local.md` plugin-settings pattern. Make agent configuration dead simple: a YAML frontmatter file users edit directly, with a lightweight setup command that generates the template.
12
+
13
+ ## Problem Statement
14
+
15
+ The current branch (`feat/compound-engineering-setup`) has:
16
+ - A 486-line setup command with Quick/Advanced/Minimal modes, add/remove loops, custom agent discovery
17
+ - JSON config file (`.claude/compound-engineering.json`) — not the plugin-settings convention
18
+ - Config-loading boilerplate that would be duplicated across 4 workflow commands
19
+ - Over-engineered for "which agents should review my code?"
20
+
21
+ Meanwhile, the workflow commands on main have hardcoded agent lists that can't be customized per-project.
22
+
23
+ ## Proposed Solution
24
+
25
+ Use `.claude/compound-engineering.local.md` with YAML frontmatter. Three simple changes:
26
+
27
+ 1. **Rewrite `setup.md`** (486 → ~60 lines) — detect project type, create template file
28
+ 2. **Add config reading to workflow commands** (~5 lines each) — read file, fall back to defaults
29
+ 3. **Config is optional** — everything works without it via auto-detection
30
+
31
+ ### Settings File Format
32
+
33
+ ```markdown
34
+ ---
35
+ review_agents: [kieran-rails-reviewer, code-simplicity-reviewer, security-sentinel]
36
+ plan_review_agents: [kieran-rails-reviewer, code-simplicity-reviewer]
37
+ ---
38
+
39
+ # Review Context
40
+
41
+ Any extra instructions for review agents go here.
42
+ Focus on N+1 queries — we've had issues in the brief system.
43
+ Skip agent-native checks for internal admin pages.
44
+ ```
45
+
46
+ That's it. No `conditionalAgents`, no `options`, no `customAgents` mapping. Conditional agents (migration, frontend, architecture, data) stay hardcoded in the review command — they trigger based on file patterns, not config.
47
+
48
+ ## Implementation Plan
49
+
50
+ ### Phase 1: Rewrite setup.md
51
+
52
+ **File:** `plugins/compound-engineering/commands/setup.md`
53
+ **From:** 486 lines → **To:** ~60 lines
54
+
55
+ The setup command should:
56
+
57
+ - [x] Detect project type (Gemfile+Rails, tsconfig, pyproject.toml, etc.)
58
+ - [x] Check if `.claude/compound-engineering.local.md` already exists
59
+ - [x] If exists: show current config, ask if user wants to regenerate
60
+ - [x] If not: create `.claude/compound-engineering.local.md` with smart defaults for detected type
61
+ - [x] Display the file path and tell user they can edit it directly
62
+ - [x] No wizard, no multi-step AskUserQuestion flows, no modify loops
63
+
64
+ **Default agents by project type:**
65
+
66
+ | Type | review_agents | plan_review_agents |
67
+ |------|--------------|-------------------|
68
+ | Rails | kieran-rails-reviewer, dhh-rails-reviewer, code-simplicity-reviewer, security-sentinel, performance-oracle | kieran-rails-reviewer, code-simplicity-reviewer |
69
+ | Python | kieran-python-reviewer, code-simplicity-reviewer, security-sentinel, performance-oracle | kieran-python-reviewer, code-simplicity-reviewer |
70
+ | TypeScript | kieran-typescript-reviewer, code-simplicity-reviewer, security-sentinel, performance-oracle | kieran-typescript-reviewer, code-simplicity-reviewer |
71
+ | General | code-simplicity-reviewer, security-sentinel, performance-oracle | code-simplicity-reviewer, architecture-strategist |
72
+
73
+ ### Phase 2: Update review.md
74
+
75
+ **File:** `plugins/compound-engineering/commands/workflows/review.md`
76
+ **Change:** Replace hardcoded agent list (lines 64-81) with config-aware section
77
+
78
+ Add before the parallel agents section (~5 lines):
79
+
80
+ ```markdown
81
+ #### Load Review Agents
82
+
83
+ Read `.claude/compound-engineering.local.md` (project) or `~/.claude/compound-engineering.local.md` (global).
84
+ If found, use `review_agents` from YAML frontmatter. If not found, auto-detect project type and use defaults:
85
+ - Rails: kieran-rails-reviewer, dhh-rails-reviewer, code-simplicity-reviewer, security-sentinel, performance-oracle
86
+ - Python: kieran-python-reviewer, code-simplicity-reviewer, security-sentinel, performance-oracle
87
+ - TypeScript: kieran-typescript-reviewer, code-simplicity-reviewer, security-sentinel, performance-oracle
88
+ - General: code-simplicity-reviewer, security-sentinel, performance-oracle
89
+
90
+ Run all review agents in parallel using Task tool.
91
+ ```
92
+
93
+ **Keep conditional agents hardcoded** — they trigger on file patterns (db/migrate, *.ts, etc.), not user preference. This is correct behavior.
94
+
95
+ **Add `schema-drift-detector` as a conditional agent** — currently exists as an agent but isn't wired into any command. Add it to the migrations conditional block:
96
+
97
+ ```markdown
98
+ **MIGRATIONS: If PR contains database migrations or schema.rb changes:**
99
+
100
+ - Task schema-drift-detector(PR content) - Detects unrelated schema.rb changes (run FIRST)
101
+ - Task data-migration-expert(PR content) - Validates ID mappings, rollback safety
102
+ - Task deployment-verification-agent(PR content) - Go/No-Go deployment checklist
103
+
104
+ **When to run:** PR includes `db/migrate/*.rb` OR `db/schema.rb`
105
+ ```
106
+
107
+ `schema-drift-detector` should run first per its own docs — catches drift before other DB reviewers waste time on unrelated changes.
108
+
109
+ ### Phase 3: Update work.md
110
+
111
+ **File:** `plugins/compound-engineering/commands/workflows/work.md`
112
+ **Change:** Replace hardcoded agent list in "Consider Reviewer Agents" section (lines 180-193)
113
+
114
+ Replace with:
115
+
116
+ ```markdown
117
+ If review agents are needed, read from `.claude/compound-engineering.local.md` frontmatter (`review_agents`).
118
+ If no config, use project-appropriate defaults. Run in parallel with Task tool.
119
+ ```
120
+
121
+ ### Phase 4: Update compound.md
122
+
123
+ **File:** `plugins/compound-engineering/commands/workflows/compound.md`
124
+ **Change:** Update Phase 3 "Optional Enhancement" (lines 92-98) and "Applicable Specialized Agents" section (lines 214-234)
125
+
126
+ The specialized agents in compound.md are problem-type-based (performance → performance-oracle, security → security-sentinel). These should stay hardcoded — they're not "review agents", they're domain experts triggered by problem category. No config needed.
127
+
128
+ **Only change:** Add a note that users can customize review agents via `/compound-engineering-setup`, but don't add config-reading logic here.
129
+
130
+ ## Acceptance Criteria
131
+
132
+ - [ ] `setup.md` is under 80 lines
133
+ - [ ] Running `/compound-engineering-setup` creates `.claude/compound-engineering.local.md` with correct defaults
134
+ - [ ] Running `/compound-engineering-setup` when config exists shows current config and asks before overwriting
135
+ - [ ] `/workflows:review` reads agents from `.local.md` when present
136
+ - [ ] `/workflows:review` falls back to auto-detected defaults when no config
137
+ - [ ] `/workflows:work` reads agents from `.local.md` when present
138
+ - [ ] `compound.md` unchanged except for a reference to the setup command
139
+ - [ ] No JSON config files — only `.local.md`
140
+ - [ ] Config file is optional — everything works without it
141
+ - [ ] Conditional agents (migrations, frontend, architecture, data) remain hardcoded in review.md
142
+
143
+ ### Phase 5: Structural Cleanup
144
+
145
+ **5a. Delete `technical_review.md`**
146
+
147
+ `commands/technical_review.md` is a one-line command (`Have @agent-dhh-rails-reviewer @agent-kieran-rails-reviewer @agent-code-simplicity-reviewer review...`) with `disable-model-invocation: true`. It duplicates the `/plan_review` skill. Delete it.
148
+
149
+ - [x] Delete `plugins/compound-engineering/commands/technical_review.md`
150
+
151
+ **5b. Add `disable-model-invocation: true` to `setup.md`**
152
+
153
+ The setup command is deliberate — users run it explicitly. It should not be auto-invoked.
154
+
155
+ - [x] Add `disable-model-invocation: true` to `setup.md` frontmatter
156
+
157
+ **5c. Update component counts**
158
+
159
+ After changes: 29 agents, 24 commands (25 - 1 deleted technical_review), 18 skills, 1 MCP.
160
+
161
+ Wait — with setup.md added and technical_review.md deleted: 25 - 1 = 24. Same as main. Verify actual count after changes.
162
+
163
+ - [x] Update `plugin.json` description with correct counts
164
+ - [x] Update `marketplace.json` description with correct counts
165
+ - [x] Update `README.md` component counts table
166
+
167
+ **5d. Update CHANGELOG.md**
168
+
169
+ - [x] Add entry for v2.32.0 documenting: settings support, schema-drift-detector wired in, technical_review removed
170
+
171
+ ## Acceptance Criteria
172
+
173
+ - [ ] `setup.md` is under 80 lines
174
+ - [ ] `setup.md` has `disable-model-invocation: true`
175
+ - [ ] Running `/compound-engineering-setup` creates `.claude/compound-engineering.local.md` with correct defaults
176
+ - [ ] Running `/compound-engineering-setup` when config exists shows current config and asks before overwriting
177
+ - [ ] `/workflows:review` reads agents from `.local.md` when present
178
+ - [ ] `/workflows:review` falls back to auto-detected defaults when no config
179
+ - [ ] `/workflows:review` runs `schema-drift-detector` for PRs with migrations or schema.rb
180
+ - [ ] `/workflows:work` reads agents from `.local.md` when present
181
+ - [ ] `compound.md` unchanged except for a reference to the setup command
182
+ - [ ] `technical_review.md` deleted
183
+ - [ ] No JSON config files — only `.local.md`
184
+ - [ ] Config file is optional — everything works without it
185
+ - [ ] Conditional agents (migrations, frontend, architecture, data) remain hardcoded in review.md
186
+ - [ ] Component counts match across plugin.json, marketplace.json, and README.md
187
+
188
+ ## What We're NOT Doing
189
+
190
+ - No multi-step wizard (users edit the file directly)
191
+ - No custom agent discovery (users add agent names to the YAML list)
192
+ - No `conditionalAgents` config (stays hardcoded by file pattern)
193
+ - No `options` object (agentNative, parallelReviews — not needed)
194
+ - No global vs project distinction in the command (just check both paths)
195
+ - No config-loading boilerplate duplicated across commands