{"record":{"id":"48bb8fe11e328f03","repo":"EveryInc/compound-engineering-plugin","slug":"could-not-find-plugin-pluginname-in-source","errorCode":null,"errorMessage":"Could not find plugin ${pluginName} in ${source}.","messagePattern":"Could not find plugin (.+?) in (.+?)\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/commands/install.ts","lineNumber":294,"sourceCode":"async function resolveBundledPluginPath(pluginName: string): Promise<string | null> {\n  const repoRoot = fileURLToPath(new URL(\"../..\", import.meta.url))\n  return await resolvePluginRoot(repoRoot, pluginName)\n}\n\nasync function resolveGitHubPluginPath(pluginName: string, branch?: string): Promise<ResolvedPluginPath> {\n  const tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), \"compound-plugin-\"))\n  const source = resolveGitHubSource()\n  try {\n    await cloneGitHubRepo(source, tempRoot, branch)\n  } catch (error) {\n    await fs.rm(tempRoot, { recursive: true, force: true })\n    throw error\n  }\n\n  const pluginPath = await resolvePluginRoot(tempRoot, pluginName)\n  if (!pluginPath) {\n    await fs.rm(tempRoot, { recursive: true, force: true })\n    throw new Error(`Could not find plugin ${pluginName} in ${source}.`)\n  }\n\n  return {\n    path: pluginPath,\n    cleanup: async () => {\n      await fs.rm(tempRoot, { recursive: true, force: true })\n    },\n  }\n}\n\nasync function resolvePluginRoot(repoRoot: string, pluginName: string): Promise<string | null> {\n  const rootManifest = path.join(repoRoot, \".claude-plugin\", \"plugin.json\")\n  if (await pathExists(rootManifest)) {\n    try {\n      const raw = await fs.readFile(rootManifest, \"utf8\")\n      const manifest = JSON.parse(raw) as { name?: string }\n      if (manifest.name === pluginName) return repoRoot\n    } catch {","sourceCodeStart":276,"sourceCodeEnd":312,"githubUrl":"https://github.com/EveryInc/compound-engineering-plugin/blob/c9c10f8c75412c7232cb2bd663e5fd1cea98d84e/src/commands/install.ts#L276-L312","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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`."],"exampleFix":"// before\nbun run src/index.ts install compund-engineering\n// after\nbun run src/index.ts install compound-engineering","handlingStrategy":"validation","validationCode":"// Verify the plugin name exists in the marketplace before installing\nconst res = await fetch(\"https://raw.githubusercontent.com/<owner>/<repo>/main/.claude-plugin/marketplace.json\")\nconst catalog = await res.json()\nconst names = catalog.plugins.map((p: any) => p.name)\nif (!names.includes(pluginName)) throw new Error(`${pluginName} not in marketplace; available: ${names.join(\", \")}`)","typeGuard":null,"tryCatchPattern":"try {\n  await install(pluginName)\n} catch (e) {\n  if (e instanceof Error && e.message.startsWith(\"Could not find plugin\")) {\n    console.error(`Unknown plugin name. Check marketplace.json; source=${process.env.COMPOUND_PLUGIN_GITHUB_SOURCE ?? \"default\"}`)\n  } else throw e\n}","preventionTips":["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."],"tags":["cli","github","marketplace","not-found"],"backgroundTag":"plugin-not-in-marketplace","analyzedSha":"c9c10f8c75412c7232cb2bd663e5fd1cea98d84e","analyzedAt":"2026-08-31T15:18:07.959Z","schemaVersion":2},"datasetVersion":"2026-08-31T19:17:28.585Z"}