EveryInc/compound-engineering-plugin · error · Error
No Codex skills were found under ${skillsRoot}
Error message
No Codex skills were found under ${skillsRoot} What it means
After resolving the repo root, resolveCodexDevContext enumerates skills under <repoRoot>/skills via listSkills and requires at least one. If none are found it throws with the skills root in the message. The workflow has nothing to link otherwise, so an empty collection is treated as a broken checkout rather than a no-op.
Source
Thrown at src/dev/codex-dev.ts:214
)
const branchValue = trim(
await checkedRun(runner, "git", ["branch", "--show-current"], { cwd: repoRoot, env }),
)
const head = trim(await checkedRun(runner, "git", ["rev-parse", "HEAD"], { cwd: repoRoot, env }))
const status = trim(
await checkedRun(runner, "git", ["status", "--porcelain=v1", "--untracked-files=all"], {
cwd: repoRoot,
env,
}),
)
const lines = status ? status.split("\n") : []
const untrackedCount = lines.filter((line) => line.startsWith("?? ")).length
const modifiedCount = lines.length - untrackedCount
const codexHome = resolveHomePath(env.CODEX_HOME || path.join(home, ".codex"), home)
const skillsRoot = path.join(repoRoot, "skills")
const skillNames = await listSkills(skillsRoot)
if (skillNames.length === 0) throw new Error(`No Codex skills were found under ${skillsRoot}`)
return {
repoRoot,
skillsRoot,
codexHome,
collectionPath: path.join(codexHome, "skills", "compound-engineering-local"),
gitDir: path.resolve(gitDir),
gitCommonDir: path.resolve(gitCommonDir),
linkedWorktree: path.resolve(gitDir) !== path.resolve(gitCommonDir),
branch: branchValue || null,
head,
modifiedCount,
untrackedCount,
skillNames,
env: { ...env, CODEX_HOME: codexHome },
}
}
View on GitHub (pinned to c9c10f8c75)
Solutions
- List what is actually there: ls skills/ — confirm it is empty or missing SKILL.md entries.
- Restore the skills directory: git restore skills/ or git submodule update --init if skills is a submodule.
- Re-clone the repository if the checkout is incomplete.
- git clean -xdn first to see if git clean removed them, then recover accordingly.
Example fix
// before skills/ // empty // after git checkout main -- skills/ && ls skills/ ce-brainstorm/ ce-plan/ ... // skill dirs restored
Defensive patterns
Strategy: validation
Validate before calling
import { readdir } from "node:fs/promises"
const entries = await readdir("skills", { withFileTypes: true })
if (!entries.some((e) => e.isDirectory())) {
throw new Error("skills/ is empty — restore it: git restore skills/ or git submodule update --init")
} Try / catch
try {
await resolveCodexDevContext(cwd)
} catch (error) {
if ((error as Error).message.startsWith("No Codex skills were found under")) {
console.error("Checkout is incomplete; restore the skills/ directory from git")
} else throw error
} Prevention
- Avoid git clean -fdx in checkouts used for codex:dev local mode.
- Initialize submodules after clone if skills/ is one.
- Verify ls skills/ is populated before switching install modes.
When it happens
Trigger: The skills/ directory at the repo root is empty, contains no subdirectories that listSkills counts (e.g. none with SKILL.md if that is its criterion), or listSkills fails to see entries — thrown at src/dev/codex-dev.ts:214.
Common situations: A fresh or partially cloned checkout where skills/ is an empty submodule or was cleaned by git clean -fd; a worktree where untracked skill directories were never checked out; an experiment that moved all skills elsewhere.
Related errors
- Could not validate ${collectionPath} after taking it. The en
- Cleanup currently supports only the compound-engineering plu
- Unknown cleanup target: ${target}. Use one of: ${cleanupTarg
- Local plugin path not found: ${directPath}
- Unknown permissions mode: ${permissions}
AI-assisted analysis of EveryInc/compound-engineering-plugin@c9c10f8c75 (2026-08-31).
Data as JSON: /api/errors/7e05cc093d70ffe6.
Report an issue: GitHub.