EveryInc/compound-engineering-plugin · error · Error
${repoRoot} is not the compound-engineering repository
Error message
${repoRoot} is not the compound-engineering repository What it means
assertCompoundEngineeringRepo guards the codex:dev workflow: it reads <repoRoot>/package.json and requires its name field to be exactly "compound-engineering". If it is not, the library concludes the resolved git toplevel is not this repository and refuses to proceed, because the workflow only makes sense inside the plugin's own checkout.
Source
Thrown at src/dev/codex-dev.ts:126
function resolveHomePath(value: string, home: string): string {
if (value === "~") return home
if (value.startsWith("~/")) return path.join(home, value.slice(2))
return path.resolve(value)
}
async function readJson(filePath: string): Promise<Record<string, unknown>> {
try {
return JSON.parse(await fs.readFile(filePath, "utf8")) as Record<string, unknown>
} catch (error) {
throw new Error(`Could not read ${filePath}: ${error instanceof Error ? error.message : String(error)}`)
}
}
async function assertCompoundEngineeringRepo(repoRoot: string): Promise<void> {
const packageJson = await readJson(path.join(repoRoot, "package.json"))
if (packageJson.name !== "compound-engineering") {
throw new Error(`${repoRoot} is not the compound-engineering repository`)
}
const pluginJson = await readJson(path.join(repoRoot, ".codex-plugin", "plugin.json"))
if (pluginJson.name !== "compound-engineering") {
throw new Error(`${repoRoot} is not the compound-engineering repository`)
}
const skills = pluginJson.skills
if (typeof skills !== "string" || path.resolve(repoRoot, skills) !== path.join(repoRoot, "skills")) {
throw new Error("The Codex plugin manifest does not point at this repository's skills directory")
}
const unsupported = ["apps", "hooks", "mcpServers"].filter((key) => pluginJson[key] !== undefined)
if (unsupported.length > 0) {
throw new Error(
`Local skill mode cannot represent Codex runtime components: ${unsupported.join(", ")}. Update the developer workflow before using it.`,
)
}
View on GitHub (pinned to c9c10f8c75)
Solutions
- cd out of the nested repo to a directory inside the actual compound-engineering checkout and re-run.
- Check package.json at the repo root: jq .name package.json — it must be "compound-engineering".
- If you are in a fork/monorepo, restore the root package.json name or run against a real checkout of this repository.
Example fix
// before: package.json in the resolved repo root
{ "name": "my-fork" }
// after
{ "name": "compound-engineering" } Defensive patterns
Strategy: validation
Validate before calling
import { readFile } from "node:fs/promises"
const pkg = JSON.parse(await readFile("package.json", "utf8"))
if (pkg.name !== "compound-engineering") {
throw new Error("Not the compound-engineering checkout; cd there first")
} Type guard
function isCompoundRepo(pkg: unknown): pkg is { name: "compound-engineering" } {
return typeof pkg === "object" && pkg !== null && (pkg as { name?: unknown }).name === "compound-engineering"
} Try / catch
try {
await runCodexDev(command)
} catch (error) {
if ((error as Error).message.includes("is not the compound-engineering repository")) {
console.error("cd into the compound-engineering checkout and retry")
} else throw error
} Prevention
- Run git rev-parse --show-toplevel first to know which repo you are in.
- Avoid running the workflow from nested vendored repos or test fixture repos.
- Keep root package.json name intact in forks.
When it happens
Trigger: resolveCodexDevContext or inspectLocalCollection runs git rev-parse --show-toplevel from the current directory and the resulting repo root's package.json has a name other than "compound-engineering" (src/dev/codex-dev.ts:126).
Common situations: Running the dev command from a subdirectory of an unrelated nested git repo (e.g. a vendored dependency or docs repo inside the checkout); a fork renamed the package; a monorepo where the inner repo root is not the plugin root; running inside a temp fixture repo during tests.
Related errors
- Cleanup currently supports only the compound-engineering plu
- Unknown cleanup target: ${target}. Use one of: ${cleanupTarg
- Unknown permissions mode: ${permissions}
- Unknown target: ${targetName}
- Unknown permissions mode: ${permissions}
AI-assisted analysis of EveryInc/compound-engineering-plugin@c9c10f8c75 (2026-08-31).
Data as JSON: /api/errors/00b524836351014f.
Report an issue: GitHub.