Agent skill

Codex Chatgpt Control

by adamallcock in 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…

MITAuto-check passed

Install Codex Chatgpt Control

skills CLI
$ npx skills add adamallcock/codex-chatgpt-control --skill codex-chatgpt-control -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install adamallcock/codex-chatgpt-control codex-chatgpt-control --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/adamallcock/codex-chatgpt-control.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/codex-chatgpt-control/skills/codex-chatgpt-control .claude/skills/codex-chatgpt-control && rm -rf skills-src

Use ~/.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/

Facts

Skill name
codex-chatgpt-control
GitHub stars
407
Token cost
~3.1k tokens
SKILL.md length
1,119 words
Files
6 (incl. references)
Skills in repo
4
Repo updated
First seen
Licence
MIT

At a glance

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…

  • Works in 10 steps: Prefer the plugin-bundled SDK facade… → Use ChatGPT web through a compatible… → Treat globalThis.agent as host-provided.… → …
  • Codex agents need to operate visible ChatGPT Chat
  • SKILL.md covers Required Posture, Plugin Runtime, Bridge Bootstrap and Basic Runner Flow, plus 6 more sections
  • Calls npm, node and python3; reaches chatgpt.com

What it does

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 plugin, including verified configuration, prompts, tasks, progress, steering, files, artifacts, reports, blockers, live smokes, or SDK source work.

Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including reference files (for example `references/2026-09-06-journal-service.md`, `references/bridge-bootstrap.md` and `references/file-uploads.md`).

It works with OpenAI. The repository describes itself as: Unofficial SDK for Codex agents controlling visible ChatGPT web sessions. The licence is MIT.

When your agent uses it

  • Codex agents need to operate visible ChatGPT Chat
  • Work through the codex-chatgpt-control plugin
  • Including verified configuration
  • SDK source work

Example prompts

  • “/codex-chatgpt-control”

Requirements

  • Python 3

Workflow steps

10 steps, taken from the first numbered list in SKILL.md.

  1. Prefer the plugin-bundled SDK facade from createChatGPT({ agent }).
  2. Use ChatGPT web through a compatible Codex/browser bridge. Do not use private ChatGPT network calls.
  3. Treat globalThis.agent as host-provided. If it is missing, bootstrap the Chrome plugin runtime when available; otherwise report a bridge…
  4. Stop on login, captcha, rate-limit, selector-drift, upload/download permission, or ambiguous confirmation blockers.
  5. Ask for explicit user confirmation before public, destructive, third-party, paid, account-level, or externally visible actions.
  6. Redact run reports by default. Raw prompt/response content is opt-in only.
  7. Attach only files the user approved.
  8. Load reference files only for the issue at hand; do not read every reference by default.
  9. Route local repository editing, terminal execution, testing, and deployment to official Codex capabilities. This plugin controls visible…
  10. When the user requests Chat or Work, call experience.open for that

What it can do on your machine

Read from SKILL.md and the folder at commit 1e50539. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • npm
    • node
    • python3

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • chatgpt.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Codex Chatgpt Control loads about 3.1k tokens when it runs, and up to ~5.9k if it reads all its reference files. Until then it costs about 68 tokens; SKILL.md has 1,119 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~68
When it runs · the whole SKILL.md, loaded when a task matches
~3.1k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~5.9k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from adamallcock/codex-chatgpt-control at commit 1e50539, republished under its MIT licence (© adamallcock). 1,119 words, ~3,133 tokens.

Download SKILL.mdSave it as .claude/skills/codex-chatgpt-control/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.
name
codex-chatgpt-control
description
Use when Codex agents need to operate visible ChatGPT Chat or Work through the codex-chatgpt-control plugin, including verified configuration, prompts, tasks, progress, steering, files, artifacts, reports, blockers, live smokes, or SDK source work.

ChatGPT Surface Control

Use this skill when a user asks Codex to work with ChatGPT web through a visible browser session, or when a task involves the codex-chatgpt-control SDK/plugin.

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.

