EveryInc/compound-engineering-plugin · error · Error

Target ${targetName} is registered but not implemented yet.

Error message

Target ${targetName} is registered but not implemented yet.

What it means

The `install` command looks up the requested target format in the central target registry (src/targets/index.ts). If the entry exists but its `implemented` flag is false, the command refuses to run it: the target is a registered placeholder whose converter/writer is not finished yet. This separates 'typo'd target name' (Unknown target) from 'known but not yet shipped'.

Source

Thrown at src/commands/install.ts:161

          })
          const writeScope =
            tool.name === "opencode" ? resolveOpenCodeWriteScope(hasExplicitOutput, undefined) : undefined
          await handler.write(root, bundle, writeScope)
          console.log(`Installed ${plugin.manifest.name} to ${tool.name} at ${root}`)
        }

        if (activeTargets.some((t) => t.name === "codex")) {
          await stripCodexAgentsToolMap(codexHome)
        }
        return
      }

      const target = targets[targetName]
      if (!target) {
        throw new Error(`Unknown target: ${targetName}`)
      }
      if (!target.implemented) {
        throw new Error(`Target ${targetName} is registered but not implemented yet.`)
      }

      const resolvedScope = validateScope(targetName, target, args.scope ? String(args.scope) : undefined)

      const bundle = target.convert(plugin, options)
      if (!bundle) {
        throw new Error(`Target ${targetName} did not return a bundle.`)
      }
      const primaryOutputRoot = resolveTargetOutputRoot({
        targetName,
        outputRoot,
        codexHome,
        piHome,
        pluginName: plugin.manifest.name,
        hasExplicitOutput,
        scope: resolvedScope,
      })
      const effectiveScope =

View on GitHub (pinned to c9c10f8c75)

Solutions

  1. Pick one of the implemented targets instead: opencode (default), codex, pi, or antigravity.
  2. Check `bun run src/index.ts install --help` (or the README) for the list of supported `--to` values in your installed version.
  3. If you need the unimplemented target, upgrade the CLI to a version where its handler is finished.
  4. If you maintain a fork, finish the target's convert/write implementation in src/targets/ and set `implemented: true`.

Example fix

// before
bun run src/index.ts install my-plugin --to some-future-target
// after
bun run src/index.ts install my-plugin --to codex
Defensive patterns

Strategy: validation

Validate before calling

import { targets } from "../src/targets"
if (!targets[name]) throw new Error(`Unknown target: ${name}`)
if (!targets[name].implemented) console.warn(`Target ${name} is not implemented; falling back to opencode`)

Type guard

function isImplementedTarget(name: string): name is keyof typeof targets & string {
  const t = (targets as Record<string, { implemented?: boolean }>)[name]
  return !!t && t.implemented === true
}

Try / catch

try {
  await install(plugin, { to: name })
} catch (e) {
  if (e instanceof Error && e.message.includes("not implemented yet")) {
    console.warn(`${name} unavailable; using opencode`)
    await install(plugin, { to: "opencode" })
  } else throw e
}

Prevention

When it happens

Trigger: Running `install --to <name>` (or `--also <name>`) where targets[<name>] exists with `implemented: false`. In the current tree all four targets (opencode, codex, pi, antigravity) are implemented, so this only fires on a checkout or version where a new target was registered as a stub, or on custom/local builds that add an unimplemented handler to the registry.

Common situations: Using a pre-release or main-branch CLI that just announced a new target provider; following a README or changelog that mentions a future `--to` value; a plugin author's custom fork with a placeholder target registered.

Related errors


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