EveryInc/compound-engineering-plugin · warning
Skipping ${extra}: no output returned.
Error message
Skipping ${extra}: no output returned. What it means
Mirrors the primary-target 'no output returned' skip for --also targets: an implemented handler ran convert() but returned no bundle, so nothing is written for that extra target and the run continues. It separates 'handler exists' from 'handler produced installable output'.
Source
Thrown at src/commands/convert.ts:189
targetName === "opencode" ? resolveOpenCodeWriteScope(hasExplicitOutput, resolvedScope) : resolvedScope
await target.write(primaryOutputRoot, bundle, effectiveScope)
console.log(`Converted ${plugin.manifest.name} to ${targetName} at ${primaryOutputRoot}`)
const extraTargets = parseExtraTargets(args.also)
const allTargets = [targetName, ...extraTargets]
for (const extra of extraTargets) {
const handler = targets[extra]
if (!handler) {
console.warn(`Skipping unknown target: ${extra}`)
continue
}
if (!handler.implemented) {
console.warn(`Skipping ${extra}: not implemented yet.`)
continue
}
const extraBundle = handler.convert(plugin, options)
if (!extraBundle) {
console.warn(`Skipping ${extra}: no output returned.`)
continue
}
const extraRoot = resolveTargetOutputRoot({
targetName: extra,
outputRoot,
codexHome,
piHome,
pluginName: plugin.manifest.name,
hasExplicitOutput,
scope: handler.defaultScope,
})
const extraScope =
extra === "opencode"
? resolveOpenCodeWriteScope(hasExplicitOutput, handler.defaultScope)
: handler.defaultScope
await handler.write(extraRoot, extraBundle, extraScope)
console.log(`Converted ${plugin.manifest.name} to ${extra} at ${extraRoot}`)
}View on GitHub (pinned to c9c10f8c75)
Solutions
- Verify the plugin contains content mappable to the extra target.
- Inspect the handler's convert() to understand its null-return conditions.
- Drop the extra target if it is not relevant to your plugin.
- Report upstream if the target should have emitted output.
Example fix
// before plugin without agents, --also agents-only-target -> 'Skipping X: no output returned.' // after add the content type the target consumes, then re-run
Defensive patterns
Strategy: validation
Validate before calling
// confirm the plugin has the content type the extra target consumes
const stats = await stat(pluginRoot + "/skills").catch(() => null);
if (!stats) console.warn("No skills to convert for skill-consuming targets"); Prevention
- Match extra targets to the plugin's actual content types.
- Do not assume every implemented target emits for every plugin.
- Review the writer's null-return conditions before scripting.
- Log which targets were skipped when automating conversions.
When it happens
Trigger: An extra target passed via --also whose handler.convert(plugin, options) returns falsy because the plugin has nothing convertible for that target.
Common situations: Converting a minimal plugin where some targets legitimately have nothing to emit; handlers that return null on unsupported plugin structures; testing with empty fixtures.
Related errors
- Skipping ${tool.name}: no output returned.
- Skipping ${tool.name}: not implemented.
- Skipping unknown target: ${extra}
- Skipping ${extra}: not implemented yet.
- Skipping ${tool.name}: no output returned.
AI-assisted analysis of EveryInc/compound-engineering-plugin@c9c10f8c75 (2026-08-31).
Data as JSON: /api/errors/db383028c4ea3174.
Report an issue: GitHub.