Required Posture

  1. Prefer the plugin-bundled SDK facade from createChatGPT({ agent }).
  2. Use ChatGPT web through a compatible Codex/browser bridge. Do not use private ChatGPT network calls.
  3. Treat globalThis.agent as host-provided. If it is missing, bootstrap the Chrome plugin runtime when available; otherwise report a bridge blocker.
  4. Stop on login, captcha, rate-limit, selector-drift, upload/download permission, or ambiguous confirmation blockers.
  5. Ask for explicit user confirmation before public, destructive, third-party, paid, account-level, or externally visible actions.
  6. Redact run reports by default. Raw prompt/response content is opt-in only.
  7. Attach only files the user approved.
  8. Load reference files only for the issue at hand; do not read every reference by default.
  9. Route local repository editing, terminal execution, testing, and deployment to official Codex capabilities. This plugin controls visible ChatGPT Chat and Work; it does not replace Codex.
  10. When the user requests Chat or Work, call experience.open for that surface before configuration or submission. Do not assume the currently visible pane is already correct.

Plugin Runtime

Resolve relative paths from this SKILL.md directory. The plugin runtime lives at:

text
../../runtime/import-chatgpt-control.mjs

From a bridge-enabled Codex Node runtime:

js
const loaderUrl = new URL(
  "../../runtime/import-chatgpt-control.mjs",
  "file:///absolute/path/to/plugins/codex-chatgpt-control/skills/codex-chatgpt-control/SKILL.md"
);
const { importChatGPTControl } = await import(`${loaderUrl.href}?t=${Date.now()}`);
const { createChatGPT } = await importChatGPTControl();

const chatgpt = createChatGPT({
  agent: globalThis.agent,
  reporting: { enabled: true, includeContent: false }
});

When using this installed plugin, do not import from an older manually installed skill runtime. Use the plugin-bundled runtime so the installed plugin and SDK stay in sync.

Bridge Bootstrap

Ordinary shells should not have globalThis.agent. A browser_bridge_unavailable blocker from an ordinary shell is an expected safe result for browser-required calls.

For a true live Chrome bridge run from Codex, initialize the Chrome plugin runtime before using the SDK if globalThis.agent is missing. See references/bridge-bootstrap.md when bootstrap details are needed.

Do not diagnose user-open Chrome tab availability with browser.tabs.list() or browser.tabs.selected() alone. When the user says a ChatGPT thread is already open, use existingTab: true, an exact existingTab policy, or the SDK's existing-tab helpers.

Basic Runner Flow

js
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" },
  experience: "chat",
  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.

Chat And Work Surfaces

Detect the visible surface and inspect its actual capability graph:

js
const surface = await chatgpt.experience.detect();
const configuration = await chatgpt.configuration.inspect({
  experience: surface.data?.experience === "unknown"
    ? undefined
    : surface.data?.experience
});

Open a surface explicitly and apply only verified visible controls:

js
await chatgpt.experience.open({ experience: "work" });
await chatgpt.configuration.apply({
  experience: "work",
  desired: {
    model: "GPT-5.6 Sol",
    effort: "High",
    speed: "Standard"
  },
  strict: true
});

The current home UI may expose Chat and Work as radios in a Select chat surface group. An active Work task may hide that group. Use experience.open in both cases: it verifies the checked pane, returns home when necessary, and retains legacy button/menu/tab/link fallbacks.

Selector profiles describe observed UI shapes (chat_legacy_v1, chat_simplified_v1, work_basic_v1, and work_advanced_v1). They are not plan or entitlement labels. Treat unavailable controls and rollout differences as structured results instead of guessing.

Start Work exactly once, then poll or steer the same task:

js
const started = await chatgpt.work.start({
  prompt: "Produce a decision-ready implementation brief.",
  newTask: true,
  wait: false,
  read: false
});

const status = await chatgpt.work.status({ includeArtifacts: true });
await chatgpt.work.steer({
  prompt: "Add a prioritized migration sequence.",
  wait: false,
  read: false
});
const latest = await chatgpt.work.readLatest({ format: "markdown" });

newTask defaults to true. When an existing Work task is loaded and no unique new-task control can be verified, the SDK blocks instead of appending accidentally. Never resubmit a task after a partial or timeout result; use work.status, work.wait, or work.readLatest.

Use chatgpt-delegate for the focused surface-neutral delegation workflow. chatgpt-pro-consult, mode, and modes.set/get remain compatibility aliases for existing callers; new work should use experience and configuration.

Common Workflows

Ask in a new or selected thread:

js
await chatgpt.ask({
  prompt: "Reply with the word hi.",
  wait: true,
  read: { format: "markdown" }
});

Continue an existing thread:

js
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" }
});

Attach approved files:

js
await chatgpt.askWithFiles({
  thread: { type: "new" },
  files: ["/absolute/path/to/approved-file.pdf"],
  prompt: "Summarize this file.",
  wait: true,
  read: { format: "markdown" },
  report: { enabled: true, includeContent: false }
});

