@every-env/compound-plugin 0.9.0 → 2.34.2

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 (121) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/.github/workflows/publish.yml +20 -10
  3. package/.releaserc.json +31 -0
  4. package/AGENTS.md +6 -1
  5. package/CHANGELOG.md +76 -0
  6. package/CLAUDE.md +16 -3
  7. package/README.md +83 -16
  8. package/bun.lock +977 -0
  9. package/docs/plans/2026-02-14-feat-auto-detect-install-and-gemini-sync-plan.md +360 -0
  10. package/docs/plans/2026-02-25-feat-windsurf-global-scope-support-plan.md +627 -0
  11. package/docs/plans/2026-03-01-feat-ce-command-aliases-backwards-compatible-deprecation-plan.md +261 -0
  12. package/docs/plans/2026-03-01-fix-setup-skill-non-claude-llm-fallback-plan.md +140 -0
  13. package/docs/plans/2026-03-03-feat-sync-claude-mcp-all-supported-providers-plan.md +639 -0
  14. package/docs/plans/feature_opencode-commands-as-md-and-config-merge.md +574 -0
  15. package/docs/solutions/adding-converter-target-providers.md +693 -0
  16. package/docs/solutions/plugin-versioning-requirements.md +7 -3
  17. package/docs/specs/windsurf.md +477 -0
  18. package/package.json +10 -4
  19. package/plans/landing-page-launchkit-refresh.md +2 -2
  20. package/plugins/compound-engineering/.claude-plugin/plugin.json +2 -2
  21. package/plugins/compound-engineering/CHANGELOG.md +82 -1
  22. package/plugins/compound-engineering/CLAUDE.md +14 -7
  23. package/plugins/compound-engineering/README.md +10 -7
  24. package/plugins/compound-engineering/agents/research/git-history-analyzer.md +1 -1
  25. package/plugins/compound-engineering/agents/research/learnings-researcher.md +1 -1
  26. package/plugins/compound-engineering/agents/review/code-simplicity-reviewer.md +1 -1
  27. package/plugins/compound-engineering/commands/ce/brainstorm.md +145 -0
  28. package/plugins/compound-engineering/commands/ce/compound.md +240 -0
  29. package/plugins/compound-engineering/commands/ce/plan.md +636 -0
  30. package/plugins/compound-engineering/commands/ce/review.md +525 -0
  31. package/plugins/compound-engineering/commands/ce/work.md +470 -0
  32. package/plugins/compound-engineering/commands/create-agent-skill.md +1 -1
  33. package/plugins/compound-engineering/commands/deepen-plan.md +6 -6
  34. package/plugins/compound-engineering/commands/deploy-docs.md +1 -1
  35. package/plugins/compound-engineering/commands/feature-video.md +15 -6
  36. package/plugins/compound-engineering/commands/heal-skill.md +1 -1
  37. package/plugins/compound-engineering/commands/lfg.md +3 -3
  38. package/plugins/compound-engineering/commands/slfg.md +3 -3
  39. package/plugins/compound-engineering/commands/test-xcode.md +2 -2
  40. package/plugins/compound-engineering/commands/workflows/brainstorm.md +4 -123
  41. package/plugins/compound-engineering/commands/workflows/compound.md +4 -234
  42. package/plugins/compound-engineering/commands/workflows/plan.md +4 -562
  43. package/plugins/compound-engineering/commands/workflows/review.md +4 -522
  44. package/plugins/compound-engineering/commands/workflows/work.md +4 -448
  45. package/plugins/compound-engineering/skills/brainstorming/SKILL.md +3 -3
  46. package/plugins/compound-engineering/skills/create-agent-skills/workflows/add-workflow.md +6 -0
  47. package/plugins/compound-engineering/skills/create-agent-skills/workflows/create-new-skill.md +6 -0
  48. package/plugins/compound-engineering/skills/document-review/SKILL.md +1 -1
  49. package/plugins/compound-engineering/skills/file-todos/SKILL.md +1 -1
  50. package/plugins/compound-engineering/skills/git-worktree/SKILL.md +5 -5
  51. package/plugins/compound-engineering/skills/proof/SKILL.md +185 -0
  52. package/plugins/compound-engineering/skills/resolve-pr-parallel/SKILL.md +1 -1
  53. package/plugins/compound-engineering/skills/setup/SKILL.md +8 -2
  54. package/src/commands/convert.ts +101 -24
  55. package/src/commands/install.ts +102 -45
  56. package/src/commands/sync.ts +43 -62
  57. package/src/converters/claude-to-openclaw.ts +240 -0
  58. package/src/converters/claude-to-opencode.ts +12 -10
  59. package/src/converters/claude-to-qwen.ts +238 -0
  60. package/src/converters/claude-to-windsurf.ts +205 -0
  61. package/src/index.ts +2 -1
  62. package/src/parsers/claude-home.ts +55 -3
  63. package/src/sync/codex.ts +38 -62
  64. package/src/sync/commands.ts +198 -0
  65. package/src/sync/copilot.ts +14 -36
  66. package/src/sync/droid.ts +50 -9
  67. package/src/sync/gemini.ts +135 -0
  68. package/src/sync/json-config.ts +47 -0
  69. package/src/sync/kiro.ts +49 -0
  70. package/src/sync/mcp-transports.ts +19 -0
  71. package/src/sync/openclaw.ts +18 -0
  72. package/src/sync/opencode.ts +10 -30
  73. package/src/sync/pi.ts +12 -36
  74. package/src/sync/qwen.ts +66 -0
  75. package/src/sync/registry.ts +141 -0
  76. package/src/sync/skills.ts +21 -0
  77. package/src/sync/windsurf.ts +59 -0
  78. package/src/targets/index.ts +60 -1
  79. package/src/targets/openclaw.ts +96 -0
  80. package/src/targets/opencode.ts +76 -10
  81. package/src/targets/qwen.ts +64 -0
  82. package/src/targets/windsurf.ts +104 -0
  83. package/src/types/kiro.ts +3 -1
  84. package/src/types/openclaw.ts +52 -0
  85. package/src/types/opencode.ts +7 -8
  86. package/src/types/qwen.ts +51 -0
  87. package/src/types/windsurf.ts +35 -0
  88. package/src/utils/codex-agents.ts +1 -1
  89. package/src/utils/detect-tools.ts +37 -0
  90. package/src/utils/files.ts +14 -0
  91. package/src/utils/resolve-output.ts +50 -0
  92. package/src/utils/secrets.ts +24 -0
  93. package/src/utils/symlink.ts +4 -6
  94. package/tests/claude-home.test.ts +46 -0
  95. package/tests/cli.test.ts +180 -0
  96. package/tests/converter.test.ts +43 -10
  97. package/tests/detect-tools.test.ts +119 -0
  98. package/tests/openclaw-converter.test.ts +200 -0
  99. package/tests/opencode-writer.test.ts +142 -5
  100. package/tests/qwen-converter.test.ts +238 -0
  101. package/tests/resolve-output.test.ts +131 -0
  102. package/tests/sync-codex.test.ts +64 -0
  103. package/tests/sync-copilot.test.ts +60 -4
  104. package/tests/sync-droid.test.ts +44 -4
  105. package/tests/sync-gemini.test.ts +160 -0
  106. package/tests/sync-kiro.test.ts +83 -0
  107. package/tests/sync-openclaw.test.ts +51 -0
  108. package/tests/sync-qwen.test.ts +75 -0
  109. package/tests/sync-windsurf.test.ts +89 -0
  110. package/tests/windsurf-converter.test.ts +573 -0
  111. package/tests/windsurf-writer.test.ts +359 -0
  112. package/docs/css/docs.css +0 -675
  113. package/docs/css/style.css +0 -2886
  114. package/docs/index.html +0 -1046
  115. package/docs/js/main.js +0 -225
  116. package/docs/pages/agents.html +0 -649
  117. package/docs/pages/changelog.html +0 -534
  118. package/docs/pages/commands.html +0 -523
  119. package/docs/pages/getting-started.html +0 -582
  120. package/docs/pages/mcp-servers.html +0 -409
  121. package/docs/pages/skills.html +0 -611
