abhigyanpatwari/GitNexus · error · SandboxError
Compound Engineering plugin is missing required skill: {skil
Error message
Compound Engineering plugin is missing required skill: {skill} What it means
Required-skill guard. After manifest identity is confirmed, the harness checks that each of ce-plan, ce-work, ce-code-review has a regular file at skills/<skill>/SKILL.md inside the staged root. Missing any one rejects the plugin, because the CE comparator must exercise all three skills for a valid comparison.
Source
Thrown at eval/workflow_bench/runtime_mounts.py:463
"executable": executable,
}
)
manifest_path = root / ".claude-plugin" / "plugin.json"
try:
plugin_manifest = json.loads(manifest_path.read_text())
except (OSError, UnicodeError, json.JSONDecodeError) as exc:
raise SandboxError(f"Compound Engineering plugin manifest is invalid: {exc}") from exc
if not isinstance(plugin_manifest, dict) or plugin_manifest.get("name") != "compound-engineering":
raise SandboxError("CE comparator requires the compound-engineering plugin manifest")
if plugin_manifest.get("version") != config.version:
raise SandboxError(
"Compound Engineering plugin version mismatch: "
f"expected {config.version}, got {plugin_manifest.get('version')!r}"
)
for skill in ("ce-plan", "ce-work", "ce-code-review"):
if not (root / "skills" / skill / "SKILL.md").is_file():
raise SandboxError(f"Compound Engineering plugin is missing required skill: {skill}")
canonical_manifest = json.dumps(
{
"schema_version": CE_PLUGIN_MANIFEST_SCHEMA_VERSION,
"files": entries,
},
sort_keys=True,
separators=(",", ":"),
).encode()
snapshot = CePluginSnapshot(
root=root,
version=config.version,
manifest_digest=hashlib.sha256(canonical_manifest).hexdigest(),
file_count=len(entries),
total_bytes=total_bytes,
)
_freeze_snapshot(root)
return snapshotView on GitHub (pinned to d540b00184)
Solutions
- Verify each required file: 'for s in ce-plan ce-work ce-code-review; do test -f <plugin_dir>/skills/$s/SKILL.md || echo MISSING $s; done'.
- Restore the missing skill from the canonical plugin repo at the matching version tag.
- Ensure the release/archive step includes skills/*/SKILL.md (check it is not git-ignored or stripped by a bundler).
- Confirm SKILL.md is a regular file, not a directory or symlink.
Example fix
# before: only ce-plan and ce-work shipped find ce-plugin/skills -maxdepth 2 -name SKILL.md # skills/ce-plan/SKILL.md # skills/ce-work/SKILL.md # after: restore the missing skill git -C ce-plugin checkout v1.3.0 -- skills/ce-code-review/SKILL.md
Defensive patterns
Strategy: validation
Validate before calling
from pathlib import Path
plugin = Path("ce-plugin")
missing = [s for s in ("ce-plan", "ce-work", "ce-code-review")
if not (plugin / "skills" / s / "SKILL.md").is_file()]
if missing:
raise SystemExit(f"plugin missing required skills: {missing}") Type guard
from pathlib import Path
def has_required_skills(plugin_dir: Path) -> bool:
return all((plugin_dir / "skills" / s / "SKILL.md").is_file()
for s in ("ce-plan", "ce-work", "ce-code-review")) Try / catch
try:
snapshot = _build_ce_plugin_snapshot(config, destination_parent)
except SandboxError as exc:
if "missing required skill" in str(exc):
log.error("restore the missing skill(s) in the plugin checkout")
raise Prevention
- Ship all three skills (ce-plan, ce-work, ce-code-review) in every release.
- Ensure the archive step includes skills/*/SKILL.md (regular files).
- CI gate: assert the three SKILL.md files exist and are regular.
When it happens
Trigger: One of skills/ce-plan/SKILL.md, skills/ce-work/SKILL.md, or skills/ce-code-review/SKILL.md is absent or not a regular file (e.g. a symlink, which earlier walking may have rejected, or a directory). Fires after errors 548-550, so the manifest itself is fine.
Common situations: Partial checkout missing a skill folder; a release archive that excluded empty-looking SKILL.md files; a refactor that renamed a skill without keeping the canonical three; a skill shipped only as a symlink (caught earlier) or as a directory.
Related errors
- Compound Engineering plugin manifest is invalid: {exc}
- CE comparator requires the compound-engineering plugin manif
- Compound Engineering plugin version mismatch: expected {conf
- Compound Engineering plugin file must be regular and non-sym
- Compound Engineering plugin file exceeds the per-file limit:
AI-assisted analysis of abhigyanpatwari/GitNexus@d540b00184 (2026-08-12).
Data as JSON: /api/errors/3a89ebf69855bdec.
Report an issue: GitHub.