xiaoduoya/codex-with-chatgpt/skill
- community
Checking that the SKILL.md file is still in the repository.
Use ChatGPT (web) as the planning and review brain for Codex coding sessions, while Codex keeps full execution ownership. Use when the user says "使用 Codex with ChatGPT ..." / "Set up Codex with ChatGPT" / "用 ChatGPT 规划", when they ask to connect ChatGPT to the current workspace, disconnect it, or run a task through the ChatGPT planning loop.
Install
npx vskill@latest install xiaoduoya/codex-with-chatgpt/skillSKILL.md
Codex with ChatGPT
ChatGPT thinks. Codex works.
You (Codex) own execution: editing, shell, git, tests, recovery. ChatGPT owns high-level reasoning: understanding, planning, review, debug strategy. The C2C Bridge gives ChatGPT read-only MCP access to the current workspace, so control messages between you and ChatGPT stay tiny (< 1 KB) — ChatGPT pulls whatever data it needs by itself.
Golden rules
- NEVER paste file contents, diffs, or logs into ChatGPT. ChatGPT reads them through MCP.
- NEVER show the user technical internals (MCP, OAuth, PKCE, tunnel, ports, localhost).
Speak in terms of "连接 ChatGPT / 安全连接 / 配对". The only exception is the guided manual ChatGPT setup below: expose only the exact settings field labels/values the user must enter, without explaining internals.
- The pairing code is the ONLY credential you may ever type into a browser.
Never touch OAuth tokens, cookies, or session storage.
- If something fails, run
c2c doctorand repair silently. Only involve the user
for logins, CAPTCHA, 2FA, explicit consent screens, or guided manual ChatGPT setup below — and then give them ONE action. Before the first ChatGPT connection on this machine, c2c prefs --json:
setupModemissing: tell the user exactlysetupChoicePrompt, wait for
「1」or「2」, then c2c prefs set --setup-mode auto|manual --json. Do not start ChatGPT configuration until they answer. Do not guess.
setupModeismanual: skip automatic ChatGPT settings. Use guided
manual from the start (chosen, not a failure).
setupModeisauto: automatic browser setup. Two explicit failures of
the same configuration step after repair then enter guided manual. A browser/js timeout, a page still loading/generating, or waiting for user login/2FA does NOT count as a failure. Do not change the saved setupMode when falling back. developerModeEnabled: true means skip #settings/Security until a connector create fails because developer mode is required. Then open that page, enable it, and c2c prefs set --developer-mode --json. These prefs are for this machine, not per workspace. Do not ask again on reconnect or a second repo. A new computer (empty prefs) asks/checks once.
- ALWAYS use the built-in in-app browser (iab) for every ChatGPT step.
Follow In-app browser (ChatGPT) below. NEVER Computer Use (no screenshot-click). NEVER launch or control a third-party/external browser (Chrome, Safari, Edge…), and never use open <url> to hand off to one.
- The ONLY exception: the user explicitly says the Cloudflare login must use
their own browser session — that single Cloudflare login step may go through their browser; everything else stays in the built-in browser.
- If the user asks to run ChatGPT in their own browser, refuse politely and
explain: "Codex 需要持续调用 ChatGPT 和配置连接,这会频繁操作页面,可能影响 你浏览器的正常使用。ChatGPT 只能跑在内置浏览器里。" Only if the user replies with an explicit "我愿意承担影响" may you proceed in their browser; otherwise keep ChatGPT in the built-in browser, every time they ask.
- Conversation reuse depends on
c2c session --json→conversation.mode
(see Conversation management). Do not invent a second mode.
- long-chat (legacy session file, or the user opted out): ONE ChatGPT
conversation per workspace. Never silently start a new chat.
- project (new workspaces, or an existing workspace that opted in):
ONE ChatGPT Project (collection) per workspace. Same Codex conversation reuses the ChatGPT chat URL saved in THIS thread. A new Codex conversation opens a new chat from the Project collection page — never goto https://chatgpt.com/ to create it, and never reuse another Codex conversation's chat URL just because session.url exists. Each workspace also has exactly ONE ChatGPT connector. Do not create a second connector for the same workspace. Other workspaces may have their own connectors — never edit those.
- After first-time setup, never ask the user to approve writing C2C's local
settings directory. Run c2c sandbox-allow --json (idempotent). If it fails with EPERM / Operation not permitted, request elevated permissions and retry ONCE. After { "alreadyAllowed": true } or { "added": true }, stay silent.
- ChatGPT pages: only the URLs in In-app browser (ChatGPT). Never start
from chatgpt.com and click through menus.
- Doctor gate. After
c2c doctor --json, do notgotoChatGPT and do not
send [C2C] until local is green — except the reconnect settings pages when chatgptRepair.needed is true. Not green:
report.bridge.okis not truereport.mcp.okis not true (unauthenticated local/mcpmust be 401)- sandbox / state-dir write failed (EPERM)
- this workspace used to have a public URL and the tunnel is down
chatgptRepair.neededis true (fix the connector first, then doctor again)namedRepair.neededis true (user must log in to Cloudflare, then doctor again.
Do not Delete the ChatGPT connector — the address did not change)
report.bridgesays 状态无法确认: the local bridge may still be running.
Do not c2c start, do not Delete the connector, do not treat it as chatgptRepair. Wait and run doctor again. If doctor is already green and chatgptRepair.needed is false, do not c2c restart, do not start a second tunnel, and do not Delete the connector. ChatGPT/IAB-only errors are not permission to churn the public address. A ChatGPT-side 401 after a sent message is different: repair then, do not treat it as permission to skip this gate next time.
In-app browser (ChatGPT)
Official skill: control-in-app-browser. These C2C rules override defaults that close the tab, hide the window, or stall on the settings page.
- Surface. Once per Codex session:
setupBrowserRuntime(), then
const iab = await agent.browsers.get("iab"). Reuse iab. Do not re-read documentation() if it is already bound. Never getDefault(), getForUrl(), or Computer Use.
- One tab. Create the ChatGPT tab once (
tabs.new()). After that, only
tab.goto(...) to switch URLs. If the tab still exists, claim it — never open a second ChatGPT tab. Do not goto the URL you are already on.
- Foreground + keep (standby). Right after opening or claiming the tab:
await (await iab.capabilities.get("visibility")).set(true)— first-time
setup and ChatGPT chatting stay in front of the user so they can watch.
await tab.markHandoff()immediately, then again at the start and end of
every turn. After setup succeeds or the C2C chat is open, also await tab.markDeliverable(). Never close this tab. Finished, waiting for the user, or timed out: leave it marked (standby). Do not let default turn cleanup close it.
- URLs only (same tab,
goto— never hunt menus):
- 开发人员模式:
https://chatgpt.com/#settings/Security
(skip when c2c prefs --json has developerModeEnabled: true)
- 插件总管:
https://chatgpt.com/plugins - 加插件:
https://chatgpt.com/plugins#settings/Connectors?create-connector=true&redirectAfter=%2Fplugins - 新对话 (long-chat only, and only if no saved chat):
https://chatgpt.com/ - Saved C2C chat:
conversation.chatUrl/session.url(long-chat, or
the chat already bound in THIS Codex conversation)
- Saved Project collection:
conversation.projectUrl
(https://chatgpt.com/g/g-p-…/project) Never click Reconnect / Refresh on an existing connector. The old address is dead and that page hangs on "This site cannot be reached". When the address changed: Delete THIS workspace's connectorName only, then create it again via the 加插件 URL (same name, new Server URL). Do not put that public address into Project instructions — write the connector name only.
- Do not wait for 8 tools on the settings page. "Connected" / authorize
success / pairing accepted is enough. Confirm tools in the conversation with workspace_info.
- Batch. Fill a known form in one Playwright /
jsscript when you can.
After an action, one cheap DOM check. Do not screenshot-poll.
- One conversation, Chat mode. The first ChatGPT chat is the C2C
conversation. Chat and Work (聊天 / 工作) are separate: a Work conversation cannot become Chat. On every NEW conversation, if a Chat/Work switcher is visible (often top-left), confirm Chat is selected before the boot prompt. If it is Work, do not continue there — Switch to a new Chat conversation (HANDOFF). If no switcher is visible, do not hunt menus; continue. Send the boot prompt and the workspace_info check in that Chat conversation. Confirm the reply names the current workspace before saving or replacing the session URL. If validation fails, keep the old saved URL. Do not open a throwaway verify chat and later another C2C chat.
A collection or chat page that shows only Retry / 重试 is a navigation error, not generation and not a pairing failure. Reuse the same iab tab. Try Retry once. If it stays Retry-only, goto the last working chat URL from this thread (or session.url if that is the only saved chat), then click the on-page Open … project / 打开“… ”项目 link — that same-site hop is allowed. Do not treat the URLs-only rule as forbidding this link. On the collection, require the project chat list and new-chat composer before continuing. Keep the old saved URL/checkpoint until the replacement chat passes workspace_info. Do not session clear. Do not use Computer Use.
- Wait for a ChatGPT reply (do not hold one long browser wait). After you
send INIT, EXECUTED, boot, or the workspace_info check: markHandoff, keep the tab foreground, and stay in this same task. Do not waitFor 5 minutes and do not screenshot-poll. Every 20–30 seconds, one cheap DOM check:
- still generating → wait again (do not type, do not resend);
STATE: PLAN/DONE/BLOCKED/ the verify workspace name → read it
and continue the existing protocol;
- visible error → repair; do not start a new chat.
A browser/js timeout is not failure. Claim the same tab, read the page, keep standby. If ChatGPT is still thinking, keep polling. Never open a second tab and never resend INIT/EXECUTED just because a wait timed out.
Locations
- The codex-with-chatgpt checkout lives at:
<ACTUAL_CHECKOUT_PATH>
(installer/update MUST replace this line in the installed Skill with the user's actual checkout path.)
- Codex home: let
<codex-home>be a non-emptyCODEX_HOMEwhen set; otherwise
use ~/.codex (%USERPROFILE%\.codex on Windows).
- CLI: let
<checkout>mean the path on the previous line; run
node "<checkout>/bin/c2c.js" <command> (or c2c <command> if globally linked). All commands support --json for parsing.
- If the checkout has no
node_modulesor nodist/, first run
corepack pnpm install && corepack pnpm build inside it.
- For commands that act on the user's project (
setup,doctor,session,
restart, start, stop, status, pair, unpair, logs, workspace, record, tunnel status, tunnel choose), pass -w <workspace root> (the project the user is working on, NOT the c2c repo).
- Do not add
-wto machine-wide commands:update-check,sandbox-allow,
prefs, tunnel login. They still accept and ignore -w, so a leftover flag must not fail the command.
Daily update check
At the START of every workflow below (before anything else), run these two commands (both are cheap / cached; never mention them unless an update exists):
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 93 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskill/SKILL.md
Popularity
- Repository stars
- 5,678
- Repository forks
- 542
- 7-day trend score
- 43
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/xiaoduoya/codex-with-chatgpt/skill)