Skip to content

Commit 9d4ecf1

Browse files
committed
Merge origin/main and address PR review feedback
Picks up the ce:* to ce- rename across the plugin plus the README/ workflow restructure from main. Conflict resolution (README.md, plugins/compound-engineering/README.md): - Adopted main's prose-first workflow structure - Inserted strategy and product-pulse rows - Applied reviewer-suggested intro rewrite to plugin README - Updated skill count to 37 Review feedback addressed (PR #614, @tmchow): - Swept all ce:* references in new skills to ce- dash form - Stripped leading / from cross-skill references for Codex compatibility - Moved pulse reports from ~/pulse-reports/ to docs/pulse-reports/ per reviewer - Added allowed-tools frontmatter to ce-product-pulse to trim context - Reframed read-only prose to be precise (skill writes own config and reports) - Made scheduling handoff cross-harness aware (in-plugin schedule skill optional) # Conflicts: # README.md # plugins/compound-engineering/README.md
2 parents cdb1664 + e5b397c commit 9d4ecf1

427 files changed

Lines changed: 29378 additions & 20208 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/plugins/marketplace.json

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"name": "compound-engineering-plugin",
3+
"interface": {
4+
"displayName": "Compound Engineering"
5+
},
6+
"plugins": [
7+
{
8+
"name": "compound-engineering",
9+
"source": {
10+
"source": "local",
11+
"path": "./plugins/compound-engineering"
12+
},
13+
"policy": {
14+
"installation": "AVAILABLE",
15+
"authentication": "ON_INSTALL"
16+
},
17+
"category": "Coding"
18+
},
19+
{
20+
"name": "coding-tutor",
21+
"source": {
22+
"source": "local",
23+
"path": "./plugins/coding-tutor"
24+
},
25+
"policy": {
26+
"installation": "AVAILABLE",
27+
"authentication": "ON_INSTALL"
28+
},
29+
"category": "Coding"
30+
}
31+
]
32+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Compound Engineering -- local config
2+
# Copy to .compound-engineering/config.local.yaml in your project root.
3+
# All settings are optional. Invalid values fall through to defaults.
4+
5+
# --- Work delegation (Codex) ---
6+
7+
# work_delegate: codex # codex | false (default: false)
8+
# work_delegate_consent: true # true | false (default: false)
9+
# work_delegate_sandbox: yolo # yolo | full-auto (default: yolo)
10+
# work_delegate_decision: auto # auto | ask (default: auto)
11+
# work_delegate_model: gpt-5.4 # any valid codex model (omit to use ~/.codex/config.toml default)
12+
# work_delegate_effort: high # minimal | low | medium | high | xhigh (omit to use ~/.codex/config.toml default)
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
2-
".": "2.68.0",
3-
"plugins/compound-engineering": "2.68.0",
4-
"plugins/coding-tutor": "1.2.1",
2+
".": "3.3.2",
3+
"plugins/compound-engineering": "3.3.2",
4+
"plugins/coding-tutor": "1.3.0",
55
".claude-plugin": "1.0.2",
66
".cursor-plugin": "1.0.1"
77
}

.github/release-please-config.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@
5656
"type": "json",
5757
"path": ".cursor-plugin/plugin.json",
5858
"jsonpath": "$.version"
59+
},
60+
{
61+
"type": "json",
62+
"path": ".codex-plugin/plugin.json",
63+
"jsonpath": "$.version"
5964
}
6065
]
6166
},
@@ -72,6 +77,11 @@
7277
"type": "json",
7378
"path": ".cursor-plugin/plugin.json",
7479
"jsonpath": "$.version"
80+
},
81+
{
82+
"type": "json",
83+
"path": ".codex-plugin/plugin.json",
84+
"jsonpath": "$.version"
7585
}
7686
]
7787
},

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,7 @@ todos/
66
.worktrees
77
.context/
88
.claude/worktrees/
9+
__pycache__/
10+
*.pyc
911

