mirror of
https://github.com/EveryInc/compound-engineering-plugin.git
synced 2026-10-15 06:49:21 +02:00
Skills read `.compound-engineering/config.local.yaml` with a `!` pre-resolution command that embeds `$()` command substitution. On environments whose skill-load permission checker rejects `$()` (reported on Windows / Claude Code 2.1.63 in issue #920), this aborts skill load before the body runs, making the skill unusable. Pre-resolve only the repo root (`!`git rev-parse --show-toplevel 2>/dev/null || true``, which has no `$()` or `;`), then read the config file with the native file-read tool in the skill body. Applied to ce-plan, ce-brainstorm, ce-ideate, ce-work-beta, and ce-product-pulse. This matches the existing ce-sessions root-pre-resolution pattern and aligns with the "prefer native tools" rule. Cross-platform: `!` pre-resolution is Claude-Code-only and is not translated by the converters, so on Codex/Gemini/Pi/OpenCode the line is literal text. The skill body therefore falls back to resolving the repo root at runtime (`git rev-parse --show-toplevel` via the shell tool) when the pre-resolved value is empty or an unresolved command string, so config loads on every platform instead of silently defaulting outside Claude. Also add a `;`-separator enforcement test to skill-shell-safety.test.ts: the suite had no semicolon check, so the `Unhandled node type: ;` regression from PR #934 (a reintroduction of issue #758) would have passed CI. Fix a false-positive in the pre-resolution extractor that scanned inline-code prose as a command. Update plugins/compound-engineering/AGENTS.md to bless the new pattern and document the converter behavior and runtime fallback. Closes #920