@@ -0,0 +1,261 @@
1
+ ---
2
+ title: "feat: Add ce:* command aliases with backwards-compatible deprecation of workflows:*"
3
+ type: feat
4
+ status: active
5
+ date: 2026-03-01
6
+ ---
7
+
8
+ # feat: Add `ce:*` Command Aliases with Backwards-Compatible Deprecation of `workflows:*`
9
+
10
+ ## Overview
11
+
12
+ Rename the five `workflows:*` commands to `ce:*` to make it clearer they belong to compound-engineering. Keep `workflows:*` working as thin deprecation wrappers that warn users and forward to the new commands.
13
+
14
+ ## Problem Statement / Motivation
15
+
16
+ The current `workflows:plan`, `workflows:work`, `workflows:review`, `workflows:brainstorm`, and `workflows:compound` commands are prefixed with `workflows:` — a generic namespace that doesn't signal their origin. Users don't immediately associate them with the compound-engineering plugin.
17
+
18
+ The `ce:` prefix is shorter, more memorable, and unambiguously identifies these as compound-engineering commands — consistent with how other plugin commands already use `compound-engineering:` as a namespace.
19
+
20
+ ## Proposed Solution
21
+
22
+ ### 1. Create New `ce:*` Commands (Primary)
23
+
24
+ Create a `commands/ce/` directory with five new command files. Each file gets the full implementation content from the current `workflows:*` counterpart, with the `name:` frontmatter updated to the new name.
25
+
26
+ | New Command | Source Content |
27
+ |-------------|---------------|
28
+ | `ce:plan` | `commands/workflows/plan.md` |
29
+ | `ce:work` | `commands/workflows/work.md` |
30
+ | `ce:review` | `commands/workflows/review.md` |
31
+ | `ce:brainstorm` | `commands/workflows/brainstorm.md` |
32
+ | `ce:compound` | `commands/workflows/compound.md` |
33
+
34
+ ### 2. Convert `workflows:*` to Deprecation Wrappers (Backwards Compatibility)
35
+
36
+ Replace the full content of each `workflows:*` command with a thin wrapper that:
37
+ 1. Displays a visible deprecation warning to the user
38
+ 2. Invokes the new `ce:*` command with the same `$ARGUMENTS`
39
+
40
+ Example wrapper body:
41
+
42
+ ```markdown
43
+ ---
44
+ name: workflows:plan
45
+ description: "[DEPRECATED] Use /ce:plan instead. Renamed for clarity."
46
+ argument-hint: "[feature description]"
47
+ ---
48
+
49
+ > ⚠️ **Deprecated:** `/workflows:plan` has been renamed to `/ce:plan`.
50
+ > Please update your workflow to use `/ce:plan` instead.
51
+ > This alias will be removed in a future version.
52
+
53
+ /ce:plan $ARGUMENTS
54
+ ```
55
+
56
+ ### 3. Update All Internal References
57
+
58
+ The grep reveals `workflows:*` is referenced in **many more places** than just `lfg`/`slfg`. All of these must be updated to point to the new `ce:*` names:
59
+
60
+ **Orchestration commands (update to new names):**
61
+ - `commands/lfg.md` — `/workflows:plan`, `/workflows:work`, `/workflows:review`
62
+ - `commands/slfg.md` — `/workflows:plan`, `/workflows:work`, `/workflows:review`
63
+
64
+ **Command bodies that cross-reference (update to new names):**
65
+ - `commands/workflows/brainstorm.md` — references `/workflows:plan` multiple times (will be in the deprecated wrapper, so should forward to `/ce:plan`)
66
+ - `commands/workflows/compound.md` — self-references and references `/workflows:plan`
67
+ - `commands/workflows/plan.md` — references `/workflows:work` multiple times
68
+ - `commands/deepen-plan.md` — references `/workflows:work`, `/workflows:compound`
69
+
70
+ **Agents (update to new names):**
71
+ - `agents/review/code-simplicity-reviewer.md` — references `/workflows:plan` and `/workflows:work`
72
+ - `agents/research/git-history-analyzer.md` — references `/workflows:plan`
73
+ - `agents/research/learnings-researcher.md` — references `/workflows:plan`
74
+
75
+ **Skills (update to new names):**
76
+ - `skills/document-review/SKILL.md` — references `/workflows:brainstorm`, `/workflows:plan`
77
+ - `skills/git-worktree/SKILL.md` — references `/workflows:review`, `/workflows:work` extensively
78
+ - `skills/setup/SKILL.md` — references `/workflows:review`, `/workflows:work`
79
+ - `skills/brainstorming/SKILL.md` — references `/workflows:plan` multiple times
80
+ - `skills/file-todos/SKILL.md` — references `/workflows:review`
81
+
82
+ **Other commands (update to new names):**
83
+ - `commands/test-xcode.md` — references `/workflows:review`
84
+
85
+ **Historical docs (leave as-is — they document the old names intentionally):**
86
+ - `docs/plans/*.md` — old plan files, historical record
87
+ - `docs/brainstorms/*.md` — historical
88
+ - `docs/solutions/*.md` — historical
89
+ - `tests/fixtures/` — test fixtures for the converter (intentionally use `workflows:*` to test namespace handling)
90
+ - `CHANGELOG.md` historical entries — don't rewrite history
91
+
92
+ ### 4. Update Documentation
93
+
94
+ - `CHANGELOG.md` — add new entry documenting the rename and deprecation
95
+ - `plugins/compound-engineering/README.md` — update command table to list `ce:*` as primary, note `workflows:*` as deprecated aliases
96
+ - `plugins/compound-engineering/CLAUDE.md` — update command listing and the "Why `workflows:`?" section
97
+ - Root `README.md` — update the command table (lines 133–136)
98
+
99
+ ### 5. Converter / bunx Install Script Considerations
100
+
101
+ The `bunx` install script (`src/commands/install.ts`) **only writes files, never deletes them**. This has two implications:
102
+
103
+ **Now (while deprecated wrappers exist):** No stale file problem. Running `bunx install compound-engineering --to gemini` after this change will:
104
+ - Write `commands/ce/plan.toml` (new primary)
105
+ - Write `commands/workflows/plan.toml` (deprecated wrapper, with deprecation content)
106
+
107
+ Both coexist correctly. Users who re-run install get both.
108
+
109
+ **Future (when deprecated wrappers are eventually removed):** The old `commands/workflows/` files will remain stale in users' converted targets. At that point, a cleanup step will be needed — either:
110
+ - Manual instructions: "Delete `.gemini/commands/workflows/` after upgrading"
111
+ - OR add a cleanup pass to the install script that removes known-renamed command directories
112
+
113
+ For now, document in the plan that stale cleanup is a known future concern when `workflows:*` wrappers are eventually dropped.
114
+
115
+ ## Technical Considerations
116
+
117
+ ### Command Naming
118
+
119
+ The `ce:` prefix maps to a `commands/ce/` directory. This follows the existing convention where `workflows:plan` maps to `commands/workflows/plan.md`.
120
+
121
+ ### Deprecation Warning Display
122
+
123
+ Since commands are executed by Claude, the deprecation message in the wrapper body will be displayed to the user as Claude's response before the new command runs. The `>` blockquote markdown renders as a styled callout.
124
+
125
+ The deprecated wrappers should **not** use `disable-model-invocation: true` — Claude needs to process the body to display the warning and invoke the new command.
126
+
127
+ ### Deprecation Wrapper Mechanism
128
+
129
+ The deprecated wrappers **must** use `disable-model-invocation: true`. This is the same mechanism `lfg.md` uses — the CLI runtime parses the body and executes slash command invocations directly. Without it, Claude reads the body as text and cannot actually invoke `/ce:plan`.
130
+
131
+ The deprecation notice in the wrapper body becomes a printed note (same as `lfg` step descriptions), not a styled Claude response. That's acceptable — it still communicates the message.
132
+
133
+ ### Context Token Budget
134
+
135
+ The 5 new `ce:*` commands add descriptions to the context budget. Keep descriptions short (under 120 chars). The 5 deprecated `workflows:*` wrappers have minimal descriptions (tagged as deprecated) to minimize budget impact.
136
+
137
+ ### Count Impact
138
+
139
+ Command count remains 22 (5 new `ce:*` + 5 updated `workflows:*` wrappers = net zero change). No version bump required for counts.
140
+
141
+ ## Acceptance Criteria
142
+
143
+ - [ ] `commands/ce/` directory created with 5 new command files
144
+ - [ ] Each `ce:*` command has the full implementation from its `workflows:*` counterpart
145
+ - [ ] Each `ce:*` command frontmatter `name:` field set to `ce:plan`, `ce:work`, etc.
146
+ - [ ] Each `workflows:*` command replaced with a thin deprecation wrapper
147
+ - [ ] Deprecation wrapper shows a clear ⚠️ warning with the new command name
148
+ - [ ] Deprecation wrapper invokes the new `ce:*` command with `$ARGUMENTS`
149
+ - [ ] `lfg.md` updated to use `ce:plan`, `ce:work`, `ce:review`
150
+ - [ ] `slfg.md` updated to use `ce:plan`, `ce:work`, `ce:review`
151
+ - [ ] All agent `.md` files updated (code-simplicity-reviewer, git-history-analyzer, learnings-researcher)
152
+ - [ ] All skill `SKILL.md` files updated (document-review, git-worktree, setup, brainstorming, file-todos)
153
+ - [ ] `commands/deepen-plan.md` and `commands/test-xcode.md` updated
154
+ - [ ] `CHANGELOG.md` updated with deprecation notice
155
+ - [ ] `plugins/compound-engineering/README.md` command table updated
156
+ - [ ] `plugins/compound-engineering/CLAUDE.md` command listing updated
157
+ - [ ] Root `README.md` command table updated
158
+ - [ ] Validate: `/ce:plan "test feature"` works end-to-end
159
+ - [ ] Validate: `/workflows:plan "test feature"` shows deprecation warning and continues
160
+ - [ ] Re-run `bunx install compound-engineering --to [target]` and confirm both `ce/` and `workflows/` output dirs are written correctly
161
+
162
+ ## Implementation Steps
163
+
164
+ ### Step 1: Create `commands/ce/` directory with 5 new files
165
+
166
+ For each command, copy the source file and update only the `name:` frontmatter field:
167
+
168
+ - `commands/ce/plan.md` — copy `commands/workflows/plan.md`, set `name: ce:plan`
169
+ - `commands/ce/work.md` — copy `commands/workflows/work.md`, set `name: ce:work`
170
+ - `commands/ce/review.md` — copy `commands/workflows/review.md`, set `name: ce:review`
171
+ - `commands/ce/brainstorm.md` — copy `commands/workflows/brainstorm.md`, set `name: ce:brainstorm`
172
+ - `commands/ce/compound.md` — copy `commands/workflows/compound.md`, set `name: ce:compound`
173
+
174
+ ### Step 2: Replace `commands/workflows/*.md` with deprecation wrappers
175
+
176
+ Use `disable-model-invocation: true` so the CLI runtime directly invokes `/ce:<command>`. The deprecation note is printed as a step description.
177
+
178
+ Template for each wrapper:
179
+
180
+ ```markdown
181
+ ---
182
+ name: workflows:<command>
183
+ description: "[DEPRECATED] Use /ce:<command> instead — renamed for clarity."
184
+ argument-hint: "[...]"
185
+ disable-model-invocation: true
186
+ ---
187
+
188
+ NOTE: /workflows:<command> is deprecated. Please use /ce:<command> instead. This alias will be removed in a future version.
189
+
190
+ /ce:<command> $ARGUMENTS
191
+ ```
192
+
193
+ ### Step 3: Update all internal references
194
+
195
+ **Orchestration commands:**
196
+ - `commands/lfg.md` — replace `/workflows:plan`, `/workflows:work`, `/workflows:review`
197
+ - `commands/slfg.md` — same
198
+
199
+ **Command bodies:**
200
+ - `commands/deepen-plan.md` — replace `/workflows:work`, `/workflows:compound`
201
+ - `commands/test-xcode.md` — replace `/workflows:review`
202
+ - The deprecated `workflows/brainstorm.md`, `workflows/compound.md`, `workflows/plan.md` wrappers — references in their body text pointing to other `workflows:*` commands should also be updated to `ce:*` (since users reading them should see the new names)
203
+
204
+ **Agents:**
205
+ - `agents/review/code-simplicity-reviewer.md`
206
+ - `agents/research/git-history-analyzer.md`
207
+ - `agents/research/learnings-researcher.md`
208
+
209
+ **Skills:**
210
+ - `skills/document-review/SKILL.md`
211
+ - `skills/git-worktree/SKILL.md`
212
+ - `skills/setup/SKILL.md`
213
+ - `skills/brainstorming/SKILL.md`
214
+ - `skills/file-todos/SKILL.md`
215
+
216
+ ### Step 4: Update documentation
217
+
218
+ **`plugins/compound-engineering/CHANGELOG.md`** — Add under new version section:
219
+ ```
220
+ ### Changed
221
+ - `workflows:plan`, `workflows:work`, `workflows:review`, `workflows:brainstorm`, `workflows:compound` renamed to `ce:plan`, `ce:work`, `ce:review`, `ce:brainstorm`, `ce:compound` for clarity
222
+
223
+ ### Deprecated
224
+ - `workflows:*` commands — use `ce:*` equivalents instead. Aliases remain functional and will be removed in a future version.
225
+ ```
226
+
227
+ **`plugins/compound-engineering/README.md`** — Update the commands table to list `ce:*` as primary, show `workflows:*` as deprecated aliases.
228
+
229
+ **`plugins/compound-engineering/CLAUDE.md`** — Update command listing and the "Why `workflows:`?" section to reflect new `ce:` namespace.
230
+
231
+ **Root `README.md`** — Update the commands table (lines 133–136).
232
+
233
+ ### Step 5: Verify converter output
234
+
235
+ After updating, re-run the bunx install script to confirm both targets are written:
236
+
237
+ ```bash
238
+ bunx @every-env/compound-plugin install compound-engineering --to gemini --output /tmp/test-output
239
+ ls /tmp/test-output/.gemini/commands/
240
+ # Should show both: ce/ and workflows/
241
+ ```
242
+
243
+ The `workflows/` output will contain the deprecation wrapper content. The `ce/` output will have the full implementation.
244
+
245
+ **Future cleanup note:** When `workflows:*` wrappers are eventually removed, users must manually delete the stale `workflows/` directories from their converted targets (`.gemini/commands/workflows/`, `.codex/commands/workflows/`, etc.). Consider adding a migration note to the CHANGELOG at that time.
246
+
247
+ ### Step 6: Run `/release-docs` to update the docs site
248
+
249
+ ## Dependencies & Risks
250
+
251
+ - **Risk:** Users with saved references to `workflows:*` commands in their CLAUDE.md files or scripts. **Mitigation:** The deprecation wrappers remain functional indefinitely.
252
+ - **Risk:** Context token budget slightly increases (5 new command descriptions). **Mitigation:** Keep all descriptions short. Deprecated wrappers get minimal descriptions.
253
+ - **Risk:** `lfg`/`slfg` orchestration breaks if update is partial. **Mitigation:** Update both in the same commit.
254
+
255
+ ## Sources & References
256
+
257
+ - Existing commands: `plugins/compound-engineering/commands/workflows/*.md`
258
+ - Orchestration commands: `plugins/compound-engineering/commands/lfg.md`, `plugins/compound-engineering/commands/slfg.md`
259
+ - Plugin metadata: `plugins/compound-engineering/.claude-plugin/plugin.json`
260
+ - Changelog: `plugins/compound-engineering/CHANGELOG.md`
261
+ - README: `plugins/compound-engineering/README.md`
@@ -0,0 +1,140 @@
1
+ ---
2
+ title: "fix: Setup skill fails silently on non-Claude LLMs due to AskUserQuestion dependency"
3
+ type: fix
4
+ status: active
5
+ date: 2026-03-01
6
+ ---
7
+
8
+ ## Enhancement Summary
9
+
10
+ **Deepened on:** 2026-03-01
11
+ **Research agents used:** best-practices-researcher, architecture-strategist, code-simplicity-reviewer, scope-explorer
12
+
13
+ ### Key Improvements
14
+ 1. Simplified preamble from 16 lines to 4 lines — drop platform name list and example blockquote (YAGNI)
15
+ 2. Expanded scope: `create-new-skill.md` also has `AskUserQuestion` and needs the same fix
16
+ 3. Clarified that `codex-agents.ts` change helps command/agent contexts only — does NOT reach skill execution (skills aren't converter-transformed)
17
+ 4. Added CLAUDE.md skill compliance policy as a third deliverable to prevent recurrence
18
+ 5. Separated two distinct failure modes: tool-not-found error vs silent auto-configuration
19
+
20
+ ### New Considerations Discovered
21
+ - Only Pi converter transforms `AskUserQuestion` (incompletely); all others pass skill content through verbatim — the codex-agents.ts fix is independent of skill execution
22
+ - `add-workflow.md` and `audit-skill.md` already explicitly prohibit `AskUserQuestion` — this undocumented policy should be formalized
23
+ - Prose fallback is probabilistic (LLM compliance); converter-level transformation is the correct long-term architectural fix
24
+ - The brainstorming skill avoids `AskUserQuestion` entirely and works cross-platform — that's the gold standard pattern
25
+
26
+ ---
27
+
28
+ # fix: Setup Skill Cross-Platform Fallback for AskUserQuestion
29
+
30
+ ## Overview
31
+
32
+ The `setup` skill uses `AskUserQuestion` at 5 decision points. On non-Claude platforms (Codex, Gemini, OpenCode, Copilot, Kiro, etc.), this tool doesn't exist — the LLM reads the skill body but cannot call the tool, causing silent failure or unconsented auto-configuration. Fix by adding a minimal fallback instruction to the skill body, applying the same to `create-new-skill.md`, and adding a policy to the CLAUDE.md skill checklist to prevent recurrence.
33
+
34
+ ## Problem Statement
35
+
36
+ **Two distinct failure modes:**
37
+
38
+ 1. **Tool-not-found error** — LLM tries to call `AskUserQuestion` as a function; platform returns an error. Setup halts.
39
+ 2. **Silent skip** — LLM reads `AskUserQuestion` as prose, ignores the decision gate, auto-configures. User never consulted. This is worse — produces a `compound-engineering.local.md` the user never approved.
40
+
41
+ `plugins/compound-engineering/skills/setup/SKILL.md` has 5 `AskUserQuestion` blocks:
42
+
43
+ | Line | Decision Point |
44
+ |------|----------------|
45
+ | 13 | Check existing config: Reconfigure / View / Cancel |
46
+ | 44 | Stack detection: Auto-configure / Customize |
47
+ | 67 | Stack override (multi-option) |
48
+ | 85 | Focus areas (multiSelect) |
49
+ | 104 | Review depth: Thorough / Fast / Comprehensive |
50
+
51
+ `plugins/compound-engineering/skills/create-agent-skills/workflows/create-new-skill.md` lines 22 and 45 also use `AskUserQuestion`.
52
+
53
+ Only the Pi converter transforms the reference (incompletely). All other converters (Codex, Gemini, Copilot, Kiro, Droid, Windsurf) pass skill content through verbatim — **skills are not converter-transformed**.
54
+
55
+ ## Proposed Solution
56
+
57
+ Three deliverables, each addressing a different layer:
58
+
59
+ ### 1. Add 4-line "Interaction Method" preamble to `setup/SKILL.md`
60
+
61
+ Immediately after the `# Compound Engineering Setup` heading, insert:
62
+
63
+ ```markdown
64
+ ## Interaction Method
65
+
66
+ If `AskUserQuestion` is available, use it for all prompts below.
67
+
68
+ If not, present each question as a numbered list and wait for a reply before proceeding to the next step. For multiSelect questions, accept comma-separated numbers (e.g. `1, 3`). Never skip or auto-configure.
69
+ ```
70
+
71
+ **Why 4 lines, not 16:** LLMs know what a numbered list is — no example blockquote needed. The branching condition is tool availability, not platform identity — no platform name list needed (YAGNI: new platforms will be added and lists go stale). State the "never skip" rule once here; don't repeat it in `codex-agents.ts`.
72
+
73
+ **Why this works:** The skill body IS read by the LLM on all platforms when `/setup` is invoked. The agent follows prose instructions regardless of tool availability. This is the same pattern `brainstorming/SKILL.md` uses — it avoids `AskUserQuestion` entirely and uses inline numbered lists — the gold standard cross-platform approach.
74
+
75
+ ### 2. Apply the same preamble to `create-new-skill.md`
76
+
77
+ `plugins/compound-engineering/skills/create-agent-skills/workflows/create-new-skill.md` uses `AskUserQuestion` at lines 22 and 45. Apply an identical preamble at the top of that file.
78
+
79
+ ### 3. Strengthen `codex-agents.ts` AskUserQuestion mapping
80
+
81
+ This change does NOT fix skill execution (skills bypass the converter pipeline). It improves the AGENTS.md guidance for Codex command/agent contexts.
82
+
83
+ Replace (`src/utils/codex-agents.ts` line 21):
84
+ ```
85
+ - AskUserQuestion/Question: ask the user in chat
86
+ ```
87
+
88
+ With:
89
+ ```
90
+ - AskUserQuestion/Question: present choices as a numbered list in chat and wait for a reply number. For multi-select (multiSelect: true), accept comma-separated numbers. Never skip or auto-configure — always wait for the user's response before proceeding.
91
+ ```
92
+
93
+ ### 4. Add lint rule to CLAUDE.md skill compliance checklist
94
+
95
+ Add to the "Skill Compliance Checklist" in `plugins/compound-engineering/CLAUDE.md`:
96
+
97
+ ```
98
+ ### AskUserQuestion Usage
99
+
100
+ - [ ] If the skill uses `AskUserQuestion`, it must include an "Interaction Method" preamble explaining the numbered-list fallback for non-Claude environments
101
+ - [ ] Prefer avoiding `AskUserQuestion` entirely (see brainstorming/SKILL.md pattern) for skills intended to run cross-platform
102
+ ```
103
+
104
+ ## Technical Considerations
105
+
106
+ - `setup/SKILL.md` has `disable-model-invocation: true` — this controls session-startup context loading only, not skill-body execution at invocation time
107
+ - The prose fallback is probabilistic (LLM compliance), not a build-time guarantee. The correct long-term architectural fix is converter-level transformation of skill content (a `transformSkillContent()` pass in each converter), but that is out of scope here
108
+ - Commands with `AskUserQuestion` (`ce/brainstorm.md`, `ce/plan.md`, `test-browser.md`, etc.) have the same gap but are out of scope — explicitly noted as a future task
109
+
110
+ ## Acceptance Criteria
111
+
112
+ - [ ] `setup/SKILL.md` has a 4-line "Interaction Method" preamble after the opening heading
113
+ - [ ] `create-new-skill.md` has the same preamble
114
+ - [ ] The skills still use `AskUserQuestion` as primary — no change to Claude Code behavior
115
+ - [ ] `codex-agents.ts` AskUserQuestion line updated with structured guidance
116
+ - [ ] `plugins/compound-engineering/CLAUDE.md` skill checklist includes AskUserQuestion policy
117
+ - [ ] No regression: on Claude Code, setup works exactly as before
118
+
119
+ ## Files
120
+
121
+ - `plugins/compound-engineering/skills/setup/SKILL.md` — Add 4-line preamble after line 8
122
+ - `plugins/compound-engineering/skills/create-agent-skills/workflows/create-new-skill.md` — Add same preamble at top
123
+ - `src/utils/codex-agents.ts` — Strengthen AskUserQuestion mapping (line 21)
124
+ - `plugins/compound-engineering/CLAUDE.md` — Add AskUserQuestion policy to skill compliance checklist
125
+
126
+ ## Future Work (Out of Scope)
127
+
128
+ - Converter-level `transformSkillContent()` for all targets — build-time guarantee instead of prose fallback
129
+ - Commands with `AskUserQuestion` (`ce/brainstorm.md`, `ce/plan.md`, `test-browser.md`) — same failure mode, separate fix
130
+
131
+ ## Sources & References
132
+
133
+ - Issue: [#204](https://github.com/EveryInc/compound-engineering-plugin/issues/204)
134
+ - `plugins/compound-engineering/skills/setup/SKILL.md:13,44,67,85,104`
135
+ - `plugins/compound-engineering/skills/create-agent-skills/workflows/create-new-skill.md:22,45`
136
+ - `src/utils/codex-agents.ts:21`
137
+ - `src/converters/claude-to-pi.ts:106` — Pi converter (reference pattern)
138
+ - `plugins/compound-engineering/skills/brainstorming/SKILL.md` — gold standard cross-platform skill (no AskUserQuestion)
139
+ - `plugins/compound-engineering/skills/create-agent-skills/workflows/add-workflow.md:12,37` — existing "DO NOT use AskUserQuestion" policy
140
+ - `docs/solutions/adding-converter-target-providers.md`