1012
.compound-engineering/*.local.yaml

AGENTS.md

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,23 @@ bun run release:validate # check plugin/marketplace consistency
2020
## Working Agreement
2121

2222
- **Branching:** Create a feature branch for any non-trivial change. If already on the correct branch for the task, keep using it; do not create additional branches or worktrees unless explicitly requested.
23+
- **Merge policy:** All changes to `main` go through pull requests. Direct pushes and direct merges are not allowed; branch protection on `main` enforces this by requiring the `test` status check to pass. The direct path bypasses `release:validate`, the test suite, and PR title validation — past direct merges have caused version drift requiring multi-PR recovery (see `docs/solutions/workflow/release-please-version-drift-recovery.md`).
2324
- **Safety:** Do not delete or overwrite user data. Avoid destructive commands.
2425
- **Testing:** Run `bun test` after changes that affect parsing, conversion, or output.
2526
- **Release versioning:** Releases are prepared by release automation, not normal feature PRs. The repo now has multiple release components (`cli`, `compound-engineering`, `coding-tutor`, `marketplace`). GitHub release PRs and GitHub Releases are the canonical release-notes surface for new releases; root `CHANGELOG.md` is only a pointer to that history. Use conventional titles such as `feat:` and `fix:` so release automation can classify change intent, but do not hand-bump release-owned versions or hand-author release notes in routine PRs.
2627
- **Linked versions (cli + compound-engineering):** The `linked-versions` release-please plugin keeps `cli` and `compound-engineering` at the same version. This is intentional -- it simplifies version tracking across the CLI and the plugin it ships. A consequence is that a release with only plugin changes will still bump the CLI version (and vice versa). The CLI changelog may also include commits that `exclude-paths` would normally filter, because `linked-versions` overrides exclusion logic when forcing a synced bump. This is a known upstream release-please limitation, not a misconfiguration. Do not flag linked-version bumps as unnecessary.
2728
- **Output Paths:** Keep OpenCode output at `opencode.json` and `.opencode/{agents,skills,plugins}`. For OpenCode, command go to `~/.config/opencode/commands/<name>.md`; `opencode.json` is deep-merged (never overwritten wholesale).
2829
- **Scratch Space:** Default to OS temp. Use `.context/` only when explicitly justified by the rules below.
2930
- **Default: OS temp** — covers most scratch, including per-run throwaway AND cross-invocation reusable, regardless of whether a repo is present or whether other skills may read the files. A stable OS-temp prefix handles cross-skill and cross-invocation coordination equally well as an in-repo path; repo-adjacency is rarely the relevant property.
30-
- **Per-run throwaway**: `mktemp -d -t <prefix>-XXXXXX` (OS handles cleanup). Use for files consumed once and discarded — captured screenshots, stitched GIFs, intermediate build outputs, recordings, delegation prompts/results, single-run checkpoints.
31-
- **Cross-invocation reusable**: stable path like `"${TMPDIR:-/tmp}/compound-engineering/<skill-name>/<run-id>/"`**not** `mktemp -d` — so later invocations of the same skill can discover sibling run-ids. Use for caches keyed by session, checkpoints meant to survive context compaction within a loose session, or any state where later runs of the same skill need to locate prior outputs.
31+
- **Per-run throwaway**: `mktemp -d -t <prefix>-XXXXXX` (OS handles cleanup). Use for files consumed once and discarded — captured screenshots, stitched GIFs, intermediate build outputs, recordings, delegation prompts/results, single-run checkpoints. The resulting path is opaque (on macOS it resolves under `$TMPDIR`/`/var/folders/...`) — that is appropriate for throwaway files users are not meant to access.
32+
- **Cross-invocation reusable**: stable path `/tmp/compound-engineering/<skill-name>/<run-id>/`**not** `mktemp -d` — so later invocations of the same skill can discover sibling run-ids. Use `/tmp` directly rather than `$TMPDIR` so paths stay accessible: `$TMPDIR` on macOS resolves to `/var/folders/64/.../T/`, which is hostile for users who want to inspect checkpoints, grep them, or copy them out. The per-user isolation `$TMPDIR` provides is not valuable for cross-invocation reusable scratch where users are the intended audience. Use for caches keyed by session, checkpoints meant to survive context compaction within a loose session, or any state where later runs of the same skill need to locate prior outputs.
3233
- **Exception: `.context/`** — use only when the artifact is genuinely bound to the CWD repo AND meets at least one of:
3334
- (a) **User-curated**: the user is expected to inspect, manipulate, or manually curate the artifact outside the skill (e.g., a per-repo TODO database, a per-spec optimization log that survives across sessions on the same checkout).
3435
- (b) **Repo+branch-inseparable**: the artifact's meaning is inseparable from this specific repo or branch (e.g., branch-specific resume state that a user expects to pick up again in the same checkout).
3536
- (c) **Path is core UX**: surfacing the artifact path back to the user is a core part of the skill's output and that path is easier to communicate as a repo-relative location than an OS-temp one.
3637
Namespace under `.context/compound-engineering/<workflow-or-skill-name>/`, add a per-run subdirectory when concurrent runs are plausible, and decide cleanup behavior per the artifact's lifecycle (per-run scratch clears on success; user-curated state persists). "Shared between skills" is not by itself sufficient — OS temp handles that equally well.
3738
- **Durable outputs** (plans, specs, learnings, docs, final deliverables) belong in `docs/` or another repo-tracked location, not in either scratch tier.
38-
- **Cross-platform note:** `"${TMPDIR:-/tmp}"` is the portable prefix — `$TMPDIR` resolves on macOS (per-user path in `/var/folders/`) and may be set on Linux; the `/tmp` fallback covers unset cases. `mktemp -d -t <prefix>-XXXXXX` works on macOS, Linux, and WSL. Skills authored here assume Unix-like shells; native Windows is not a current target.
39+
- **Cross-platform note:** `/tmp` is writable on macOS (symlink to `/private/tmp`), Linux, and WSL. `mktemp -d -t <prefix>-XXXXXX` also works on all three. Skills authored here assume Unix-like shells; native Windows is not a current target.
3940
- **Character encoding:**
4041
- **Identifiers** (file names, agent names, command names): ASCII only -- converters and regex patterns depend on it.
4142
- **Markdown tables:** Use pipe-delimited (`| col | col |`), never box-drawing characters.
@@ -70,6 +71,9 @@ When changing `plugins/compound-engineering/` content:
7071
- Do not hand-bump release-owned versions in plugin or marketplace manifests.
7172
- Do not hand-add release entries to `CHANGELOG.md` or treat it as the canonical source for new releases.
7273
- Run `bun run release:validate` if agents, commands, skills, MCP servers, or release-owned descriptions/counts may have changed.
74+
- When removing a skill, agent, or command, add its name to both cleanup registries so stale flat-install artifacts are swept on upgrade:
75+
- `STALE_SKILL_DIRS` / `STALE_AGENT_NAMES` / `STALE_PROMPT_FILES` in `src/utils/legacy-cleanup.ts`
76+
- `EXTRA_LEGACY_ARTIFACTS_BY_PLUGIN["compound-engineering"]` in `src/data/plugin-legacy-artifacts.ts`
7377

7478
Useful validation commands:
7579

@@ -79,6 +83,18 @@ cat .claude-plugin/marketplace.json | jq .
7983
cat plugins/compound-engineering/.claude-plugin/plugin.json | jq .
8084
```
8185

86+
## Validating Agent and Skill Changes
87+
88+
Behavioral changes to a plugin agent or skill (anything under `plugins/*/agents/` or `plugins/*/skills/`) need a different validation path than mechanical code changes, because of how Claude Code loads plugins.
89+
90+
- **Use the `skill-creator` skill to test changes.** Skill-creator is purpose-built for this: it spawns a generic subagent and injects the agent or skill content into the subagent's prompt at dispatch time, so each run reads the current source from disk. Invoke `/skill-creator` and use its eval workflow rather than reaching for ad-hoc workarounds.
91+
92+
- **Plugin agent and skill definitions both cache at session start.** Once a Claude Code session is open, dispatching a typed agent (e.g., `Agent({subagent_type: "compound-engineering:ce-session-historian"})`) runs the in-memory copy that was loaded when the session began. The same applies to skills: invoking `Skill ce-session-inventory` goes through the cached skill loader, so edits to skill scripts are also not tested via that path. File edits to either layer after session start do not propagate within the same session. Any iteration loop built around typed-agent dispatch or Skill-tool invocation in the same session is testing pre-edit content, not your changes.
93+
94+
- **Do NOT edit `~/.claude/plugins/cache/` or `~/.claude/plugins/marketplaces/` to try to force a reload.** Those paths are user machine state, not repo-managed. Modifying them does not reliably bypass the in-session cache (it didn't, in observed behavior), risks being silently overwritten by plugin updates, and is the wrong layer to test from. The skill-creator pattern is the proper approach; if you genuinely need fresh-loaded behavior of the typed-agent dispatch path, restart the Claude Code session — but skill-creator is preferred for fast iteration.
95+
96+
- **Mechanical changes do not have this restriction.** Skill scripts (e.g., `extract-metadata.py`), parser logic, conversion code, and anything `bun test` exercises always run the current source. The caching issue only affects LLM-driven agent or skill prose behavior dispatched through the plugin loader.
97+
8298
## Coding Conventions
8399

84100
- Prefer explicit mappings over implicit magic when converting between platforms.
@@ -89,8 +105,9 @@ cat plugins/compound-engineering/.claude-plugin/plugin.json | jq .
89105
## Commit Conventions
90106

91107
- **Prefix is based on intent, not file type.** Use conventional prefixes (`feat:`, `fix:`, `docs:`, `refactor:`, etc.) but classify by what the change does, not the file extension. Files under `plugins/*/skills/`, `plugins/*/agents/`, and `.claude-plugin/` are product code even though they are Markdown or JSON. Reserve `docs:` for files whose sole purpose is documentation (`README.md`, `docs/`, `CHANGELOG.md`).
108+
- **Type selection — classify by intent, not diff shape.** Where `fix:` and `feat:` could both seem to fit, default to `fix:`: a change that remedies broken or missing behavior is `fix:` even when implemented by adding code, and net additions do not turn a fix into a `feat:`. Reserve `feat:` for capabilities the user could not previously accomplish where nothing was broken. Other conventional types (`chore:`, `refactor:`, `docs:`, `perf:`, `test:`, `ci:`, `build:`, `style:`) remain primary when they describe the change more precisely than either. Heuristic: if a regression test you could write today would have failed *before* the change, it's `fix:`. The user may override this default for a specific change.
92109
- **Include a component scope.** The scope appears verbatim in the changelog. Pick the narrowest useful label: skill/agent name (`document-review`, `learnings-researcher`), plugin or CLI area (`coding-tutor`, `cli`), or shared area when cross-cutting (`review`, `research`, `converters`). Never use `compound-engineering` — it's the entire plugin and tells the reader nothing. Omit scope only when no single label adds clarity.
93-
- Breaking changes must be explicit with `!` or a breaking-change footer so release automation can classify them correctly.
110+
- **Never use `!` or a `BREAKING CHANGE:` footer without explicit user confirmation.** These markers trigger release-please's automatic major version bump — a decision the user may not want even when a change is technically breaking. If a change appears breaking, surface that to the user and let them decide whether to apply the marker.
94111

95112
## Adding a New Target Provider
96113

@@ -120,13 +137,11 @@ Only add a provider when the target format is stable, documented, and has a clea
120137

121138
## Agent References in Skills
122139

123-
When referencing agents from within skill SKILL.md files (e.g., via the `Agent` or `Task` tool), always use the **fully-qualified namespace**: `compound-engineering:<category>:<agent-name>`. Never use the short agent name alone.
140+
When referencing agents from within skill SKILL.md files (e.g., via the `Agent` or `Task` tool), use the bare `ce-<agent-name>` form. The `ce-` prefix identifies the agent as a compound-engineering component and is sufficient for uniqueness across plugins.
124141

125142
Example:
126-
- `compound-engineering:research:learnings-researcher` (correct)
127-
- `learnings-researcher` (wrong - will fail to resolve at runtime)
128-
129-
This prevents resolution failures when the plugin is installed alongside other plugins that may define agents with the same short name.
143+
- `ce-learnings-researcher` (correct)
144+
- `learnings-researcher` (wrong — the `ce-` prefix is required; it's what prevents collisions with agents from other plugins that might share a short name)
130145

131146
## File References in Skills
132147

@@ -170,7 +185,7 @@ This applies equally to any platform's variables — a skill converted from Code
170185

171186
- **Requirements** live in `docs/brainstorms/` — requirements exploration and ideation.
172187
- **Plans** live in `docs/plans/` — implementation plans and progress tracking.
173-
- **Solutions** live in `docs/solutions/` — documented decisions and patterns.
188+
- **Solutions** live in `docs/solutions/` — documented solutions to past problems (bugs, best practices, workflow patterns), organized by category with YAML frontmatter (`module`, `tags`, `problem_type`). Relevant when implementing or debugging in documented areas.
174189
- **Specs** live in `docs/specs/` — target platform format specifications.
175190

176191
### Solution categories (`docs/solutions/`)

0 commit comments

Comments
 (0)