@every-env/compound-plugin 0.2.0 → 0.3.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 (61) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/docs/plans/2026-02-08-refactor-reduce-plugin-context-token-usage-plan.md +212 -0
  3. package/package.json +1 -1
  4. package/plugins/compound-engineering/.claude-plugin/plugin.json +2 -2
  5. package/plugins/compound-engineering/CHANGELOG.md +26 -0
  6. package/plugins/compound-engineering/agents/design/design-implementation-reviewer.md +16 -1
  7. package/plugins/compound-engineering/agents/design/design-iterator.md +28 -1
  8. package/plugins/compound-engineering/agents/design/figma-design-sync.md +19 -1
  9. package/plugins/compound-engineering/agents/docs/ankane-readme-writer.md +16 -1
  10. package/plugins/compound-engineering/agents/research/best-practices-researcher.md +16 -1
  11. package/plugins/compound-engineering/agents/research/framework-docs-researcher.md +16 -1
  12. package/plugins/compound-engineering/agents/research/git-history-analyzer.md +16 -1
  13. package/plugins/compound-engineering/agents/research/learnings-researcher.md +22 -1
  14. package/plugins/compound-engineering/agents/research/repo-research-analyst.md +22 -1
  15. package/plugins/compound-engineering/agents/review/agent-native-reviewer.md +16 -1
  16. package/plugins/compound-engineering/agents/review/architecture-strategist.md +16 -1
  17. package/plugins/compound-engineering/agents/review/code-simplicity-reviewer.md +16 -1
  18. package/plugins/compound-engineering/agents/review/data-integrity-guardian.md +16 -1
  19. package/plugins/compound-engineering/agents/review/data-migration-expert.md +16 -1
  20. package/plugins/compound-engineering/agents/review/deployment-verification-agent.md +16 -1
  21. package/plugins/compound-engineering/agents/review/dhh-rails-reviewer.md +22 -1
  22. package/plugins/compound-engineering/agents/review/julik-frontend-races-reviewer.md +20 -21
  23. package/plugins/compound-engineering/agents/review/kieran-python-reviewer.md +30 -1
  24. package/plugins/compound-engineering/agents/review/kieran-rails-reviewer.md +30 -1
  25. package/plugins/compound-engineering/agents/review/kieran-typescript-reviewer.md +30 -1
  26. package/plugins/compound-engineering/agents/review/pattern-recognition-specialist.md +16 -1
  27. package/plugins/compound-engineering/agents/review/performance-oracle.md +28 -1
  28. package/plugins/compound-engineering/agents/review/schema-drift-detector.md +16 -1
  29. package/plugins/compound-engineering/agents/review/security-sentinel.md +22 -1
  30. package/plugins/compound-engineering/agents/workflow/bug-reproduction-validator.md +16 -1
  31. package/plugins/compound-engineering/agents/workflow/every-style-editor.md +1 -1
  32. package/plugins/compound-engineering/agents/workflow/pr-comment-resolver.md +16 -1
  33. package/plugins/compound-engineering/agents/workflow/spec-flow-analyzer.md +22 -1
  34. package/plugins/compound-engineering/commands/agent-native-audit.md +1 -0
  35. package/plugins/compound-engineering/commands/changelog.md +1 -0
  36. package/plugins/compound-engineering/commands/create-agent-skill.md +1 -0
  37. package/plugins/compound-engineering/commands/deploy-docs.md +1 -0
  38. package/plugins/compound-engineering/commands/generate_command.md +1 -0
  39. package/plugins/compound-engineering/commands/heal-skill.md +1 -0
  40. package/plugins/compound-engineering/commands/lfg.md +1 -0
  41. package/plugins/compound-engineering/commands/release-docs.md +1 -0
  42. package/plugins/compound-engineering/commands/report-bug.md +1 -0
  43. package/plugins/compound-engineering/commands/reproduce-bug.md +1 -0
  44. package/plugins/compound-engineering/commands/resolve_parallel.md +1 -0
  45. package/plugins/compound-engineering/commands/slfg.md +1 -0
  46. package/plugins/compound-engineering/commands/technical_review.md +1 -0
  47. package/plugins/compound-engineering/commands/{xcode-test.md → test-xcode.md} +2 -1
  48. package/plugins/compound-engineering/commands/triage.md +1 -0
  49. package/plugins/compound-engineering/skills/compound-docs/SKILL.md +1 -0
  50. package/plugins/compound-engineering/skills/file-todos/SKILL.md +1 -0
  51. package/plugins/compound-engineering/skills/orchestrating-swarms/SKILL.md +1 -0
  52. package/plugins/compound-engineering/skills/skill-creator/SKILL.md +1 -0
  53. package/src/converters/claude-to-codex.ts +2 -1
  54. package/src/converters/claude-to-opencode.ts +1 -0
  55. package/src/parsers/claude.ts +4 -0
  56. package/src/types/claude.ts +2 -0
  57. package/tests/claude-parser.test.ts +24 -2
  58. package/tests/codex-converter.test.ts +38 -0
  59. package/tests/converter.test.ts +15 -0
  60. package/tests/fixtures/sample-plugin/commands/disabled-command.md +7 -0
  61. package/tests/fixtures/sample-plugin/skills/disabled-skill/SKILL.md +7 -0
