Repository navigation
Description
What
On Windows the router never starts a CLI through a .cmd or .ps1 shim. That is a deliberate and sound security choice. But the desktop app's first-run path, the dashboard's Set up SemanticRouter, silently drops any CLI that is installed only as a shim. The documented install commands for Codex and Copilot produce exactly that kind of install.
-
The documented npm installs produce shims.
npm install -g @openai/codex(docs/providers.md:254, the only install step given for Codex) andnpm install -g @github/copilot(docs/providers.md:211) createcodex.cmd/codex.ps1andcopilot.cmd/copilot.ps1in%APPDATA%\npm. The router refuses these. -
initexplains, but the dashboard setup drops the explanation.initadds a note for this case: "only a script wrapper was found …; install the native codex.exe" (src/SemanticRouter.Hosting/InitCommand.cs:286-289). The dashboard setup runs the same detection but throws the notes away:SetupDetector.DetectAsynccollects the notes (src/SemanticRouter.Hosting/SetupDetector.cs:42).- It reads them back only for LM Studio and Ollama (
Local, line 67). CliAsync(line 77) looks only atlookup.Path.
So a Windows user with npm-installed Codex or Claude Code sees no Codex or Claude Code card and no reason why. Yet the desktop app is meant to need no command line (docs/desktop.md "Using it").
-
The message doesn't say where the
.execomes from. Where the message is shown (init,doctor, the connector error fromCliExecutableLookup.Probleminsrc/SemanticRouter.AspNetCore/Connectors/Cli/CliExecutableLocator.cs:24-28), it says "Install the native binary (codex.exe)" without saying where to get it. The docs are no better:- Codex: no Windows route at all.
- Copilot: "or a native package; on Windows make sure
copilot.exeis on PATH". - Claude Code: the only one with a concrete Windows instruction, "use the native installer" (
docs/providers.md:174).
Evidence
src/SemanticRouter.Hosting/SetupDetector.cs:38-53and:74-77: notes are collected, then never used for CLI detections.src/SemanticRouter.AspNetCore/Connectors/Cli/CliExecutableLocator.cs:80-86: on Windows only.exeand.comcount, and.cmd,.batand.ps1are reported asScriptPath.docs/providers.md:211,docs/providers.md:254,docs/host.md:100.docs/roadmap.md:45: "The real vendor CLIs have been exercised on Linux only."
Impact
On Windows, where most V1 users are expected to be, two of the three subscription CLIs cannot be set up by following the docs. In the desktop app the failure gives no feedback, so people will report it as "SemanticRouter doesn't find Codex".
Suggested fix
- Return script-wrapper findings from
SetupDetectoras a detection with a problem state, instead of dropping them. For example, a card that says "Codex: found%APPDATA%\npm\codex.cmd, which the router cannot start safely; install codex.exe from … or set Executable". - In docs/providers.md, give a supported Windows install for each CLI, tested on Windows 11:
- Claude Code: the native installer, which puts
claude.exein%USERPROFILE%\.local\bin. - Codex: the standalone
codex.exefrom OpenAI's GitHub releases, or the.exethat the npm package carries, set asExecutable. - Copilot: the
copilot.exefrom a WinGet or standalone package, if there is one.
- Claude Code: the native installer, which puts
- Optionally, when a shim is found, look for the native
.exethat the npm package installs next to it (for example undernode_modules\@openai\codex\…). Suggest that path in the message, or use it after checking it is an.exe.
Done when
- On Windows, the dashboard setup shows a CLI that is installed only as a script shim, with what to do about it.
- docs/providers.md has a Windows install route for Claude Code, Codex and Copilot that yields a startable
.exe, checked on a Windows machine. - The "script wrapper" message names where to get the
.exefor each preset.
Activity
Show CLIs installed only as npm shims in the setup, with where to get…
siebe41 commentedon Oct 20, 2026
Most of this was fixed on main by 7170b0c: the dashboard setup lists a shim-only CLI with what to do, the 'script wrapper' message names where each preset's .exe comes from, and docs/providers.md has a 'CLIs on Windows' table. Draft PR #248 does the rest in the docs: the Copilot SDK connector also refuses
copilot.cmd, but its install step gave only npm, so it now giveswinget install GitHub.Copilot; and the docs now say the Claude Code route has been checked on Windows 11. The Codex and Copilot routes on Windows still need a hands-on check (see the PR's 'Not done').Merge pull request #248 from siebe41/sprint/hardening/H01-windows-shi…
siebe41 commentedon Oct 30, 2026
Closing: the fixes are merged (#248, and #352 for the setup's problem state). The dashboard's setup lists a CLI found only as an npm script wrapper as found but not usable, with what to install; docs/providers.md has a "CLIs on Windows" section with a Windows install that gives an
.exefor Claude Code, Codex and Copilot; the script-wrapper message names where to get each.exe. The Claude Code route has been checked on Windows 11; checking the Codex and Copilot routes on a Windows machine is part of the hands-on run tracked in #213.Generated by Claude Code