@minhspark/codex-mcp-bridge 1.24.1 → 1.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codex-plugin/plugin.json +1 -1
- package/CHANGELOG.md +24 -0
- package/README.md +328 -33
- package/docs/new-macos-setup.md +85 -37
- package/docs/new-windows-setup.md +101 -42
- package/docs/project-onboarding.md +64 -9
- package/package.json +4 -1
- package/plugin.json +1 -1
- package/scripts/install-antigravity-bridge.mjs +31 -17
- package/scripts/install-claude-code.mjs +58 -43
- package/scripts/install-claude-desktop.mjs +60 -32
- package/scripts/install-codex-mcp.mjs +1 -1
- package/scripts/install-native-relay.mjs +3 -2
- package/scripts/setup.mjs +14 -0
- package/src/app-server-client.mjs +2 -1
- package/src/claude-bridge.mjs +13 -6
- package/src/claude-code-registration.mjs +94 -0
- package/src/claude-sender-context.mjs +22 -2
- package/src/codex-bridge-launcher.mjs +8 -1
- package/src/codex-mcp-registration.mjs +1 -0
- package/src/desktop-account-context.mjs +18 -0
- package/src/index.mjs +1 -1
- package/src/native-relay-companion.mjs +1 -1
- package/src/platform.mjs +57 -5
- package/src/setup.mjs +204 -0
- package/src/thread-delivery.mjs +32 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,30 @@ Follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and [SemVer](ht
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [1.25.0] - 2026-10-30
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Global npm installation now configures Claude Desktop, Claude Code, Codex and Antigravity in one command. On npm versions that require lifecycle-script authorization, use `npm install -g @minhspark/codex-mcp-bridge@latest --allow-scripts=@minhspark/codex-mcp-bridge`.
|
|
12
|
+
- Setup creates the distinct shared Claude Desktop `codex-bridge-desktop` connector and user-level Claude Code `codex-bridge`, registers the native Codex relay and its executor, and installs Antigravity's inbound, outbound and sidecar entries. An absent Codex CLI is installed from the official package into a separate per-user tools directory.
|
|
13
|
+
- `codex-bridge-setup` and `codex-mcp-bridge setup` support read-only `--check`, `--dry-run`, JSON reports and `--no-download`. Local dependency installation does not change application configuration; global setup can be skipped with `CODEX_BRIDGE_SKIP_SETUP=1`.
|
|
14
|
+
- README troubleshooting now includes detailed recovery procedures and a versioned catalog of historical installation, routing, identity and reply-observation fixes.
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Initial Claude Code registration no longer requires hand-written JSON or an existing supervised entry. Setup preserves custom settings and scope, retargets recognized bridge paths, separates a shadowing shared connector, and reports conflicting entries instead of replacing them. Antigravity setup respects a custom Claude configuration directory and an explicitly disabled sidecar.
|
|
19
|
+
- Setup detects Microsoft Store Claude data directories and explicit data-root overrides, refusing ambiguous installations. Antigravity registrations from recognized older package paths are also retargeted during setup.
|
|
20
|
+
- Migrating a shared native entry into Claude Code retains its restrictions and implicit owned-thread policy. Missing saved Codex executable paths are refreshed, valid custom binaries remain selected, and incompatible shared native routing is reported instead of falsely verified.
|
|
21
|
+
- Simultaneous Claude sender-ancestry checks now share one pending Windows inspector. Completed results and failures are discarded; subsequent operations still verify current OS identity, task and account.
|
|
22
|
+
- A delivered Codex request with no matching reply marker no longer waits indefinitely when a new native turn remains finished and idle. After a bounded grace period and a fresh state check, the receipt reports `observation_unavailable` and directs the caller to inspect the existing task without resending or attributing unrelated output.
|
|
23
|
+
- Tool instructions for already-open Claude sessions now require native session discovery and peer delivery. The misleading instruction to inspect a title in the app was removed, and external Computer Use typing/clicking is explicitly excluded as a delivery fallback.
|
|
24
|
+
|
|
25
|
+
### Verification and limitations
|
|
26
|
+
|
|
27
|
+
- Windows packed-package installation and configuration readback cover all registered clients. Focused regressions cover initial installation, existing settings, collisions, disabled components, lifecycle opt-outs, native CLI resolution, concurrent sender inspection, reply observation and MCP routing instructions.
|
|
28
|
+
- Configuration verification does not prove that running applications have reloaded their MCP servers. Applications still need to be installed and signed in; native Desktop handoffs require the same saved project and retain host permissions. Shared Claude Desktop chat uses the legacy local app-server route.
|
|
29
|
+
- Setup prewarms runtime snapshots, but the reported 30-second connection timeout was not reproduced and is not claimed resolved. Missing reply correlation still requires inspection of the original task. Updated tool instructions guide model behavior and cannot guarantee every model follows them.
|
|
30
|
+
|
|
7
31
|
## [1.24.1] - 2026-10-29
|
|
8
32
|
|
|
9
33
|
### Fixed
|
package/README.md
CHANGED
|
@@ -23,23 +23,55 @@ https://github.com/user-attachments/assets/98b23989-826f-4d7d-9dcb-ad7dd2739095
|
|
|
23
23
|
|
|
24
24
|
## Installation
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
One global npm command installs the package and configures the local Claude, Codex, and Antigravity bridges. Install and sign in to the apps you intend to use first. Setup preserves existing project restrictions and custom settings; it does not sign in, grant workspace trust, change permission modes, or restart running apps.
|
|
27
27
|
|
|
28
28
|
### Package — npm
|
|
29
29
|
|
|
30
30
|
**macOS / Linux / WSL**
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
npm install -g @minhspark/codex-mcp-bridge@latest
|
|
33
|
+
npm install -g @minhspark/codex-mcp-bridge@latest --allow-scripts=@minhspark/codex-mcp-bridge
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
**Windows PowerShell**
|
|
37
37
|
|
|
38
38
|
```powershell
|
|
39
|
-
npm.cmd install -g @minhspark/codex-mcp-bridge@latest
|
|
39
|
+
npm.cmd install -g @minhspark/codex-mcp-bridge@latest --allow-scripts=@minhspark/codex-mcp-bridge
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
Requires **Node.js 22.13+**. Use `.cmd` for this package's commands in Windows PowerShell. Run the same
|
|
42
|
+
Requires **Node.js 22.13+**. Use `.cmd` for this package's commands in Windows PowerShell. Run the same command to update. The global install runs setup automatically and verifies the saved registrations. If a native Codex CLI is missing, setup installs a pinned official `@openai/codex` package in the current user's `~/.config/GptClaudeBridge/tools` (or the corresponding `XDG_CONFIG_HOME` path); no separate CLI install command is needed.
|
|
43
|
+
|
|
44
|
+
`--allow-scripts=@minhspark/codex-mcp-bridge` authorizes only this package's setup hook. npm versions that block install scripts by default need this flag; a plain install works only when the hook is allowed. Add `--foreground-scripts` to the command to see setup progress because npm may hide lifecycle output. If npm prints `1 package had install scripts blocked`, rerun the recommended command or run `codex-bridge-setup` explicitly.
|
|
45
|
+
|
|
46
|
+
| Client | Installed entry | Purpose |
|
|
47
|
+
| --- | --- | --- |
|
|
48
|
+
| Claude Code | `codex-bridge` | Native Codex Desktop handoffs on Windows/macOS; local app-server mode on Linux |
|
|
49
|
+
| Claude Desktop shared connectors | `codex-bridge-desktop` | Local Codex app-server sessions from ordinary chat |
|
|
50
|
+
| Codex | `claude-bridge` | Send to Claude and observe replies |
|
|
51
|
+
| Codex Desktop, Windows/macOS | `codex-native-relay` | Native delivery, pipe forwarding, and relay executor bootstrap |
|
|
52
|
+
| Codex and Claude Code | `antigravity-bridge` | Send to Antigravity App or bridge-owned CLI sessions |
|
|
53
|
+
| Antigravity | `agent-bridge` and `codex-bridge` sidecar | Outbound agent messages and native App connectivity |
|
|
54
|
+
|
|
55
|
+
After setup, open or reconnect the affected apps after active work finishes. For native Claude-to-Codex handoffs, use Claude Desktop's **Code tab** and the same local project saved in Codex Desktop. The shared `codex-bridge-desktop` connector has its own legacy route; it does not establish a native Code sender identity. Saved configuration is not proof of a live connection. Complete [verification](#verify-the-installation) in the actual clients.
|
|
56
|
+
|
|
57
|
+
Automatic setup runs only for a **global npm install**. Local `npm install` and `npm ci` do not change app settings. Set `CODEX_BRIDGE_SKIP_SETUP=1`, or pass `--ignore-scripts`, to install the package without configuring apps. The optional [workflow skill](#workflow-skill--npx-skills), VS Code preview, and hosted ChatGPT pairing retain their separate setup steps.
|
|
58
|
+
|
|
59
|
+
### Setup recovery and checks
|
|
60
|
+
|
|
61
|
+
If an app configuration step fails, the npm install retains the package and its commands so setup can be repaired. A successful npm exit alone does not mean all registrations are configured. If setup reports an incomplete component, correct its reported issue and rerun:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
codex-bridge-setup
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
On Windows use `codex-bridge-setup.cmd`. `codex-mcp-bridge setup` is an equivalent entry point. Repeated setup keeps existing settings and reports conflicts rather than overwriting unrelated registrations.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
codex-bridge-setup --check
|
|
71
|
+
codex-bridge-setup --dry-run
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
`--check` inspects saved registrations without sending work. Explicit setup and `--check` exit with a nonzero status when configuration is incomplete. `--dry-run` lists planned components and configuration paths without downloads or writes. Add `--json` for structured output, or `--no-download` to require an already available Codex CLI. Setup never labels a saved registration as a verified live exchange.
|
|
43
75
|
|
|
44
76
|
### Package — Homebrew
|
|
45
77
|
|
|
@@ -55,24 +87,24 @@ brew install buidangminh23/tap/codex-mcp-bridge
|
|
|
55
87
|
brew upgrade codex-mcp-bridge
|
|
56
88
|
```
|
|
57
89
|
|
|
58
|
-
The installers record Homebrew's stable `opt` paths, so registrations keep working after an upgrade and running bridges reload
|
|
90
|
+
Run `codex-bridge-setup` after installing through Homebrew. The installers record Homebrew's stable `opt` paths, so registrations keep working after an upgrade and running bridges reload compatible code changes. Keep one install channel: whichever of npm or Homebrew comes first on `PATH` provides the commands.
|
|
59
91
|
|
|
60
92
|
[Windows](#windows-powershell) · [macOS](#macos-terminal) · [Claude Code](#register-claude-code) · [Antigravity](#antigravity-app-and-cli) · [VS Code](#vs-code-extensions--windows-preview) · [Linux / WSL](#linux--wsl-bash) · [NPX Skills](#workflow-skill--npx-skills) · [ChatGPT plugin](#chatgpt-plugin)
|
|
61
93
|
|
|
62
94
|
| Integration | Setup |
|
|
63
95
|
| --- | --- |
|
|
64
|
-
| Claude Desktop Code → Codex Desktop |
|
|
65
|
-
| Claude Code CLI → local Codex app-server |
|
|
66
|
-
| Claude Desktop shared MCP → local Codex app-server |
|
|
67
|
-
| Codex → Claude Desktop Code | `claude-
|
|
68
|
-
| Codex / Claude Desktop Code → Antigravity App or CLI | Antigravity
|
|
69
|
-
| Antigravity App → Codex / Claude Desktop Code |
|
|
96
|
+
| Claude Desktop Code → Codex Desktop | Automatic native setup on Windows/macOS |
|
|
97
|
+
| Claude Code CLI → local Codex app-server | Automatic on Linux; optional manual CLI mode on Windows/macOS |
|
|
98
|
+
| Claude Desktop shared MCP → local Codex app-server | Automatic `codex-bridge-desktop` registration |
|
|
99
|
+
| Codex → Claude Desktop Code | Automatic `claude-bridge` registration |
|
|
100
|
+
| Codex / Claude Desktop Code → Antigravity App or CLI | Automatic Antigravity registrations |
|
|
101
|
+
| Antigravity App → Codex / Claude Desktop Code | Automatic outbound registration and sidecar |
|
|
70
102
|
| Claude Code ↔ Codex inside VS Code | Separate Windows preview registrations below |
|
|
71
103
|
| ChatGPT → paired Codex Desktop | Hosted plugin plus `codex-sites-connector --pair` |
|
|
72
104
|
|
|
73
105
|
### Antigravity App and CLI
|
|
74
106
|
|
|
75
|
-
Install and sign in to the Antigravity App and/or `agy` CLI
|
|
107
|
+
The global npm setup registers all Antigravity components. Install and sign in to the Antigravity App and/or `agy` CLI to use them. The following commands are optional for selective manual setup or repair:
|
|
76
108
|
|
|
77
109
|
```bash
|
|
78
110
|
antigravity-mcp-bridge-install --all
|
|
@@ -133,9 +165,12 @@ Outbound support targets existing local Codex tasks and live Claude Desktop Code
|
|
|
133
165
|
|
|
134
166
|
### Windows (PowerShell)
|
|
135
167
|
|
|
136
|
-
Install and sign in to [Codex Desktop](https://developers.openai.com/codex/app) and [Claude Desktop](https://claude.com/download). Save the project in Codex Desktop and open the same directory in Claude Desktop's **Code tab**.
|
|
168
|
+
Install and sign in to [Codex Desktop](https://developers.openai.com/codex/app) and [Claude Desktop](https://claude.com/download). Save the project in Codex Desktop and open the same directory in Claude Desktop's **Code tab**. The [global npm command](#package--npm) configures both apps, the shared `codex-bridge-desktop` connector, and Antigravity. Then [verify](#verify-the-installation).
|
|
137
169
|
|
|
138
|
-
|
|
170
|
+
<details>
|
|
171
|
+
<summary>Optional manual native setup</summary>
|
|
172
|
+
|
|
173
|
+
These advanced commands require an existing Codex CLI on PATH. If it is missing, use `codex-bridge-setup.cmd` to resolve or install it automatically. A separately managed CLI can instead be installed with `winget install --id OpenAI.Codex --exact` and signed in with `codex.exe login`.
|
|
139
174
|
|
|
140
175
|
```powershell
|
|
141
176
|
$env:CODEX_EXE = (Get-Command codex.exe).Source
|
|
@@ -144,11 +179,16 @@ $env:CODEX_BRIDGE_DESKTOP_TASKS = "1"
|
|
|
144
179
|
claude-mcp-bridge-install.cmd
|
|
145
180
|
```
|
|
146
181
|
|
|
147
|
-
|
|
182
|
+
For manual setup, also [register Claude Code](#register-claude-code) and check [relay pipe forwarding](#native-relay-pipe-forwarding).
|
|
183
|
+
|
|
184
|
+
</details>
|
|
148
185
|
|
|
149
186
|
### macOS (Terminal)
|
|
150
187
|
|
|
151
|
-
Install and sign in to Codex Desktop and Claude Desktop. Save the project in Codex Desktop and open the same directory in Claude Desktop's **Code tab**.
|
|
188
|
+
Install and sign in to Codex Desktop and Claude Desktop. Save the project in Codex Desktop and open the same directory in Claude Desktop's **Code tab**. Run the [global npm command](#package--npm), then [verify](#verify-the-installation). Setup selects the trusted app-bundled relay runtime when available and initializes the relay executor.
|
|
189
|
+
|
|
190
|
+
<details>
|
|
191
|
+
<summary>Optional manual native setup</summary>
|
|
152
192
|
|
|
153
193
|
```bash
|
|
154
194
|
npm install -g @openai/codex@latest
|
|
@@ -157,13 +197,15 @@ codex-native-relay-install --desktop-tasks
|
|
|
157
197
|
CODEX_BRIDGE_DESKTOP_TASKS=1 claude-mcp-bridge-install
|
|
158
198
|
```
|
|
159
199
|
|
|
160
|
-
Keep bootstrap enabled on the first relay install.
|
|
200
|
+
Keep bootstrap enabled on the first manual relay install. Also [register Claude Code](#register-claude-code) and check [relay pipe forwarding](#native-relay-pipe-forwarding).
|
|
201
|
+
|
|
202
|
+
</details>
|
|
161
203
|
|
|
162
204
|
### Register Claude Code
|
|
163
205
|
|
|
164
|
-
Claude Desktop and Claude Code have separate MCP registrations.
|
|
206
|
+
Global npm setup creates the user-level Code registration automatically. Claude Desktop and Claude Code have separate MCP registrations. The commands below are optional manual alternatives; they require the [Claude Code CLI](https://code.claude.com/docs/en/setup). Replace the example project path with the actual directory and preserve custom settings if `codex-bridge` is already registered.
|
|
165
207
|
|
|
166
|
-
Native Desktop handoffs require a verified Claude Desktop **Code** session. A shared Desktop chat MCP registration cannot establish that sender identity.
|
|
208
|
+
Native Desktop handoffs require a verified Claude Desktop **Code** session. A shared Desktop chat MCP registration cannot establish that sender identity. Automatic setup safely renames a recognized shared `codex-bridge` entry to `codex-bridge-desktop`, retaining its contents, so it cannot shadow the Code registration. A conflicting target or unknown entry is reported for review. For manual edits, close Claude first and keep the two entry names distinct.
|
|
167
209
|
|
|
168
210
|
<details>
|
|
169
211
|
<summary>Windows PowerShell</summary>
|
|
@@ -213,11 +255,11 @@ claude mcp add --scope user codex-bridge \
|
|
|
213
255
|
|
|
214
256
|
Separate multiple allowed directories with `;` on Windows or `:` on macOS/Linux.
|
|
215
257
|
|
|
216
|
-
`codex-bridge-code-install`
|
|
258
|
+
`codex-bridge-code-install --install` now creates or updates the supervised Code entry; `--install --dry-run` previews it. The complete `codex-bridge-setup` command also supplies the other registrations and prerequisites. The helper's existing `--check` and policy migration modes remain available; see [project onboarding](docs/project-onboarding.md).
|
|
217
259
|
|
|
218
260
|
### Claude Desktop shared MCP — legacy option
|
|
219
261
|
|
|
220
|
-
|
|
262
|
+
Global setup includes this connector as **`codex-bridge-desktop`** in Claude Desktop's shared MCP configuration. It connects ordinary chat to local Codex app-server sessions. For verified handoffs into Codex Desktop conversations, use the Code-tab route above. The following commands are optional manual alternatives and require an available, signed-in Codex CLI.
|
|
221
263
|
|
|
222
264
|
**Windows PowerShell**
|
|
223
265
|
|
|
@@ -225,16 +267,16 @@ This optional registration connects a shared Claude Desktop MCP server to local
|
|
|
225
267
|
$env:CODEX_EXE = (Get-Command codex.exe).Source
|
|
226
268
|
$env:CODEX_BRIDGE_DESKTOP_TASKS = "0"
|
|
227
269
|
$env:CODEX_BRIDGE_AUTOSTART = "1"
|
|
228
|
-
codex-mcp-bridge-install.cmd
|
|
270
|
+
codex-mcp-bridge-install.cmd --entry-name codex-bridge-desktop
|
|
229
271
|
```
|
|
230
272
|
|
|
231
273
|
**macOS Terminal**
|
|
232
274
|
|
|
233
275
|
```bash
|
|
234
|
-
CODEX_BRIDGE_DESKTOP_TASKS=0 CODEX_BRIDGE_AUTOSTART=1 codex-mcp-bridge-install
|
|
276
|
+
CODEX_BRIDGE_DESKTOP_TASKS=0 CODEX_BRIDGE_AUTOSTART=1 codex-mcp-bridge-install --entry-name codex-bridge-desktop
|
|
235
277
|
```
|
|
236
278
|
|
|
237
|
-
|
|
279
|
+
Close and reopen Claude after active work finishes to load changed shared configuration. A fresh `--entry-name codex-bridge-desktop` registration defaults to legacy mode even when the native relay is configured. Existing custom modes are preserved. `--desktop-tasks` does not make a shared Desktop chat server a verified Code sender.
|
|
238
280
|
|
|
239
281
|
### VS Code extensions — Windows preview
|
|
240
282
|
|
|
@@ -267,7 +309,7 @@ If you register the relay by hand, add the same line and append the variable nam
|
|
|
267
309
|
|
|
268
310
|
### Linux / WSL (Bash)
|
|
269
311
|
|
|
270
|
-
Use Node.js 22.13+ and signed-in Codex and Claude Code
|
|
312
|
+
The global npm command configures local app-server mode on Linux/WSL and resolves the Codex CLI automatically. Use Node.js 22.13+ and signed-in Codex and Claude Code under the same Linux user. Native Desktop integration requires Windows or macOS. WSL and Windows have separate paths and registrations. The following commands are optional manual alternatives.
|
|
271
313
|
|
|
272
314
|
<details>
|
|
273
315
|
<summary>CLI registration commands</summary>
|
|
@@ -400,7 +442,9 @@ This repository ships a hosted ChatGPT plugin and the skill above. It does not c
|
|
|
400
442
|
|
|
401
443
|
### Verify the installation
|
|
402
444
|
|
|
403
|
-
|
|
445
|
+
Run `codex-bridge-setup --check` (`codex-bridge-setup.cmd --check` on Windows) to inspect saved registrations. An incomplete result names the component requiring attention; rerun setup after correcting it.
|
|
446
|
+
|
|
447
|
+
Reconnect the affected MCP servers in the actual client tasks; Claude Code provides `/mcp`. If the app has not loaded the new registrations, close and reopen it after active work finishes. Setup does not kill or restart apps. Run these **MCP tools** inside the apps:
|
|
404
448
|
|
|
405
449
|
| Client | Tool |
|
|
406
450
|
|---|---|
|
|
@@ -408,6 +452,7 @@ Reconnect the affected MCP servers in the actual client tasks; Claude Code provi
|
|
|
408
452
|
| Codex | `claude_bridge_status` |
|
|
409
453
|
| Codex Desktop | `native_relay_status` |
|
|
410
454
|
| Codex / Claude Desktop Code with Antigravity installed | `antigravity_bridge_status` |
|
|
455
|
+
| Antigravity App | `agent_bridge_status` |
|
|
411
456
|
|
|
412
457
|
To check CLI registrations without sending work:
|
|
413
458
|
|
|
@@ -416,7 +461,7 @@ codex mcp list
|
|
|
416
461
|
claude mcp list
|
|
417
462
|
```
|
|
418
463
|
|
|
419
|
-
On Windows use `codex.exe mcp list`. An installed skill is listed separately with `npx skills list` (add `-g` for user-wide skills); it is not an MCP registration.
|
|
464
|
+
These optional CLI checks require the respective CLI on PATH; the complete setup check can also use its managed Codex CLI. On Windows use `codex.exe mcp list`. An installed skill is listed separately with `npx skills list` (add `-g` for user-wide skills); it is not an MCP registration.
|
|
420
465
|
|
|
421
466
|
Send a short message and confirm its reply **in both directions**. Registration alone does not prove delivery.
|
|
422
467
|
|
|
@@ -454,13 +499,263 @@ Dispatch expires after two minutes; operation history remains stored. Disconnect
|
|
|
454
499
|
|
|
455
500
|
## Troubleshooting
|
|
456
501
|
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
502
|
+
Start by identifying the failed layer: installation, saved registration, live MCP connection, sender identity, delivery, or reply observation. A successful npm install proves neither that setup completed nor that an already-open app loaded the new server. An accepted delivery can still have an unavailable reply.
|
|
503
|
+
|
|
504
|
+
### Check the installation and saved settings
|
|
505
|
+
|
|
506
|
+
On Windows, run these in PowerShell:
|
|
507
|
+
|
|
508
|
+
```powershell
|
|
509
|
+
node --version
|
|
510
|
+
npm.cmd --version
|
|
511
|
+
npm.cmd list -g @minhspark/codex-mcp-bridge --depth=0
|
|
512
|
+
codex-mcp-bridge.cmd --version
|
|
513
|
+
codex-bridge-setup.cmd --check --json
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
Node.js 22.13+ is required. If a command is missing, open a new terminal and check that Node and the global npm command directory are on `PATH`. Use the `.cmd` launchers when PowerShell blocks an npm `.ps1` shim; changing the machine's execution policy is unnecessary. On macOS/Linux, omit `.cmd`.
|
|
517
|
+
|
|
518
|
+
If the package or registrations are missing, use the complete installation command:
|
|
519
|
+
|
|
520
|
+
```powershell
|
|
521
|
+
npm.cmd install -g @minhspark/codex-mcp-bridge@latest --allow-scripts=@minhspark/codex-mcp-bridge
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
On npm 12, `1 package had install scripts blocked` means the setup hook did not run. The scoped `--allow-scripts` flag authorizes this package's hook; it does not enable every package's scripts globally. Add `--foreground-scripts` to see lifecycle progress. A local `npm install`/`npm ci`, `--ignore-scripts`, or `CODEX_BRIDGE_SKIP_SETUP=1` intentionally skips automatic setup.
|
|
525
|
+
|
|
526
|
+
For an already-installed package, preview and apply setup explicitly:
|
|
527
|
+
|
|
528
|
+
```powershell
|
|
529
|
+
codex-bridge-setup.cmd --dry-run
|
|
530
|
+
codex-bridge-setup.cmd
|
|
531
|
+
codex-bridge-setup.cmd --check
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
`--dry-run` does not write settings or download tools. Setup resolves an existing Codex CLI or installs its managed official copy; `--no-download` requires one to be available already. A failed postinstall configuration step retains the npm package so it can be repaired. Explicit setup and `--check` return a nonzero exit code for incomplete configuration. Read the named component's error; running the same command cannot resolve a deliberate opt-out or an unrelated conflicting registration.
|
|
535
|
+
|
|
536
|
+
### Missing module, stale source path, or a different running version
|
|
537
|
+
|
|
538
|
+
**Symptoms:** `Cannot find module ... mcp-supervisor.mjs`, followed by `CONNECTION_CLOSED`; or npm reports a new version while the actual bridge still reports an older one.
|
|
539
|
+
|
|
540
|
+
Check the installed entry point without starting an MCP server:
|
|
541
|
+
|
|
542
|
+
```powershell
|
|
543
|
+
$bridgeRoot = Join-Path ((npm.cmd root -g).Trim()) '@minhspark/codex-mcp-bridge'
|
|
544
|
+
Test-Path -LiteralPath (Join-Path $bridgeRoot 'src\mcp-supervisor.mjs')
|
|
545
|
+
Get-Content -LiteralPath (Join-Path $bridgeRoot 'package.json') | ConvertFrom-Json | Select-Object name, version
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
If the entry point is absent, reinstall with the command above. If it exists, compare that directory with the `command` and `args` of the **affected client's** MCP entry. A registration pointing into an old source checkout will continue running that checkout even after a global npm upgrade. `codex-mcp-bridge --version` reports the command on `PATH`; `codex_bridge_status` in Claude and `claude_bridge_status` / `native_relay_status` in Codex report the processes those apps actually loaded.
|
|
549
|
+
|
|
550
|
+
In `claude_bridge_status`, read the text line `bridge: claude-bridge <version>` together with `runtime pid`, `loaded source`, `disk source` and `runtime state`. Its structured `runtime` object carries source/runtime metadata, not a separate version field. The native companion prints its version on the `companion: codex-native-relay <version>` line.
|
|
551
|
+
|
|
552
|
+
Run setup from the intended installation, then [reconnect the affected MCP](#reconnect-the-actual-client). Setup retargets recognized original bridge launchers from older package/source paths and preserves their custom environment, project scope, and other supported settings. A missing previously recorded absolute `CODEX_BIN` can be repaired with the resolved binary; valid customized binary paths remain preserved. Setup refuses an unknown wrapper, conflicting transport, or unrelated entry using the same name. Inspect such a conflict and retain its settings before making an intentional manual change; deleting all MCP entries or replacing the whole configuration is unnecessary. Project-specific Code entries are preserved and may still shadow the new user-level entry.
|
|
553
|
+
|
|
554
|
+
### Claude Code sender ancestry and the two connector names
|
|
555
|
+
|
|
556
|
+
**Symptom:** `This MCP process has no registered Claude Desktop Code session in its parent ancestry`.
|
|
557
|
+
|
|
558
|
+
This is a sender-identity failure, not proof that Codex is offline. A shared Claude Desktop MCP process cannot establish which native Code task sent the request. Use the matching registration:
|
|
559
|
+
|
|
560
|
+
| Entry | Loaded by | Route |
|
|
561
|
+
|---|---|---|
|
|
562
|
+
| `codex-bridge` | Claude Code user configuration: `~/.claude.json`, or `CLAUDE_CONFIG_DIR/.claude.json` when set | Verified Claude Desktop **Code** task to native Codex Desktop on Windows/macOS |
|
|
563
|
+
| `codex-bridge-desktop` | Claude Desktop's shared `claude_desktop_config.json` | Ordinary Chat to the legacy local Codex app-server |
|
|
564
|
+
|
|
565
|
+
Run setup to create the user-level Code registration. It can rename a recognized shared `codex-bridge` entry to `codex-bridge-desktop`; if that name is already occupied, it reports the collision instead of discarding either entry. Check project-specific overrides if the problem persists. Then reconnect `codex-bridge` **inside the intended Code session**, and run `codex_bridge_status` there with the exact project directory saved in Codex Desktop.
|
|
566
|
+
|
|
567
|
+
The shared connector's presence in Claude settings does not prove the Code registration is active. Setting native mode on a shared Chat connector does not create the missing Code ancestry. Existing custom routing modes remain preserved during setup; choose the Code route when the intended destination is a native Codex Desktop conversation.
|
|
568
|
+
|
|
569
|
+
If an older installation has only a shared native-mode entry, migration seeds the Code registration from its existing settings and restrictions. The shared entry's native mode is preserved and reported as incomplete by `--check`, because ordinary Chat cannot supply Code ancestry. To explicitly use that shared connector for **local app-server** sessions, apply this targeted repair after its active work finishes:
|
|
570
|
+
|
|
571
|
+
```powershell
|
|
572
|
+
$setupPreviewJson = codex-bridge-setup.cmd --dry-run --json
|
|
573
|
+
if (-not $? -or $LASTEXITCODE -ne 0) { throw 'Setup preview failed; no settings were changed.' }
|
|
574
|
+
$setupPreview = $setupPreviewJson | ConvertFrom-Json -ErrorAction Stop
|
|
575
|
+
if ($setupPreview.dryRun -ne $true -or @($setupPreview.files).Count -lt 2) {
|
|
576
|
+
throw 'Setup preview did not select a shared configuration file; no settings were changed.'
|
|
577
|
+
}
|
|
578
|
+
$sharedConfig = $setupPreview.files[1]
|
|
579
|
+
if ($sharedConfig -isnot [string] -or [string]::IsNullOrWhiteSpace($sharedConfig) -or
|
|
580
|
+
-not (Test-Path -LiteralPath $sharedConfig -PathType Leaf)) {
|
|
581
|
+
throw 'The selected shared configuration file is missing; finish setup before this repair.'
|
|
582
|
+
}
|
|
583
|
+
$previousDesktopConfig = $env:CLAUDE_DESKTOP_CONFIG
|
|
584
|
+
$previousDesktopTasks = $env:CODEX_BRIDGE_DESKTOP_TASKS
|
|
585
|
+
$previousAutostart = $env:CODEX_BRIDGE_AUTOSTART
|
|
586
|
+
try {
|
|
587
|
+
$env:CLAUDE_DESKTOP_CONFIG = $sharedConfig
|
|
588
|
+
$env:CODEX_BRIDGE_DESKTOP_TASKS = '0'
|
|
589
|
+
$env:CODEX_BRIDGE_AUTOSTART = '1'
|
|
590
|
+
codex-mcp-bridge-install.cmd --entry-name codex-bridge-desktop --quiet
|
|
591
|
+
if ($LASTEXITCODE -ne 0) { throw 'Shared connector repair failed; review the installer error.' }
|
|
592
|
+
} finally {
|
|
593
|
+
$env:CLAUDE_DESKTOP_CONFIG = $previousDesktopConfig
|
|
594
|
+
$env:CODEX_BRIDGE_DESKTOP_TASKS = $previousDesktopTasks
|
|
595
|
+
$env:CODEX_BRIDGE_AUTOSTART = $previousAutostart
|
|
596
|
+
}
|
|
597
|
+
codex-bridge-setup.cmd --check
|
|
598
|
+
```
|
|
599
|
+
|
|
600
|
+
The preview selects the shared configuration path, including an unambiguous MSIX installation; the standalone installer uses that exact file. The temporary environment values are restored even if the repair fails. Then reconnect the shared connector. This explicitly selects its legacy route; native Code handoffs still use `codex-bridge`. Setup does not silently change an existing routing choice to make a check pass.
|
|
601
|
+
|
|
602
|
+
### Microsoft Store Claude or multiple data directories
|
|
603
|
+
|
|
604
|
+
**Symptoms:** setup reports multiple Claude Desktop data roots, or discovery cannot match the signed-in account/task despite the correct Code registration.
|
|
605
|
+
|
|
606
|
+
Setup detects both the ordinary `%APPDATA%\Claude` directory and Microsoft Store/MSIX package data under `%LOCALAPPDATA%\Packages\...\LocalCache\Roaming\Claude`. It uses verified account state and existing roots to select an unambiguous location; it does not guess between competing installations.
|
|
607
|
+
|
|
608
|
+
If selection is ambiguous, identify the data directory used by the running Claude installation and pass that exact directory. Replace the placeholder below before running it:
|
|
609
|
+
|
|
610
|
+
```powershell
|
|
611
|
+
$env:CLAUDE_DESKTOP_USER_DATA = 'C:\path\to\active\Claude'
|
|
612
|
+
codex-bridge-setup.cmd --dry-run
|
|
613
|
+
codex-bridge-setup.cmd
|
|
614
|
+
codex-bridge-setup.cmd --check
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
`CLAUDE_DESKTOP_USER_DATA` selects the **data directory** used for account/task verification. `CLAUDE_DESKTOP_CONFIG` is a separate optional override for the full path to the shared `claude_desktop_config.json` file. Neither is `CLAUDE_CONFIG_DIR`, which selects the Code configuration directory. If an existing bridge entry pins a different data root, review and update that explicit setting as well: setup preserves custom environment values. Reconnect afterwards. Do not copy sign-in files between roots or publish their contents to diagnose this problem.
|
|
618
|
+
|
|
619
|
+
### Reconnect the actual client
|
|
620
|
+
|
|
621
|
+
**Symptoms:** the connector still says `Failed`, tools remain missing, or status still shows the old runtime after installation or a window reload.
|
|
622
|
+
|
|
623
|
+
1. Save the original task/delivery IDs and let active work finish before replacing its connection. A pending or uncertain delivery can intentionally defer automatic worker reload.
|
|
624
|
+
2. In the affected Claude **Code** session, open `/mcp`, select `codex-bridge`, and reconnect. In ordinary Chat, inspect the separate `codex-bridge-desktop` connector. Reconnect the relevant Codex MCP entries in their actual task as needed.
|
|
625
|
+
3. If the client cannot reload that connection, open a new Code session in the same saved project to verify the registration. Reopen the app only after active work is safe to stop. A window's **Reload** action may refresh its UI while retaining the old Code process and MCP failure state.
|
|
626
|
+
4. Call the status tool from that client and compare its runtime version, registration and sender/relay state. A standalone process answering `initialize`, or printing `ready`, does not verify the app's connection.
|
|
627
|
+
|
|
628
|
+
An old worker cannot learn a newly written client environment from a disk update alone. Compatible source changes can reload through the supervisor when idle, but changed launchers/environment or a blocked old connection may still require reconnecting. Do not restart active work merely to clear a receipt or make a status indicator green.
|
|
629
|
+
|
|
630
|
+
### Codex accepted the message, but no answer was returned
|
|
631
|
+
|
|
632
|
+
**Symptoms:** `deliveryStatus: accepted`, `turnId: null`, an empty response, or repeated 40-second waits even though a reply is visible in Codex Desktop.
|
|
633
|
+
|
|
634
|
+
Acceptance and reply correlation are separate. A null `turnId` means the bridge has not established the exact response turn; it does not mean the prompt was never delivered. A 40-second observation timeout does not cancel the task. Preserve the original `threadId` and `deliveryId`.
|
|
635
|
+
|
|
636
|
+
For a normal pending result with `nextAction: wait_codex_reply`, call this **MCP tool**, using the returned receipt:
|
|
637
|
+
|
|
638
|
+
```json
|
|
639
|
+
{"deliveryId":"<original-delivery-UUID>","timeoutSec":40}
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
Call `wait_codex_reply` sequentially with that same ID while it remains pending. Do not resend the prompt to obtain its answer. Since [1.24.1](CHANGELOG.md#1241---2026-10-29), an accepted send whose reply cannot be verified reports `observation_unavailable` rather than a generic send failure. [1.25.0](CHANGELOG.md#1250---2026-10-30) also ends the specific wait where a new native turn stays finished and idle but cannot be correlated after a bounded grace period and a fresh state check. That change reports uncertainty; it does not invent or recover a reply marker.
|
|
643
|
+
|
|
644
|
+
When `nextAction` is `inspect_existing_task`, read the original task with `read_codex_thread`:
|
|
645
|
+
|
|
646
|
+
```json
|
|
647
|
+
{"threadId":"<original-thread-ID>","limit":10}
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
If an exact response `turnId` was verified, include it for an authoritative turn read. Without it, recent history can omit items and does not prove a visible answer belongs to this delivery. Inspect that original conversation in Codex Desktop when correlation remains unavailable. Retain the receipt and check whether the original work completed before any distinct follow-up. Do not send the original action again, create a replacement task, or attribute the latest unrelated turn to it. An unknown receipt after reconnecting is also not evidence of non-delivery.
|
|
651
|
+
|
|
652
|
+
### Connection timeout versus sender inspection timeout
|
|
653
|
+
|
|
654
|
+
These failures occur at different stages:
|
|
655
|
+
|
|
656
|
+
| Error | Meaning | Next step |
|
|
657
|
+
|---|---|---|
|
|
658
|
+
| `CONNECT_TIMEOUT` / connection timed out after `30000ms` | The host did not finish MCP initialization within its connection deadline. | Verify the installed entry point, selected runtime path, setup result and actual client reload; then collect startup timing if it recurs. |
|
|
659
|
+
| `process_inspection:INSPECTOR_START_TIMEOUT` | The Windows identity helper did not become ready within its startup deadline. | Retry one read-only status call after the machine settles; retain the startup diagnostic if it repeats. |
|
|
660
|
+
| `process_inspection:INSPECTION_TIMEOUT` | The bounded caller-ancestry read could not complete, so the sender remains unverified. | Update both sides and retry status/read/wait sequentially. Inspect the existing receipt if a send may already have been accepted. |
|
|
661
|
+
|
|
662
|
+
Setup prewarms immutable runtime snapshots. A line such as `prepared index.mjs runtime ... (reused)` means the runtime **directory** was reused; it does not guarantee a metadata-cache hit or eliminate integrity checks. Several simultaneous MCP starts and slow preparation were observed in a timeout report, but they did not establish its root cause. The reported 30-second initialization timeout was not reproduced during the fix and is **not claimed resolved** by prewarming or configuration repair.
|
|
663
|
+
|
|
664
|
+
The older Windows inspector fix in [1.19.1](CHANGELOG.md#1191---2026-09-29) separated helper startup from the ancestry-read deadline. [1.25.0](CHANGELOG.md#1250---2026-10-30) shares only an identical **in-flight** inspection among concurrent callers. Completed results and failures are discarded; later calls still verify current process, task and account identity. This is not a permanent authorization cache or a guarantee that a heavily loaded machine cannot time out.
|
|
665
|
+
|
|
666
|
+
For a repeatable failure, capture the app/OS/Node versions, the version reported by the actual MCP, which installation its command uses, the elapsed preparation time, the exact timeout code, and whether several sessions started together. Share sanitized diagnostics, excluding tokens, account data, conversation contents and personal paths. Do not bypass sender verification or raise unrelated timeouts as a substitute for identifying the failed stage.
|
|
667
|
+
|
|
668
|
+
### Relay unavailable, stale pipe, or an active writer
|
|
669
|
+
|
|
670
|
+
**Symptoms:** `RELAY_UNAVAILABLE`, `connect ENOENT`, a missing native relay socket, or `thread ... already has an active writer`.
|
|
671
|
+
|
|
672
|
+
Native Desktop handoffs require Codex Desktop to be installed, signed in and open on Windows/macOS. The app runs `codex-native-relay` while a regular task has its MCP servers loaded. The bridge can wake a saved task on both platforms when the relay is absent; the background keeper requires a live bridge client and an eligible saved task. On Windows, opening the task can bring the app to the foreground. Explicit keeper/wake opt-outs remain respected.
|
|
673
|
+
|
|
674
|
+
Open a regular task in the intended saved project, then check `native_relay_status` there and `codex_bridge_status` in the sending Code session. If the relay died while that task stayed loaded, reopening the same task may not restart it: reconnect its MCP or open another regular task. Do not use the internal **Native Relay** executor task as the interactive destination. Rerun setup if registration/executor configuration is missing, and verify [native relay pipe forwarding](#native-relay-pipe-forwarding). Do not persist a pipe address copied from a different app process; discovery must validate its owner.
|
|
675
|
+
|
|
676
|
+
An active-writer error usually identifies the legacy app-server route attempting to attach to a thread already owned by Desktop. Use the registered native Code-to-Desktop route for that conversation. Do not start another app-server or terminate shared work to force access. The ordinary `codex-bridge-desktop` Chat connector remains a legacy app-server connection; it is not a substitute for the verified native sender. An unused `CODEX_APP_SERVER_URL` alongside `external app-server disabled` is not by itself a native connection failure.
|
|
677
|
+
|
|
678
|
+
### Codex cannot reach an existing Claude conversation
|
|
679
|
+
|
|
680
|
+
Use native session discovery and peer delivery from the Codex task:
|
|
681
|
+
|
|
682
|
+
1. Call `list_claude_sessions` with the exact absolute `expectedCwd`.
|
|
683
|
+
2. Verify the returned `entrypoint: claude-desktop`, `sessionId`, native `desktop.taskId`, and project directory. Use `read_claude_transcript` with that session identity to confirm the intended unfinished work when needed; a title alone is insufficient.
|
|
684
|
+
3. Call `send_to_claude_session` with the exact session identity as `target`, the independently verified `expectedCwd`, and the returned native ID as `expectedTaskId`. For an exact dormant saved task, `target: "auto"` plus its `expectedTaskId` lets the bridge reopen and rediscover that task without substituting another conversation.
|
|
685
|
+
4. Preserve the returned `msgId`. After a timeout, inspect it with `read_claude_delivery`; read `read_claude_inbox` for late replies and correlated bridge-status notifications.
|
|
686
|
+
|
|
687
|
+
If no eligible session appears, open the intended Claude **Code** task in the same project and check sign-in, data-root selection and sender status. A new ordinary Chat window or unrelated CLI session does not establish that native recipient. [1.25.0](CHANGELOG.md#1250---2026-10-30) clarifies the tool instructions to use this route; it cannot guarantee every model follows them. External Computer Use typing/clicking is not a delivery fallback for an already-open session.
|
|
688
|
+
|
|
689
|
+
`PEER_REPLY_PENDING` protects an earlier unresolved message. A `held` receipt, `CLAUDE_RECIPIENT_INBOUND_POLICY`, or `CLAUDE_RECIPIENT_CLASS_MISMATCH` identifies an actual recipient policy/permission boundary. Inspect the original receipt and task; resolve the stated policy through the user's intended host settings. Installing a newer bridge does not authorize changing permissions. An `interrupted` bridge-status notification ends observation only: it is not Claude's answer, does not cancel background work, and does not make retrying the original action safe.
|
|
690
|
+
|
|
691
|
+
### Normal startup output labelled as an error
|
|
692
|
+
|
|
693
|
+
Claude may label stderr as `ERR: Server stderr`, including ordinary `[bridge-supervisor] preparing`, `prepared`, and `[codex-mcp-bridge] ready` lines. The label alone is not a failure. Look for the actual connection result, exception, or timeout and verify the tool from the client. Keep diagnostics on stderr: stdout is reserved for MCP protocol messages, and redirecting logs there can break initialization.
|
|
694
|
+
|
|
695
|
+
### Historical fixes by release
|
|
696
|
+
|
|
697
|
+
The catalog below records user-visible failures fixed in earlier releases. It is not a list of bugs known to remain in the current version. A similar symptom can have a different cause; use the linked recovery section and verify the **loaded** runtime after upgrading. The changelog links identify the actual fix versions, including later follow-up fixes.
|
|
698
|
+
|
|
699
|
+
<details>
|
|
700
|
+
<summary>Installation, upgrades, settings and startup</summary>
|
|
701
|
+
|
|
702
|
+
| Historical symptom | Fix version and cause | Current recovery |
|
|
703
|
+
|---|---|---|
|
|
704
|
+
| npm installed the package, but a fresh Code registration or Store-app configuration was missing | [1.25.0](CHANGELOG.md#1250---2026-10-30): complete global setup, initial Code registration, distinct shared connector, MSIX selection and recognized legacy-path migration. | Run the scoped one-command install, `--check`, and the [registration/data-root steps](#claude-code-sender-ancestry-and-the-two-connector-names). Reconnect afterwards. |
|
|
705
|
+
| A successful npm install printed “installed version could not be verified” in Claude Code's Bash tool | [1.22.17](CHANGELOG.md#12217---2026-10-22): shell snapshots kept the npm wrapper but dropped its separate helper. | Upgrade and reload an explicitly installed footer's shell/profile; verify the package with `npm list -g`. Do not infer package failure from the old footer warning. |
|
|
706
|
+
| Codex entries stayed stale, or installer migration refused an entry containing `env_vars` | [1.22.12](CHANGELOG.md#12212---2026-10-20): launcher migration now preserves the existing TOML entry and inherited native-pipe environment. | Run current setup and reconnect. Custom settings that cannot be preserved automatically still require reviewing the reported conflict. |
|
|
707
|
+
| Homebrew upgrade/cleanup removed a registered Cellar path; a symlinked supervisor exited without serving MCP | [1.22.7](CHANGELOG.md#1227---2026-10-20): stable `opt` paths, symlink entry detection and upgrade tracking. | Run `brew upgrade buidangminh23/tap/codex-mcp-bridge`, then `codex-bridge-setup`. Verify command paths use the intended install channel. Later [1.22.12](CHANGELOG.md#12212---2026-10-20) also handles the old `env_vars` migration obstacle. |
|
|
708
|
+
| Project-local installation failed with `ENOENT` / `scandir ... node_modules` | [1.19.2](CHANGELOG.md#1192---2026-09-29): runtime preparation now follows Node's hoisted dependency graph instead of requiring a nested dependency directory. | Upgrade the actual local dependency if keeping that installation, or select global setup deliberately. A global update does not replace a separately registered local copy. |
|
|
709
|
+
| Updating files did not update an already-running MCP; cached startup repeatedly reread dependency contents | [1.15.0](CHANGELOG.md#1150---2026-09-07): stable supervisors and idle reload. [1.15.1](CHANGELOG.md#1151---2026-09-14): validated hash metadata and startup timing. | Migrate old direct launchers through setup, reconnect once and inspect reload blockers. Pending deliveries are not disposable; cached preparation does not guarantee a connection deadline. |
|
|
710
|
+
| Re-running the Desktop installer erased custom roots, allowed threads or newer entry properties | [1.11.1](CHANGELOG.md#1111---2026-08-23), extended in [1.15.0](CHANGELOG.md#1150---2026-09-07): preserve existing settings during upgrades. | Use current setup without resetting configuration. If an old version already removed values, recover only the intended settings from a verified backup. |
|
|
711
|
+
| The second bridge reported a hardcoded older version | [1.10.1](CHANGELOG.md#1101---2026-08-20): version synchronization covers both bridge entry points. | Compare installed version and actual client status. Current mismatches usually require checking the selected path or running process rather than trusting one CLI banner. |
|
|
712
|
+
| Windows Git Bash found no sessions under a custom `HOME`; a trimmed GUI `PATH` broke startup | [1.10.0](CHANGELOG.md#1100---2026-08-20): consistent Windows home resolution. [1.1.0](CHANGELOG.md#110---2026-08-17) / [1.2.0](CHANGELOG.md#120---2026-08-17): child PATH and process-tool startup fixes. | Verify the intended home/config overrides and resolved Node command. Reopen the terminal after PATH changes and regenerate the affected registration. |
|
|
713
|
+
| Legacy app-server startup failed because an administrator-managed Codex policy omitted `read-only` | [1.19.4](CHANGELOG.md#1194---2026-10-02): report the policy incompatibility before a generic connection failure. [1.19.6](CHANGELOG.md#1196---2026-10-02): correct readability of policies created by the explicit administrator setup. | Have the policy owner review the reported compatibility/readability error. Ordinary bridge setup does not rewrite administrator policy or require blanket Full access. |
|
|
714
|
+
| Closed MCP clients left orphan workers/sockets; Windows cleanup found files still in use | [1.19.2](CHANGELOG.md#1192---2026-09-29): inspector cleanup. [1.22.11](CHANGELOG.md#12211---2026-10-20) / [1.22.14](CHANGELOG.md#12214---2026-10-21): worker shutdown, draining and dead-socket cleanup. | Upgrade and close affected clients after accepted work finishes. Inspect remaining process ownership instead of killing every Node process or deleting active sockets. |
|
|
715
|
+
|
|
716
|
+
</details>
|
|
717
|
+
|
|
718
|
+
<details>
|
|
719
|
+
<summary>Native relay, project selection and sender/recipient identity</summary>
|
|
720
|
+
|
|
721
|
+
| Historical symptom | Fix version and cause | Current recovery |
|
|
722
|
+
|---|---|---|
|
|
723
|
+
| Relay vanished after app restart or was absent when a companion first started | [1.17.0](CHANGELOG.md#1170---2026-09-21): retry late pipe discovery. [1.22.14](CHANGELOG.md#12214---2026-10-21) / [1.22.16](CHANGELOG.md#12216---2026-10-22): task wake and coordinated background keeper. | Follow [relay recovery](#relay-unavailable-stale-pipe-or-an-active-writer); keep the app and a bridge client open. A dead relay in an already-loaded task may need MCP reconnect or another regular task. |
|
|
724
|
+
| `No handler registered for method: tools/call` or `RELAY_UNAVAILABLE` after a Codex Desktop update | [1.18.2](CHANGELOG.md#1182---2026-09-26): native caller-source compatibility. [1.22.13](CHANGELOG.md#12213---2026-10-20): discover Windows `codex-app-tools-*` pipes instead of probing only browser pipes. | Update/reload the native companion as well as the sending bridge. Check `native_relay_status`; never copy a foreign process's pipe to bypass discovery. |
|
|
725
|
+
| A Windows task opened successfully, but `open_codex_thread` or relay wake reported failure | [1.22.14](CHANGELOG.md#12214---2026-10-21): replace reliance on `explorer.exe`'s misleading exit code with the native URI launcher. | Upgrade/reconnect and inspect the opened task. A navigation error is not evidence that an accepted prompt should be sent again. |
|
|
726
|
+
| A macOS companion appeared installed but every native delivery was unconfirmed | [1.13.4](CHANGELOG.md#1134---2026-09-06): use the Codex-bundled runtime trusted by Desktop. | Run current setup with Codex Desktop installed and reconnect. Keep the runtime selected by the installer; an arbitrary Homebrew/nvm Node may not satisfy native host checks. |
|
|
727
|
+
| “Already has an active writer” / “open in another app” when sending to a visible Codex task | [1.12.0](CHANGELOG.md#1120---2026-09-04): native delivery avoids a second writer. [1.13.1](CHANGELOG.md#1131---2026-09-05): Desktop mode no longer depends on the external app-server. | Use the native Code-to-Desktop route. Legacy app-server tasks and shared Chat routing retain their separate behavior; do not stop other delegations to force access. |
|
|
728
|
+
| Windows replies were one-way or live sessions disappeared during registry rewrites | [1.11.3](CHANGELOG.md#1113---2026-09-03) / [1.12.1](CHANGELOG.md#1121---2026-09-05): Windows named pipes and stable session discovery. [1.15.2](CHANGELOG.md#1152---2026-09-14): accept Claude's `procStart` identity field alongside `procStartFt`. | Update both registrations, reopen the intended Code session if needed, and verify its exact native task and session identity. |
|
|
729
|
+
| An account switch, a large task database or a concurrent metadata update hid an otherwise valid Claude task | [1.14.0](CHANGELOG.md#1140---2026-09-07): per-call account discovery, including Store data. [1.18.1](CHANGELOG.md#1181---2026-09-25): bounded discovery beyond 32 MiB. [1.22.3](CHANGELOG.md#1223---2026-10-15): retry changed metadata snapshots. | Check sign-in and [data-root selection](#microsoft-store-claude-or-multiple-data-directories), then rediscover. Conflicting, archived or persistently changing identities still fail closed; shared Chat still cannot prove Code ancestry. |
|
|
730
|
+
| Windows ancestry checks expired while PowerShell was still starting | [1.19.1](CHANGELOG.md#1191---2026-09-29): separate startup/read deadlines. [1.25.0](CHANGELOG.md#1250---2026-10-30): coalesce identical simultaneous inspections. | Use the [timeout diagnostic steps](#connection-timeout-versus-sender-inspection-timeout). These changes do not establish a fix for every MCP initialization timeout. |
|
|
731
|
+
| Ordinary managed Codex tasks were rejected as unverified senders; some review flags caused incorrect permission classification | [1.19.0](CHANGELOG.md#1190---2026-09-29): support verified managed prompting profiles. [1.13.6](CHANGELOG.md#1136---2026-09-06): correct human-review classification. | Upgrade and inspect `claude_bridge_status`. A real recipient class/inbound-policy mismatch remains a denial; do not change sandbox or approval settings merely to suppress it. |
|
|
732
|
+
| Dormant Claude tasks could not resume; a new Windows conversation opened in “No folder”; an app update broke its URI launcher | [1.19.7](CHANGELOG.md#1197---2026-10-02): exact-task recovery, Windows folder/submission verification and launcher recovery. [1.22.4](CHANGELOG.md#1224---2026-10-19): moved-project discovery for authorized new conversations. | Resume the exact saved task with `target: "auto"` and `expectedTaskId`. A moved directory is a discovery candidate, not proof that an old task is safe to resume. Inspect an existing creation receipt before opening another composer. |
|
|
733
|
+
| A listed human-created thread returned `NOT AUTHORIZED`; a path from another computer resolved incorrectly | [1.11.0](CHANGELOG.md#1110---2026-08-23): explicit thread policy. [1.8.0](CHANGELOG.md#180---2026-08-19) / [1.11.2](CHANGELOG.md#1112---2026-08-28): usable cross-machine path resolution. | Verify the exact saved project and intended grant/thread policy. Listing and mutation have different authorization requirements; setup preserves existing restrictions and cannot authorize a different project. |
|
|
734
|
+
| An Antigravity App restart could leave a sidecar attached to the retired parent | [1.24.0](CHANGELOG.md#1240---2026-10-28): sidecars track native parent identity and exit when that parent stops. | Use current setup and reconnect through the active App. An App receipt confirms native acceptance only; App reply forwarding and new App conversation creation remain unsupported. |
|
|
735
|
+
|
|
736
|
+
</details>
|
|
737
|
+
|
|
738
|
+
<details>
|
|
739
|
+
<summary>Missing replies, pending receipts, duplicate prevention and legacy connection failures</summary>
|
|
740
|
+
|
|
741
|
+
| Historical symptom | Fix version and cause | Current recovery |
|
|
742
|
+
|---|---|---|
|
|
743
|
+
| An accepted Codex send looked failed, or waited despite a finished visible turn | [1.24.1](CHANGELOG.md#1241---2026-10-29): distinguish unavailable observation and accept valid causal-root metadata. [1.25.0](CHANGELOG.md#1250---2026-10-30): bound stable-idle unmatched observation. | Follow [accepted-delivery recovery](#codex-accepted-the-message-but-no-answer-was-returned). Neither fix permits attaching an unrelated visible reply or resending the original action. |
|
|
744
|
+
| Claude stayed at `PEER_REPLY_PENDING` after a background command completed or another peer interrupted it | [1.22.20](CHANGELOG.md#12220---2026-10-24): recognize interruption boundaries. [1.22.21](CHANGELOG.md#12221---2026-10-26): inline completion attachments and out-of-order ancestry. [1.24.1](CHANGELOG.md#1241---2026-10-29): correlated interruption notifications. | Keep the original `msgId`, inspect `read_claude_delivery` and the existing task. A genuine pending background command remains protected; interruption is not cancellation. |
|
|
745
|
+
| Claude's reply appeared in the app but the bridge timed out when the message arrived mid-turn or after compaction | [1.13.7](CHANGELOG.md#1137---2026-09-07) / [1.13.9](CHANGELOG.md#1139---2026-09-07): queued-message formats. [1.22.5](CHANGELOG.md#1225---2026-10-19) / [1.22.15](CHANGELOG.md#12215---2026-10-22): verified compaction continuations. | Inspect the same receipt/transcript. `replyAbsorbed: true` means the turn's closing text may not answer the injected message; do not assume it is a separate completed response. |
|
|
746
|
+
| A short `wait_codex_reply` falsely said another operation held the thread | [1.22.18](CHANGELOG.md#12218---2026-10-22): distinguish an exhausted caller-check budget from an actual held thread. | Update and continue sequential waits with the original delivery ID. If an operation really holds the thread, retain its receipt and wait for it rather than starting another send. |
|
|
747
|
+
| Older Codex tasks had no trusted pre-send watermark or returned empty replies | [1.22.14](CHANGELOG.md#12214---2026-10-21): read `.jsonl.zst` rollouts and follow rematerialization as plain JSONL. | Update and use Node with zstd support (22.15+ or 23.8+). The package's 22.13 minimum alone does not guarantee compressed-rollout support. Inspect the original task; do not manufacture a new watermark by resending. |
|
|
748
|
+
| `A rollout segment changed while reading`, or a same-size Claude transcript update was missed | [1.22.10](CHANGELOG.md#12210---2026-10-20): bounded retry of concurrent rollout appends. [1.22.9](CHANGELOG.md#1229---2026-10-20): precise transcript change detection. | Repeat the original read/wait after updating. Persistently incomplete, replaced or conflicting files still report unavailable; do not edit transcripts or receipts to force validation. |
|
|
749
|
+
| Reply observation broke after relay recovery, or large tool output overflowed transport limits | [1.21.6](CHANGELOG.md#1216---2026-10-12): bounded snapshot fallback and larger response frames. [1.22.0](CHANGELOG.md#1220---2026-10-12): filtered/cursor-paged reads. | Update both bridge and companion. Use exact-turn reads or bounded `responsePreferences` pages; default history omits tool output and is not a complete transcript export. |
|
|
750
|
+
| A completed Codex reply failed exact validation because of a separate memory citation | [1.22.0](CHANGELOG.md#1220---2026-10-12): reconstruct validated citation metadata. [1.22.5](CHANGELOG.md#1225---2026-10-19): preserve exact empty citation formatting and same-turn replies. | Retry observation of the original delivery on the updated runtime. A real reply-ID/hash/history conflict is still rejected. |
|
|
751
|
+
| An accepted creation lost its ID after an account switch temporarily reported workspace `/`; acceptance became unconfirmed after reload | [1.22.6](CHANGELOG.md#1226---2026-10-20): preserve the accepted creation and wait for workspace assignment. [1.22.5](CHANGELOG.md#1225---2026-10-19): persist send acceptance. | Retain `threadId`/`deliveryId` and continue `wait_codex_reply`. A wrong project or changed account still blocks access; never recreate the task just to get its answer. |
|
|
752
|
+
| Concurrent calls created duplicate tasks, or a new independent task reused an older task with the same title | [1.13.2](CHANGELOG.md#1132---2026-09-05): durable creation deduplication. [1.19.0](CHANGELOG.md#1190---2026-09-29): explicit independent `requestId`. [1.21.0](CHANGELOG.md#1210---2026-10-06): durable reply continuation. | Keep the same request ID for recovery of one creation; use a fresh ID only for separately authorized independent work. Continue unfinished work in its original thread. |
|
|
753
|
+
| A socket write looked like confirmed Claude delivery; Unicode split across frames was corrupted; another delegation stopped during handoff | [1.12.4](CHANGELOG.md#1124---2026-09-05): authenticated Windows transport and correlated receipts. [1.12.2](CHANGELOG.md#1122---2026-09-05): UTF-8 framing, independent thread lifecycle and no unsafe fallback retry. | Read the original receipt/inbox. Socket acceptance, recipient acceptance and completed reply remain distinct; never route an uncertain send through a second backend. |
|
|
754
|
+
| Legacy app-server turns hung after disconnect, failed `turn/start` killed MCP, or a permissions/tool request silently stalled | [1.5.0](CHANGELOG.md#150---2026-08-18): reconnect and disconnect handling. [1.6.0](CHANGELOG.md#160---2026-08-19): contain failed-turn rejection. [1.4.0](CHANGELOG.md#140---2026-08-18): correct server-request responses. | Upgrade the actual legacy runtime, reread the original thread after reconnect, and handle any real approval/input request through the host. A transport recovery does not prove unfinished work should be repeated. |
|
|
755
|
+
|
|
756
|
+
</details>
|
|
462
757
|
|
|
463
|
-
[
|
|
758
|
+
[Full changelog](CHANGELOG.md) · [Additional reference](https://github.com/buidangminh23/codex-mcp-bridge/blob/main/REFERENCE.md#troubleshooting) · [Report an issue](https://github.com/buidangminh23/codex-mcp-bridge/issues)
|
|
464
759
|
|
|
465
760
|
## Optional active-install statistics
|
|
466
761
|
|