@@ -1,9 +1,30 @@
1
1
  ---
2
2
  name: spec-flow-analyzer
3
- description: "Use this agent when you have a specification, plan, feature description, or technical document that needs user flow analysis and gap identification. This agent should be used proactively when:\\n\\n<example>\\nContext: The user has just finished drafting a specification for OAuth implementation.\\nuser: \"Here's the OAuth spec for our new integration:\\n[OAuth spec details]\"\\nassistant: \"Let me use the spec-flow-analyzer agent to analyze this OAuth specification for user flows and missing elements.\"\\n<commentary>\\nSince the user has provided a specification document, use the Task tool to launch the spec-flow-analyzer agent to identify all user flows, edge cases, and missing clarifications.\\n</commentary>\\n</example>\\n\\n<example>\\nContext: The user is planning a new social sharing feature.\\nuser: \"I'm thinking we should add social sharing to posts. Users can share to Twitter, Facebook, and LinkedIn.\"\\nassistant: \"This sounds like a feature specification that would benefit from flow analysis. Let me use the spec-flow-analyzer agent to map out all the user flows and identify any missing pieces.\"\\n<commentary>\\nThe user is describing a new feature. Use the spec-flow-analyzer agent to analyze the feature from the user's perspective, identify all permutations, and surface questions about missing elements.\\n</commentary>\\n</example>\\n\\n<example>\\nContext: The user has created a plan for a new onboarding flow.\\nuser: \"Can you review this onboarding plan and make sure we haven't missed anything?\"\\nassistant: \"I'll use the spec-flow-analyzer agent to thoroughly analyze this onboarding plan from the user's perspective.\"\\n<commentary>\\nThe user is explicitly asking for review of a plan. Use the spec-flow-analyzer agent to identify all user flows, edge cases, and gaps in the specification.\\n</commentary>\\n</example>\\n\\nCall this agent when:\\n- A user presents a feature specification, plan, or requirements document\\n- A user asks to review or validate a design or implementation plan\\n- A user describes a new feature or integration that needs flow analysis\\n- After initial planning sessions to validate completeness\\n- Before implementation begins on complex user-facing features\\n- When stakeholders need clarity on user journeys and edge cases"
3
+ description: "Analyzes specifications and feature descriptions for user flow completeness and gap identification. Use when a spec, plan, or feature description needs flow analysis, edge case discovery, or requirements validation."
4
4
  model: inherit
5
5
  ---
6
6
 