Download an exact generated deliverable without accepting another visible artifact as success:

js
await chatgpt.askAndDownload({
  prompt: "Create report.csv and provide it as a downloadable file.",
  download: {
    destDir: "/absolute/output/dir",
    filenamePattern: "^report\\.csv$"
  },
  wait: true,
  read: true
});

filenamePattern is a case-insensitive regular expression. The runtime handles both direct file links and current filename-button -> artifact-preview -> Download flows. A mismatch blocks instead of silently accepting an unrelated image fallback.

Run a diagnostic before long workflows:

js
const diagnostic = await chatgpt.doctor({
  check: ["bridge", "login", "upload", "download", "clipboard"]
});
Show full SKILL.md (475 more words)Show less

Response Capture

Use Markdown by default for human-readable answers and saved artifacts:

js
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 Chat, Work, Thinking, Deep Research, or file-backed answers, poll with chatgpt.messages.wait({ responseContent: "metadata", ... }) or chatgpt.work.wait(...) so repeated partial polls return status metadata instead of re-emitting the growing answer body. Call the matching readLatest({ format: "markdown" }) once completion is confirmed.

See references/response-capture.md for fidelity warnings and report handling.

File Upload Permissions

File attachment workflows need two separate permission gates:

  1. Chrome extension gate: open chrome://extensions, choose the Codex/browser bridge extension, open Details, and enable Allow access to file URLs.
  2. Codex app gate: in Codex settings, allow Google Chrome uploads under Computer Use > Google Chrome > Permissions > Uploads.

If either gate is missing, stop with a permission blocker and tell the user which gate to check. See references/file-uploads.md.

Blocker Handling

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.
  • needs_confirmation: the workflow requires explicit user confirmation.

Two mutation outcomes are deliberately non-resumable. Browser-native deadlines terminate these requests before return, so neither can mutate later, but the mutation may already have taken effect. For stop_generation_unverified, inspect whether generation is still active and never retry Stop automatically. For attachment_outcome_indeterminate, inspect the current composer, do not submit, and never repeat the attachment automatically.

See references/troubleshooting.md before diagnosing selector, tab-claim, upload, or bridge issues.

Validation

For source changes, run the smallest meaningful gate first. For shared SDK/protocol/plugin changes, broaden to:

bash
cd packages/node
npm run build
npm run bundle
npm run bundle:backend
npm run bundle:live-smoke
npm run bundle:release-canary
npm run bundle:journal
npm run contract:validate
npm run parity:fixtures
npm run test:backend-conformance
npm test

Plugin packaging gates:

bash
node tools/public-export/root/scripts/build-plugin-runtime.mjs --root .
node tools/public-export/root/scripts/check-plugin-runtime.mjs --root .
node tools/public-export/root/scripts/validate-plugin-layout.mjs --root .
python3 /path/to/plugin-creator/scripts/validate_plugin.py plugins/codex-chatgpt-control

Use public-export validation before claiming the public plugin package is release-ready.

Run the reusable expansion canary through the installed candidate before claiming Chat/Work support is live-qualified:

bash
CHATGPT_E2E_SCENARIOS="chat-work-expansion" npm run smoke:live

The canary tests the Chat/Work round trip, both configuration graphs, strict no-op configuration application, Work start/status/wait/read/steer/artifacts, Work-backed Runner and Responses calls, and Chat restoration. A real Work setting change is separate and opt-in; it restores the original effort in a finally path:

bash
CHATGPT_E2E_CONFIGURATION_MUTATION=1 \
CHATGPT_E2E_SCENARIOS="configuration-mutate-restore" \
npm run smoke:live

The packaged runtime also includes runtime/node/codex-chatgpt-control-release-canary.bundle.mjs. Import it from a bridge-hosted JavaScript call and run runReleaseCanary(globalThis, { tabId }) against an exact dedicated ChatGPT tab before publishing. It creates sanitized Chat/Work profiles, exercises the expansion, mutates/restores Work effort, verifies a generated CSV download, and restores Chat. Upload remains explicit via includeUpload: true.

For locale drift, use the Node package's existing language loop with --auto-switch --all --capture-surfaces; review the JSONL before using the --reviewed apply gate.

For transactional operations in a browser host without process identity, use the explicit private-file journal service described in the journal service runbook. Keep the descriptor secret, preserve the operation ID after uncertainty, and leave prepared Send capabilities in the browser host.

