Files

4.8 KiB

Troubleshooting

First move, always:

c2c doctor

It checks Node, workspace, bridge, MCP, OAuth and tunnel — and repairs what it can (restarts the bridge, restarts the tunnel) without asking.

Common situations

"Bridge 未运行"

c2c start (or let doctor do it). Bridge logs: c2c logs, or verbose: c2c logs --verbose.

If doctor says the bridge state is uncertain (无法确认), do not start a second bridge and do not Delete the ChatGPT connector. Wait and run doctor again. The local process may still be running.

Everything was quit and ChatGPT can no longer connect

Quitting Codex / the terminal stops the public address. The next c2c doctor starts a new address and sets chatgptRepair.needed. The Skill should tell the user that the old address expired, then Delete THIS workspace's connector (chatgptRepair.connectorName) and create it again with the new address (never click Reconnect — the old URL is dead). Other workspaces keep their own connectors so two projects can stay connected at once.

Fixed ChatGPT pages for first-time setup and later repair (do not hunt the UI):

Tunnel URL unreachable / ChatGPT says the connector is broken

Same as above: c2c doctor, then Delete + recreate THIS workspace's connector if chatgptRepair.needed. Fresh pairing code: c2c pair. If this workspace uses a stable hostname, doctor sets namedRepair instead — re-login to Cloudflare (c2c tunnel login) and doctor again. Do not Delete the connector; the address did not change.

I have a Cloudflare domain and want a stable hostname

During first-time setup (or the next coding session, once), say you have a Cloudflare account and give the domain. Codex opens a browser for Cloudflare login, then keeps c2c-<project>.your-domain.com. To stay on the temporary address, say you do not have a domain. Switching later: tell Codex you want the stable hostname; it runs c2c tunnel choose --mode named --zone <domain>.

"配对码无效/过期"

Pairing codes are one-time and expire after ~5 minutes:

c2c pair

generates a fresh one (older codes become invalid immediately).

ChatGPT gets 401 on every tool call

The access token expired and refresh failed (e.g. after c2c unpair or a long offline period). Delete THIS workspace's connector if the address also changed; otherwise run Authorize again in ChatGPT and enter a fresh pairing code. Never use Reconnect when the public address has been replaced.

cloudflared is not installed

macOS: brew install cloudflared Windows: winget install Cloudflare.cloudflared Linux: see Cloudflare's package instructions. The Skill installs this automatically during setup. If cloudflared is installed in a custom location that is not on PATH, set C2C_CLOUDFLARED_PATH to the executable's absolute path before running c2c.

Every new Codex chat “repairs” the connection / cannot write logs

The C2C state directory lives outside the project (macOS: ~/Library/Application Support/codex-with-chatgpt; Windows: %LOCALAPPDATA%\codex-with-chatgpt). Codex's default sandbox cannot write there, so each new chat looks like a health-check failure.

c2c setup, c2c doctor and c2c sandbox-allow add that directory to [sandbox_workspace_write].writable_roots in ~/.codex/config.toml (%USERPROFILE%\.codex\config.toml on Windows). After that, later chats do not need elevation.

Port already in use

Handled automatically: an existing healthy bridge for the same workspace is reused; anything else makes the bridge pick a free port. Configuration follows automatically.

Reading a file returns ACCESS_DENIED_SENSITIVE_FILE

Working as intended: .env, keys, credentials and anything matched by .c2cignore are never readable through ChatGPT. .env.example is allowed.

I cannot see Projects in the ChatGPT sidebar

Hover Chats /「聊天」, click the … that appears, and choose Organize by project /「按项目整理」. Then create a project named after this workspace, with project-only memory. Tell Codex「好了」when the collection page is open (https://chatgpt.com/g/g-p-…/project).

This workspace opened the wrong ChatGPT Project

Do not pick another project by name automatically. Open the collection that matches this workspace and tell Codex「已找到」, or say you want the old long-chat instead. Each workspace has its own Project and its own connector.

Completely stuck

c2c stop
c2c setup

re-creates the bridge, tunnel and pairing session from scratch. Existing authorizations stay valid unless you also ran c2c unpair.