EveryInc/compound-engineering-plugin · error · Error
Local plugin path not found: ${directPath}
Error message
Local plugin path not found: ${directPath} What it means
`install`'s path resolver treats input starting with `.`, `/`, or `~` as a local filesystem path. It expands `~`, resolves it to an absolute path, and throws this error if nothing exists at that path. It never falls through to GitHub lookup for such inputs — the leading character is a deliberate signal that you meant a local directory.
Source
Thrown at src/commands/install.ts:240
if (resolvedPlugin.cleanup) {
await resolvedPlugin.cleanup()
}
}
},
})
type ResolvedPluginPath = {
path: string
cleanup?: () => Promise<void>
}
async function resolvePluginPath(input: string, branch?: string): Promise<ResolvedPluginPath> {
// Only treat as a local path if it explicitly looks like one
if (input.startsWith(".") || input.startsWith("/") || input.startsWith("~")) {
const expanded = expandHome(input)
const directPath = path.resolve(expanded)
if (await pathExists(directPath)) return { path: directPath }
throw new Error(`Local plugin path not found: ${directPath}`)
}
// Skip bundled plugins when a branch is specified — the user wants a specific remote version
if (!branch) {
const bundledPluginPath = await resolveBundledPluginPath(input)
if (bundledPluginPath) {
return { path: bundledPluginPath }
}
}
// Otherwise, fetch from GitHub (optionally from a specific branch)
return await resolveGitHubPluginPath(input, branch)
}
function parseExtraTargets(value: unknown): string[] {
if (!value) return []
return String(value)
.split(",")View on GitHub (pinned to c9c10f8c75)
Solutions
- Verify the path exists: `ls -la <path>` — check for typos and that you are in the directory you think you are.
- If you meant a GitHub plugin, drop the leading `.`/`/`/`~` and pass the plugin name (e.g. `compound-engineering`) so it resolves from the marketplace.
- Pass an absolute path or `./`-relative path from your actual cwd.
- Clone the plugin locally first if it is not on disk yet.
Example fix
// before install ./compund-engineering // after install ./compound-engineering # or: install compound-engineering (from GitHub)
Defensive patterns
Strategy: validation
Validate before calling
import { existsSync } from "fs"
const p = input.startsWith("~") ? input.replace("~", process.env.HOME ?? "") : input
if (input.startsWith(".") || input.startsWith("/") || input.startsWith("~")) {
if (!existsSync(p)) throw new Error(`Local path does not exist: ${p}`)
} Try / catch
try {
await install(localPath)
} catch (e) {
if (e instanceof Error && e.message.startsWith("Local plugin path not found")) {
console.error(`Path not found: ${localPath}. cwd=${process.cwd()}`)
} else throw e
} Prevention
- Use absolute paths or ./ relative paths and `ls` them before installing.
- Run the CLI from the directory you think you are in (check with pwd).
- Don't prefix names with ./ or / unless the plugin is genuinely local — that disables GitHub lookup.
- Point at the plugin directory, not its parent repo, when paths are nested.
When it happens
Trigger: Running `install ./my-plugin` (or `/abs/path`, `~/path`) where the resolved directory does not exist — typo in the path, wrong working directory, plugin folder deleted/renamed, or passing a plugin *repository* root when the checker expects a plugin directory.
Common situations: Running from a different cwd than expected so a relative path resolves elsewhere; typo like `./plugn`; a plugin checked out under a different name; path pointing at a file instead of a directory.
Related errors
- Local plugin path not found: ${directPath}
- Plugin directory not found: ${pluginPath}
- Cleanup currently supports only the compound-engineering plu
- Unknown cleanup target: ${target}. Use one of: ${cleanupTarg
- Unknown bundled plugin: ${input}
AI-assisted analysis of EveryInc/compound-engineering-plugin@c9c10f8c75 (2026-08-31).
Data as JSON: /api/errors/57067d72e2137e88.
Report an issue: GitHub.