EveryInc/compound-engineering-plugin · error · Error
Could not find plugin ${pluginName} in ${source}.
Error message
Could not find plugin ${pluginName} in ${source}. What it means
When installing a plugin by name, the CLI clones the GitHub source into a temp directory and then searches it with `resolvePluginRoot` for a directory matching the plugin name (defined in the marketplace manifest). If no matching plugin root is found, it cleans up the temp clone and throws this error naming the plugin and source repo.
Source
Thrown at src/commands/install.ts:294
async function resolveBundledPluginPath(pluginName: string): Promise<string | null> {
const repoRoot = fileURLToPath(new URL("../..", import.meta.url))
return await resolvePluginRoot(repoRoot, pluginName)
}
async function resolveGitHubPluginPath(pluginName: string, branch?: string): Promise<ResolvedPluginPath> {
const tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), "compound-plugin-"))
const source = resolveGitHubSource()
try {
await cloneGitHubRepo(source, tempRoot, branch)
} catch (error) {
await fs.rm(tempRoot, { recursive: true, force: true })
throw error
}
const pluginPath = await resolvePluginRoot(tempRoot, pluginName)
if (!pluginPath) {
await fs.rm(tempRoot, { recursive: true, force: true })
throw new Error(`Could not find plugin ${pluginName} in ${source}.`)
}
return {
path: pluginPath,
cleanup: async () => {
await fs.rm(tempRoot, { recursive: true, force: true })
},
}
}
async function resolvePluginRoot(repoRoot: string, pluginName: string): Promise<string | null> {
const rootManifest = path.join(repoRoot, ".claude-plugin", "plugin.json")
if (await pathExists(rootManifest)) {
try {
const raw = await fs.readFile(rootManifest, "utf8")
const manifest = JSON.parse(raw) as { name?: string }
if (manifest.name === pluginName) return repoRoot
} catch {View on GitHub (pinned to c9c10f8c75)
Solutions
- Check the exact plugin name in the source repo's `.claude-plugin/marketplace.json`.
- List available plugins in the marketplace catalog and pick the correct name.
- If COMPOUND_PLUGIN_GITHUB_SOURCE is set, unset it or point it at the correct repository.
- Update the CLI — the plugin may have been renamed in a newer release.
- Alternatively install from a local path with `install ./path/to/plugin`.
Example fix
// before bun run src/index.ts install compund-engineering // after bun run src/index.ts install compound-engineering
Defensive patterns
Strategy: validation
Validate before calling
// Verify the plugin name exists in the marketplace before installing
const res = await fetch("https://raw.githubusercontent.com/<owner>/<repo>/main/.claude-plugin/marketplace.json")
const catalog = await res.json()
const names = catalog.plugins.map((p: any) => p.name)
if (!names.includes(pluginName)) throw new Error(`${pluginName} not in marketplace; available: ${names.join(", ")}`) Try / catch
try {
await install(pluginName)
} catch (e) {
if (e instanceof Error && e.message.startsWith("Could not find plugin")) {
console.error(`Unknown plugin name. Check marketplace.json; source=${process.env.COMPOUND_PLUGIN_GITHUB_SOURCE ?? "default"}`)
} else throw e
} Prevention
- Copy plugin names verbatim from the source repo's .claude-plugin/marketplace.json.
- Don't set COMPOUND_PLUGIN_GITHUB_SOURCE unless you intend a fork with the same plugin names.
- Keep the CLI updated so renamed plugins resolve.
- Use a local path install for plugins that are not in the marketplace.
When it happens
Trigger: Running `install <plugin-name>` where the name is not present in the source repo's marketplace catalog — misspelled plugin name, plugin removed/renamed upstream, or COMPOUND_PLUGIN_GITHUB_SOURCE pointing at a fork/repo that does not contain the plugin.
Common situations: Typo in the plugin name; following docs for a newer CLI whose plugin was renamed; COMPOUND_PLUGIN_GITHUB_SOURCE pointing at an outdated or unrelated repo; network succeeded but the clone is an old commit missing the plugin.
Related errors
- Plugin directory not found: ${pluginPath}
- Cleanup currently supports only the compound-engineering plu
- Unknown cleanup target: ${target}. Use one of: ${cleanupTarg
- Local plugin path not found: ${directPath}
- Unknown bundled plugin: ${input}
AI-assisted analysis of EveryInc/compound-engineering-plugin@c9c10f8c75 (2026-08-31).
Data as JSON: /api/errors/48bb8fe11e328f03.
Report an issue: GitHub.