7
+ <examples>
8
+ <example>
9
+ Context: The user has just finished drafting a specification for OAuth implementation.
10
+ user: "Here's the OAuth spec for our new integration: [OAuth spec details]"
11
+ assistant: "Let me use the spec-flow-analyzer agent to analyze this OAuth specification for user flows and missing elements."
12
+ <commentary>Since the user has provided a specification document, use the Task tool to launch the spec-flow-analyzer agent to identify all user flows, edge cases, and missing clarifications.</commentary>
13
+ </example>
14
+ <example>
15
+ Context: The user is planning a new social sharing feature.
16
+ user: "I'm thinking we should add social sharing to posts. Users can share to Twitter, Facebook, and LinkedIn."
17
+ assistant: "This sounds like a feature specification that would benefit from flow analysis. Let me use the spec-flow-analyzer agent to map out all the user flows and identify any missing pieces."
18
+ <commentary>The user is describing a new feature. Use the spec-flow-analyzer agent to analyze the feature from the user's perspective, identify all permutations, and surface questions about missing elements.</commentary>
19
+ </example>
20
+ <example>
21
+ Context: The user has created a plan for a new onboarding flow.
22
+ user: "Can you review this onboarding plan and make sure we haven't missed anything?"
23
+ assistant: "I'll use the spec-flow-analyzer agent to thoroughly analyze this onboarding plan from the user's perspective."
24
+ <commentary>The user is explicitly asking for review of a plan. Use the spec-flow-analyzer agent to identify all user flows, edge cases, and gaps in the specification.</commentary>
25
+ </example>
26
+ </examples>
27
+
7
28
  You are an elite User Experience Flow Analyst and Requirements Engineer. Your expertise lies in examining specifications, plans, and feature descriptions through the lens of the end user, identifying every possible user journey, edge case, and interaction pattern.
8
29
 
9
30
  Your primary mission is to:
@@ -2,6 +2,7 @@
2
2
  name: agent-native-audit
3
3
  description: Run comprehensive agent-native architecture review with scored principles
4
4
  argument-hint: "[optional: specific principle to audit]"
5
+ disable-model-invocation: true
5
6
  ---
6
7
 
7
8
  # Agent-Native Architecture Audit
@@ -2,6 +2,7 @@
2
2
  name: changelog
3
3
  description: Create engaging changelogs for recent merges to main branch
4
4
  argument-hint: "[optional: daily|weekly, or time period in days]"
5
+ disable-model-invocation: true
5
6
  ---
6
7
 
7
8
  You are a witty and enthusiastic product marketer tasked with creating a fun, engaging change log for an internal development team. Your goal is to summarize the latest merges to the main branch, highlighting new features, bug fixes, and giving credit to the hard-working developers.
@@ -3,6 +3,7 @@ name: create-agent-skill
3
3
  description: Create or edit Claude Code skills with expert guidance on structure and best practices
4
4
  allowed-tools: Skill(create-agent-skills)
5
5
  argument-hint: [skill description or requirements]
6
+ disable-model-invocation: true
6
7
  ---
7
8
 
8
9
  Invoke the create-agent-skills skill for: $ARGUMENTS
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: deploy-docs
3
3
  description: Validate and prepare documentation for GitHub Pages deployment
4
+ disable-model-invocation: true
4
5
  ---
5
6
 
6
7
  # Deploy Documentation Command
@@ -2,6 +2,7 @@
2
2
  name: generate_command
3
3
  description: Create a new custom slash command following conventions and best practices
4
4
  argument-hint: "[command purpose and requirements]"
5
+ disable-model-invocation: true
5
6
  ---
6
7
 
7
8
  # Create a Custom Claude Code Command
@@ -3,6 +3,7 @@ name: heal-skill
3
3
  description: Fix incorrect SKILL.md files when a skill has wrong instructions or outdated API references
4
4
  argument-hint: [optional: specific issue to fix]
5
5
  allowed-tools: [Read, Edit, Bash(ls:*), Bash(git:*)]
6
+ disable-model-invocation: true
6
7
  ---
7
8
 
8
9
  <objective>
@@ -2,6 +2,7 @@
2
2
  name: lfg
3
3
  description: Full autonomous engineering workflow
4
4
  argument-hint: "[feature description]"
5
+ disable-model-invocation: true
5
6
  ---
6
7
 
7
8
  Run these slash commands in order. Do not do anything else.
@@ -2,6 +2,7 @@
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
5
6
  ---
6
7
 
7
8
  # Release Documentation Command
@@ -2,6 +2,7 @@
2
2
  name: report-bug
3
3
  description: Report a bug in the compound-engineering plugin
