Diagnose your environment, install missing tools, and bootstrap project-local config — in one interactive flow.
ce-setup is the onboarding skill. It diagnoses what's installed, what's missing, what the plugin version is, what repo-local config exists, and offers guided installation for the missing pieces. Run it on first install, after upgrading the plugin, when troubleshooting why a skill claims a tool isn't available, or before onboarding a new repo to compound-engineering.
Beta-style explicit-invocation only (disable-model-invocation: true) — won't auto-fire.
| Question | Answer |
|---|---|
| What does it do? | Runs an environment diagnostic, presents missing tools/skills with install commands, bootstraps .compound-engineering/config.local.yaml, optionally adds a .gitignore entry |
| When to use it | First-time install, post-upgrade health check, "why does this skill say X isn't installed?", new repo onboarding |
| What it produces | Confirmed-installed report, or a guided install flow for missing tools, plus a bootstrapped local config |
| Status | Explicit-invocation only |
Compound-engineering relies on multiple external CLIs and per-repo config that's easy to skip:
- Tool dependencies —
agent-browser,gh,jq,vhs,silicon,ffmpeg,ast-grep— each install command is different and not all are obvious - Skill dependencies — some skills depend on other agent skills (e.g.,
ast-grepskill); knowing which ones are needed and where to install them is opaque - Plugin version drift — old installed plugin behaving differently from current docs; without checking, the user files bug reports against fixed bugs
- Per-repo config —
.compound-engineering/config.local.yamlfor machine-local settings; without bootstrapping, skills likece-product-pulseask the same questions every run - Stale legacy config —
compound-engineering.local.mdwas the old format; lingering files cause confusion - Gitignore gotchas —
.compound-engineering/config.local.yamlshould be gitignored (machine-local) but isn't always; the user accidentally commits secrets - Manual setup is tedious — installing 7 tools one at a time with the right command for each is friction
ce-setup runs setup as a structured diagnostic-then-fix flow:
- Phase 1: Diagnose — runs
bash scripts/check-healthonce; reports tool/skill installation status, plugin version, repo-local CE config state in one pass - Phase 2: Fix (only when issues exist):
- Resolve repo-local cleanup (delete obsolete
compound-engineering.local.mdif present) - Bootstrap
.compound-engineering/config.local.yaml(offer to create from template, offer.gitignoreentry) - Offer guided install for missing tools and skills (multiSelect, all pre-selected)
- Run install commands one at a time, verifying each before continuing
- Resolve repo-local cleanup (delete obsolete
- Final summary — report installed / skipped, and recommend
/ce-updateif Claude Code
The skill runs one check script that handles all CLI tools, agent skills, repo-local CE files, and .gitignore guidance. No manual per-tool checks, no repeated questioning. The output is a colored report ready to display to the user. If everything is installed, no repo-local cleanup needed, and the local config exists and is gitignored — the skill prints the success message and stops.
.compound-engineering/config.local.yaml is where machine-local settings live (which tools to use, how workflows behave, pulse settings). The skill:
- Always refreshes
.compound-engineering/config.local.example.yamlfrom the template (committed; a teammate-reference for available settings) - Creates
.compound-engineering/config.local.yamlonce if missing (gitignored; the actual local settings, all commented out — opt in only what's needed) - Offers to add
.compound-engineering/*.local.yamlto.gitignoreif not already covered
The split between example (committed) and local (gitignored) is the canonical pattern for machine-local config in a repo. Bootstrapping it means future skills don't have to.
When tools or skills are missing, the skill presents them as a multi-select with all items pre-selected. The user can deselect anything they don't want. Items are grouped under Tools: and Skills: so it's clear which runtime each targets. Already-installed items are omitted entirely.
After running each install command, the skill verifies the tool actually installed:
- For CLI tools:
command -v <tool> - For agent skills:
npx skills list --global --json | jq -r '.[].name' | grep -qx <skill-name>ifnpxavailable, else check~/.claude/skills/<skill-name>/~/.agents/skills/<skill-name>/~/.codex/skills/<skill-name>paths
If verification succeeds, success is reported. If it fails, the project URL is displayed as fallback and the skill continues to the next dependency rather than blocking.
The skill detects if the obsolete compound-engineering.local.md exists at the repo root. If so, it explains the file is obsolete (review-agent selection is now automatic, machine-local state moved to .compound-engineering/config.local.yaml) and asks whether to delete. The user controls the cleanup; the skill doesn't silently delete repo files.
The skill uses pre-resolution (! backtick at skill load) to capture ${CLAUDE_PLUGIN_ROOT}. If it resolves to an absolute path, this is Claude Code and the skill recommends /ce-update for upgrades. If it doesn't resolve (empty, literal token, or non-Claude harness), /ce-update references are omitted. No guessing at platform.
disable-model-invocation: true prevents the skill from auto-firing on prose mentions of "setup" or installation discussion. Setup is a deliberate user choice — invoke /ce-setup directly.
You just installed compound-engineering and want to verify everything's set up. You invoke /ce-setup.
The skill announces "Compound Engineering — checking your environment..." and runs bash scripts/check-health --version 3.4.1.
Diagnostic report:
Tools:
🟢 agent-browser 🟡 gh (not installed) 🟢 jq 🟡 vhs (not installed)
🟢 silicon 🟢 ffmpeg 🟡 ast-grep (not installed)
Skills:
🟡 ast-grep (not installed)
Config:
❌ .compound-engineering/config.local.yaml not found
The skill detects 3 missing tools, 1 missing skill, no local config. It walks through:
- Bootstrap config: "Set up a local config file for this project? (y/n)" — you say yes. Copies template to
.compound-engineering/config.local.yaml. Offers to add.compound-engineering/*.local.yamlto.gitignore— adds it. - Install missing tools: "Select which to install (all pre-selected): [x] gh, [x] vhs, [x] ast-grep, [x] ast-grep skill" — you keep all selected.
- For each: shows the install command, asks for approval, runs, verifies.
ghinstalls successfully via Homebrew.vhssucceeds.ast-grepsucceeds. Theast-grepskill installs vianpx skills add ....
Final summary:
✅ Compound Engineering setup complete
Installed: gh, vhs, ast-grep (CLI), ast-grep (skill)
Config: ✅
Run /ce-update to grab the latest plugin version.
Run /ce-setup anytime to re-check.
Reach for ce-setup when:
- You just installed compound-engineering for the first time
- You upgraded the plugin and want to confirm dependencies still match
- A skill complained "X is not installed" and you want to fix it
- You're onboarding a new repo and want to bootstrap
.compound-engineering/config.local.yaml - It's been a while since you checked and you want a health snapshot
Skip ce-setup when:
- You're not yet authenticated to package managers (it can't help with that)
- You only want to install one specific tool and know its command — direct install is faster
ce-setup is mostly standalone — it doesn't sit inside the chain. It's a setup utility:
- Called when other skills surface "X is not installed" errors and the user runs
ce-setupto fix - Called periodically as a health check
- Called before onboarding a new repo or new machine
After running, the user typically continues to /ce-update (Claude Code only) for plugin version checks, or to whichever skill they originally tried to run.
Direct invocation:
/ce-setup
The skill diagnoses, presents missing pieces with install commands, bootstraps config. No arguments, no flags — the diagnostic pass drives everything.
| Phase | Step |
|---|---|
| 1. Diagnose | Determine plugin version, run health check script, evaluate results |
| 2. Fix | Resolve repo-local issues (delete obsolete compound-engineering.local.md), bootstrap .compound-engineering/config.local.yaml, offer install for missing dependencies |
| Final | Summary report; recommend /ce-update if on Claude Code |
Required tools list (defaults; varies by repo): agent-browser, gh, jq, vhs, silicon, ffmpeg, ast-grep. Required skills: ast-grep (when present in repo's needs).
What's compound-engineering.local.md and why is it being deleted?
The old machine-local config format, replaced by .compound-engineering/config.local.yaml. The skill detects the obsolete file, explains, and asks before deleting. Review-agent selection is now automatic via ce-code-review; manual selection in compound-engineering.local.md no longer applies.
Why is .compound-engineering/config.local.yaml gitignored?
Because it carries machine-local settings (tool preferences, pulse configuration, etc.) that shouldn't pollute teammates' setups. The committed .compound-engineering/config.local.example.yaml shows what's available; each user opts in locally.
What if a tool installs but the verification fails? The skill displays the project URL as fallback and continues to the next dependency. Failed verification doesn't block the rest of the install pass.
Can I selectively skip tools I don't want? Yes. The multi-select pre-selects all missing items, but you can deselect anything before confirming. The skill installs only what's selected.
Why is it explicit-invocation only?
disable-model-invocation: true prevents auto-firing on prose mentions of "setup" or "install." Setup is a user-deliberate action — running it as a side-effect of asking about something else would be surprising.
Does it run on non-Claude-Code platforms?
Yes — the diagnostic and install flow work everywhere. The /ce-update recommendation at the end only appears on Claude Code (where the cache layout enables version detection); other platforms get the rest of the flow without that line.
/ce-update— check plugin version and recommend update command (Claude Code only)/ce-test-browser— depends onagent-browser, whichce-setupinstalls/ce-demo-reel— depends onvhs/silicon/ffmpeg, all installed byce-setup/ce-product-pulse— uses.compound-engineering/config.local.yamlthatce-setupbootstraps