@every-env/compound-plugin 0.3.0 → 0.5.1
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.
- package/{plugins/compound-engineering → .claude}/commands/release-docs.md +0 -1
- package/.claude-plugin/marketplace.json +2 -2
- package/.github/workflows/ci.yml +1 -1
- package/.github/workflows/deploy-docs.yml +3 -3
- package/.github/workflows/publish.yml +37 -0
- package/README.md +12 -3
- package/docs/index.html +13 -13
- package/docs/pages/changelog.html +39 -0
- package/docs/plans/2026-02-08-feat-convert-local-md-settings-for-opencode-codex-plan.md +143 -0
- package/docs/plans/2026-02-08-feat-simplify-plugin-settings-plan.md +195 -0
- package/docs/plans/2026-02-09-refactor-dspy-ruby-skill-update-plan.md +104 -0
- package/docs/plans/2026-02-12-feat-add-cursor-cli-target-provider-plan.md +306 -0
- package/docs/specs/cursor.md +85 -0
- package/package.json +1 -1
- package/plugins/compound-engineering/.claude-plugin/plugin.json +2 -2
- package/plugins/compound-engineering/CHANGELOG.md +38 -0
- package/plugins/compound-engineering/README.md +5 -3
- package/plugins/compound-engineering/commands/workflows/brainstorm.md +6 -1
- package/plugins/compound-engineering/commands/workflows/compound.md +1 -0
- package/plugins/compound-engineering/commands/workflows/review.md +23 -21
- package/plugins/compound-engineering/commands/workflows/work.md +29 -15
- package/plugins/compound-engineering/skills/dspy-ruby/SKILL.md +539 -396
- package/plugins/compound-engineering/skills/dspy-ruby/assets/config-template.rb +159 -331
- package/plugins/compound-engineering/skills/dspy-ruby/assets/module-template.rb +210 -236
- package/plugins/compound-engineering/skills/dspy-ruby/assets/signature-template.rb +173 -95
- package/plugins/compound-engineering/skills/dspy-ruby/references/core-concepts.md +552 -143
- package/plugins/compound-engineering/skills/dspy-ruby/references/observability.md +366 -0
- package/plugins/compound-engineering/skills/dspy-ruby/references/optimization.md +440 -460
- package/plugins/compound-engineering/skills/dspy-ruby/references/providers.md +305 -225
- package/plugins/compound-engineering/skills/dspy-ruby/references/toolsets.md +502 -0
- package/plugins/compound-engineering/skills/setup/SKILL.md +168 -0
- package/src/commands/convert.ts +10 -5
- package/src/commands/install.ts +18 -10
- package/src/converters/claude-to-codex.ts +7 -2
- package/src/converters/claude-to-cursor.ts +166 -0
- package/src/converters/claude-to-droid.ts +174 -0
- package/src/converters/claude-to-opencode.ts +8 -2
- package/src/targets/cursor.ts +48 -0
- package/src/targets/droid.ts +50 -0
- package/src/targets/index.ts +18 -0
- package/src/types/cursor.ts +29 -0
- package/src/types/droid.ts +20 -0
- package/tests/cli.test.ts +62 -0
- package/tests/codex-converter.test.ts +62 -0
- package/tests/converter.test.ts +61 -0
- package/tests/cursor-converter.test.ts +347 -0
- package/tests/cursor-writer.test.ts +137 -0
- package/tests/droid-converter.test.ts +277 -0
- package/tests/droid-writer.test.ts +100 -0
- package/plugins/compound-engineering/commands/technical_review.md +0 -8
|
@@ -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,
|
|
15
|
-
"version": "2.
|
|
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",
|
package/.github/workflows/ci.yml
CHANGED
|
@@ -24,13 +24,13 @@ jobs:
|
|
|
24
24
|
runs-on: ubuntu-latest
|
|
25
25
|
steps:
|
|
26
26
|
- name: Checkout
|
|
27
|
-
uses: actions/checkout@
|
|
27
|
+
uses: actions/checkout@v6
|
|
28
28
|
|
|
29
29
|
- name: Setup Pages
|
|
30
|
-
uses: actions/configure-pages@
|
|
30
|
+
uses: actions/configure-pages@v5
|
|
31
31
|
|
|
32
32
|
- name: Upload artifact
|
|
33
|
-
uses: actions/upload-pages-artifact@
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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:
|
|
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">
|
|
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">
|
|
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">
|
|
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">
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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
|
|
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
|