© adamallcock, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 5 other files (references) in plugins/codex-chatgpt-control/skills/codex-chatgpt-control of adamallcock/codex-chatgpt-control.

  • SKILL.md
  • references/2026-09-06-journal-service.md
  • references/bridge-bootstrap.md
  • references/file-uploads.md
  • references/response-capture.md
  • references/troubleshooting.md

Open the folder on GitHubat commit 1e50539

Compare with similar skills

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.

Codex Chatgpt Control compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Codex Chatgpt Control this skilladamallcock/codex-chatgpt-control407—~3.1kAutomated safety check: PassMIT
Geo Fundamentalswasp-lang/wasp19k9 repos~861Automated safety check: PassMIT
AI SDKvercel-labs/ai-facts16820 repos~1.2kAutomated safety check: PassNone
AI Image Generation and Editingzhayujie/CowAgent47k—~1.3kAutomated safety check: PassMIT
PR Design DocOpenHands/OpenHands90k—~2.4kAutomated safety check: PassMIT
SEO GeoReScienceLab/opc-skills1.8k4 repos~2.1kAutomated safety check: PassApache-2.0

Similar skills

  • Geo Fundamentals

    wasp-lang/wasp

    Generative Engine Optimization for AI search engines (ChatGPT, Claude, Perplexity).

    19k GitHub starsUsed in 9 repos~861 tokens
    Marketing & SEOAuto-check passed
  • AI SDK

    vercel-labs/ai-facts

    Official

    Answer questions about the AI SDK and help build AI-powered features.

    168 GitHub starsUsed in 20 repos~1.2k tokens
    AI & LLM EngineeringAuto-check passed
  • Generates or edits images from text prompts through a Python script that picks an image backend based on which API keys are configured.

    47k GitHub stars~1.3k tokensUpdated today
    Media & CreativeAuto-check passed
  • PR Design Doc

    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…

    90k GitHub stars~2.4k tokensUpdated today
    DevelopmentAuto-check passed
  • SEO Geo

    ReScienceLab/opc-skills

    SEO & GEO (Generative Engine Optimization) for websites. An agent skill from ReScienceLab/opc-skills.

    1.8k GitHub starsUsed in 4 repos~2.1k tokens
    Marketing & SEOAuto-check passed
  • Open Code Review CLI

    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.

    45k GitHub stars~3.1k tokensUpdated yesterday
    DevelopmentAuto-check passed

More from adamallcock/codex-chatgpt-control

  • Chatgpt Delegate

    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…

    407 GitHub stars~1.7k tokensUpdated 5 days ago
    Auto-check passed
  • Codex Chatgpt Control

    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 SDK, including verified configuration, prompts, tasks, progress, steering…

    407 GitHub stars~2.9k tokensUpdated 5 days ago
    Auto-check passed
  • Chatgpt Pro Consult

    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.

    407 GitHub stars~3.3k tokensUpdated 5 days ago
    Auto-check passed

Works with

Questions about Codex Chatgpt Control

What does Codex Chatgpt Control do?

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…. 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 plugin, including verified configuration, prompts, tasks, progress, steering, files, artifacts, reports, blockers, live smokes, or SDK source work.

When should I use Codex Chatgpt Control?

Codex Chatgpt Control fits situations like: Codex agents need to operate visible ChatGPT Chat; work through the codex-chatgpt-control plugin; including verified configuration; SDK source work.

How do I install Codex Chatgpt Control in Claude Code?

Run `npx skills add adamallcock/codex-chatgpt-control --skill codex-chatgpt-control -a claude-code`. Or copy the skill folder (plugins/codex-chatgpt-control/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.

How do I install Codex Chatgpt Control in Codex?

Run `npx skills add adamallcock/codex-chatgpt-control --skill codex-chatgpt-control -a codex`. Or copy the skill folder (plugins/codex-chatgpt-control/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.

Can I use Codex Chatgpt Control in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Codex Chatgpt Control need to run?

Going by SKILL.md and its folder, Codex Chatgpt Control needs the command-line tools its instructions call (npm, node and python3). Our summary lists: Python 3.

Does Codex Chatgpt Control access the network?

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.

Is Codex Chatgpt Control safe to install?

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.

What licence does Codex Chatgpt Control use?

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.

How many tokens does Codex Chatgpt Control use?

About 3.1k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.8k tokens, read only when the agent opens those files.

What are the alternatives to Codex Chatgpt Control?

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.

Who maintains Codex Chatgpt Control?

adamallcock (a GitHub user) maintains it in adamallcock/codex-chatgpt-control, which has 407 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.