Geo Fundamentals
wasp-lang/wasp
Generative Engine Optimization for AI search engines (ChatGPT, Claude, Perplexity).
A skill your agent uses when Codex agents need to operate visible ChatGPT Chat or Work through the codex-chatgpt-control SDK, including verified configuration, prompts, tasks, progress, steering…
$ npx skills add adamallcock/codex-chatgpt-control --skill codex-chatgpt-control -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install adamallcock/codex-chatgpt-control codex-chatgpt-control --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/adamallcock/codex-chatgpt-control.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/codex-chatgpt-control .claude/skills/codex-chatgpt-control && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "codex-chatgpt-control" agent skill from https://github.com/adamallcock/codex-chatgpt-control/tree/main/skills/codex-chatgpt-control into .claude/skills/codex-chatgpt-control/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codex-chatgpt-control", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/adamallcock/codex-chatgpt-control/tree/main/skills/codex-chatgpt-controlType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add adamallcock/codex-chatgpt-control --skill codex-chatgpt-control -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install adamallcock/codex-chatgpt-control codex-chatgpt-control --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adamallcock/codex-chatgpt-control.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/codex-chatgpt-control .agents/skills/codex-chatgpt-control && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "codex-chatgpt-control" agent skill from https://github.com/adamallcock/codex-chatgpt-control/tree/main/skills/codex-chatgpt-control into .agents/skills/codex-chatgpt-control/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codex-chatgpt-control", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add adamallcock/codex-chatgpt-control --skill codex-chatgpt-control -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install adamallcock/codex-chatgpt-control codex-chatgpt-control --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adamallcock/codex-chatgpt-control.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/codex-chatgpt-control .cursor/skills/codex-chatgpt-control && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "codex-chatgpt-control" agent skill from https://github.com/adamallcock/codex-chatgpt-control/tree/main/skills/codex-chatgpt-control into .cursor/skills/codex-chatgpt-control/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codex-chatgpt-control", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/adamallcock/codex-chatgpt-control.git --path skills/codex-chatgpt-control--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add adamallcock/codex-chatgpt-control --skill codex-chatgpt-control -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install adamallcock/codex-chatgpt-control codex-chatgpt-control --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adamallcock/codex-chatgpt-control.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/codex-chatgpt-control .gemini/skills/codex-chatgpt-control && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "codex-chatgpt-control" agent skill from https://github.com/adamallcock/codex-chatgpt-control/tree/main/skills/codex-chatgpt-control into .gemini/skills/codex-chatgpt-control/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codex-chatgpt-control", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install adamallcock/codex-chatgpt-control codex-chatgpt-controlInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add adamallcock/codex-chatgpt-control --skill codex-chatgpt-control -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/adamallcock/codex-chatgpt-control.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/codex-chatgpt-control .github/skills/codex-chatgpt-control && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "codex-chatgpt-control" agent skill from https://github.com/adamallcock/codex-chatgpt-control/tree/main/skills/codex-chatgpt-control into .github/skills/codex-chatgpt-control/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codex-chatgpt-control", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add adamallcock/codex-chatgpt-control --skill codex-chatgpt-control -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install adamallcock/codex-chatgpt-control codex-chatgpt-control --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adamallcock/codex-chatgpt-control.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/codex-chatgpt-control .opencode/skills/codex-chatgpt-control && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "codex-chatgpt-control" agent skill from https://github.com/adamallcock/codex-chatgpt-control/tree/main/skills/codex-chatgpt-control into .opencode/skills/codex-chatgpt-control/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codex-chatgpt-control", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
codex-chatgpt-controlA skill your agent uses when Codex agents need to operate visible ChatGPT Chat or Work through the codex-chatgpt-control SDK, including verified configuration, prompts, tasks, progress, steering…
Codex Chatgpt Control is an agent skill from adamallcock/codex-chatgpt-control. Use when Codex agents need to operate visible ChatGPT Chat or Work through the codex-chatgpt-control SDK, including verified configuration, prompts, tasks, progress, steering, files, artifacts, reports, blockers, and source smokes.
Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It works with OpenAI. The repository describes itself as: Unofficial SDK for Codex agents controlling visible ChatGPT web sessions. The licence is MIT.
9 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 1e50539. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmpythonFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
chatgpt.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Codex Chatgpt Control loads about 2.9k tokens when it runs. Until then it costs about 63 tokens; SKILL.md has 1,001 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from adamallcock/codex-chatgpt-control at commit 1e50539, republished under its MIT licence (© adamallcock). 1,001 words, ~2,879 tokens.
.claude/skills/codex-chatgpt-control/SKILL.md (or your agent's skills folder).Use this skill when a user asks Codex to operate ChatGPT web through a visible browser session, or when a task involves the codex-chatgpt-control SDK.
This skill is for visible, user-directed ChatGPT workflows only. It is not an OpenAI API wrapper, does not call hidden ChatGPT endpoints, and must not bypass login, captcha, product permissions, file permissions, or user confirmation.
createChatGPT({ agent }).globalThis.agent as host-provided. If it is missing, report a bridge blocker rather than inventing browser state.experience.open before
configuration or submission. Do not assume the currently visible pane is
already the requested experience.Deterministic local checks need:
codex-chatgpt-controlReal browser-control runs also need:
globalThis.agentOrdinary shells should not have globalThis.agent. A browser_bridge_unavailable blocker from an ordinary shell is an expected safe result for browser-required calls.
File attachment workflows need two separate permission gates:
chrome://extensions, choose the Codex/browser bridge extension, open Details, and enable Allow access to file URLs.If either gate is missing, stop with a permission blocker and tell the user which gate to check.
Attachment paths must be absolute on the machine running the Node backend. Use the path form for that host operating system. On Linux/WSL backends, use paths such as /home/you/file.pdf or /mnt/c/work/file.pdf. On Windows backends, use fully qualified paths such as C:\Users\you\file.pdf. If a Windows-looking path is rejected on macOS/Linux, do not retry with the same string. Convert it to the backend host's real path, for example /home/you/file.pdf for a Linux/WSL backend.
Use chatgpt.files.preflight({ paths }) before long file workflows when local path validity is uncertain. It does not open ChatGPT or upload files; it validates host-local file metadata and returns structured blockers/warnings.
From a source checkout:
cd packages/node
npm ci
npm test
npm run build
npm run bundle
npm run bundle:backendThen use the built bundle from a bridge-enabled host runtime:
import { createChatGPT } from "/absolute/path/to/codex-chatgpt-control/packages/node/dist/codex-chatgpt-control.bundle.mjs";
const chatgpt = createChatGPT({ agent: globalThis.agent });Prefer normal package imports in projects that depend on the published npm package:
import { createChatGPT } from "codex-chatgpt-control";const reviewer = chatgpt.agent({
name: "reviewer",
instructions: "Review carefully and return Markdown."
});
const result = await chatgpt.runner.run(reviewer, {
input: "Review this design.",
thread: { type: "new" },
response: { format: "markdown" }
});
if (!result.ok) {
console.log(JSON.stringify(result.interruptions ?? result, null, 2));
} else {
console.log(result.output_text);
}Instructions are visible prompt text by default. Use instructionsMode intentionally:
visible_prefix: include instructions in the submitted user message.visible_setup_message: submit instructions as a separate visible setup turn.metadata_only: keep instructions local; they are not sent to ChatGPT.Inspect the visible Chat or Work surface:
const surface = await chatgpt.experience.detect();
const capabilities = await chatgpt.configuration.inspect();If a specific surface was requested, open it explicitly even when detection already returned a value:
await chatgpt.experience.open({ experience: "work" });Current ChatGPT can expose Chat and Work as radios in a Select chat surface
group and can hide that group inside an active Work task. The SDK verifies the
checked pane, returns to home when required, and retains older selector
fallbacks.
Apply strict Work configuration and start a task once:
await chatgpt.configuration.apply({
experience: "work",
desired: {
model: "GPT-5.6 Sol",
effort: "High",
speed: "Standard"
},
strict: true
});
await chatgpt.work.start({
prompt: "Produce a decision-ready implementation brief.",
newTask: true,
wait: false,
read: false
});After submission use chatgpt.work.status, work.wait, work.steer,
work.readLatest, and work.artifacts; do not resubmit after an ambiguous
timeout. Existing mode inputs and modes.set/get remain supported, while new
code should prefer experience and strict configuration.
Ask in a new or selected thread:
await chatgpt.ask({
prompt: "Reply with the word hi.",
wait: true,
read: { format: "markdown" }
});Continue an existing thread:
await chatgpt.askInThread({
thread: { type: "url", url: "https://chatgpt.com/c/<conversation-id>" },
existingTab: true,
prompt: "Continue from the latest answer.",
wait: true,
read: { format: "markdown" }
});When the user says the ChatGPT thread is already open, pass existingTab: true or an exact existing-tab policy such as existingTab: { url: "https://chatgpt.com/c/<conversation-id>" }. A thread: { type: "url" } selector by itself means "navigate to this URL"; it does not express "claim the user-open tab".
Attach approved files:
const preflight = await chatgpt.files.preflight({
paths: ["/absolute/host/path/to/approved-file.pdf"]
});
await chatgpt.askWithFiles({
thread: { type: "new" },
files: ["/absolute/host/path/to/approved-file.pdf"],
prompt: "Summarize this file.",
wait: true,
read: { format: "markdown" },
report: { enabled: true, includeContent: false }
});Plan append-only Project Sources changes before mutating a ChatGPT Project:
const plan = await chatgpt.projects.sources.planAdd({
projectUrl: "https://chatgpt.com/g/g-p-example/project",
files: ["/absolute/host/path/to/approved-source.md"]
});
const added = await chatgpt.projects.sources.add({
projectUrl: "https://chatgpt.com/g/g-p-example/project",
files: ["/absolute/host/path/to/approved-source.md"],
confirmMutation: true
});planAdd does not open ChatGPT or read file contents. add operates only through the visible Project Sources UI and returns needs_confirmation unless confirmMutation: true is supplied after user approval.
Run a diagnostic before long workflows:
const diagnostic = await chatgpt.doctor({
check: ["bridge", "login", "upload", "download", "clipboard", "file_preflight"],
files: ["/absolute/host/path/to/approved-file.pdf"]
});Use opt-in scenario checks before targeted workflows:
await chatgpt.doctor({
check: ["existing_tab"],
existingTab: {
target: { type: "conversationId", conversationId: "<conversation-id>" },
ifMissing: "block"
}
});
await chatgpt.doctor({
check: ["localization", "reports"],
report: { destDir: "/absolute/host/reports" }
});localization verifies locale-registry readiness without changing the account language; it is not yet proof that every localized selector path is wired.
Use Markdown by default for human-readable answers and saved artifacts:
const latest = await chatgpt.messages.waitAndRead({
role: "assistant",
format: "markdown"
});Use format: "normalized_text" only for compact assertions, polling checks, or simple exact-string smoke tests.
For long Pro, Thinking, Deep Research, or file-backed answers, poll with chatgpt.messages.wait({ responseContent: "metadata", ... }) so repeated partial polls return status metadata instead of re-emitting the growing answer body. Call readLatest({ format: "markdown" }) once the wait confirms completion.
If the user or calling workflow explicitly decides to supersede a still-running Chat response, use chatgpt.messages.stop({ confirmStop: true }). Never infer confirmation from a timeout and never use stop as automatic retry recovery. Preserve and report needs_confirmation, selector-drift, ambiguity, or unverified-postcondition results; do not replace the SDK with a broad button click.
The Python package is a protocol client over the Node backend. Build the backend first:
cd packages/node
npm run bundle:backendThen run Python from packages/python:
python -m pip install -e .[dev]
python scripts/live_smoke.py --mode ordinary-shellPoint Python at an explicit backend command:
from codex_chatgpt_control import Agent, BackendClient, Runner, StdioBackendTransport
backend = BackendClient(StdioBackendTransport(
command=["node", "../node/dist/codex-chatgpt-control-backend.mjs"]
))
runner = Runner(backend)When a run fails, report the structured blocker. Do not retry blindly.
Common blockers:
browser_bridge_unavailable: no bridge-enabled host runtime is available.login_required: the visible ChatGPT session is not signed in.captcha: user action is required.permission: upload/download/clipboard permission is missing.selector_drift: ChatGPT UI changed and selectors need review.rate_limit: wait or ask the user how to proceed.For source changes, run:
cd packages/node
npm test
npm run build
npm run bundle
npm run bundle:backend
npm run contract:validate
npm run parity:fixturesFor Python parity changes, also run:
cd packages/python
python -m unittest discover -s tests
python -m compileall -q src examples
python scripts/live_smoke.py --mode ordinary-shellBefore claiming the expansion is live-qualified, run its reusable canary from a bridge-enabled runtime:
CHATGPT_E2E_SCENARIOS="chat-work-expansion" npm run smoke:liveThe opt-in configuration mutation canary restores the original Work effort and
Chat pane in a finally path:
CHATGPT_E2E_CONFIGURATION_MUTATION=1 \
CHATGPT_E2E_SCENARIOS="configuration-mutate-restore" \
npm run smoke:live© adamallcock, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/codex-chatgpt-control of adamallcock/codex-chatgpt-control.
Open the folder on GitHubat commit 1e50539
Codex Chatgpt Control next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Codex Chatgpt Control this skilladamallcock/codex-chatgpt-control | 406 | — | ~2.9k | Automated safety check: Pass | MIT | |
| Geo Fundamentalswasp-lang/wasp | 19k | 9 repos | ~861 | Automated safety check: Pass | MIT | |
| AI SDKvercel-labs/ai-facts | 168 | 20 repos | ~1.2k | Automated safety check: Pass | None | |
| AI Image Generation and Editingzhayujie/CowAgent | 47k | — | ~1.3k | Automated safety check: Pass | MIT | |
| PR Design DocOpenHands/OpenHands | 90k | — | ~2.4k | Automated safety check: Pass | MIT | |
| SEO GeoReScienceLab/opc-skills | 1.8k | 4 repos | ~2.1k | Automated safety check: Pass | Apache-2.0 |
wasp-lang/wasp
Generative Engine Optimization for AI search engines (ChatGPT, Claude, Perplexity).
vercel-labs/ai-facts
Answer questions about the AI SDK and help build AI-powered features.
zhayujie/CowAgent
Generates or edits images from text prompts through a Python script that picks an image backend based on which API keys are configured.
OpenHands/OpenHands
For a non-trivial pull request, write a self-contained HTML design doc under the temporary .pr/ directory and link a visibility-appropriate preview in the PR description, so maintainers grasp the…
ReScienceLab/opc-skills
SEO & GEO (Generative Engine Optimization) for websites. An agent skill from ReScienceLab/opc-skills.
alibaba/open-code-review
Runs the ocr command-line tool to review Git changes, a commit or a branch comparison with an AI model, returning line-level comments and optionally applying fixes.
adamallcock/codex-chatgpt-control
A skill your agent uses when Codex agents need to operate visible ChatGPT Chat or Work through the codex-chatgpt-control plugin, including verified configuration, prompts, tasks, progress, steering…
adamallcock/codex-chatgpt-control
A skill your agent uses when Codex should delegate a visible, user-directed task to ChatGPT Chat or Work, including configuration discovery, long-running Work progress, steering, response capture…
adamallcock/codex-chatgpt-control
Backward-compatible alias for a visible Chat consultation with the Pro intelligence setting; prefer chatgpt-delegate for new Chat or Work delegation workflows.
Works with
A skill your agent uses when Codex agents need to operate visible ChatGPT Chat or Work through the codex-chatgpt-control SDK, including verified configuration, prompts, tasks, progress, steering…. Codex Chatgpt Control is an agent skill from adamallcock/codex-chatgpt-control. Use when Codex agents need to operate visible ChatGPT Chat or Work through the codex-chatgpt-control SDK, including verified configuration, prompts, tasks, progress, steering, files, artifacts, reports, blockers, and source smokes.
Codex Chatgpt Control fits situations like: Codex agents need to operate visible ChatGPT Chat; work through the codex-chatgpt-control SDK; including verified configuration.
Run `npx skills add adamallcock/codex-chatgpt-control --skill codex-chatgpt-control -a claude-code`. Or copy the skill folder (skills/codex-chatgpt-control in adamallcock/codex-chatgpt-control) into .claude/skills/codex-chatgpt-control in your project. Claude Code loads it when a task matches its description.
Run `npx skills add adamallcock/codex-chatgpt-control --skill codex-chatgpt-control -a codex`. Or copy the skill folder (skills/codex-chatgpt-control in adamallcock/codex-chatgpt-control) into .agents/skills/codex-chatgpt-control in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add adamallcock/codex-chatgpt-control --skill codex-chatgpt-control -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/codex-chatgpt-control, .gemini/skills/codex-chatgpt-control, .github/skills/codex-chatgpt-control and .opencode/skills/codex-chatgpt-control in your project.
Going by SKILL.md and its folder, Codex Chatgpt Control needs the command-line tools its instructions call (npm and python). Our summary lists: Python 3; Node.js.
SKILL.md names 1 domain. In commands or code: chatgpt.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Codex Chatgpt Control is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Codex Chatgpt Control: Geo Fundamentals (wasp-lang/wasp, 19k stars), AI SDK (vercel-labs/ai-facts, 168 stars), AI Image Generation and Editing (zhayujie/CowAgent, 47k stars) and PR Design Doc (OpenHands/OpenHands, 90k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
adamallcock (a GitHub user) maintains it in adamallcock/codex-chatgpt-control, which has 406 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 4, 2026.
Source: adamallcock/codex-chatgpt-control on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.