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

  1. Verify the path exists: `ls -la <path>` — check for typos and that you are in the directory you think you are.
  2. If you meant a GitHub plugin, drop the leading `.`/`/`/`~` and pass the plugin name (e.g. `compound-engineering`) so it resolves from the marketplace.
  3. Pass an absolute path or `./`-relative path from your actual cwd.
  4. 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

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


AI-assisted analysis of EveryInc/compound-engineering-plugin@c9c10f8c75 (2026-08-31). Data as JSON: /api/errors/57067d72e2137e88. Report an issue: GitHub.