4
4
  argument-hint: "[optional: brief description of the bug]"
5
+ disable-model-invocation: true
5
6
  ---
6
7
 
7
8
  # Report a Compounding Engineering Plugin Bug
@@ -2,6 +2,7 @@
2
2
  name: reproduce-bug
3
3
  description: Reproduce and investigate a bug using logs, console inspection, and browser screenshots
4
4
  argument-hint: "[GitHub issue number]"
5
+ disable-model-invocation: true
5
6
  ---
6
7
 
7
8
  # Reproduce Bug Command
@@ -2,6 +2,7 @@
2
2
  name: resolve_parallel
3
3
  description: Resolve all TODO comments using parallel processing
4
4
  argument-hint: "[optional: specific TODO pattern or file]"
5
+ disable-model-invocation: true
5
6
  ---
6
7
 
7
8
  Resolve all TODO comments using parallel processing.
@@ -2,6 +2,7 @@
2
2
  name: slfg
3
3
  description: Full autonomous engineering workflow using swarm mode for parallel execution
4
4
  argument-hint: "[feature description]"
5
+ disable-model-invocation: true
5
6
  ---
6
7
 
7
8
  Swarm-enabled LFG. Run these steps in order, parallelizing where indicated.
@@ -2,6 +2,7 @@
2
2
  name: technical_review
3
3
  description: Have multiple specialized agents review the technical approach and architecture of a plan in parallel
4
4
  argument-hint: "[plan file path or plan content]"
5
+ disable-model-invocation: true
5
6
  ---
6
7
 
7
8
  Have @agent-dhh-rails-reviewer @agent-kieran-rails-reviewer @agent-code-simplicity-reviewer review the technical approach in this plan in parallel.
@@ -1,7 +1,8 @@
1
1
  ---
2
- name: xcode-test
2
+ name: test-xcode
3
3
  description: Build and test iOS apps on simulator using XcodeBuildMCP
4
4
  argument-hint: "[scheme name or 'current' to use default]"
5
+ disable-model-invocation: true
5
6
  ---
6
7
 
7
8
  # Xcode Test Command
@@ -2,6 +2,7 @@
2
2
  name: triage
3
3
  description: Triage and categorize findings for the CLI todo system
4
4
  argument-hint: "[findings list or source type]"
5
+ disable-model-invocation: true
5
6
  ---
6
7
 
7
8
  - First set the /model to Haiku
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: compound-docs
3
3
  description: Capture solved problems as categorized documentation with YAML frontmatter for fast lookup
4
+ disable-model-invocation: true
4
5
  allowed-tools:
5
6
  - Read # Parse conversation context
6
7
  - Write # Create resolution docs
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: file-todos
3
3
  description: This skill should be used when managing the file-based todo tracking system in the todos/ directory. It provides workflows for creating todos, managing status and dependencies, conducting triage, and integrating with slash commands and code review processes.
4
+ disable-model-invocation: true
4
5
  ---
5
6
 
6
7
  # File-Based Todo Tracking Skill
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: orchestrating-swarms
3
3
  description: This skill should be used when orchestrating multi-agent swarms using Claude Code's TeammateTool and Task system. It applies when coordinating multiple agents, running parallel code reviews, creating pipeline workflows with dependencies, building self-organizing task queues, or any task benefiting from divide-and-conquer patterns.
4
+ disable-model-invocation: true
4
5
  ---
5
6
 
6
7
  # Claude Code Swarm Orchestration
@@ -2,6 +2,7 @@
2
2
  name: skill-creator
3
3
  description: Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.
4
4
  license: Complete terms in LICENSE.txt
5
+ disable-model-invocation: true
5
6
  ---
6
7
 
7
8
  # Skill Creator
