jackwener/OpenCLI · error · CommandExecutionError
Could not launch ${label}: no compatible executable found in
Error message
Could not launch ${label}: no compatible executable found in ${path.join(appPath, 'Contents', 'MacOS')} What it means
launchElectronApp scans <appPath>/Contents/MacOS for candidate executables and tried each one; when more than one candidate exists but every attempt failed (executables.length > 1 with a stored lastMissingExecutableError path) it throws this CommandExecutionError listing what it tried. It means the Electron app bundle could not be launched from the resolved path.
Source
Thrown at src/launcher.ts:317
const executables = resolveExecutableCandidates(appPath, app);
let lastMissingExecutableError: CommandExecutionError | undefined;
for (const executable of executables) {
log.debug(`[launcher] Launching: ${executable} ${args.join(' ')}`);
try {
await launchDetachedApp(executable, args, label);
return;
} catch (err) {
if (isMissingExecutableError(err, label)) {
lastMissingExecutableError = err as CommandExecutionError;
continue;
}
throw err;
}
}
if (executables.length > 1) {
throw new CommandExecutionError(
`Could not launch ${label}: no compatible executable found in ${path.join(appPath, 'Contents', 'MacOS')}`,
`Tried: ${executables.map((executable) => path.basename(executable)).join(', ')}. Install ${label}, reinstall it, or register a custom app path in ~/.opencli/apps.yaml`,
);
}
throw lastMissingExecutableError ?? new CommandExecutionError(
`Could not launch ${label}`,
`Install ${label}, reinstall it, or register a custom app path in ~/.opencli/apps.yaml`,
);
}
export function electronLaunchArgs(port: number, extraArgs: string[] = []): string[] {
return [
`--remote-debugging-port=${port}`,
'--remote-allow-origins=*',
...extraArgs,
];
}View on GitHub (pinned to 49907e53dc)
Solutions
- Reinstall the app so the bundle contains one working main executable.
- Set a custom app path in ~/.opencli/apps.yaml pointing to the correct .app bundle.
- Check the 'Tried:' list in the error and remove stale/duplicate binaries from Contents/MacOS, keeping only the main executable.
- Verify the binary matches your CPU architecture (arm64 vs x64).
Example fix
// before (~/.opencli/apps.yaml) myapp: /Users/me/Downloads/MyApp-old.app // after myapp: /Applications/MyApp.app
Defensive patterns
Strategy: try-catch
Validate before calling
import fs from "fs";
const macosDir = path.join(appPath, "Contents", "MacOS");
if (!fs.existsSync(macosDir)) throw new Error(`Not a macOS app bundle: ${appPath}`);
const execs = fs.readdirSync(macosDir);
if (execs.length === 0) throw new Error(`No executables in ${macosDir}`); Type guard
function isValidAppBundle(appPath: string): boolean {
return fs.existsSync(path.join(appPath, "Contents", "MacOS"));
} Try / catch
try {
launchElectronApp(appPath);
} catch (e) {
if (e instanceof CommandExecutionError && /no compatible executable/.test(e.message)) {
console.error(`${e.message}\n${e.hint ?? ""} — reinstall the app or fix apps.yaml path`);
}
} Prevention
- Point apps.yaml at the top-level .app bundle, not an inner binary.
- Reinstall apps whose bundles contain multiple stale executables.
- Verify architecture compatibility (arm64 vs x64) before launching.
- Keep Contents/MacOS clean of leftover helper binaries.
When it happens
Trigger: On macOS, resolveElectronEndpoint -> launchElectronApp with an appPath whose Contents/MacOS contains multiple files/executables (or multiple stale binaries) and none could be launched successfully.
Common situations: Corrupted or partial Electron install; custom app path in ~/.opencli/apps.yaml pointing at a bundle with helper binaries alongside the main one; app updated/renamed so old binaries remain; wrong architecture binary (x64 app on arm64).
Related errors
- ChatGPT Desktop integration requires macOS (osascript is not
- ChatGPT Desktop integration requires macOS (osascript is not
- ChatGPT Desktop integration requires macOS (osascript is not
- ChatGPT Desktop integration requires macOS (osascript is not
- Instagram private publish does not support auto-normalizing
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/11403c517afa33bf.
Report an issue: GitHub.