Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .last-processed
Original file line number Diff line number Diff line change
@@ -1 +1 @@
compound-engineering-v3.12.0
compound-engineering-v3.13.0
4 changes: 2 additions & 2 deletions dist/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ce-lite",
"version": "3.12.0-lite",
"version": "3.13.0-lite",
"description": "Lightweight-delegation variant of compound-engineering. Agent registrations removed; specialist prompts loaded on demand from references/agent-prompts/. See https://github.com/ak2k/ce-lite.",
"author": {
"name": "Kieran Klaassen",
Expand All @@ -23,6 +23,6 @@
"image-generation"
],
"ce_lite": {
"upstream_tag": "compound-engineering-v3.12.0"
"upstream_tag": "compound-engineering-v3.13.0"
}
}
2 changes: 1 addition & 1 deletion dist/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "compound-engineering",
"version": "3.12.0",
"version": "3.13.0",
"description": "AI-powered development tools for code review, research, design, and workflow automation.",
"author": {
"name": "Kieran Klaassen",
Expand Down
2 changes: 1 addition & 1 deletion dist/.cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "compound-engineering",
"displayName": "Compound Engineering",
"version": "3.12.0",
"version": "3.13.0",
"description": "AI-powered development tools for code review, research, design, and workflow automation.",
"author": {
"name": "Kieran Klaassen",
Expand Down
29 changes: 17 additions & 12 deletions dist/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -207,9 +207,9 @@ Design rules for blocking question menus (`AskUserQuestion` / `request_user_inpu

### Script Path References in Skills

- [ ] In bash code blocks, reference co-located scripts using relative paths (e.g., `bash scripts/my-script ARG`) — not `${CLAUDE_PLUGIN_ROOT}` or other platform-specific variables
- [ ] All platforms resolve script paths relative to the skill's directory; no env var prefix is needed
- [ ] Reference the script with a backtick path (e.g., `` `scripts/my-script` ``) so agents can locate it; a markdown link is not needed since the bash code block already provides the invocation
- [ ] In bash code blocks, build co-located script paths from `${CLAUDE_SKILL_DIR}` — never a bare relative path and never `${CLAUDE_PLUGIN_ROOT}`. The runtime Bash tool runs from the user's project CWD, not the skill directory, so a bare `bash scripts/my-script` resolves against `<project>/scripts/` and fails — the recurring bug class behind #764, #811, #898, and #943.
- [ ] `${CLAUDE_SKILL_DIR}` resolves only on Claude Code; on other targets — including the **native Codex plugin install**, which loads `SKILL.md` verbatim and ignores `ce_platforms` — it is unset, so the bundled script is not found there. The bare `${CLAUDE_SKILL_DIR:-.}` shell default silently runs a non-existent `./scripts/…` path off-Claude rather than failing visibly. For an **optional guard script**, prefer an existence guard `if [ -n "${CLAUDE_SKILL_DIR}" ] && [ -f "${CLAUDE_SKILL_DIR}/scripts/x" ]; then ... ; else <inline fallback>; fi` so the protection still runs off-Claude (e.g. `ce-compound`). For a skill whose core behavior *is* a bundled script, do not gate that behavior on a runtime bundled-script call when portability matters — see root `AGENTS.md` > *Platform-Specific Variables in Skills*, issue #943, and "Permission gate on extracted scripts" under *Tool Selection in Agents and Skills* below.
- [ ] Reference the script with a backtick *read-time* path (e.g., `` `scripts/my-script` ``) so agents can locate it to read it — read-time references do resolve against the skill directory on all platforms; a markdown link is not needed since the bash code block already provides the invocation

### Cross-Platform Reference Rules

Expand Down Expand Up @@ -274,17 +274,22 @@ When dispatching sub-agents, **omit the `mode` parameter** on the Agent/Task too

Plugin config lives at `.compound-engineering/config.local.yaml` in the repo root. This file is gitignored (machine-local settings), which creates two gotchas:

1. **Path resolution:** Never read the config relative to CWD — the user may invoke a skill from a subdirectory. Always resolve from the repo root. In pre-resolution commands, use `git rev-parse --show-toplevel` to find the root.
1. **Path resolution:** Never read the config relative to CWD — the user may invoke a skill from a subdirectory. Always resolve from the repo root using `git rev-parse --show-toplevel`.

2. **Worktrees:** Gitignored files are per-worktree. A config file created in the main checkout does not exist in worktrees. Use `--show-toplevel` to find the root:
```
!`cat "$(git rev-parse --show-toplevel 2>/dev/null)/.compound-engineering/config.local.yaml" 2>/dev/null || echo '__NO_CONFIG__'`
```
Outside a git repo, `git rev-parse` emits empty and `cat "/.compound-engineering/config.local.yaml"` fails (permission denied or not found, suppressed by `2>/dev/null`), so the `__NO_CONFIG__` sentinel fires. Note: the previous pattern used `(top=$(...); [ -n "$top" ] && cat "$top/...")` with a semicolon to guard the empty-root case, but `;` is rejected by Claude Code's safety checker as `Unhandled node type: ;` (see Pre-resolution exception above) and must not be used in `!` pre-resolution.
2. **Worktrees:** Gitignored files are per-worktree. A config file created in the main checkout does not exist in worktrees. `--show-toplevel` returns the current worktree path, so config from the main checkout is not found from a worktree. This is acceptable — config is optional and users who work from worktrees can add a config file there.

Note: in a worktree, `--show-toplevel` returns the worktree path, so config from the main checkout will not be found. This is acceptable — config is optional and users who work from worktrees can add a config file there. A previous pattern used `git-common-dir` with `${common%/.git}` to derive the main repo root as a fallback, but bash parameter expansion operators are rejected as "Contains expansion" (see Pre-resolution exception above), so that approach is no longer viable without a script.
**Blessed pattern — pre-resolve only the repo root, then read the file in the skill body:**
```
!`git rev-parse --show-toplevel 2>/dev/null || true`
```
In the skill body: if the pre-resolved line is an absolute path, use it as `<repo-root>`; if it is empty or still shows a backtick command string, resolve `<repo-root>` at runtime by running `git rev-parse --show-toplevel` with the shell tool, then read `<repo-root>/.compound-engineering/config.local.yaml` with the native file-read tool (Read in Claude Code, read_file in Codex). The runtime fallback is load-bearing: `!` pre-resolution is Claude-Code-only and is **not** translated by the converters (`transformContentForCodex` and the other target writers copy `!`cmd`` through as literal text), so on Codex/Gemini/Pi/OpenCode the line is unresolved and the agent must derive the root itself — otherwise config is silently ignored on every non-Claude platform. Only when the root cannot be resolved (not a git repo) or the file is missing is it "no config" → fall through to defaults; never fail or block on missing config. (This mirrors the `ce-sessions` pre-resolution fallback.)

**Do NOT read the config contents inside the `!` pre-resolution itself.** Two earlier forms are now rejected and enforced against by `tests/skill-shell-safety.test.ts`:

- `` !`cat "$(git rev-parse --show-toplevel 2>/dev/null)/.compound-engineering/config.local.yaml" 2>/dev/null || echo '__NO_CONFIG__'` `` aborts skill load on environments whose permission checker rejects `$()` command substitution (reported on Windows / CC 2.1.63 in issue #920).
- The `(top=$(...); cat "$top/...")` subshell variant is worse: `;` is rejected as `Unhandled node type: ;` (issue #758), even inside a subshell.

If neither path has the file, fall through to defaults — never fail or block on missing config.
The blessed pattern sidesteps both: a bare `git rev-parse` first token has no `$()`, no `;`, and matches common allow rules, while the config contents are read with a native tool at runtime (no skill-load checker involved). A previous worktree fallback that derived the main repo root via `git-common-dir` with `${common%/.git}` is also unavailable — parameter expansion operators are rejected as "Contains expansion" (see Pre-resolution exception above).

### Quick Validation Command

Expand All @@ -303,7 +308,7 @@ grep -E '^description:' skills/*/SKILL.md

### Adding a New Plugin to This Repo

When adding a new plugin alongside `compound-engineering` and `coding-tutor`, the repo ships to three marketplace formats (Claude, Cursor, Codex). All three must stay in parity or `bun run release:validate` will fail on next run. Checklist:
When adding a new plugin alongside `compound-engineering`, the repo ships to three marketplace formats (Claude, Cursor, Codex). All three must stay in parity or `bun run release:validate` will fail on next run. Checklist:

- [ ] `.claude-plugin/marketplace.json` — add the plugin to `plugins[]`
- [ ] `.cursor-plugin/marketplace.json` — add the plugin to `plugins[]`
Expand Down
19 changes: 19 additions & 0 deletions dist/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,25 @@ All notable changes to the compound-engineering plugin will be documented in thi
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [3.13.0](https://github.com/EveryInc/compound-engineering-plugin/compare/compound-engineering-v3.12.0...compound-engineering-v3.13.0) (2026-06-15)


### Features

* **ce-brainstorm:** grounding scout, claim verifier, tiered dispatch ([#927](https://github.com/EveryInc/compound-engineering-plugin/issues/927)) ([4fc24ee](https://github.com/EveryInc/compound-engineering-plugin/commit/4fc24eeb2c4cfc521e66fd18ee1c28c57e962955))
* **ce-code-review:** add thematic triage grouping ([#845](https://github.com/EveryInc/compound-engineering-plugin/issues/845)) ([8092abe](https://github.com/EveryInc/compound-engineering-plugin/commit/8092abead5ab04355f55fb5ccddedfffd28c8901))
* **ce-ideate:** distill user-supplied research files into dossiers ([#931](https://github.com/EveryInc/compound-engineering-plugin/issues/931)) ([a82a358](https://github.com/EveryInc/compound-engineering-plugin/commit/a82a358050bf44781c8f84f9b110702648fff27b))
* **ce-ideate:** improve for Fable model ([#924](https://github.com/EveryInc/compound-engineering-plugin/issues/924)) ([622fbfa](https://github.com/EveryInc/compound-engineering-plugin/commit/622fbfa60de346101e3177af243c79430b189a42))


### Bug Fixes

* **ce-compound:** guard validate-frontmatter.py on non-Claude platforms ([#947](https://github.com/EveryInc/compound-engineering-plugin/issues/947)) ([5e6ecca](https://github.com/EveryInc/compound-engineering-plugin/commit/5e6eccabb10e46fb2c149d06f82c4f46299e44b5))
* **ce-compound:** resolve validate-frontmatter.py against skill dir, not project root ([#935](https://github.com/EveryInc/compound-engineering-plugin/issues/935)) ([6d73857](https://github.com/EveryInc/compound-engineering-plugin/commit/6d738573e8003cd3e93e3d4d9347c955feca8bd2))
* **ce-worktree:** replace bundled-script creator with a portable isolation guardrail ([#948](https://github.com/EveryInc/compound-engineering-plugin/issues/948)) ([3437de3](https://github.com/EveryInc/compound-engineering-plugin/commit/3437de3049ea975bceec2688940d696e16cc5f87))
* **config-read:** read config via native tool, not $() pre-resolution ([#942](https://github.com/EveryInc/compound-engineering-plugin/issues/942)) ([0757e85](https://github.com/EveryInc/compound-engineering-plugin/commit/0757e859d21e860a1fc0424bfcbbb35a1e597771))
* **skills:** enforce content conventions in CI and fix violations ([#930](https://github.com/EveryInc/compound-engineering-plugin/issues/930)) ([c8e7d90](https://github.com/EveryInc/compound-engineering-plugin/commit/c8e7d908fa7e230dc8723639ea48498e3e499f3c))

## [3.12.0](https://github.com/EveryInc/compound-engineering-plugin/compare/compound-engineering-v3.11.2...compound-engineering-v3.12.0) (2026-06-09)


Expand Down
2 changes: 1 addition & 1 deletion dist/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ The primary entry points for engineering work, invoked as slash commands. Detail
| [`ce-clean-gone-branches`](../../docs/skills/ce-clean-gone-branches.md) | Clean up local branches whose remote tracking branch is gone |
| [`ce-commit`](../../docs/skills/ce-commit.md) | Create a git commit with a value-communicating message |
| [`ce-commit-push-pr`](../../docs/skills/ce-commit-push-pr.md) | Commit, push, and open a PR with an adaptive description; also update an existing PR description, or generate a description on its own without committing |
| [`ce-worktree`](../../docs/skills/ce-worktree.md) | Manage Git worktrees for parallel development |
| [`ce-worktree`](../../docs/skills/ce-worktree.md) | Ensure work happens in an isolated git worktree — detect existing isolation, prefer native worktree tooling, else create one |

### Workflow Utilities

Expand Down
2 changes: 1 addition & 1 deletion dist/references/agent-prompts/manifest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"schema_version": 1,
"upstream_tag": "compound-engineering-v3.12.0",
"upstream_tag": "compound-engineering-v3.13.0",
"agent_count": 43,
"agents": [
{
Expand Down
Loading