@@ -19,7 +19,8 @@ export function convertClaudeToCodex(
19
19
 
20
20
  const usedSkillNames = new Set<string>(skillDirs.map((skill) => normalizeName(skill.name)))
21
21
  const commandSkills: CodexGeneratedSkill[] = []
22
- const prompts = plugin.commands.map((command) => {
22
+ const invocableCommands = plugin.commands.filter((command) => !command.disableModelInvocation)
23
+ const prompts = invocableCommands.map((command) => {
23
24
  const promptName = uniqueName(normalizeName(command.name), promptNames)
24
25
  const commandSkill = convertCommandSkill(command, usedSkillNames)
25
26
  commandSkills.push(commandSkill)
@@ -114,6 +114,7 @@ function convertAgent(agent: ClaudeAgent, options: ClaudeToOpenCodeOptions) {
114
114
  function convertCommands(commands: ClaudeCommand[]): Record<string, OpenCodeCommandConfig> {
115
115
  const result: Record<string, OpenCodeCommandConfig> = {}
116
116
  for (const command of commands) {
117
+ if (command.disableModelInvocation) continue
117
118
  const entry: OpenCodeCommandConfig = {
118
119
  description: command.description,
119
120
  template: command.body,
@@ -83,12 +83,14 @@ async function loadCommands(commandsDirs: string[]): Promise<ClaudeCommand[]> {
83
83
  const { data, body } = parseFrontmatter(raw)
84
84
  const name = (data.name as string) ?? path.basename(file, ".md")
85
85
  const allowedTools = parseAllowedTools(data["allowed-tools"])
86
+ const disableModelInvocation = data["disable-model-invocation"] === true ? true : undefined
86
87
  commands.push({
87
88
  name,
88
89
  description: data.description as string | undefined,
89
90
  argumentHint: data["argument-hint"] as string | undefined,
90
91
  model: data.model as string | undefined,
91
92
  allowedTools,
93
+ disableModelInvocation,
92
94
  body: body.trim(),
93
95
  sourcePath: file,
94
96
  })
@@ -104,9 +106,11 @@ async function loadSkills(skillsDirs: string[]): Promise<ClaudeSkill[]> {
104
106
  const raw = await readText(file)
105
107
  const { data } = parseFrontmatter(raw)
106
108
  const name = (data.name as string) ?? path.basename(path.dirname(file))
109
+ const disableModelInvocation = data["disable-model-invocation"] === true ? true : undefined
107
110
  skills.push({
108
111
  name,
109
112
  description: data.description as string | undefined,
113
+ disableModelInvocation,
110
114
  sourceDir: path.dirname(file),
111
115
  skillPath: file,
112
116
  })
@@ -39,6 +39,7 @@ export type ClaudeCommand = {
39
39
  argumentHint?: string
40
40
  model?: string
41
41
  allowedTools?: string[]
42
+ disableModelInvocation?: boolean
42
43
  body: string
43
44
  sourcePath: string
44
45
  }
@@ -46,6 +47,7 @@ export type ClaudeCommand = {
46
47
  export type ClaudeSkill = {
47
48
  name: string
48
49
  description?: string
50
+ disableModelInvocation?: boolean
49
51
  sourceDir: string
50
52
  skillPath: string
51
53
  }
@@ -15,8 +15,8 @@ describe("loadClaudePlugin", () => {
15
15
 
16
16
  expect(plugin.manifest.name).toBe("compound-engineering")
17
17
  expect(plugin.agents.length).toBe(2)
18
- expect(plugin.commands.length).toBe(6)
19
- expect(plugin.skills.length).toBe(1)
18
+ expect(plugin.commands.length).toBe(7)
19
+ expect(plugin.skills.length).toBe(2)
20
20
  expect(plugin.hooks).toBeDefined()
21
21
  expect(plugin.mcpServers).toBeDefined()
22
22
 
@@ -55,6 +55,28 @@ describe("loadClaudePlugin", () => {
55
55
  expect(plugin.mcpServers?.context7?.url).toBe("https://mcp.context7.com/mcp")
56
56
  })
57
57
 
58
+ test("parses disable-model-invocation from commands", async () => {
59
+ const plugin = await loadClaudePlugin(fixtureRoot)
60
+
61
+ const disabledCommand = plugin.commands.find((command) => command.name === "deploy-docs")
62
+ expect(disabledCommand).toBeDefined()
63
+ expect(disabledCommand?.disableModelInvocation).toBe(true)
64
+
65
+ const normalCommand = plugin.commands.find((command) => command.name === "workflows:review")
66
+ expect(normalCommand?.disableModelInvocation).toBeUndefined()
67
+ })
68
+
69
+ test("parses disable-model-invocation from skills", async () => {
70
+ const plugin = await loadClaudePlugin(fixtureRoot)
71
+
72
+ const disabledSkill = plugin.skills.find((skill) => skill.name === "disabled-skill")
73
+ expect(disabledSkill).toBeDefined()
74
+ expect(disabledSkill?.disableModelInvocation).toBe(true)
75
+
76
+ const normalSkill = plugin.skills.find((skill) => skill.name === "skill-one")
77
+ expect(normalSkill?.disableModelInvocation).toBeUndefined()
78
+ })
79
+
58
80
  test("loads MCP servers from .mcp.json when manifest is empty", async () => {
59
81
  const plugin = await loadClaudePlugin(mcpFixtureRoot)
60
82
  expect(plugin.mcpServers?.remote?.url).toBe("https://example.com/stream")
@@ -172,6 +172,44 @@ Don't confuse with file paths like /tmp/output.md or /dev/null.`,
172
172
  expect(parsed.body).toContain("/dev/null")
173
173
  })
174
174
 
175
+ test("excludes commands with disable-model-invocation from prompts and skills", () => {
176
+ const plugin: ClaudePlugin = {
177
+ ...fixturePlugin,
178
+ commands: [
179
+ {
180
+ name: "normal-command",
181
+ description: "Normal command",
182
+ body: "Normal body.",
183
+ sourcePath: "/tmp/plugin/commands/normal.md",
184
+ },
185
+ {
186
+ name: "disabled-command",
187
+ description: "Disabled command",
188
+ disableModelInvocation: true,
189
+ body: "Disabled body.",
190
+ sourcePath: "/tmp/plugin/commands/disabled.md",
191
+ },
192
+ ],
193
+ agents: [],
194
+ skills: [],
195
+ }
196
+
197
+ const bundle = convertClaudeToCodex(plugin, {
198
+ agentMode: "subagent",
199
+ inferTemperature: false,
200
+ permissions: "none",
201
+ })
202
+
203
+ // Only normal command should produce a prompt
204
+ expect(bundle.prompts).toHaveLength(1)
205
+ expect(bundle.prompts[0].name).toBe("normal-command")
206
+
207
+ // Only normal command should produce a generated skill
208
+ const commandSkills = bundle.generatedSkills.filter((s) => s.name === "normal-command" || s.name === "disabled-command")
209
+ expect(commandSkills).toHaveLength(1)
210
+ expect(commandSkills[0].name).toBe("normal-command")
211
+ })
212
+
175
213
  test("truncates generated skill descriptions to Codex limits and single line", () => {
176
214
  const longDescription = `Line one\nLine two ${"a".repeat(2000)}`
177
215
  const plugin: ClaudePlugin = {
@@ -168,4 +168,19 @@ describe("convertClaudeToOpenCode", () => {
168
168
  const parsed = parseFrontmatter(agentFile!.content)
169
169
  expect(parsed.data.mode).toBe("primary")
170
170
  })
171
+
172
+ test("excludes commands with disable-model-invocation from command map", async () => {
173
+ const plugin = await loadClaudePlugin(fixtureRoot)
174
+ const bundle = convertClaudeToOpenCode(plugin, {
175
+ agentMode: "subagent",
176
+ inferTemperature: false,
177
+ permissions: "none",
178
+ })
179
+
180
+ // deploy-docs has disable-model-invocation: true, should be excluded
181
+ expect(bundle.config.command?.["deploy-docs"]).toBeUndefined()
182
+
183
+ // Normal commands should still be present
184
+ expect(bundle.config.command?.["workflows:review"]).toBeDefined()
185
+ })
171
186
  })
@@ -0,0 +1,7 @@
1
+ ---
2
+ name: deploy-docs
3
+ description: Deploy documentation site
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ Deploy docs body.
@@ -0,0 +1,7 @@
1
+ ---
2
+ name: disabled-skill
3
+ description: A skill with model invocation disabled
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ Disabled skill body.