Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
f79f5b9
feat(commands): add /compound-engineering-setup for configurable agents
kieranklaassen Jan 26, 2026
304c58d
feat: auto-trigger setup when no config exists
kieranklaassen Jan 26, 2026
898604c
feat(review): wire all conditionalAgents categories
kieranklaassen Jan 26, 2026
246823a
chore: mark todo #001 as complete
kieranklaassen Jan 26, 2026
b7db6e7
feat(setup): add custom agent discovery and modify flow
kieranklaassen Jan 26, 2026
a1413c9
chore: remove completed todos directory
kieranklaassen Jan 26, 2026
045c279
[2.29.1] Improve /workflows:brainstorm question flow
kieranklaassen Jan 28, 2026
cfc7120
Merge main into feat/compound-engineering-setup
kieranklaassen Feb 9, 2026
bc29af1
Simplify plugin settings: replace 486-line wizard with .local.md pattern
kieranklaassen Feb 9, 2026
dad6b4b
Rewrite .claude/ paths for OpenCode/Codex targets, add npm publish wo…
kieranklaassen Feb 9, 2026
c781dcb
feat(workflows-work): require post-deploy monitoring section
kieranklaassen Feb 10, 2026
2dd3e53
Add learnings-researcher to review workflow, fix docs site counts
kieranklaassen Feb 12, 2026
7feea6f
Move /release-docs to local .claude/commands/, bump to 2.32.2
kieranklaassen Feb 12, 2026
f5fb9a6
Merge main into feat/compound-engineering-setup
kieranklaassen Feb 12, 2026
d0d6c04
Move settings to project root: compound-engineering.local.md
kieranklaassen Feb 12, 2026
e8c5a7d
Make /compound-engineering-setup interactive with auto-detect fast path
kieranklaassen Feb 12, 2026
532d041
Replace /compound-engineering-setup command with setup skill
kieranklaassen Feb 12, 2026
be091a9
Prepare v2.33.0 release: setup skill, configurable review agents
kieranklaassen Feb 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
"plugins": [
{
"name": "compound-engineering",
"description": "AI-powered development tools that get smarter with every use. Make each unit of engineering work easier than the last. Includes 29 specialized agents, 24 commands, and 18 skills.",
"version": "2.31.0",
"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.",
"version": "2.33.0",
"author": {
"name": "Kieran Klaassen",
"url": "https://github.com/kieranklaassen",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
name: release-docs
description: Build and update the documentation site with current plugin components
argument-hint: "[optional: --dry-run to preview changes without writing]"
disable-model-invocation: true
---

# Release Documentation Command
Expand Down
26 changes: 13 additions & 13 deletions docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@
<head>
<meta charset="utf-8" />
<title>Compounding Engineering - AI-Powered Development Tools for Claude Code</title>
<meta content="Your code reviews just got 12 expert opinions in 30 seconds. 28 specialized agents, 24 workflow commands, and 15 skills that make today's work easier than yesterday's." name="description" />
<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" />
<meta content="width=device-width, initial-scale=1" name="viewport" />

<!-- Open Graph -->
<meta property="og:type" content="website" />
<meta property="og:site_name" content="Compounding Engineering" />
<meta property="og:locale" content="en_US" />
<meta property="og:title" content="Compounding Engineering - AI Development Tools" />
<meta property="og:description" content="Get 12 expert code reviews in 30 seconds. 28 specialized agents that make today's work easier than yesterday's." />
<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." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Compounding Engineering" />
<meta name="twitter:description" content="12 expert code reviews in 30 seconds. Make today's work easier than yesterday's." />
Expand Down Expand Up @@ -155,13 +155,13 @@
<div class="hero-decoration"></div>
<div class="heading hero centered">
<a href="https://github.com/EveryInc/compound-engineering-plugin/releases" class="eyebrow">
<i class="fa-solid fa-rocket"></i> Version 2.28.0 released!
<i class="fa-solid fa-rocket"></i> Version 2.32.2 released!
</a>
<h1 class="balanced" style="margin-bottom: 32px;">
Your Code Reviews Just Got 12 Expert Opinions. In 30 Seconds.
</h1>
<p class="paragraph m secondary balanced" style="margin-bottom: 32px;">
Here's what happened when we shipped yesterday: security audit, performance analysis, architectural review, pattern detection, and eight more specialized checks—all running in parallel. No meetings. No waiting. Just answers. That's compounding engineering: 28 specialized agents, 24 workflow commands, and 15 skills that make today's work easier than yesterday's.
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.
</p>
<div class="button-group margin-paragraph centered">
<a href="#install" class="button primary">
Expand All @@ -179,17 +179,17 @@ <h1 class="balanced" style="margin-bottom: 32px;">
<div class="stats-container">
<div class="stat-card">
<div class="stat-icon"><i class="fa-solid fa-users-gear"></i></div>
<div class="stat-number">28</div>
<div class="stat-number">29</div>
<div class="stat-label">Specialized Agents</div>
</div>
<div class="stat-card">
<div class="stat-icon"><i class="fa-solid fa-terminal"></i></div>
<div class="stat-number">24</div>
<div class="stat-number">23</div>
<div class="stat-label">Slash Commands</div>
</div>
<div class="stat-card">
<div class="stat-icon"><i class="fa-solid fa-wand-magic-sparkles"></i></div>
<div class="stat-number">15</div>
<div class="stat-number">18</div>
<div class="stat-label">Intelligent Skills</div>
</div>
<div class="stat-card">
Expand Down Expand Up @@ -244,7 +244,7 @@ <h3>Delegate</h3>
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.
</p>
<div class="pillar-tools">
<span class="tool-tag">27 specialized agents</span>
<span class="tool-tag">29 specialized agents</span>
<span class="tool-tag">/work</span>
<span class="tool-tag">dhh-rails-style skill</span>
<span class="tool-tag">git-worktree skill</span>
Expand Down Expand Up @@ -292,7 +292,7 @@ <h3>Compound</h3>
<section id="agents">
<div class="heading">
<h2 class="no-top-margin">
<i class="fa-solid fa-users-gear color-accent"></i> 27 Specialized Agents
<i class="fa-solid fa-users-gear color-accent"></i> 29 Specialized Agents
</h2>
<p class="paragraph m secondary">
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.
Expand Down Expand Up @@ -531,7 +531,7 @@ <h3><i class="fa-solid fa-file-lines"></i> Documentation Agent (1)</h3>
<section id="commands">
<div class="heading">
<h2 class="no-top-margin">
<i class="fa-solid fa-terminal color-accent"></i> 19 Powerful Commands
<i class="fa-solid fa-terminal color-accent"></i> 23 Powerful Commands
</h2>
<p class="paragraph m secondary">
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.
Expand Down Expand Up @@ -683,7 +683,7 @@ <h3><i class="fa-solid fa-wrench"></i> Utility Commands</h3>
<section id="skills">
<div class="heading">
<h2 class="no-top-margin">
<i class="fa-solid fa-wand-magic-sparkles color-accent"></i> 12 Intelligent Skills
<i class="fa-solid fa-wand-magic-sparkles color-accent"></i> 18 Intelligent Skills
</h2>
<p class="paragraph m secondary">
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.
Expand Down Expand Up @@ -825,7 +825,7 @@ <h3><i class="fa-solid fa-image"></i> Image Generation</h3>
<section id="mcp-servers">
<div class="heading">
<h2 class="no-top-margin">
<i class="fa-solid fa-server color-accent"></i> Two MCP Servers
<i class="fa-solid fa-server color-accent"></i> 1 MCP Server
</h2>
<p class="paragraph m secondary">
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.
Expand Down Expand Up @@ -989,7 +989,7 @@ <h2 class="no-top-margin">Frequently Asked Questions</h2>
<span class="cta-badge"><i class="fa-solid fa-bolt"></i> Free & Open Source</span>
<h2>Install Once. Compound Forever.</h2>
<p class="paragraph m cta-subheading">
<strong>Your next code review takes 30 seconds.</strong> The one after that? Even faster. That's compounding. Get 27 expert agents, 19 workflow commands, and 12 specialized skills working for you right now.
<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.
</p>
<div class="button-group margin-paragraph centered">
<a href="#install" class="button primary cta-primary">
Expand Down
39 changes: 39 additions & 0 deletions docs/pages/changelog.html
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ <h3>Resources</h3>
<div class="nav-section">
<h3>On This Page</h3>
<ul>
<li><a href="#v2.32.2">v2.32.2</a></li>
<li><a href="#v2.32.1">v2.32.1</a></li>
<li><a href="#v2.6.0">v2.6.0</a></li>
<li><a href="#v2.5.0">v2.5.0</a></li>
<li><a href="#v2.4.1">v2.4.1</a></li>
Expand Down Expand Up @@ -86,6 +88,43 @@ <h1><i class="fa-solid fa-clock-rotate-left color-accent"></i> Changelog</h1>
<a href="https://keepachangelog.com/">Keep a Changelog</a> conventions.
</p>

<!-- Version 2.32.2 -->
<section id="v2.32.2" class="version-section">
<div class="version-header">
<h2>v2.32.2</h2>
<span class="version-date">2026-02-12</span>
</div>

<div class="changelog-category changed">
<h3><i class="fa-solid fa-arrows-rotate"></i> Changed</h3>
<ul>
<li>
<strong><code>/release-docs</code> command moved from plugin to local <code>.claude/commands/</code></strong> -
This is a repository maintenance command and should not be distributed to users. Command count reduced from 24 to 23.
</li>
</ul>
</div>
</section>

<!-- Version 2.32.1 -->
<section id="v2.32.1" class="version-section">
<div class="version-header">
<h2>v2.32.1</h2>
<span class="version-date">2026-02-12</span>
</div>

<div class="changelog-category changed">
<h3><i class="fa-solid fa-arrows-rotate"></i> Changed</h3>
<ul>
<li>
<strong><code>/workflows:review</code> command</strong> - Added <code>learnings-researcher</code>
agent to the parallel review phase. The review now searches <code>docs/solutions/</code> for past
issues related to the PR's modules and patterns, surfacing "Known Pattern" findings during synthesis.
</li>
</ul>
</div>
</section>

<!-- Version 2.6.0 -->
<section id="v2.6.0" class="version-section">
<div class="version-header">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
---
title: Convert .local.md Settings for OpenCode and Codex
type: feat
date: 2026-02-08
---

# Convert .local.md Settings for OpenCode and Codex

## Overview

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.

The question: can OpenCode and Codex support this same pattern? And what does the converter need to do?

## Analysis: What `.local.md` Actually Does

The settings file does two things:

1. **YAML frontmatter** with structured config: `review_agents: [list]`, `plan_review_agents: [list]`
2. **Markdown body** with free-text instructions passed to review agents as context

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."

## Key Insight: This Already Works

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:

- **OpenCode**: The command template includes the full body. The AI reads it, follows the instructions, reads the settings file.
- **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.

**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.

## What Needs Attention

### 1. Setup Command Has `disable-model-invocation: true`

`setup.md` has `disable-model-invocation: true`. The converter already handles this correctly:

- **OpenCode** (`claude-to-opencode.ts:117`): Skips commands with `disableModelInvocation`
- **Codex** (`claude-to-codex.ts:22`): Filters them out of prompts and generated skills

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.

### 2. The `.local.md` File Path Is Claude-Specific

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.

### 3. Slash Command References in Config-Aware Sections

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.

### 4. `Task {agent-name}(...)` Syntax in Review Commands

`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.

## Proposed Solution

### Phase 1: Add Settings File Path Rewriting to Converters

Both converters should rewrite `.claude/` paths inside command bodies to the target-appropriate directory.

**File:** `src/converters/claude-to-opencode.ts`

Add a `transformContentForOpenCode(body)` function that replaces:
- `.claude/compound-engineering.local.md` → `.opencode/compound-engineering.local.md`
- `~/.claude/compound-engineering.local.md` → `~/.config/opencode/compound-engineering.local.md`

Apply it in `convertCommands()` to the command body before storing as template.

**File:** `src/converters/claude-to-codex.ts`

Extend `transformContentForCodex(body)` to also replace:
- `.claude/compound-engineering.local.md` → `.codex/compound-engineering.local.md`
- `~/.claude/compound-engineering.local.md` → `~/.codex/compound-engineering.local.md`

### Phase 2: Generate Setup Equivalent for Each Target

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.

**Option A: Include setup as a non-auto-invocable command anyway** (recommended)

Change the converters to include `disable-model-invocation` commands but mark them appropriately:
- **OpenCode**: Include in command map but add a `manual: true` flag or comment
- **Codex**: Include as a prompt (user can still invoke it manually via `/prompts:compound-engineering-setup`)

This is the simplest approach — the setup instructions are useful even if not auto-triggered.

**Option B: Generate a README/instructions file**

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.

**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.

### Phase 3: Update Tests

**File:** `tests/converter.test.ts`

- Add test that `.claude/` paths in command bodies are rewritten to `.opencode/` paths
- Update existing `disable-model-invocation` test to verify the command IS included (if Option A)

**File:** `tests/codex-converter.test.ts`

- Add test that `.claude/` paths are rewritten to `.codex/` paths
- Add test that setup command is included as a prompt (if Option A)
- Add test that slash command references to setup are preserved correctly

### Phase 4: Add Fixture for Settings-Aware Command

**File:** `tests/fixtures/sample-plugin/commands/settings-aware-command.md`

```markdown
---
name: workflows:review
description: Run comprehensive code reviews
---

Read `.claude/compound-engineering.local.md` for agent config.
If not found, use defaults.
Run `/compound-engineering-setup` to create settings.
```

Test that the converter rewrites the paths and command references correctly.

## Acceptance Criteria

- [ ] OpenCode converter rewrites `.claude/` → `.opencode/` in command bodies
- [ ] Codex converter rewrites `.claude/` → `.codex/` in command/skill bodies
- [ ] Global path `~/.claude/` rewritten to target-appropriate global path
- [ ] `disable-model-invocation` commands are included (not filtered) in both targets
- [ ] Tests cover path rewriting for both targets
- [ ] Tests cover setup command inclusion
- [ ] Existing tests still pass

## What We're NOT Doing

- Not bundling the `.local.md` file itself (it's user-created per-project)
- Not converting YAML frontmatter format (both targets can read `.md` files with YAML)
- Not adding target-specific setup wizards (the instructions in the command body work across all targets)
- Not rewriting `AskUserQuestion` tool references (all three platforms support equivalent interactive tools)

## Complexity Assessment

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.
Loading