SpyBara
Go Premium

Documentation 2026-08-19 22:57 UTC to 2026-08-20 23:59 UTC

23 files changed +1,990 −107. View all changes and history on the product overview
2026
Sat 22 04:57 Fri 21 19:59 Thu 20 23:59 Wed 19 22:57 Tue 18 13:01 Mon 17 23:58 Sat 15 01:01 Fri 14 22:00 Thu 13 22:59 Wed 12 19:59 Tue 11 22:59 Mon 10 22:00 Sat 8 03:02 Fri 7 18:59 Thu 6 23:58 Wed 5 19:00 Tue 4 22:00 Mon 3 23:00 Sun 2 21:00
Details

56 href: "/codex/auth",56 href: "/codex/auth",

57 icon: "key",57 icon: "key",

58 },58 },

59 {

60 title: "Workload identity",

61 description:

62 "Let trusted workloads use Codex without long-lived credentials.",

63 href: "/codex/enterprise/workload-identity",

64 icon: "key",

65 },

59 {66 {

60 title: "Personal Access Tokens",67 title: "Personal Access Tokens",

61 description: "Create and manage tokens for programmatic access.",68 description: "Create and manage tokens for programmatic access.",

Details

30 30 

31Codex asks for approval to edit files outside the workspace or to run commands that require network access. If you want to chat or plan without making changes, switch to `read-only` mode with the `/permissions` command.31Codex asks for approval to edit files outside the workspace or to run commands that require network access. If you want to chat or plan without making changes, switch to `read-only` mode with the `/permissions` command.

32 32 

33Codex can also elicit approval for app (connector) tool calls that advertise side effects, even when the action isn't a shell command or file change. Destructive app/MCP tool calls always require approval when the tool advertises a destructive annotation, even if it also advertises other hints (for example, read-only hints).33Codex can also elicit approval for app (connector) tool calls that advertise side effects, even when the action isn't a shell command or file change. Destructive app/MCP tool calls always require approval when the tool advertises a destructive annotation (unless the tool advertises a read annotation, which takes priority).

34 34 

35## Network access <ElevatedRiskBadge class="ml-2" />35## Network access <ElevatedRiskBadge class="ml-2" />

36 36 

auth.md +10 −3

Details

8 8 

9<ContentModeSwitch group="codex-surface" ids="app,cli,ide">9<ContentModeSwitch group="codex-surface" ids="app,cli,ide">

10 10 

11Codex supports two ways to sign in when using OpenAI models:11Codex supports two ways for a person to sign in when using OpenAI models:

12 12 

13- Sign in with ChatGPT for subscription access13- Sign in with ChatGPT for subscription access

14- Sign in with an API key for usage-based access14- Sign in with an API key for usage-based access


155 155 

156<ContentModeSwitch group="codex-surface" id="cli">156<ContentModeSwitch group="codex-surface" id="cli">

157 157 

158Run `codex login status` to see the active authentication method. Run158Run `codex login status` to see the active authentication method. For stored

159`codex logout` to clear the current credentials.159authentication, run `codex logout` to clear the current credentials. When

160the process selects workload identity, Codex rejects `codex login` and

161`codex logout` because the process environment controls authentication.

160 162 

161</ContentModeSwitch>163</ContentModeSwitch>

162 164 


183For setup steps, permissions, rotation, and revocation guidance, see185For setup steps, permissions, rotation, and revocation guidance, see

184[Access tokens](https://learn.chatgpt.com/docs/enterprise/access-tokens).186[Access tokens](https://learn.chatgpt.com/docs/enterprise/access-tokens).

185 187 

188If your cloud platform, CI system, or cluster already issues short-lived

189workload tokens, use

190[workload identity federation](https://learn.chatgpt.com/docs/enterprise/workload-identity)

191instead of storing an OpenAI credential.

192 

186</ContentModeSwitch>193</ContentModeSwitch>

187 194 

188<ContentModeSwitch group="codex-surface" id="cli">195<ContentModeSwitch group="codex-surface" id="cli">

cloud.md +8 −7

Details

4 4 

5## Run coding tasks in parallel cloud environments5## Run coding tasks in parallel cloud environments

6 6 

7Run tasks in isolated cloud environments, work in parallel, and start work from the web, GitHub, Linear, or Slack.7Run tasks in isolated cloud environments, work in parallel, and start work from the web, GitHub, GitLab, Linear, or Slack.

8 8 

9> Illustration: Codex cloud chat composer and chat list with interactive archiving9> Illustration: Codex cloud chat composer and chat list with interactive archiving

10 10 


23 23 

24**Set up Codex cloud.**24**Set up Codex cloud.**

25 25 

26Connect GitHub, create an environment, and start your first cloud chat.26Connect GitHub or GitLab, create an environment, and start your first cloud chat.

27 27 

28### 1. Open Codex and sign in28### 1. Open Codex and sign in

29 29 

30Go to [Codex](https://chatgpt.com/codex) and sign in with your ChatGPT account.30Go to [Codex](https://chatgpt.com/codex) and sign in with your ChatGPT account.

31 31 

32### 2. Connect GitHub32### 2. Connect GitHub or GitLab

33 33 

34Connect your GitHub account when prompted, then choose the repositories that Codex can access.34Connect GitHub or GitLab (Beta) when prompted. For GitHub, choose the repositories Codex can access; for GitLab, select a project when you create the environment. For GitLab setup, webhook permissions, and merge request reviews, see [Use Codex with GitLab (Beta)](https://learn.chatgpt.com/docs/third-party/gitlab).

35 35 

36### 3. Create an environment36### 3. Create an environment

37 37 

38Open [environment settings](https://chatgpt.com/codex/settings/environments) and create an environment for your repository. Configure any dependencies, tools, environment variables, or secrets the task needs.38Open [environment settings](https://chatgpt.com/codex/settings/environments) and create an environment for the repository you selected. Configure any dependencies, tools, environment variables, or secrets the task needs.

39 39 

40For configuration details, see [Cloud environments](https://learn.chatgpt.com/docs/environments/cloud-environment).40For configuration details, see [Cloud environments](https://learn.chatgpt.com/docs/environments/cloud-environment).

41 41 


52- [Customize the cloud environment](https://learn.chatgpt.com/docs/environments/cloud-environment)52- [Customize the cloud environment](https://learn.chatgpt.com/docs/environments/cloud-environment)

53- [Configure agent internet access](https://learn.chatgpt.com/docs/cloud/internet-access)53- [Configure agent internet access](https://learn.chatgpt.com/docs/cloud/internet-access)

54- [Use Codex with GitHub](https://learn.chatgpt.com/docs/third-party/github)54- [Use Codex with GitHub](https://learn.chatgpt.com/docs/third-party/github)

55- [Use Codex with GitLab (Beta)](https://learn.chatgpt.com/docs/third-party/gitlab)

55- [Use Codex in Linear](https://learn.chatgpt.com/docs/third-party/linear)56- [Use Codex in Linear](https://learn.chatgpt.com/docs/third-party/linear)

56- [Use Codex in Slack](https://learn.chatgpt.com/docs/third-party/slack)57- [Use Codex in Slack](https://learn.chatgpt.com/docs/third-party/slack)

57 58 


61 62 

62- [Delegate several tasks](https://learn.chatgpt.com/docs/environments/cloud-environment): Start work in parallel and return as each task reaches a reviewable result.63- [Delegate several tasks](https://learn.chatgpt.com/docs/environments/cloud-environment): Start work in parallel and return as each task reaches a reviewable result.

63- [Build a reproducible environment](https://learn.chatgpt.com/docs/environments/cloud-environment): Configure the dependencies, tools, variables, and setup steps a repository needs.64- [Build a reproducible environment](https://learn.chatgpt.com/docs/environments/cloud-environment): Configure the dependencies, tools, variables, and setup steps a repository needs.

64- [Delegate from your integrations](https://learn.chatgpt.com/docs/developers): Start work in Codex cloud from GitHub pull requests, Linear issues, or Slack channels and threads.65- [Delegate from your integrations](https://learn.chatgpt.com/docs/developers): Start work in Codex cloud from GitHub pull requests, GitLab merge requests and issues, Linear issues, or Slack channels and threads.

65 66 

66## Use Codex cloud when…67## Use Codex cloud when…

67 68 

68- [Work needs to run in the background](https://learn.chatgpt.com/docs/environments/cloud-environment): Delegate a longer task and return when it is ready.69- [Work needs to run in the background](https://learn.chatgpt.com/docs/environments/cloud-environment): Delegate a longer task and return when it is ready.

69- [You want to compare several attempts](https://learn.chatgpt.com/docs/environments/cloud-environment): Run tasks in parallel without tying up your local machine.70- [You want to compare several attempts](https://learn.chatgpt.com/docs/environments/cloud-environment): Run tasks in parallel without tying up your local machine.

70- [Work starts in GitHub, Linear, or Slack](https://learn.chatgpt.com/docs/developers): Use integrations to hand off work without leaving the pull request, issue, channel, or thread.71- [Work starts in GitHub, GitLab, Linear, or Slack](https://learn.chatgpt.com/docs/developers): Use integrations to hand off work without leaving the pull request, merge request, issue, channel, or thread.

71- [You are away from your development machine](https://learn.chatgpt.com/docs/environments/cloud-environment): Start and review work from the web or Codex CLI.72- [You are away from your development machine](https://learn.chatgpt.com/docs/environments/cloud-environment): Start and review work from the web or Codex CLI.

codex-manual.md +970 −50

Details

12- `approval_policy`, `sandbox_mode`, `permissions`, `permission profiles`, `network access`, `read-only`, `workspace-write`, `danger-full-access`, `security`, `cyber`: [Approvals, Sandboxing, and Security](#approvals-sandboxing-and-security)12- `approval_policy`, `sandbox_mode`, `permissions`, `permission profiles`, `network access`, `read-only`, `workspace-write`, `danger-full-access`, `security`, `cyber`: [Approvals, Sandboxing, and Security](#approvals-sandboxing-and-security)

13- `config.toml`, `.codex/config.toml`, `auth.json`, `ChatGPT sign-in`, `API key login`, `models`, `providers`, `model_reasoning_effort`: [Configuration, Authentication, and Models](#configuration-auth-and-models)13- `config.toml`, `.codex/config.toml`, `auth.json`, `ChatGPT sign-in`, `API key login`, `models`, `providers`, `model_reasoning_effort`: [Configuration, Authentication, and Models](#configuration-auth-and-models)

14- `codex exec`, `codex cloud`, `codex mcp`, `worktrees`, `cloud environments`, `internet access`, `Voice`, `remote connections`, `web search`, `image generation`: [CLI, IDE, App, and Cloud Behavior](#surface-behavior)14- `codex exec`, `codex cloud`, `codex mcp`, `worktrees`, `cloud environments`, `internet access`, `Voice`, `remote connections`, `web search`, `image generation`: [CLI, IDE, App, and Cloud Behavior](#surface-behavior)

15- `AGENTS.md`, `skills`, `plugins`, `plugin packaging`, `plugin marketplace`, `hooks`, `Docs MCP`, `rules`, `Code Review rules`, `custom prompts`, `MCP`, `GitHub integration`, `Slack integration`: [Customization, Skills, Rules, MCP, and Integrations](#customization-and-tooling)15- `AGENTS.md`, `skills`, `plugins`, `plugin packaging`, `plugin marketplace`, `hooks`, `Docs MCP`, `rules`, `Code Review rules`, `custom prompts`, `MCP`, `GitHub integration`, `GitLab integration`, `Slack integration`: [Customization, Skills, Rules, MCP, and Integrations](#customization-and-tooling)

16- `sdk`, `noninteractive`, `app-server`, `scheduled tasks`, `github-action`, `CI`, `auth in CI`: [Noninteractive and Programmatic Interfaces](#automation-and-programmatic-interfaces)16- `sdk`, `noninteractive`, `app-server`, `scheduled tasks`, `github-action`, `CI`, `auth in CI`: [Noninteractive and Programmatic Interfaces](#automation-and-programmatic-interfaces)

17- `Linux`, `Ubuntu`, `Debian`, `Fedora`, `Windows`, `WSL`, `enterprise`, `managed configuration`, `Amazon Bedrock`, `RBAC`, `data residency`, `OSS`: [Platform, Enterprise, and Caveats](#platform-enterprise-and-caveats)17- `Linux`, `Ubuntu`, `Debian`, `Fedora`, `Windows`, `WSL`, `enterprise`, `managed configuration`, `Amazon Bedrock`, `RBAC`, `data residency`, `OSS`: [Platform, Enterprise, and Caveats](#platform-enterprise-and-caveats)

18 18 


284Plugin availability depends on your plan, workspace settings, and the plugin284Plugin availability depends on your plan, workspace settings, and the plugin

285itself. Learn more about [skills and plugins](https://learn.chatgpt.com/docs/skills-and-plugins).285itself. Learn more about [skills and plugins](https://learn.chatgpt.com/docs/skills-and-plugins).

286 286 

287#### Share a read-only snapshot of a Codex thread

288 

289On all Codex plans, you can create a read-only snapshot of a local Codex thread

290in the ChatGPT desktop app for macOS. The snapshot doesn't give other people

291access to your project or computer.

292 

293Before sharing, check who can open the link:

294 

295- **Personal account:** Anyone with the link can open the snapshot.

296- **Workspace account:** Only authenticated members of the workspace that

297 created the snapshot can open it. You can allow everyone in that workspace

298 or restrict access to invited people and groups. A workspace administrator

299 can turn off workspace share links.

300 

3011. Open the thread and select **Share**. You can also use `/share` where slash

302 commands are available.

3032. For a workspace account, use **Who has access** to choose everyone in your

304 workspace or **Only people and groups invited**. For invited-only access,

305 add existing workspace members by email or choose workspace groups.

3063. Wait for the snapshot to finish uploading, then select **Copy link**.

307 Opening the dialog starts the upload, but Codex publishes the snapshot only

308 when you select **Copy link**, using your chosen audience and recipients.

3094. Open the copied link and review the shared view before sending it to anyone.

310 

311A snapshot captures the supported thread content available when you share it.

312Later messages and changes don't update the existing snapshot.

313 

314Shared snapshots can include user-visible messages, reasoning summaries, image

315attachments, images viewed or generated by the agent, and file changes,

316including paths and diffs. They don't include the original thread's tool calls,

317shell commands, or tool input or output.

318 

319Codex redacts known secret patterns before uploading a snapshot. Review the

320shared view before sending its link because sensitive content, including file

321paths, may remain in messages, images, or diffs.

322 

323You can't fork the original thread from a shared snapshot. You can import the

324snapshot as an attachment and refer to it in a new thread.

325 

326To view or revoke a shared link, open [ChatGPT data

327controls](https://chatgpt.com/#settings/DataControls) and select **Shared links**.

328 

287#### Make the result ready to use329#### Make the result ready to use

288 330 

289Treat the first result as a draft you can inspect, challenge, and improve. A331Treat the first result as a draft you can inspect, challenge, and improve. A


343work, with examples and links to learn more. For every versioned update, bug fix,385work, with examples and links to learn more. For every versioned update, bug fix,

344and minor improvement, see the [Codex changelog](https://learn.chatgpt.com/docs/changelog).386and minor improvement, see the [Codex changelog](https://learn.chatgpt.com/docs/changelog).

345 387 

388#### August 17–21, 2026

389 

390#### Work with more of your apps and content

391 

392- **Apple Messages:** [Find chats, summarize messages, prepare replies, and send through Messages on your Mac](https://learn.chatgpt.com/docs/plugins?surface=app#app-use-apple-messages-from-codex). The plugin is available on all plans in the ChatGPT desktop app for macOS. Use it in ChatGPT Work and Codex, not in regular ChatGPT chats. By default, ChatGPT sends messages only after you approve the message and its recipients.

393 

394- **Site co-editing:** Where available, [invite active members of your workspace as editors](https://learn.chatgpt.com/docs/sites#collaborate-on-a-site). Editors can refine the Site and publish updates after its owner publishes it for the first time. Invited editors can read the Site's live database data; owners retain control of sharing and settings.

395 

396- **Editable Site URLs:** Where available, [choose a new ChatGPT-hosted address for an existing Site](https://learn.chatgpt.com/docs/sites#change-a-site-url) without redeploying it. The previous address redirects to the new one.

397 

398- **Computer History in Europe:** Use [Computer History](https://learn.chatgpt.com/docs/customization/computer-history) in the EEA, Switzerland, and the United Kingdom. It remains off by default for ChatGPT Pro, Business, and Enterprise users on macOS. Business and Enterprise administrators must enable access first.

399 

400- **Shared thread snapshots:** [Share a read-only snapshot of a local Codex thread](https://learn.chatgpt.com/docs/use-chatgpt#share-a-read-only-snapshot-of-a-codex-thread) from the ChatGPT desktop app for macOS. Personal-account links are viewable by anyone with the link; workspace-account links are limited to the originating workspace. Codex redacts known secret patterns, but review the snapshot before sharing because sensitive content may remain.

401 

402- **Unified pinned threads:** Keep your [pinned chats](https://learn.chatgpt.com/docs/projects?surface=app#app-organize-projects-and-chats) in sync between desktop and iOS.

403 

404[Read the August 20 release notes](https://learn.chatgpt.com/docs/changelog#codex-2026-08-20-app).

405 

406#### Work with GitLab projects in Codex cloud

407 

408[GitLab support](https://learn.chatgpt.com/docs/third-party/gitlab) is available in beta on all ChatGPT

409plans. Connect a project, create a cloud environment, start tasks from issues

410or merge requests with `@codex`, and request one-off or automatic merge request

411reviews.

412 

413The integration runs in Codex cloud, and a managed workspace admin can disable

414it. GitLab-triggered activity requires permission to configure the applicable

415webhook. GitLab Self-Managed and GitLab Dedicated connections require

416workspace admin setup; webhook activity requires GitLab 19.0 or later.

417 

418[Read the August 19 GitLab release

419notes](https://learn.chatgpt.com/docs/changelog#codex-2026-08-19-gitlab).

420 

421#### Export public plugin metadata for review

422 

423Eligible ChatGPT Enterprise workspace owners and admins can download a CSV of

424the public plugins visible to their workspace. In

425[Admin > Plugins](https://chatgpt.com/admin/plugins), select **Public**, then

426select the download icon (**Export CSV**).

427 

428The export lists plugin, app, and Chat skill names and descriptions, together

429with developer, version, date added in UTC, and OpenAI verification metadata.

430It uses a public-catalog snapshot that can be up to 48 hours old and excludes

431plugins created for the workspace. The export isn't available in FedRAMP

432workspaces.

433 

434[Read the August 17 admin export release

435notes](https://learn.chatgpt.com/docs/changelog#codex-2026-08-17-admin-csv).

436 

346#### August 10–14, 2026437#### August 10–14, 2026

347 438 

348#### Find earlier work with Computer History439#### Find earlier work with Computer History


2777 2868 

2778- [GitHub](https://learn.chatgpt.com/docs/third-party/github): Assign work, review changes, and move toward a pull request.2869- [GitHub](https://learn.chatgpt.com/docs/third-party/github): Assign work, review changes, and move toward a pull request.

2779 2870 

2871- [GitLab (Beta)](https://learn.chatgpt.com/docs/third-party/gitlab): Connect projects, delegate work, and review merge requests.

2872 

2780- [Slack](https://learn.chatgpt.com/docs/third-party/slack): Start Codex chats from external discussions and return results.2873- [Slack](https://learn.chatgpt.com/docs/third-party/slack): Start Codex chats from external discussions and return results.

2781 2874 

2782- [Linear](https://learn.chatgpt.com/docs/third-party/linear): Assign issues to Codex and follow work through delivery.2875- [Linear](https://learn.chatgpt.com/docs/third-party/linear): Assign issues to Codex and follow work through delivery.


8746in the Codex desktop app. Codex performs scan analysis in a regular task, while8839in the Codex desktop app. Codex performs scan analysis in a regular task, while

8747the workbench keeps the scan and its results available when you return.8840the workbench keeps the scan and its results available when you return.

8748 8841 

8842In the ChatGPT desktop app, open the ChatGPT dropdown and select **Codex**.

8749Install and enable the [Codex Security plugin](https://learn.chatgpt.com/docs/security/plugin), then8843Install and enable the [Codex Security plugin](https://learn.chatgpt.com/docs/security/plugin), then

8750select **Security** in the desktop-app sidebar.8844select **Security** in the sidebar.

8751 8845 

8752If **Security** doesn't appear, confirm that the plugin is installed and8846If **Security** doesn't appear, confirm that **Codex** is selected and the

8753enabled. Update the desktop app and plugin if needed, and check whether your8847plugin is installed and enabled. Update the desktop app and plugin if needed,

8754workspace administrator allows the plugin.8848and check whether your workspace administrator allows the plugin.

8755 8849 

8756#### Start a scan8850#### Start a scan

8757 8851 


8924 9018 

8925Codex asks for approval to edit files outside the workspace or to run commands that require network access. If you want to chat or plan without making changes, switch to `read-only` mode with the `/permissions` command.9019Codex asks for approval to edit files outside the workspace or to run commands that require network access. If you want to chat or plan without making changes, switch to `read-only` mode with the `/permissions` command.

8926 9020 

8927Codex can also elicit approval for app (connector) tool calls that advertise side effects, even when the action isn't a shell command or file change. Destructive app/MCP tool calls always require approval when the tool advertises a destructive annotation, even if it also advertises other hints (for example, read-only hints).9021Codex can also elicit approval for app (connector) tool calls that advertise side effects, even when the action isn't a shell command or file change. Destructive app/MCP tool calls always require approval when the tool advertises a destructive annotation (unless the tool advertises a read annotation, which takes priority).

8928 9022 

8929#### Network access9023#### Network access

8930 9024 


10826 10920 

10827#### Use Codex Security in the desktop app10921#### Use Codex Security in the desktop app

10828 10922 

10923In the ChatGPT desktop app, open the ChatGPT dropdown and select **Codex**.

10829Install and enable the Codex Security plugin to open **Security** in the10924Install and enable the Codex Security plugin to open **Security** in the

10830desktop-app sidebar. The Security workbench keeps your scans, findings, and10925sidebar. The Security workbench keeps your scans, findings, and repositories in

10831repositories in one place while Codex runs each scan in a task.10926one place while Codex runs each scan in a task.

10832 10927 

10833- Use **Scans** to start scans, follow their progress, and review saved results.10928- Use **Scans** to start scans, follow their progress, and review saved results.

10834- Use **Findings** to inspect issues and evidence across completed scans.10929- Use **Findings** to inspect issues and evidence across completed scans.


11495#### Authentication and network11590#### Authentication and network

11496 11591 

11497| Variable | Used by | Description |11592| Variable | Used by | Description |

11498| ---------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |11593| ---------------------------------- | ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- |

11499| `CODEX_API_KEY` | `codex exec` | Provides an API key for a single non-interactive run. This is only supported in `codex exec`; set it inline rather than job-wide when running repository-controlled code. |11594| `CODEX_API_KEY` | Exec, review, TypeScript SDK, remote exec-server | Provides an API key to a non-interactive Codex process. Set it inline rather than job-wide when running repository-controlled code. |

11500| `CODEX_ACCESS_TOKEN` | CLI, app-server, trusted automation | Provides a ChatGPT or Codex access token for trusted automation. For persisted login, pipe it to `codex login --with-access-token`. |11595| `CODEX_ACCESS_TOKEN` | CLI, app-server, trusted automation | Provides a ChatGPT or Codex access token for trusted automation. For persisted login, pipe it to `codex login --with-access-token`. |

11501| `CODEX_CA_CERTIFICATE` | HTTPS, login, and WebSocket clients | Points to a PEM CA bundle for environments with corporate TLS interception or private root CAs. Takes precedence over `SSL_CERT_FILE`. |11596| `OPENAI_FEDERATION_RULE_ID` | Workload identity | Selects the federation rule configured for the workload. |

11597| `OPENAI_IDENTITY_TOKEN_FILE` | Workload identity | Points to the absolute path of the file that contains the current OIDC token or SPIFFE JWT-SVID. |

11598| `OPENAI_WORKLOAD_IDENTITY_CONTEXT` | Workload identity | Optionally supplies bounded JSON identifiers for client-reported audit attribution. It does not affect authentication or authorization. |

11599| `CODEX_CA_CERTIFICATE` | HTTPS, login, and WebSocket clients | Points to a PEM CA bundle for environments with corporate TLS interception or private root certificates. Takes precedence over `SSL_CERT_FILE`. |

11502| `SSL_CERT_FILE` | HTTPS, login, and WebSocket clients | Fallback PEM CA bundle path when `CODEX_CA_CERTIFICATE` is unset. |11600| `SSL_CERT_FILE` | HTTPS, login, and WebSocket clients | Fallback PEM CA bundle path when `CODEX_CA_CERTIFICATE` is unset. |

11503 11601 

11504For provider API keys, set11602For provider API keys, set


11509For automation secret handling, see11607For automation secret handling, see

11510[Use API key auth](https://learn.chatgpt.com/docs/non-interactive-mode#use-api-key-auth).11608[Use API key auth](https://learn.chatgpt.com/docs/non-interactive-mode#use-api-key-auth).

11511For access token setup, see [Access tokens](https://learn.chatgpt.com/docs/enterprise/access-tokens).11609For access token setup, see [Access tokens](https://learn.chatgpt.com/docs/enterprise/access-tokens).

11610For workload identity setup, see

11611[Workload identity federation](https://learn.chatgpt.com/docs/enterprise/workload-identity).

11512 11612 

11513#### Diagnostics11613#### Diagnostics

11514 11614 


12388 12488 

12389#### OpenAI authentication12489#### OpenAI authentication

12390 12490 

12391Codex supports two ways to sign in when using OpenAI models:12491Codex supports two ways for a person to sign in when using OpenAI models:

12392 12492 

12393- Sign in with ChatGPT for subscription access12493- Sign in with ChatGPT for subscription access

12394- Sign in with an API key for usage-based access12494- Sign in with an API key for usage-based access


12485Open the profile menu to see the active account or API key status. Select12585Open the profile menu to see the active account or API key status. Select

12486**Log out** to clear the current credentials.12586**Log out** to clear the current credentials.

12487 12587 

12488Run `codex login status` to see the active authentication method. Run12588Run `codex login status` to see the active authentication method. For stored

12489`codex logout` to clear the current credentials.12589authentication, run `codex logout` to clear the current credentials. When

12590the process selects workload identity, Codex rejects `codex login` and

12591`codex logout` because the process environment controls authentication.

12490 12592 

12491Open the profile menu to see the active account or API key status. Select12593Open the profile menu to see the active account or API key status. Select

12492**Log out** to clear the current credentials.12594**Log out** to clear the current credentials.


12505For setup steps, permissions, rotation, and revocation guidance, see12607For setup steps, permissions, rotation, and revocation guidance, see

12506[Access tokens](https://learn.chatgpt.com/docs/enterprise/access-tokens).12608[Access tokens](https://learn.chatgpt.com/docs/enterprise/access-tokens).

12507 12609 

12610If your cloud platform, CI system, or cluster already issues short-lived

12611workload tokens, use

12612[workload identity federation](https://learn.chatgpt.com/docs/enterprise/workload-identity)

12613instead of storing an OpenAI credential.

12614 

12508If your environment already provides a Codex access token, pipe it to the CLI:12615If your environment already provides a Codex access token, pipe it to the CLI:

12509 12616 

12510```shell12617```shell


18894- **Anyone in the workspace**, where supported19001- **Anyone in the workspace**, where supported

18895- **Anyone on the internet**, only when public publishing is enabled19002- **Anyone on the internet**, only when public publishing is enabled

18896 19003 

18897Sharing lets people visit the Site; it doesn't let them edit it. In Enterprise19004Visitor access lets people open the Site; it doesn't give them editing access.

18898workspaces, public publishing is off by default and must be enabled by an admin.19005In Enterprise workspaces, public publishing is off by default and must be

19006enabled by an admin.

18899 19007 

18900For limited sharing, invited visitors must sign in with the account that19008For limited sharing, invited visitors must sign in with the account that

18901received access. A public Site is available without ChatGPT workspace access. A19009received access. A public Site is available without ChatGPT workspace access. A


18909current Site and confirming its URL.19017current Site and confirming its URL.

18910```19018```

18911 19019 

19020#### Collaborate on a Site

19021 

19022Site collaboration requires a workspace. When the feature is available, a Site

19023owner can invite active members of the same workspace as editors.

19024 

19025Editors can read the Site's live database data. Invite only people you trust

19026with the Site's code and data.

19027 

190281. Open the Site and select **Share**.

190292. Under **Add people or groups**, find and select a workspace member. They

19030 are added as a visitor.

190313. Open **Can view** next to that person and choose **Can edit**. Access saves

19032 automatically. The Site appears under **Shared with you** in the member's

19033 Sites view.

190344. The editor can open the Site, make changes, save versions, and publish

19035 updates after the owner has published the Site for the first time.

19036 

19037The Site owner manages editor access and can promote an existing visitor to

19038editor, change an editor to **Can view**, or remove their access. Co-editing

19039doesn't add a separate workspace permission toggle.

19040 

19041Editors can't change the Site's audience, invite or remove other people, manage

19042settings or analytics, restore an earlier version, or transfer ownership. An

19043editor also can't perform the Site's first publish; the owner must publish the

19044Site before editors can publish later updates.

19045 

19046Editor access is separate from visitor access. The steps above first add the

19047person as a visitor, then grant editing access. Promoting a visitor to editor

19048doesn't change the Site's audience setting.

19049 

18912#### Configure runtime environment values19050#### Configure runtime environment values

18913 19051 

18914Open **Sites**, then open the Site's settings to add, update, or remove hosted19052Open **Sites**, then open the Site's settings to add, update, or remove hosted


18926redeploy the approved saved version so the next deployment uses the updated19064redeploy the approved saved version so the next deployment uses the updated

18927configuration.19065configuration.

18928 19066 

19067#### Change a Site URL

19068 

19069Where URL editing is available, Site owners can change the ChatGPT-hosted URL

19070for an existing Site without creating another deployment.

19071 

190721. Open **Sites**, find the Site, and open its settings.

190732. Find the Site URL and select **Change URL**.

190743. Enter an available name. It must contain at least five characters, start

19075 with a lowercase letter, and use only lowercase letters, numbers, and single

19076 hyphens. It can't end with a hyphen or contain consecutive hyphens.

190774. Confirm the change and wait while Sites updates the address.

19078 

19079The URL change doesn't create another deployment. The previous address

19080redirects to the new one, including routes and query parameters.

19081 

19082Changing the ChatGPT-hosted URL doesn't add, remove, or change a custom domain.

19083Custom domains are a separate, existing feature; use the custom-domain

19084settings when that feature is available.

19085 

18929#### Connect a custom domain19086#### Connect a custom domain

18930 19087 

18931Where custom domains are available, you can connect an apex domain or subdomain19088Where custom domains are available, you can connect an apex domain or subdomain


21504turn it on. For Business and Enterprise workspaces, an administrator must21661turn it on. For Business and Enterprise workspaces, an administrator must

21505explicitly grant access before each member can choose to turn it on. Computer21662explicitly grant access before each member can choose to turn it on. Computer

21506History also requires [Memories](https://learn.chatgpt.com/docs/customization/memories) and is not21663History also requires [Memories](https://learn.chatgpt.com/docs/customization/memories) and is not

21507available with an API key or Amazon Bedrock. Computer History is not currently21664available with an API key or Amazon Bedrock. It's available in supported

21508available in the European Economic Area (EEA), Switzerland, or the United21665regions, including the European Economic Area (EEA), Switzerland, and the

21509Kingdom.21666United Kingdom.

21510 21667 

21511Computer History turns your activity across apps and websites into memories and21668Computer History turns your activity across apps and websites into memories and

21512a timeline that ChatGPT and Codex can reference. You can ask natural questions21669a timeline that ChatGPT and Codex can reference. You can ask natural questions


27738- For automatic reviews, check that you turned on **Automatic reviews** and that27895- For automatic reviews, check that you turned on **Automatic reviews** and that

27739 the pull request event matches your review trigger settings.27896 the pull request event matches your review trigger settings.

27740 27897 

27898### Review GitLab merge requests with Codex

27899 

27900Source: [Review GitLab merge requests with Codex](https://learn.chatgpt.com/docs/third-party/gitlab.md)

27901 

27902Use Codex code review to get another high-signal review pass on GitLab merge

27903requests. Codex reviews the merge request diff, follows your repository

27904guidance, and posts a standard GitLab code review focused on serious issues.

27905 

27906GitLab support is in beta and is available on all ChatGPT plans. The Codex

27907integration runs in Codex cloud. GitHub-style repository controls in the

27908desktop app, such as **Create pull request**, aren't included in this beta.

27909 

27910#### Before you start

27911 

27912Make sure you have:

27913 

27914- A connected GitLab account. GitLab.com requires the

27915 [standard connection flow](https://help.openai.com/articles/20001486);

27916 self-managed or Dedicated GitLab instances require

27917 [workspace-admin template setup](https://help.openai.com/articles/20001487).

27918- An `AGENTS.md` file if you want Codex to follow repository-specific review

27919 guidance.

27920 

27921#### Set up Codex code review

27922 

27923#### Set up the GitLab connection and Codex review identity

27924 

27925For GitLab.com, connect your GitLab account in Codex once you've

27926[connected to GitLab in ChatGPT](https://help.openai.com/articles/20001486).

27927For self-managed or Dedicated GitLab, each reviewer should connect after the

27928[workspace-admin template](https://help.openai.com/articles/20001487) has been

27929published.

27930 

27931For self-managed or Dedicated GitLab, open **Codex Cloud** → **Settings** →

27932[**Connectors**](https://chatgpt.com/codex/cloud/settings/connectors). A

27933workspace admin can let Codex create a service account or save an existing

27934service-account personal access token.

27935 

27936#### Let Codex create the account

27937 

27938In **Codex Cloud** → **Settings** → **Connectors**, select the app for your

27939self-managed or Dedicated GitLab host → select **Set up service account** →

27940**Create a service account**. The workspace admin completing setup must have

27941administrator access to the GitLab instance. Choose either **Selected groups**

27942or **Selected projects only**, then select where Codex should operate and create

27943the account. The group option grants Developer access to each chosen group,

27944inherited by its projects and subgroups; the project option grants Developer

27945access only to the individual projects you choose. Codex will create the ChatGPT

27946Codex Connector instance service account with a personal access token with the

27947`api` scope.

27948 

27949#### Use an existing account

27950 

27951In GitLab, create or choose a service account and grant it Developer access

27952only in the groups or projects where Codex should operate. From the **Service

27953accounts** page, select the account → **Manage access tokens** → **Add new

27954token** to

27955[create a personal access token](https://docs.gitlab.com/user/profile/service_accounts/#create-a-personal-access-token-for-a-service-account)

27956with the `api` scope and an expiration date at least 30 days away. Back in

27957Codex, choose **Use an existing service account**, paste the token, and select

27958**Save token**. The token is encrypted when saved and is never shown again.

27959 

27960#### Manage the service-account token

27961 

27962Workspace admins can manage the service account in **Codex Cloud** →

27963**Settings** → **Connectors**. For a Codex-created account, admins can revoke

27964the current token and generate a new one. For an existing account, admins can

27965replace or remove the saved token in Codex and revoke it separately in GitLab if

27966needed. Codex cannot respond to GitLab activity until a valid token is

27967configured.

27968 

27969#### Choose how GitLab activity reaches Codex

27970 

27971#### Create a project environment for coding tasks or project-specific setup

27972 

27973In **Codex Cloud** → **Settings** → **Environments**, choose the GitLab project

27974and create a project environment when you want Codex to write or execute code

27975for that project—for example, to edit files, commit changes, or push updates to

27976a merge request branch—or when a review depends on project-specific secrets,

27977network access, or setup commands.

27978 

27979For GitLab.com, a project environment is also required to enable Codex reviews.

27980 

27981While creating the environment, turn on **Enable Codex activity from GitLab**

27982to install the project webhook that delivers merge request, comment, and issue

27983events to Codex. Creating the project webhook requires Maintainer or Owner

27984access, administrator access, or a custom role that can administer project

27985webhooks. Signed project and group webhooks require GitLab 19.0 or newer. On

27986self-managed GitLab 19.0, confirm the `webhook_signing_token` feature flag is

27987enabled; it is enabled by default and was removed in GitLab 19.1.

27988 

27989#### Enable activity for Codex reviews for projects across a GitLab group

27990 

27991For self-managed or Dedicated GitLab, workspace admins can open **Environments**

27992→ **GitLab activity** → **Manage groups** to enable Codex reviews across a group

27993and its subgroups. Codex will install a group webhook covering projects

27994throughout that group. The connected GitLab user must be a group Owner, and

27995group webhooks require GitLab Premium or Ultimate and GitLab 19.0 or newer.

27996 

27997Group activity enables code reviews but does not create project environments.

27998To run GitLab-triggered coding tasks, such as editing files, running commands,

27999committing changes, or pushing updates to a merge request, create a project

28000environment.

28001 

28002#### Configure code review policies

28003 

28004Configure code review policies in

28005[Codex review settings](https://chatgpt.com/codex/cloud/settings/code-review?provider=gitlab).

28006Choose the repository policy: `Review my MRs`, `Review team MRs`,

28007`Review all MRs`, or `Follow personal`. Then choose when reviews run: **On MR open**,

28008**On every push**, or **Smart Trigger (Experimental)**. Repository settings can

28009override personal defaults.

28010 

28011#### Request a Codex review

28012 

280131. In a merge request comment, mention `@codex review`.

280142. Wait for Codex to react (👀) and post a review.

28015 

28016Codex posts GitLab discussions and notes on the merge request, just like a

28017teammate would. By default, manually requested reviews can include P0, P1, and

28018P2 findings, while automatic reviews focus on P0 and P1 findings.

28019 

28020#### Enable automatic reviews

28021 

28022To review qualifying merge requests automatically, turn on **Automatic

28023reviews** in Codex settings, choose the GitLab repository policy, and choose a

28024trigger: **On MR open**, **On every push**, or **Smart Trigger (Experimental)**.

28025Codex runs without an `@codex review` comment when the merge request event

28026matches that policy and trigger.

28027 

28028GitLab activity must be enabled through a project webhook or an ancestor group

28029webhook. For self-managed or Dedicated GitLab, the configured service account

28030must also have access to write back to the project. Codex uses a configured

28031project environment when present. If an ancestor group already enables

28032activity, descendant projects inherit that coverage.

28033 

28034#### Customize what Codex reviews

28035 

28036Codex searches your repository for `AGENTS.md` files and follows the applicable

28037code review rules. Add a `## Code Review Rules` section to the file closest to

28038the code the rules govern. Use `###` headings to group related checks when

28039helpful.

28040 

28041For example, an experiment-reporting service can keep post-exposure behavior

28042from changing a comparison cohort:

28043 

28044```md

28045## Code Review Rules

28046 

28047### Experiment cohorts

28048 

28049- Do not filter treatment comparisons on post-exposure behavior, including conversion or retention.

28050 Safe path: build cohorts from assignment or exposure; report conversion as an outcome.

28051```

28052 

28053Put repository-wide rules in the root `AGENTS.md` and service-specific rules in

28054a nested file, such as `services/experiment_reporting/AGENTS.md`. Codex applies

28055the root and more-specific guidance that covers each changed file, so unrelated

28056changes don't have to carry service-specific context.

28057 

28058Start with two or three concise rules that encode checks reviewers often

28059explain. Useful rules:

28060 

28061- **Focus on consequential, repository-specific behavior.** Describe the

28062 compatibility constraint, data boundary, or unsafe side effect to flag and

28063 why it matters.

28064- **State the safe path or exception.** Give Codex enough context to distinguish

28065 a real issue from expected behavior.

28066- **Keep rules scoped and durable.** Prefer outcomes over function names that

28067 can change, and place guidance near the code it governs.

28068- **Leave mechanical checks in CI.** Keep formatting, lint, and other

28069 deterministic checks out of review rules.

28070 

28071Open a representative merge request and request a review with `@codex review`.

28072Refine the rules based on the findings and feedback you see, and narrow or

28073remove guidance that produces noise.

28074 

28075Code review rules guide Codex; they don't replace tests, branch protections, or

28076required approvals.

28077 

28078For a one-off focus, add it to your merge request comment:

28079 

28080`@codex review for issues in the database migration`

28081 

28082#### Act on review findings

28083 

28084Fixing review findings requires a **configured project environment**; group

28085activity alone supports reviews but cannot run coding tasks. If the project has

28086an environment, ask Codex to fix an issue in the same merge request by leaving

28087another comment:

28088 

28089```md

28090@codex fix the P1 issue

28091```

28092 

28093Codex starts a [cloud chat](https://learn.chatgpt.com/docs/cloud) with the merge request as context and

28094can push a fix back to the branch when it has permission to do so.

28095 

28096#### Give Codex other tasks

28097 

28098Other coding tasks also require a **configured project environment**; group

28099activity alone supports reviews. If you mention `@codex` in a comment with

28100anything other than `review`, Codex starts a [cloud chat](https://learn.chatgpt.com/docs/cloud) using

28101your merge request as context.

28102 

28103```md

28104@codex fix the CI failures

28105```

28106 

28107#### Troubleshoot code review

28108 

28109If Codex doesn't react or post a review:

28110 

28111- Confirm the intended GitLab app has been selected; if you use project-specific

28112 setup, confirm the project has the intended Codex cloud environment.

28113- Confirm activity for the project or an ancestor group. In GitLab, check

28114 **Webhooks** →

28115 [**Recent events**](https://docs.gitlab.com/user/project/integrations/webhooks/)

28116 and verify merge request and note deliveries succeed.

28117- For self-managed or Dedicated GitLab, confirm the project or group webhook is

28118 signed, SSL verification is enabled, and the instance is on GitLab 19.0 or

28119 newer. On self-managed GitLab 19.0, confirm the `webhook_signing_token` feature

28120 flag is enabled; repair hooks disabled automatically after failures.

28121- For self-managed or Dedicated GitLab, confirm an existing service-account

28122 personal access token is active and has the `api` scope. If Codex created the

28123 service account, confirm it is correctly configured in

28124 [Codex connector settings](https://chatgpt.com/codex/cloud/settings/connectors)

28125 and that the project or group is enabled.

28126- For self-managed or Dedicated GitLab, confirm the workspace service

28127 account—not just the connected GitLab user—has Developer access to the project

28128 or a parent group so Codex can post reviews and reactions. Membership is

28129 inherited; activity and service-account access are separate.

28130- Confirm **Code review** or **Automatic reviews** is enabled and the MR matches

28131 the repository policy and trigger.

28132- Use `@codex review`.

28133 

27741### Rules28134### Rules

27742 28135 

27743Source: [Rules](https://learn.chatgpt.com/docs/agent-configuration/rules.md)28136Source: [Rules](https://learn.chatgpt.com/docs/agent-configuration/rules.md)


28966 Use this when you want to be specific about which plugin or skill ChatGPT29359 Use this when you want to be specific about which plugin or skill ChatGPT

28967 should use. See Skills & Plugins.29360 should use. See Skills & Plugins.

28968 29361 

29362#### Use Apple Messages from Codex

29363 

29364The Apple Messages plugin is available on all plans in the ChatGPT desktop app

29365for macOS. In Codex and ChatGPT Work, it can read and search iMessage, SMS, and

29366RCS chats on your Mac and send messages on your behalf through the Messages app.

29367It doesn't let you interact with ChatGPT remotely through Messages, and it

29368doesn't work in regular ChatGPT chats.

29369 

29370For this release, the Messages plugin is included only in the Apple Silicon

29371(arm64) build of the ChatGPT desktop app.

29372 

293731. Open **Plugins**, find the Apple Messages plugin, and install it.

293742. Start a new Codex or ChatGPT Work chat and ask it to find, summarize, draft,

29375 or send a message.

293763. Grant the requested macOS permissions before ChatGPT reads Messages.

293774. Review the message and its recipients before allowing a send.

29378 

29379By default, ChatGPT sends messages only after you approve the message and its

29380recipients. Choose **Allow once** to approve only that send. If you select

29381**Always allow sending to this chat**, ChatGPT can send future messages to that

29382Messages chat without another send approval.

29383 

29384Keep per-send approval for chats that may contain untrusted or misleading

29385instructions. Persistent approval removes your final chance to review a message

29386before ChatGPT sends it as you. Use it only when you accept that risk.

29387 

29388To restore per-send approval, open **Settings** > **Computer use** and select

29389**Manage** next to **Messages**. Under **Always allowed to send**, select the

29390trash icon next to the chat, then confirm **Remove**. ChatGPT will ask

29391before sending to that chat again.

29392 

29393**Known issue:** If your task is set to **Full access** or otherwise disables

29394approval prompts, Apple Messages may be unable to show the confirmation needed

29395to send. Switch to **Ask for approval** or **Approve for me** and try again.

29396 

29397Apple Messages runs on your Mac. It isn't directly available in ChatGPT on the

29398web or mobile, Codex CLI, or the IDE extension.

29399 

29400In managed workspaces, administrators can disable Apple Messages through the

29401existing Computer Use control.

29402 

28969#### Plugin browser in Codex CLI29403#### Plugin browser in Codex CLI

28970 29404 

28971In Codex CLI, run the following command to open the plugin browser:29405In Codex CLI, run the following command to open the plugin browser:


31771 32205 

31772If stdin is piped and you also provide a prompt argument, Codex treats the prompt as the instruction and the piped content as additional context.32206If stdin is piped and you also provide a prompt argument, Codex treats the prompt as the instruction and the piped content as additional context.

31773 32207 

31774This makes it easy to generate input with one command and hand it directly to Codex:32208This lets you generate input with one command and hand it directly to Codex:

31775 32209 

31776```bash32210```bash

31777curl -s https://jsonplaceholder.typicode.com/comments \32211curl -s https://jsonplaceholder.typicode.com/comments \


31863 32297 

31864`codex exec` reuses saved CLI authentication by default. In CI, it's common to provide credentials explicitly:32298`codex exec` reuses saved CLI authentication by default. In CI, it's common to provide credentials explicitly:

31865 32299 

32300If your trusted cloud or CI runtime already receives short-lived workload

32301tokens, use

32302[workload identity federation](https://learn.chatgpt.com/docs/enterprise/workload-identity)

32303instead of storing an OpenAI credential.

32304 

31866#### Use API key auth32305#### Use API key auth

31867 32306 

31868For GitHub Actions, use the [Codex GitHub Action](https://learn.chatgpt.com/docs/github-action) instead of installing and authenticating the CLI yourself. The action is designed to reduce API key exposure by installing Codex, starting a Responses API proxy, and running Codex with a configurable safety strategy.32307For GitHub Actions, use the [Codex GitHub Action](https://learn.chatgpt.com/docs/github-action) instead of installing and authenticating the CLI yourself. The action is designed to reduce API key exposure by installing Codex, starting a Responses API proxy, and running Codex with a configurable safety strategy.

31869 32308 

31870Do not set `OPENAI_API_KEY` or `CODEX_API_KEY` as a job-level environment variable in workflows that check out or run repository-controlled code. Build scripts, tests, dependency lifecycle hooks, or a compromised action in the same job can read those environment variables.32309Do not set `OPENAI_API_KEY` or `CODEX_API_KEY` as a job-level environment variable in workflows that check out or run repository-controlled code. Build scripts, tests, dependency lifecycle hooks, or a compromised action in the same job can read those environment variables.

31871 32310 

31872For other automation environments, set `CODEX_API_KEY` only for the single `codex exec` invocation and make sure no untrusted code runs in the same process environment.32311For other automation environments, set `CODEX_API_KEY` only for the Codex

32312invocation that needs it, and make sure no untrusted code runs in the same

32313process environment.

31873 32314 

31874To use a different API key for a single run, set `CODEX_API_KEY` inline:32315To use a different API key for a single run, set `CODEX_API_KEY` inline:

31875 32316 


31877CODEX_API_KEY=<api-key> codex exec --json "triage open bug reports"32318CODEX_API_KEY=<api-key> codex exec --json "triage open bug reports"

31878```32319```

31879 32320 

31880`CODEX_API_KEY` is only supported in `codex exec`.32321You can use `CODEX_API_KEY` with `codex exec`, `codex review`, the TypeScript

32322SDK, and `codex exec-server --remote`.

31881 32323 

31882#### Use ChatGPT-managed auth in CI/CD (advanced)32324#### Use ChatGPT-managed auth in CI/CD (advanced)

31883 32325 


33663The files and tools available to ChatGPT Work depend on where Work is running,34105The files and tools available to ChatGPT Work depend on where Work is running,

33664user permissions and admin configuration.34106user permissions and admin configuration.

33665 34107 

33666**Local Work** runs tasks through the ChatGPT desktop app on the user's device.34108#### Local Work

34109 

34110Local Work runs tasks through the ChatGPT desktop app on the user's device.

33667It can access local files, applications, and other resources made available to34111It can access local files, applications, and other resources made available to

33668it, subject to the user's permissions, applicable workspace controls, and device34112it, subject to the user's permissions, applicable workspace controls, and device

33669security policies. Unlike Work on the Web, local Work can operate on resources34113security policies. Unlike Work on the Web, local Work can operate on resources

33670that remain on your computer without requiring you to upload files to a cloud34114that remain on your computer without requiring you to upload files to a cloud

33671conversation.34115conversation.

33672 34116 

33673**Cloud Work**, accessed via the web or mobile, runs the Codex harness in an34117#### Cloud Work

33674isolated environment on OpenAI-managed infrastructure. Cloud conversations can34118 

33675be available across supported web, mobile, and desktop surfaces, and supported34119Cloud Work is available on supported web, mobile, and desktop surfaces. It runs

33676tasks can continue while the user is away from the conversation.34120the Codex harness in an isolated environment on OpenAI-managed infrastructure.

34121Cloud conversations can sync across these surfaces, and supported tasks can

34122continue while the user is away from the conversation.

33677 34123 

33678Work on the web can't directly access files, applications, or open browser tabs34124Work on the web can't directly access files, applications, or open browser tabs

33679on the user's computer. A user can provide files by uploading them, adding them34125on the user's computer. A user can provide files by uploading them, adding them


33700 34146 

33701- **Code and shell commands**: Public internet access depends on the applicable34147- **Code and shell commands**: Public internet access depends on the applicable

33702 workspace policy and individual Work network setting. When public internet34148 workspace policy and individual Work network setting. When public internet

33703 access isn't allowed, commands can still reach required destinations on a34149 access isn't allowed, commands can still reach OpenAI-approved destinations

33704 managed allowlist.34150 required for Work to function. This controls network destinations, not which

34151 commands can run.

33705- **Web search**: Search has controls separate from the Work code and shell34152- **Web search**: Search has controls separate from the Work code and shell

33706 network setting.34153 network setting.

33707 34154 


34106 34553 

34107Source: [Groups and provisioning](https://learn.chatgpt.com/docs/enterprise/groups-and-provisioning.md)34554Source: [Groups and provisioning](https://learn.chatgpt.com/docs/enterprise/groups-and-provisioning.md)

34108 34555 

34109Groups organize ChatGPT workspace access for a set of members and can carry34556Groups organize people in a ChatGPT workspace and can carry custom roles. Group

34110custom roles. Group membership is separate from local runtime policy and34557membership doesn't replace seat assignments, grant workspace feature permissions

34111permissions in connected systems.34558by itself, override local runtime policy, or provide access to the Platform API

34559or connected systems.

34112 34560 

34113For the complete control model, see34561For the complete control model, see

34114[Roles and workspace permissions](https://learn.chatgpt.com/docs/enterprise/roles-and-workspace-permissions).34562[Roles and workspace permissions](https://learn.chatgpt.com/docs/enterprise/roles-and-workspace-permissions).

34115 34563 

34116#### Compare membership sources34564#### Compare membership sources

34117 34565 

34566Use groups for people with a shared access need, such as a pilot cohort,

34567workspace operators, or members who need the same supported feature.

34568 

34569#### Create a group for a shared access need

34570 

34571Workspace owners and admins can create and manage groups. Create a manually

34572managed group for a small or temporary audience, or sync an established group

34573from your identity provider when membership should follow your directory.

34574 

34118Each group has one authoritative membership source:34575Each group has one authoritative membership source:

34119 34576 

34120| Group type | Membership source | When it applies |34577| Group type | Membership source | When it applies |


34129 34586 

34130#### Understand the access boundary34587#### Understand the access boundary

34131 34588 

34589Group membership by itself doesn't grant a workspace feature permission.

34590 

34591#### Connect a group to the right permissions

34592 

34593Workspace owners can assign custom roles to groups or, where available, directly

34594to members. Check every applicable role: an explicit **Off** in any role

34595denies that permission, even when another role grants it. A member's seat type

34596and product eligibility still apply.

34597 

34132SCIM provisions workspace membership and group assignments. It doesn't grant34598SCIM provisions workspace membership and group assignments. It doesn't grant

34133permissions in GitHub, Google Drive, Slack, or another connected system. It also34599permissions in GitHub, Google Drive, Slack, or another connected system. It also

34134doesn't replace local runtime requirements or Platform API organization access.34600doesn't replace local runtime requirements or Platform API organization access.


34149- [SCIM integration FAQ](https://help.openai.com/en/articles/10011769-openai-platform-scim-integration-faq)34615- [SCIM integration FAQ](https://help.openai.com/en/articles/10011769-openai-platform-scim-integration-faq)

34150- [Manage workspace settings](https://help.openai.com/en/articles/8411955)34616- [Manage workspace settings](https://help.openai.com/en/articles/8411955)

34151 34617 

34618#### Verify joiners, movers, and leavers

34619 

34620- **Joiners:** Confirm the member accepts any pending workspace invitation and

34621 receives the intended seat, group memberships, permissions, and supported

34622 features.

34623- **Movers:** Update the authoritative membership source and verify the

34624 member's effective permissions across all applicable roles.

34625- **Leavers:** Remove a SCIM-managed member's access through the identity

34626 provider and confirm that the member can no longer access the workspace. If

34627 you remove the member only from the workspace, a later sync can restore

34628 access.

34629 

34152#### Related docs34630#### Related docs

34153 34631 

34154- [Authentication](https://learn.chatgpt.com/docs/auth)34632- [Authentication](https://learn.chatgpt.com/docs/auth)


34430cache for a later start; it doesn't replace the requirements already loaded34908cache for a later start; it doesn't replace the requirements already loaded

34431into the current process.34909into the current process.

34432 34910 

34911#### Confirm the admin and employee experience

34912 

34913Assign a person to own each managed policy, record which users or groups should

34914receive it, and document the business reason for any filesystem, network,

34915approval, or permission-profile restriction.

34916 

34917Before expanding the rollout, test an approved workflow and an intentionally

34918disallowed workflow with a representative user. Verify the effective settings

34919in the supported client rather than assuming a workspace role or group alone

34920enforces the local restriction.

34921 

34433#### Example requirements.toml34922#### Example requirements.toml

34434 34923 

34435This example blocks `--ask-for-approval never` and `--sandbox danger-full-access` (including `--yolo`):34924This example blocks `--ask-for-approval never` and `--sandbox danger-full-access` (including `--yolo`):


34924 35413 

34925#### Managed defaults (`managed_config.toml`)35414#### Managed defaults (`managed_config.toml`)

34926 35415 

34927Managed defaults merge on top of a user's local `config.toml` and take35416Managed defaults set the configuration a supported local client starts with. At

34928precedence over any CLI `--config` overrides, setting the starting values when a35417startup, they override the user's local `config.toml` and any CLI `--config`

34929supported local client launches. Users can still change those settings during a35418overrides. Users can still change those settings during the current run, and the

34930run; the client reapplies managed defaults the next time it starts.35419defaults apply again the next time the client starts.

34931 35420 

34932If a managed default, macOS MDM profile, or saved configuration pins `gpt-5.4`35421If a managed default, macOS MDM profile, or saved configuration pins `gpt-5.4`

34933or `gpt-5.4-mini` for users signed in with ChatGPT, update it before August 31, 2026. Replace `gpt-5.4` with `gpt-5.6-terra` and `gpt-5.4-mini` with35422or `gpt-5.4-mini` for users signed in with ChatGPT, update it before August 31, 2026. Replace `gpt-5.4` with `gpt-5.6-terra` and `gpt-5.4-mini` with


35058[Build plugins](https://developers.openai.com/plugins/build/plugins) for35547[Build plugins](https://developers.openai.com/plugins/build/plugins) for

35059packaging and distribution.35548packaging and distribution.

35060 35549 

35550#### Export the public catalog for review

35551 

35552Eligible ChatGPT Enterprise workspace owners and admins can download a CSV of

35553the public plugins available to their workspace. Use the export to review

35554plugin, app, and skill metadata before changing plugin availability.

35555 

355561. Open [Admin > Plugins](https://chatgpt.com/admin/plugins).

355572. Select **Public**.

355583. Select the download icon (**Export CSV**) in the page header.

35559 

35560The download uses the filename `public-plugins-security-review.csv` and includes:

35561 

35562- Plugin metadata: `Plugin Name`, `Plugin Description`, `Date Added (UTC)`,

35563 `OpenAI Verified`, `Developer Name`, and `Version`.

35564- App metadata: `App Name(s)` and `App Description(s)`.

35565- Chat skill metadata: `Skill Name(s)` and `Skill Description(s)`.

35566 

35567When a plugin includes more than one app or skill, semicolons separate the

35568corresponding values. The export uses a public-catalog snapshot that can be up

35569to 48 hours old,

35570includes only public plugins visible to the current workspace, and does not

35571include plugins created for that workspace. It isn't available in FedRAMP

35572workspaces.

35573 

35061#### Step 2: Manage capabilities35574#### Step 2: Manage capabilities

35062 35575 

35063Making an app or plugin available in ChatGPT doesn't grant access to files,35576Making an app or plugin available in ChatGPT doesn't grant access to files,


35258 35771 

35259Source: [Roles and workspace permissions](https://learn.chatgpt.com/docs/enterprise/roles-and-workspace-permissions.md)35772Source: [Roles and workspace permissions](https://learn.chatgpt.com/docs/enterprise/roles-and-workspace-permissions.md)

35260 35773 

35261Administration spans six control boundaries. Granting access at one boundary35774Different settings cover different parts of your organization's ChatGPT

35262doesn't grant access at another. Use this page as the canonical map,35775experience. Giving someone access in one area doesn't automatically give them

35263then follow the linked source for current settings and procedures.35776access in another. Use this page to see how the six control boundaries work

35777together, then follow the linked guidance for current setup steps.

35264 35778 

35265In workspace settings, **Codex Local** is a grouping label for certain local35779In workspace settings, **Codex Local** is a grouping label for certain local

35266access and access-token controls, not a separate product or client. Individual35780access and access-token controls, not a separate product or client. Individual


35290#### Assign workspace access35804#### Assign workspace access

35291 35805 

35292ChatGPT workspace administration separates product access from administrative35806ChatGPT workspace administration separates product access from administrative

35293authority. The workspace plan and a member's seat determine which product35807authority.

35294surfaces are available. Built-in workspace roles determine who can administer35808 

35295the workspace. Role-based access control (RBAC) determines which supported35809#### Understand the difference between a seat, an admin role, and a custom role

35296features members can use.35810 

35811A seat determines which product surfaces a member can access. Depending on the

35812workspace plan, available seat types can include ChatGPT and Codex seats.

35813 

35814Built-in workspace roles determine administrative authority. The **Owner** role

35815manages workspace-wide settings, the **Admin** role manages supported operations

35816and groups, the **Member** role doesn't have administrative rights, and the

35817**Analytics Viewer** role can access workspace analytics.

35818 

35819Custom roles define which supported features a member can use. They don't

35820replace seat or plan eligibility, grant permissions in a connected system, or

35821change local runtime requirements.

35822 

35823#### Set the workspace default, then create targeted custom roles

35824 

35825Only workspace owners can configure role-based access control (RBAC) and create

35826custom roles. Workspace settings establish the baseline for eligible

35827permissions. Owners can assign custom roles through manually managed or

35828SCIM-synced groups, or directly to individual members where supported. A member

35829can receive more than one custom role.

35830 

35831For eligible permissions, **Default** inherits the workspace setting, **On**

35832grants access, and **Off** explicitly denies access. An explicit **Off** in any

35833applicable role blocks access even when another role grants it. Available

35834permission states can vary by feature.

35835 

35836#### Review Work Local and Work Cloud permissions

35837 

35838When your workspace offers **Work Local** and **Work Cloud**, check both the

35839workspace default and each applicable custom role. Work is available only to

35840eligible workspaces, and available controls can differ by plan, workspace

35841configuration, and rollout. A role can't expand the access allowed by a

35842member's seat.

35843 

35844**Work Cloud** governs supported ChatGPT Work tasks in the cloud. **Work

35845Local** without **Work Cloud** allows local work in the ChatGPT desktop app but

35846doesn't allow members to start cloud tasks. Codex Local access instead uses the

35847separate **Allow members to use Codex Local** permission. Changing a Work

35848permission doesn't change Codex Local access or replace local runtime

35849requirements.

35297 35850 

35298Administrators can assign custom roles through groups, and a member can receive35851For current eligibility and settings, see

35299access from more than one group. Because available seats, roles, and permissions35852[ChatGPT Work and Codex](https://help.openai.com/en/articles/20001275-chatgpt-work-and-codex).

35300change with product and plan updates, use the Help Center for the current35853 

35301permission list and setup procedure:35854Because available seats, roles, and permissions change with product and plan

35855updates, use the Help Center for the current permission list and setup

35856procedure:

35302 35857 

35303- [Manage members, seat types, roles, and access](https://help.openai.com/en/articles/8266401-managing-members-seat-types-roles-and-access-in-chatgpt-enterprise)35858- [Manage members, seat types, roles, and access](https://help.openai.com/en/articles/8266401-managing-members-seat-types-roles-and-access-in-chatgpt-enterprise)

35304- [Configure role-based access control](https://help.openai.com/en/articles/11750701-rbac)35859- [Configure role-based access control](https://help.openai.com/en/articles/11750701-rbac)


35555- [Admin rollout guide](https://learn.chatgpt.com/docs/enterprise/admin-setup)36110- [Admin rollout guide](https://learn.chatgpt.com/docs/enterprise/admin-setup)

35556- [Plugin controls](https://learn.chatgpt.com/docs/enterprise/apps-and-connectors)36111- [Plugin controls](https://learn.chatgpt.com/docs/enterprise/apps-and-connectors)

35557 36112 

36113### Workload identity federation

36114 

36115Source: [Workload identity federation](https://learn.chatgpt.com/docs/enterprise/workload-identity.md)

36116 

36117Workload identity federation lets trusted automation use Codex without storing

36118a personal access token or another long-lived OpenAI credential. Your workload

36119presents a short-lived identity token from a provider you already operate.

36120OpenAI verifies that token and returns a short-lived access token for a user or

36121service account in your managed ChatGPT workspace.

36122 

36123Use workload identity for unattended Codex processes in cloud platforms,

36124Kubernetes, CI systems, and other environments that can issue OIDC tokens or

36125SPIFFE JWT-SVIDs. For the shared trust model and the separate OpenAI API flow,

36126see the [workload identity overview](https://developers.openai.com/api/docs/guides/workload-identity-federation).

36127 

36128Codex workload identity federation is in beta and must be enabled for your

36129workspace. To request access, contact your OpenAI representative or [OpenAI

36130Support](https://help.openai.com/en/articles/6614161-how-can-i-contact-support).

36131 

36132#### Before you begin

36133 

36134You need:

36135 

36136- Permission to manage workload identity in the OpenAI Admin Portal.

36137- A managed ChatGPT workspace.

36138- A ChatGPT user or service account that is an active member of that workspace,

36139 or permission to create one during setup.

36140- An OIDC token or SPIFFE JWT-SVID whose issuer, audience, and identifying

36141 claims you know.

36142- A runtime that can keep that token current in a protected file at an absolute

36143 path.

36144- Codex 0.148.0 or later.

36145- An effective Codex authentication policy that permits ChatGPT authentication

36146 and the workspace selected by the federation rule. See [Enforce a login

36147 method or workspace](https://learn.chatgpt.com/docs/auth#enforce-a-login-method-or-workspace).

36148 

36149OpenAI does not create a principal or workspace membership during token

36150exchange. An administrator selects or creates the principal before the workload

36151connects. Creating a human user consumes a workspace seat and follows the

36152membership rules for that workspace.

36153 

36154On native Windows, use the **elevated**

36155[Windows sandbox](https://learn.chatgpt.com/docs/windows/windows-sandbox). Other Windows sandbox modes

36156cannot protect the identity-token file from model-controlled commands.

36157 

36158#### Get an identity token

36159 

36160Your workload runtime gets and refreshes the upstream identity token. Codex does

36161not call cloud metadata services or identity-provider client libraries on your

36162behalf.

36163 

36164| Runtime | Recommended token-file source |

36165| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |

36166| Kubernetes, AKS, EKS, or GKE | Mount a projected service-account token and point Codex at that file. The platform rotates it. |

36167| Microsoft Entra managed identity | Run a trusted host process or sidecar that requests a token from Azure IMDS and replaces the file before expiry. |

36168| AWS outbound identity federation | Run a trusted host process that calls regional STS `GetWebIdentityToken` and replaces the file before expiry. |

36169| Google Cloud | Run a trusted host process that requests an identity token from the metadata server and replaces the file before expiry. |

36170| Oracle Cloud Infrastructure | Run a trusted host process that uses an instance principal to request an IDCS access token and replaces the file before expiry. |

36171| GitHub Actions | Request the job's OIDC token, write it to a protected file, and request a new token before a later exchange. |

36172| SPIFFE | Use the SPIFFE Workload API or an approved helper to write a current JWT-SVID to the file. |

36173| Custom OIDC provider | Use the issuer's workload flow to get a JWT, then refresh the protected file before the JWT expires. |

36174 

36175Follow the guide for your provider to configure token issuance and inspect a

36176sample token:

36177 

36178- [Microsoft Azure](https://developers.openai.com/api/docs/guides/workload-identity-federation/microsoft-azure)

36179- [AWS](https://developers.openai.com/api/docs/guides/workload-identity-federation/aws)

36180- [Google Cloud](https://developers.openai.com/api/docs/guides/workload-identity-federation/google-cloud)

36181- [Oracle Cloud Infrastructure](https://developers.openai.com/api/docs/guides/workload-identity-federation/oracle-cloud)

36182- [GitHub Actions](https://developers.openai.com/api/docs/guides/workload-identity-federation/github-actions)

36183- [Kubernetes](https://developers.openai.com/api/docs/guides/workload-identity-federation/kubernetes)

36184- [SPIFFE](https://developers.openai.com/api/docs/guides/workload-identity-federation/spiffe)

36185 

36186Decode a sample token locally and record its `iss`, `aud`, `sub`, and any other

36187claims you plan to trust. Decoding does not verify the signature. Do not paste a

36188production token into a website or write it to logs.

36189 

36190#### Connect the workload

36191 

36192An administrator creates the provider and federation rule before starting

36193Codex.

36194 

361951. Open [Workload identity](https://admin.openai.com/workload-identity) in the

36196 OpenAI Admin Portal, then select **Connect workload**.

361972. Reuse a provider configured for Codex, or create one. Provider presets fill

36198 in common settings for GitHub Actions, Microsoft Entra ID, Google Cloud,

36199 AWS, Kubernetes, SPIFFE, and custom OIDC providers.

362003. Select **Codex** and the managed workspace the workload may use.

362014. Add the narrowest conditions that identify the workload. Match a subject,

36202 exact claims, a CEL condition, or a combination. Add accepted audiences to

36203 restrict which tokens the rule accepts. Every configured matcher must pass.

362045. Map the rule to one existing ChatGPT user or service account, or create one

36205 during setup.

362066. Review the provider, conditions, workspace, principal, scopes, and access

36207 token lifetime. Select **Connect workload**, then **Download config**.

36208 

36209The downloaded file contains a non-secret federation rule ID and the path where

36210Codex will read the identity token. It does not contain a credential.

36211 

36212To automate setup, use the [workload identity Admin

36213API](https://developers.openai.com/api/docs/guides/workload-identity-federation/admin-api). For matcher

36214behavior and examples, see [Federation rule

36215reference](https://developers.openai.com/api/docs/guides/workload-identity-federation/federation-rules).

36216 

36217#### Configure the Codex process

36218 

36219The process that starts Codex requires these two workload identity variables:

36220 

36221```bash

36222export OPENAI_FEDERATION_RULE_ID="idpm_..."

36223export OPENAI_IDENTITY_TOKEN_FILE="/var/run/secrets/openai.com/identity-token"

36224```

36225 

36226`OPENAI_FEDERATION_RULE_ID` is not a secret. The token file is. Use an absolute

36227path in a dedicated directory, such as `/var/run/secrets/openai.com`, owned by

36228the workload account with mode `0700`. Only trusted host processes should write

36229there. Keep the directory outside repositories and other paths available to

36230Codex tools. Keep credentials out of logs, shell history, and build artifacts.

36231 

36232#### Add audit attribution

36233 

36234When runtime instances share a federation rule, you can identify each instance

36235in token-issuance audit events. Set the optional

36236`OPENAI_WORKLOAD_IDENTITY_CONTEXT` variable to a JSON object encoded as a

36237string:

36238 

36239```bash

36240export OPENAI_WORKLOAD_IDENTITY_CONTEXT='{

36241 "instance_id": "runner-42",

36242 "display_name": "payments-prod",

36243 "labels": {

36244 "environment": "production",

36245 "region": "us-west-2"

36246 }

36247}'

36248```

36249 

36250The object requires `instance_id`. It can also contain `display_name` and up to

36251eight labels. The encoded object can be up to 1,024 bytes. `instance_id` and

36252`display_name` can be up to 128 characters. Label keys can be up to 64

36253characters, and label values can be up to 256 characters.

36254 

36255Identifiers must start with an ASCII letter or number. Values can then contain

36256letters, numbers, `.`, `_`, `:`, `/`, `@`, and `-`. Label keys support letters,

36257numbers, `.`, `_`, and `-`.

36258 

36259OpenAI treats this context as client-reported audit attribution, not as verified

36260workload identity. It does not affect authentication, authorization, rule

36261matching, scopes, rate limits, revocation, feature gates, or metrics. Do not put

36262credentials, secrets, personal data, prompts, model output, or other Customer

36263Content in it.

36264 

36265For valid context, OpenAI derives a stable attribution ID scoped to the tenant,

36266provider, federation rule, and `instance_id`. For attribution, the access token

36267contains the ID but not the context. The successful token-issuance audit event

36268contains the ID and the normalized context. Context that exceeds a limit or

36269violates this schema makes the exchange fail with `invalid_grant`.

36270 

36271Codex reads the context when the process starts and does not pass it, the rule

36272ID, or the token-file path to model-controlled shells, hooks, or MCP servers.

36273Restart Codex after changing the context.

36274 

36275#### Protect and rotate the token file

36276 

36277For managed Linux, macOS, and WSL deployments, add the entire token directory to

36278[`permissions.filesystem.deny_read`](https://learn.chatgpt.com/docs/enterprise/managed-configuration#enforce-deny-read-requirements)

36279in managed requirements:

36280 

36281```toml

36282[permissions.filesystem]

36283deny_read = ["/var/run/secrets/openai.com"]

36284```

36285 

36286This blocks model-controlled commands from reading the active token or a

36287temporary replacement while the Codex host process can still use the token for

36288exchange. For projected-token volumes, deny the entire token mount and any

36289backing or resolved target paths outside it. File modes and environment-variable

36290scrubbing alone do not protect credentials from another process running as the

36291same user. On native Windows, use the elevated sandbox described above.

36292 

36293For token sources that do not project a file, have a trusted host process write

36294each replacement inside that protected directory and rename it into place. An

36295atomic rename prevents Codex from reading a partial token. For example, adapt

36296this host-owned refresh script to your provider's token command. Provision the

36297directory before running the script:

36298 

36299```bash

36300set -eu

36301TOKEN_DIR="/var/run/secrets/openai.com"

36302TOKEN_FILE="$TOKEN_DIR/identity-token"

36303umask 077

36304TOKEN_TEMP="$(mktemp "$TOKEN_DIR/.identity-token.XXXXXX")"

36305trap 'rm -f -- "$TOKEN_TEMP"' EXIT

36306trap 'exit 1' HUP INT TERM

36307your-identity-provider-command > "$TOKEN_TEMP"

36308test -s "$TOKEN_TEMP"

36309mv -f -- "$TOKEN_TEMP" "$TOKEN_FILE"

36310```

36311 

36312Run the refresh process outside any shell or tool that Codex can control. Keep

36313the read denial in place during refresh and cleanup. Even if a forced stop

36314leaves a temporary file behind, that file must remain inside the denied

36315directory. Do not put workload identity settings in `config.toml`.

36316 

36317#### Verify the connection

36318 

36319Load the downloaded environment and inspect the selected authentication method:

36320 

36321```bash

36322. ./workload-identity-idpm_example.env

36323codex login status

36324```

36325 

36326In PowerShell:

36327 

36328```powershell

36329$env:OPENAI_FEDERATION_RULE_ID = "idpm_..."

36330$env:OPENAI_IDENTITY_TOKEN_FILE = "C:\run\openai\identity-token"

36331codex login status

36332```

36333 

36334A successful check prints `Logged in using workload identity`. This confirms

36335that Codex exchanged a token through the configured federation rule. The command

36336does not print the resolved workspace, principal, or rule. Confirm those values

36337in the Admin Portal before you start the workload. If Codex reports another

36338authentication method, the two required WIF variables did not reach the process.

36339 

36340If the provider uses **Prevent assertion replay** and the assertion has a `jti`

36341claim, this check consumes that `jti`. Write a newly issued assertion with a new

36342`jti` before starting another Codex process.

36343 

36344Run a small request from the same environment:

36345 

36346```bash

36347codex exec "Reply with only: workload identity is working"

36348```

36349 

36350Codex exchanges the upstream token and keeps the OpenAI access token in memory.

36351It does not write either credential to `auth.json`, the system keyring, or

36352`config.toml`.

36353 

36354#### Keep the token current

36355 

36356Refresh the identity-token file before the upstream token expires. Codex rereads

36357the file when it needs another OpenAI access token. The OpenAI token expires at

36358the earlier of the upstream token's expiry or the federation rule's lifetime,

36359and never lasts longer than one hour.

36360 

36361When an administrator turns on replay protection, each upstream JWT must have a

36362unique `jti`. Write a newly issued assertion with a new `jti` before each

36363exchange, including refreshes in a long-running process. Assertions without

36364`jti` do not receive replay protection.

36365 

36366Codex shares one in-memory exchange session inside each host process. Concurrent

36367requests in that process reuse a valid OpenAI access token and share one refresh

36368when it expires. Separate processes perform separate exchanges, so they need

36369assertions that the provider permits them to use.

36370 

36371#### Credential precedence

36372 

36373The two required workload identity variables take precedence over every other

36374credential source:

36375 

363761. If either `OPENAI_FEDERATION_RULE_ID` or

36377 `OPENAI_IDENTITY_TOKEN_FILE` is present, Codex selects workload identity.

363782. If only one required variable is present, Codex returns an error. It does not

36379 fall back to an API key, access token, or stored login.

363803. `OPENAI_WORKLOAD_IDENTITY_CONTEXT` alone does not select workload identity.

363814. When neither required WIF variable is present, Codex applies the normal

36382 credential rules for that surface. For surfaces that allow API key

36383 authentication, `CODEX_API_KEY` takes precedence on `codex exec`,

36384 `codex review`, the TypeScript SDK, and `codex exec-server --remote`. Other

36385 surfaces can use `CODEX_ACCESS_TOKEN` or a stored login.

36386 

36387An SDK `apiKey` option becomes `CODEX_API_KEY`, but WIF still takes precedence

36388when either required WIF variable is present. Omit the option when using WIF so

36389the workload does not carry an unused long-lived credential.

36390 

36391To move an existing workload without downtime, configure WIF while its current

36392credential is still available. Start a new process with both required WIF

36393variables; WIF takes precedence even if the old credential is still present.

36394After the workload succeeds with WIF, remove the old credential from its runtime

36395and secrets store, then revoke it. Before revocation, you can roll back by

36396removing both required WIF variables and starting a new process.

36397 

36398#### Supported Codex surfaces

36399 

36400Configure workload identity on the machine that owns the Codex process.

36401 

36402| Surface | Support and host boundary |

36403| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------- |

36404| Interactive `codex`, `resume`, and `fork` | Supported. Start the CLI in the configured environment. |

36405| `codex exec`, `exec resume`, and `codex review` | Supported. Either required WIF variable makes WIF take precedence. |

36406| TypeScript SDK | Supported. The parent process supplies the required WIF variables and any optional attribution context. |

36407| `codex app-server` | Supported. Configure WIF on the app-server host, not on a remote client. |

36408| `codex exec-server --remote` | Supported for authentication to the remote environment registry. Configure WIF on the exec-server host. |

36409| Local exec-server process operations | Do not use WIF authentication. They run through the local exec-server protocol. |

36410| `codex mcp-server` | Not supported. |

36411 

36412Remote app-server and exec-server clients never send the upstream identity

36413token over their protocols.

36414 

36415#### Change or remove access

36416 

36417Changes to a rule's subjects, audiences, claims, CEL condition, scopes, or token

36418lifetime apply to new exchanges. A token issued before the change can remain

36419valid until its lifetime ends.

36420 

36421Disable a provider or rule to stop access immediately. Disablement blocks new

36422exchanges and revokes OpenAI access tokens already issued through that resource.

36423Archiving has the same access effect and cannot be undone. Changing provider

36424trust also revokes issued tokens before the new trust takes effect.

36425 

36426#### Audit changes

36427 

36428Provider and federation rule creation, updates, and archival generate audit

36429events. Use the [Compliance API and audit event

36430guidance](https://learn.chatgpt.com/docs/enterprise/compliance-api) to export the events your workspace

36431supports. Correlate them with your identity provider's issuance logs, and do not

36432record upstream assertions or OpenAI access tokens in either system.

36433 

36434When the process supplies `OPENAI_WORKLOAD_IDENTITY_CONTEXT`, successful

36435token-issuance audit events also contain the stable attribution ID and

36436normalized context described above.

36437 

36438#### Troubleshoot

36439 

36440| Symptom | Check |

36441| --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |

36442| Codex reports incomplete workload identity configuration | Set both required variables in the same process and use an absolute token-file path. |

36443| Codex reports that its login policy does not permit workload identity | Allow ChatGPT authentication in the effective policy and include the rule's workspace in its permitted workspaces. |

36444| Codex reports another credential | Load both required WIF variables into the Codex process, then start a new process and rerun `codex login status`. |

36445| OpenAI rejects workload context | Check its JSON shape, size, allowed characters, and field limits. Remove sensitive or Customer Content. |

36446| OpenAI rejects the token | Compare `iss`, `aud`, expiry, signature key, and assertion lifetime with the provider configuration. |

36447| The rule does not match | Confirm the client uses the intended rule ID and that every subject, audience, exact-claim, and CEL check passes. |

36448| OpenAI rejects the principal | Confirm the user or service account is active and is an active member of the selected workspace. |

36449| OpenAI rejects a repeated assertion | Get a new JWT with a new `jti`; do not retry the same replay-protected assertion. |

36450| A long-running process stops refreshing | Confirm the host refresh process is still replacing the token file before expiry. |

36451 

36452For provider verification, limits, and CEL details, see the [federation rule

36453reference](https://developers.openai.com/api/docs/guides/workload-identity-federation/federation-rules).

36454 

35558### Workspace analytics36455### Workspace analytics

35559 36456 

35560Source: [Workspace analytics](https://learn.chatgpt.com/docs/enterprise/workspace-analytics.md)36457Source: [Workspace analytics](https://learn.chatgpt.com/docs/enterprise/workspace-analytics.md)


35617 36514 

35618Source: [Workspace model availability](https://learn.chatgpt.com/docs/enterprise/workspace-model-availability.md)36515Source: [Workspace model availability](https://learn.chatgpt.com/docs/enterprise/workspace-model-availability.md)

35619 36516 

35620Model availability depends on the product surface and authentication boundary.36517The models available to someone depend on the product surface and how they

35621A ChatGPT workspace model setting isn't a universal model switch for Codex in36518signed in. A model setting in your ChatGPT workspace doesn't automatically

35622the ChatGPT desktop app, Codex CLI, IDE extension, Codex cloud, or Platform API.36519apply to Codex in the ChatGPT desktop app, Codex CLI, the IDE extension, Codex

36520cloud, or the OpenAI API.

35623 36521 

35624For the complete administration model, see36522For the complete administration model, see

35625[Roles and workspace permissions](https://learn.chatgpt.com/docs/enterprise/roles-and-workspace-permissions).36523[Roles and workspace permissions](https://learn.chatgpt.com/docs/enterprise/roles-and-workspace-permissions).


35638effect for Codex in the ChatGPT desktop app, Codex CLI, IDE extension, Codex36536effect for Codex in the ChatGPT desktop app, Codex CLI, IDE extension, Codex

35639cloud, and the API Platform.36537cloud, and the API Platform.

35640 36538 

36539#### Set a clear starting experience for employees

36540 

36541Review [Models settings](https://help.openai.com/en/articles/8411955) for your

36542workspace before inviting a pilot group. Workspace owners and admins can

36543configure separate starting defaults for Chat and for Work and Codex. Where

36544supported, choose a starting model, reasoning level, speed, and new-chat

36545behavior for Chat, Work, and local Codex surfaces.

36546 

36547Treat these choices as defaults, not permissions. Available models still depend

36548on the member's seat, role, workspace or API identity, enforced workspace

36549requirements, and the specific surface they're using. Starting defaults don't

36550grant access to unavailable models or override those requirements. Codex cloud

36551doesn't support changing its default model.

36552 

36553Fast mode availability depends on the workspace, product surface, and any

36554enforced `features.fast_mode` setting in

36555[`requirements.toml`](https://learn.chatgpt.com/docs/config-file/config-reference#requirementstoml).

36556This setting can pin Fast mode on or off for managed local Codex clients; it

36557isn't a starting default and can't override workspace or product availability.

36558 

35641#### Prepare for the GPT-5.4 retirement36559#### Prepare for the GPT-5.4 retirement

35642 36560 

35643On August 31, 2026, GPT-5.4 and GPT-5.4 mini retire from Codex for users signed36561On August 31, 2026, GPT-5.4 and GPT-5.4 mini retire from Codex for users signed


35714 36632 

35715- [Authentication overview](https://learn.chatgpt.com/docs/auth): Compare sign-in methods, credential storage, and enforcement controls.36633- [Authentication overview](https://learn.chatgpt.com/docs/auth): Compare sign-in methods, credential storage, and enforcement controls.

35716 36634 

36635- [Workload identity](https://learn.chatgpt.com/docs/enterprise/workload-identity): Let trusted workloads use Codex without long-lived credentials.

36636 

35717- [Personal Access Tokens](https://learn.chatgpt.com/docs/enterprise/access-tokens): Create and manage tokens for programmatic access.36637- [Personal Access Tokens](https://learn.chatgpt.com/docs/enterprise/access-tokens): Create and manage tokens for programmatic access.

35718 36638 

35719- [Service accounts](https://learn.chatgpt.com/docs/enterprise/service-accounts): Create and manage workspace identities for automated workflows.36639- [Service accounts](https://learn.chatgpt.com/docs/enterprise/service-accounts): Create and manage workspace identities for automated workflows.

Details

7 turn it on. For Business and Enterprise workspaces, an administrator must7 turn it on. For Business and Enterprise workspaces, an administrator must

8 explicitly grant access before each member can choose to turn it on. Computer8 explicitly grant access before each member can choose to turn it on. Computer

9 History also requires [Memories](https://learn.chatgpt.com/docs/customization/memories) and is not9 History also requires [Memories](https://learn.chatgpt.com/docs/customization/memories) and is not

10 available with an API key or Amazon Bedrock. Computer History is not currently10 available with an API key or Amazon Bedrock. It's available in supported

11 available in the European Economic Area (EEA), Switzerland, or the United11 regions, including the European Economic Area (EEA), Switzerland, and the

12 Kingdom.12 United Kingdom.

13 13 

14Computer History turns your activity across apps and websites into memories and14Computer History turns your activity across apps and websites into memories and

15a timeline that ChatGPT and Codex can reference. You can ask natural questions15a timeline that ChatGPT and Codex can reference. You can ask natural questions

developers.md +7 −0

Details

144 href: "/codex/third-party/github",144 href: "/codex/third-party/github",

145 icon: "github",145 icon: "github",

146 },146 },

147 {

148 title: "GitLab (Beta)",

149 description:

150 "Connect projects, delegate work, and review merge requests.",

151 href: "/codex/third-party/gitlab",

152 icon: "connect",

153 },

147 {154 {

148 title: "Slack",155 title: "Slack",

149 description:156 description:

Details

43[Build plugins](https://developers.openai.com/plugins/build/plugins) for43[Build plugins](https://developers.openai.com/plugins/build/plugins) for

44packaging and distribution.44packaging and distribution.

45 45 

46### Export the public catalog for review

47 

48Eligible ChatGPT Enterprise workspace owners and admins can download a CSV of

49the public plugins available to their workspace. Use the export to review

50plugin, app, and skill metadata before changing plugin availability.

51 

521. Open [Admin > Plugins](https://chatgpt.com/admin/plugins).

532. Select **Public**.

543. Select the download icon (**Export CSV**) in the page header.

55 

56The download uses the filename `public-plugins-security-review.csv` and includes:

57 

58- Plugin metadata: `Plugin Name`, `Plugin Description`, `Date Added (UTC)`,

59 `OpenAI Verified`, `Developer Name`, and `Version`.

60- App metadata: `App Name(s)` and `App Description(s)`.

61- Chat skill metadata: `Skill Name(s)` and `Skill Description(s)`.

62 

63When a plugin includes more than one app or skill, semicolons separate the

64corresponding values. The export uses a public-catalog snapshot that can be up

65to 48 hours old,

66includes only public plugins visible to the current workspace, and does not

67include plugins created for that workspace. It isn't available in FedRAMP

68workspaces.

69 

46## Step 2: Manage capabilities70## Step 2: Manage capabilities

47 71 

48<WarningTip>72<WarningTip>

Details

22The files and tools available to ChatGPT Work depend on where Work is running,22The files and tools available to ChatGPT Work depend on where Work is running,

23user permissions and admin configuration.23user permissions and admin configuration.

24 24 

25**Local Work** runs tasks through the ChatGPT desktop app on the user's device.25### Local Work

26 

27Local Work runs tasks through the ChatGPT desktop app on the user's device.

26It can access local files, applications, and other resources made available to28It can access local files, applications, and other resources made available to

27it, subject to the user's permissions, applicable workspace controls, and device29it, subject to the user's permissions, applicable workspace controls, and device

28security policies. Unlike Work on the Web, local Work can operate on resources30security policies. Unlike Work on the Web, local Work can operate on resources

29that remain on your computer without requiring you to upload files to a cloud31that remain on your computer without requiring you to upload files to a cloud

30conversation.32conversation.

31 33 

32**Cloud Work**, accessed via the web or mobile, runs the Codex harness in an34### Cloud Work

33isolated environment on OpenAI-managed infrastructure. Cloud conversations can35 

34be available across supported web, mobile, and desktop surfaces, and supported36Cloud Work is available on supported web, mobile, and desktop surfaces. It runs

35tasks can continue while the user is away from the conversation.37the Codex harness in an isolated environment on OpenAI-managed infrastructure.

38Cloud conversations can sync across these surfaces, and supported tasks can

39continue while the user is away from the conversation.

36 40 

37Work on the web can't directly access files, applications, or open browser tabs41Work on the web can't directly access files, applications, or open browser tabs

38on the user's computer. A user can provide files by uploading them, adding them42on the user's computer. A user can provide files by uploading them, adding them


59 63 

60- **Code and shell commands**: Public internet access depends on the applicable64- **Code and shell commands**: Public internet access depends on the applicable

61 workspace policy and individual Work network setting. When public internet65 workspace policy and individual Work network setting. When public internet

62 access isn't allowed, commands can still reach required destinations on a66 access isn't allowed, commands can still reach OpenAI-approved destinations

63 managed allowlist.67 required for Work to function. This controls network destinations, not which

68 commands can run.

64- **Web search**: Search has controls separate from the Work code and shell69- **Web search**: Search has controls separate from the Work code and shell

65 network setting.70 network setting.

66 71 

Details

2 2 

3> For the complete documentation index, see [llms.txt](https://learn.chatgpt.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to the page URL.3> For the complete documentation index, see [llms.txt](https://learn.chatgpt.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to the page URL.

4 4 

5Groups organize ChatGPT workspace access for a set of members and can carry5Groups organize people in a ChatGPT workspace and can carry custom roles. Group

6custom roles. Group membership is separate from local runtime policy and6membership doesn't replace seat assignments, grant workspace feature permissions

7permissions in connected systems.7by itself, override local runtime policy, or provide access to the Platform API

8or connected systems.

8 9 

9For the complete control model, see10For the complete control model, see

10[Roles and workspace permissions](https://learn.chatgpt.com/docs/enterprise/roles-and-workspace-permissions).11[Roles and workspace permissions](https://learn.chatgpt.com/docs/enterprise/roles-and-workspace-permissions).

11 12 

12## Compare membership sources13## Compare membership sources

13 14 

15Use groups for people with a shared access need, such as a pilot cohort,

16workspace operators, or members who need the same supported feature.

17 

18### Create a group for a shared access need

19 

20Workspace owners and admins can create and manage groups. Create a manually

21managed group for a small or temporary audience, or sync an established group

22from your identity provider when membership should follow your directory.

23 

14Each group has one authoritative membership source:24Each group has one authoritative membership source:

15 25 

16| Group type | Membership source | When it applies |26| Group type | Membership source | When it applies |


25 35 

26## Understand the access boundary36## Understand the access boundary

27 37 

38Group membership by itself doesn't grant a workspace feature permission.

39 

40### Connect a group to the right permissions

41 

42Workspace owners can assign custom roles to groups or, where available, directly

43to members. Check every applicable role: an explicit **Off** in any role

44denies that permission, even when another role grants it. A member's seat type

45and product eligibility still apply.

46 

28SCIM provisions workspace membership and group assignments. It doesn't grant47SCIM provisions workspace membership and group assignments. It doesn't grant

29permissions in GitHub, Google Drive, Slack, or another connected system. It also48permissions in GitHub, Google Drive, Slack, or another connected system. It also

30doesn't replace local runtime requirements or Platform API organization access.49doesn't replace local runtime requirements or Platform API organization access.


45- [SCIM integration FAQ](https://help.openai.com/en/articles/10011769-openai-platform-scim-integration-faq)64- [SCIM integration FAQ](https://help.openai.com/en/articles/10011769-openai-platform-scim-integration-faq)

46- [Manage workspace settings](https://help.openai.com/en/articles/8411955)65- [Manage workspace settings](https://help.openai.com/en/articles/8411955)

47 66 

67### Verify joiners, movers, and leavers

68 

69- **Joiners:** Confirm the member accepts any pending workspace invitation and

70 receives the intended seat, group memberships, permissions, and supported

71 features.

72- **Movers:** Update the authoritative membership source and verify the

73 member's effective permissions across all applicable roles.

74- **Leavers:** Remove a SCIM-managed member's access through the identity

75 provider and confirm that the member can no longer access the workspace. If

76 you remove the member only from the workspace, a later sync can restore

77 access.

78 

48## Related docs79## Related docs

49 80 

50- [Authentication](https://learn.chatgpt.com/docs/auth)81- [Authentication](https://learn.chatgpt.com/docs/auth)

Details

100cache for a later start; it doesn't replace the requirements already loaded100cache for a later start; it doesn't replace the requirements already loaded

101into the current process.101into the current process.

102 102 

103### Confirm the admin and employee experience

104 

105Assign a person to own each managed policy, record which users or groups should

106receive it, and document the business reason for any filesystem, network,

107approval, or permission-profile restriction.

108 

109Before expanding the rollout, test an approved workflow and an intentionally

110disallowed workflow with a representative user. Verify the effective settings

111in the supported client rather than assuming a workspace role or group alone

112enforces the local restriction.

113 

103### Example requirements.toml114### Example requirements.toml

104 115 

105This example blocks `--ask-for-approval never` and `--sandbox danger-full-access` (including `--yolo`):116This example blocks `--ask-for-approval never` and `--sandbox danger-full-access` (including `--yolo`):


598 609 

599## Managed defaults (`managed_config.toml`)610## Managed defaults (`managed_config.toml`)

600 611 

601Managed defaults merge on top of a user's local `config.toml` and take612Managed defaults set the configuration a supported local client starts with. At

602precedence over any CLI `--config` overrides, setting the starting values when a613startup, they override the user's local `config.toml` and any CLI `--config`

603supported local client launches. Users can still change those settings during a614overrides. Users can still change those settings during the current run, and the

604run; the client reapplies managed defaults the next time it starts.615defaults apply again the next time the client starts.

605 616 

606If a managed default, macOS MDM profile, or saved configuration pins `gpt-5.4`617If a managed default, macOS MDM profile, or saved configuration pins `gpt-5.4`

607or `gpt-5.4-mini` for users signed in with ChatGPT, update it before August 31, 2026. Replace `gpt-5.4` with `gpt-5.6-terra` and `gpt-5.4-mini` with618or `gpt-5.4-mini` for users signed in with ChatGPT, update it before August 31, 2026. Replace `gpt-5.4` with `gpt-5.6-terra` and `gpt-5.4-mini` with

Details

2 2 

3> For the complete documentation index, see [llms.txt](https://learn.chatgpt.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to the page URL.3> For the complete documentation index, see [llms.txt](https://learn.chatgpt.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to the page URL.

4 4 

5Administration spans six control boundaries. Granting access at one boundary5Different settings cover different parts of your organization's ChatGPT

6doesn't grant access at another. Use this page as the canonical map,6experience. Giving someone access in one area doesn't automatically give them

7then follow the linked source for current settings and procedures.7access in another. Use this page to see how the six control boundaries work

8together, then follow the linked guidance for current setup steps.

8 9 

9In workspace settings, **Codex Local** is a grouping label for certain local10In workspace settings, **Codex Local** is a grouping label for certain local

10access and access-token controls, not a separate product or client. Individual11access and access-token controls, not a separate product or client. Individual


34## Assign workspace access35## Assign workspace access

35 36 

36ChatGPT workspace administration separates product access from administrative37ChatGPT workspace administration separates product access from administrative

37authority. The workspace plan and a member's seat determine which product38authority.

38surfaces are available. Built-in workspace roles determine who can administer39 

39the workspace. Role-based access control (RBAC) determines which supported40### Understand the difference between a seat, an admin role, and a custom role

40features members can use.41 

41 42A seat determines which product surfaces a member can access. Depending on the

42Administrators can assign custom roles through groups, and a member can receive43workspace plan, available seat types can include ChatGPT and Codex seats.

43access from more than one group. Because available seats, roles, and permissions44 

44change with product and plan updates, use the Help Center for the current45Built-in workspace roles determine administrative authority. The **Owner** role

45permission list and setup procedure:46manages workspace-wide settings, the **Admin** role manages supported operations

47and groups, the **Member** role doesn't have administrative rights, and the

48**Analytics Viewer** role can access workspace analytics.

49 

50Custom roles define which supported features a member can use. They don't

51replace seat or plan eligibility, grant permissions in a connected system, or

52change local runtime requirements.

53 

54 

55 

56 <iframe

57 src="https://player.vimeo.com/video/1215495812"

58 title="Role-based access control walkthrough"

59 loading="lazy"

60 allow="autoplay; fullscreen; picture-in-picture"

61 allowFullScreen

62 referrerPolicy="strict-origin-when-cross-origin"

63 class="h-full w-full border-0"

64 ></iframe>

65 

66 

67 

68### Set the workspace default, then create targeted custom roles

69 

70Only workspace owners can configure role-based access control (RBAC) and create

71custom roles. Workspace settings establish the baseline for eligible

72permissions. Owners can assign custom roles through manually managed or

73SCIM-synced groups, or directly to individual members where supported. A member

74can receive more than one custom role.

75 

76For eligible permissions, **Default** inherits the workspace setting, **On**

77grants access, and **Off** explicitly denies access. An explicit **Off** in any

78applicable role blocks access even when another role grants it. Available

79permission states can vary by feature.

80 

81### Review Work Local and Work Cloud permissions

82 

83When your workspace offers **Work Local** and **Work Cloud**, check both the

84workspace default and each applicable custom role. Work is available only to

85eligible workspaces, and available controls can differ by plan, workspace

86configuration, and rollout. A role can't expand the access allowed by a

87member's seat.

88 

89**Work Cloud** governs supported ChatGPT Work tasks in the cloud. **Work

90Local** without **Work Cloud** allows local work in the ChatGPT desktop app but

91doesn't allow members to start cloud tasks. Codex Local access instead uses the

92separate **Allow members to use Codex Local** permission. Changing a Work

93permission doesn't change Codex Local access or replace local runtime

94requirements.

95 

96For current eligibility and settings, see

97[ChatGPT Work and Codex](https://help.openai.com/en/articles/20001275-chatgpt-work-and-codex).

98 

99Because available seats, roles, and permissions change with product and plan

100updates, use the Help Center for the current permission list and setup

101procedure:

46 102 

47- [Manage members, seat types, roles, and access](https://help.openai.com/en/articles/8266401-managing-members-seat-types-roles-and-access-in-chatgpt-enterprise)103- [Manage members, seat types, roles, and access](https://help.openai.com/en/articles/8266401-managing-members-seat-types-roles-and-access-in-chatgpt-enterprise)

48- [Configure role-based access control](https://help.openai.com/en/articles/11750701-rbac)104- [Configure role-based access control](https://help.openai.com/en/articles/11750701-rbac)

Details

1# Workload identity federation

2 

3> For the complete documentation index, see [llms.txt](https://learn.chatgpt.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to the page URL.

4 

5Workload identity federation lets trusted automation use Codex without storing

6a personal access token or another long-lived OpenAI credential. Your workload

7presents a short-lived identity token from a provider you already operate.

8OpenAI verifies that token and returns a short-lived access token for a user or

9service account in your managed ChatGPT workspace.

10 

11Use workload identity for unattended Codex processes in cloud platforms,

12Kubernetes, CI systems, and other environments that can issue OIDC tokens or

13SPIFFE JWT-SVIDs. For the shared trust model and the separate OpenAI API flow,

14see the [workload identity overview](https://developers.openai.com/api/docs/guides/workload-identity-federation).

15 

16Codex workload identity federation is in beta and must be enabled for your

17 workspace. To request access, contact your OpenAI representative or [OpenAI

18 Support](https://help.openai.com/en/articles/6614161-how-can-i-contact-support).

19 

20## Before you begin

21 

22You need:

23 

24- Permission to manage workload identity in the OpenAI Admin Portal.

25- A managed ChatGPT workspace.

26- A ChatGPT user or service account that is an active member of that workspace,

27 or permission to create one during setup.

28- An OIDC token or SPIFFE JWT-SVID whose issuer, audience, and identifying

29 claims you know.

30- A runtime that can keep that token current in a protected file at an absolute

31 path.

32- Codex 0.148.0 or later.

33- An effective Codex authentication policy that permits ChatGPT authentication

34 and the workspace selected by the federation rule. See [Enforce a login

35 method or workspace](https://learn.chatgpt.com/docs/auth#enforce-a-login-method-or-workspace).

36 

37OpenAI does not create a principal or workspace membership during token

38exchange. An administrator selects or creates the principal before the workload

39connects. Creating a human user consumes a workspace seat and follows the

40membership rules for that workspace.

41 

42On native Windows, use the **elevated**

43[Windows sandbox](https://learn.chatgpt.com/docs/windows/windows-sandbox). Other Windows sandbox modes

44cannot protect the identity-token file from model-controlled commands.

45 

46## Get an identity token

47 

48Your workload runtime gets and refreshes the upstream identity token. Codex does

49not call cloud metadata services or identity-provider client libraries on your

50behalf.

51 

52| Runtime | Recommended token-file source |

53| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |

54| Kubernetes, AKS, EKS, or GKE | Mount a projected service-account token and point Codex at that file. The platform rotates it. |

55| Microsoft Entra managed identity | Run a trusted host process or sidecar that requests a token from Azure IMDS and replaces the file before expiry. |

56| AWS outbound identity federation | Run a trusted host process that calls regional STS `GetWebIdentityToken` and replaces the file before expiry. |

57| Google Cloud | Run a trusted host process that requests an identity token from the metadata server and replaces the file before expiry. |

58| Oracle Cloud Infrastructure | Run a trusted host process that uses an instance principal to request an IDCS access token and replaces the file before expiry. |

59| GitHub Actions | Request the job's OIDC token, write it to a protected file, and request a new token before a later exchange. |

60| SPIFFE | Use the SPIFFE Workload API or an approved helper to write a current JWT-SVID to the file. |

61| Custom OIDC provider | Use the issuer's workload flow to get a JWT, then refresh the protected file before the JWT expires. |

62 

63Follow the guide for your provider to configure token issuance and inspect a

64sample token:

65 

66- [Microsoft Azure](https://developers.openai.com/api/docs/guides/workload-identity-federation/microsoft-azure)

67- [AWS](https://developers.openai.com/api/docs/guides/workload-identity-federation/aws)

68- [Google Cloud](https://developers.openai.com/api/docs/guides/workload-identity-federation/google-cloud)

69- [Oracle Cloud Infrastructure](https://developers.openai.com/api/docs/guides/workload-identity-federation/oracle-cloud)

70- [GitHub Actions](https://developers.openai.com/api/docs/guides/workload-identity-federation/github-actions)

71- [Kubernetes](https://developers.openai.com/api/docs/guides/workload-identity-federation/kubernetes)

72- [SPIFFE](https://developers.openai.com/api/docs/guides/workload-identity-federation/spiffe)

73 

74Decode a sample token locally and record its `iss`, `aud`, `sub`, and any other

75claims you plan to trust. Decoding does not verify the signature. Do not paste a

76production token into a website or write it to logs.

77 

78## Connect the workload

79 

80An administrator creates the provider and federation rule before starting

81Codex.

82 

831. Open [Workload identity](https://admin.openai.com/workload-identity) in the

84 OpenAI Admin Portal, then select **Connect workload**.

852. Reuse a provider configured for Codex, or create one. Provider presets fill

86 in common settings for GitHub Actions, Microsoft Entra ID, Google Cloud,

87 AWS, Kubernetes, SPIFFE, and custom OIDC providers.

883. Select **Codex** and the managed workspace the workload may use.

894. Add the narrowest conditions that identify the workload. Match a subject,

90 exact claims, a CEL condition, or a combination. Add accepted audiences to

91 restrict which tokens the rule accepts. Every configured matcher must pass.

925. Map the rule to one existing ChatGPT user or service account, or create one

93 during setup.

946. Review the provider, conditions, workspace, principal, scopes, and access

95 token lifetime. Select **Connect workload**, then **Download config**.

96 

97The downloaded file contains a non-secret federation rule ID and the path where

98Codex will read the identity token. It does not contain a credential.

99 

100To automate setup, use the [workload identity Admin

101API](https://developers.openai.com/api/docs/guides/workload-identity-federation/admin-api). For matcher

102behavior and examples, see [Federation rule

103reference](https://developers.openai.com/api/docs/guides/workload-identity-federation/federation-rules).

104 

105## Configure the Codex process

106 

107The process that starts Codex requires these two workload identity variables:

108 

109```bash

110export OPENAI_FEDERATION_RULE_ID="idpm_..."

111export OPENAI_IDENTITY_TOKEN_FILE="/var/run/secrets/openai.com/identity-token"

112```

113 

114`OPENAI_FEDERATION_RULE_ID` is not a secret. The token file is. Use an absolute

115path in a dedicated directory, such as `/var/run/secrets/openai.com`, owned by

116the workload account with mode `0700`. Only trusted host processes should write

117there. Keep the directory outside repositories and other paths available to

118Codex tools. Keep credentials out of logs, shell history, and build artifacts.

119 

120### Add audit attribution

121 

122When runtime instances share a federation rule, you can identify each instance

123in token-issuance audit events. Set the optional

124`OPENAI_WORKLOAD_IDENTITY_CONTEXT` variable to a JSON object encoded as a

125string:

126 

127```bash

128export OPENAI_WORKLOAD_IDENTITY_CONTEXT='{

129 "instance_id": "runner-42",

130 "display_name": "payments-prod",

131 "labels": {

132 "environment": "production",

133 "region": "us-west-2"

134 }

135}'

136```

137 

138The object requires `instance_id`. It can also contain `display_name` and up to

139eight labels. The encoded object can be up to 1,024 bytes. `instance_id` and

140`display_name` can be up to 128 characters. Label keys can be up to 64

141characters, and label values can be up to 256 characters.

142 

143Identifiers must start with an ASCII letter or number. Values can then contain

144letters, numbers, `.`, `_`, `:`, `/`, `@`, and `-`. Label keys support letters,

145numbers, `.`, `_`, and `-`.

146 

147OpenAI treats this context as client-reported audit attribution, not as verified

148workload identity. It does not affect authentication, authorization, rule

149matching, scopes, rate limits, revocation, feature gates, or metrics. Do not put

150credentials, secrets, personal data, prompts, model output, or other Customer

151Content in it.

152 

153For valid context, OpenAI derives a stable attribution ID scoped to the tenant,

154provider, federation rule, and `instance_id`. For attribution, the access token

155contains the ID but not the context. The successful token-issuance audit event

156contains the ID and the normalized context. Context that exceeds a limit or

157violates this schema makes the exchange fail with `invalid_grant`.

158 

159Codex reads the context when the process starts and does not pass it, the rule

160ID, or the token-file path to model-controlled shells, hooks, or MCP servers.

161Restart Codex after changing the context.

162 

163### Protect and rotate the token file

164 

165For managed Linux, macOS, and WSL deployments, add the entire token directory to

166[`permissions.filesystem.deny_read`](https://learn.chatgpt.com/docs/enterprise/managed-configuration#enforce-deny-read-requirements)

167in managed requirements:

168 

169```toml

170[permissions.filesystem]

171deny_read = ["/var/run/secrets/openai.com"]

172```

173 

174This blocks model-controlled commands from reading the active token or a

175temporary replacement while the Codex host process can still use the token for

176exchange. For projected-token volumes, deny the entire token mount and any

177backing or resolved target paths outside it. File modes and environment-variable

178scrubbing alone do not protect credentials from another process running as the

179same user. On native Windows, use the elevated sandbox described above.

180 

181For token sources that do not project a file, have a trusted host process write

182each replacement inside that protected directory and rename it into place. An

183atomic rename prevents Codex from reading a partial token. For example, adapt

184this host-owned refresh script to your provider's token command. Provision the

185directory before running the script:

186 

187```bash

188set -eu

189TOKEN_DIR="/var/run/secrets/openai.com"

190TOKEN_FILE="$TOKEN_DIR/identity-token"

191umask 077

192TOKEN_TEMP="$(mktemp "$TOKEN_DIR/.identity-token.XXXXXX")"

193trap 'rm -f -- "$TOKEN_TEMP"' EXIT

194trap 'exit 1' HUP INT TERM

195your-identity-provider-command > "$TOKEN_TEMP"

196test -s "$TOKEN_TEMP"

197mv -f -- "$TOKEN_TEMP" "$TOKEN_FILE"

198```

199 

200Run the refresh process outside any shell or tool that Codex can control. Keep

201the read denial in place during refresh and cleanup. Even if a forced stop

202leaves a temporary file behind, that file must remain inside the denied

203directory. Do not put workload identity settings in `config.toml`.

204 

205## Verify the connection

206 

207Load the downloaded environment and inspect the selected authentication method:

208 

209```bash

210. ./workload-identity-idpm_example.env

211codex login status

212```

213 

214In PowerShell:

215 

216```powershell

217$env:OPENAI_FEDERATION_RULE_ID = "idpm_..."

218$env:OPENAI_IDENTITY_TOKEN_FILE = "C:\run\openai\identity-token"

219codex login status

220```

221 

222A successful check prints `Logged in using workload identity`. This confirms

223that Codex exchanged a token through the configured federation rule. The command

224does not print the resolved workspace, principal, or rule. Confirm those values

225in the Admin Portal before you start the workload. If Codex reports another

226authentication method, the two required WIF variables did not reach the process.

227 

228If the provider uses **Prevent assertion replay** and the assertion has a `jti`

229claim, this check consumes that `jti`. Write a newly issued assertion with a new

230`jti` before starting another Codex process.

231 

232Run a small request from the same environment:

233 

234```bash

235codex exec "Reply with only: workload identity is working"

236```

237 

238Codex exchanges the upstream token and keeps the OpenAI access token in memory.

239It does not write either credential to `auth.json`, the system keyring, or

240`config.toml`.

241 

242## Keep the token current

243 

244Refresh the identity-token file before the upstream token expires. Codex rereads

245the file when it needs another OpenAI access token. The OpenAI token expires at

246the earlier of the upstream token's expiry or the federation rule's lifetime,

247and never lasts longer than one hour.

248 

249When an administrator turns on replay protection, each upstream JWT must have a

250unique `jti`. Write a newly issued assertion with a new `jti` before each

251exchange, including refreshes in a long-running process. Assertions without

252`jti` do not receive replay protection.

253 

254Codex shares one in-memory exchange session inside each host process. Concurrent

255requests in that process reuse a valid OpenAI access token and share one refresh

256when it expires. Separate processes perform separate exchanges, so they need

257assertions that the provider permits them to use.

258 

259## Credential precedence

260 

261The two required workload identity variables take precedence over every other

262credential source:

263 

2641. If either `OPENAI_FEDERATION_RULE_ID` or

265 `OPENAI_IDENTITY_TOKEN_FILE` is present, Codex selects workload identity.

2662. If only one required variable is present, Codex returns an error. It does not

267 fall back to an API key, access token, or stored login.

2683. `OPENAI_WORKLOAD_IDENTITY_CONTEXT` alone does not select workload identity.

2694. When neither required WIF variable is present, Codex applies the normal

270 credential rules for that surface. For surfaces that allow API key

271 authentication, `CODEX_API_KEY` takes precedence on `codex exec`,

272 `codex review`, the TypeScript SDK, and `codex exec-server --remote`. Other

273 surfaces can use `CODEX_ACCESS_TOKEN` or a stored login.

274 

275An SDK `apiKey` option becomes `CODEX_API_KEY`, but WIF still takes precedence

276when either required WIF variable is present. Omit the option when using WIF so

277the workload does not carry an unused long-lived credential.

278 

279To move an existing workload without downtime, configure WIF while its current

280credential is still available. Start a new process with both required WIF

281variables; WIF takes precedence even if the old credential is still present.

282After the workload succeeds with WIF, remove the old credential from its runtime

283and secrets store, then revoke it. Before revocation, you can roll back by

284removing both required WIF variables and starting a new process.

285 

286## Supported Codex surfaces

287 

288Configure workload identity on the machine that owns the Codex process.

289 

290| Surface | Support and host boundary |

291| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------- |

292| Interactive `codex`, `resume`, and `fork` | Supported. Start the CLI in the configured environment. |

293| `codex exec`, `exec resume`, and `codex review` | Supported. Either required WIF variable makes WIF take precedence. |

294| TypeScript SDK | Supported. The parent process supplies the required WIF variables and any optional attribution context. |

295| `codex app-server` | Supported. Configure WIF on the app-server host, not on a remote client. |

296| `codex exec-server --remote` | Supported for authentication to the remote environment registry. Configure WIF on the exec-server host. |

297| Local exec-server process operations | Do not use WIF authentication. They run through the local exec-server protocol. |

298| `codex mcp-server` | Not supported. |

299 

300Remote app-server and exec-server clients never send the upstream identity

301token over their protocols.

302 

303## Change or remove access

304 

305Changes to a rule's subjects, audiences, claims, CEL condition, scopes, or token

306lifetime apply to new exchanges. A token issued before the change can remain

307valid until its lifetime ends.

308 

309Disable a provider or rule to stop access immediately. Disablement blocks new

310exchanges and revokes OpenAI access tokens already issued through that resource.

311Archiving has the same access effect and cannot be undone. Changing provider

312trust also revokes issued tokens before the new trust takes effect.

313 

314## Audit changes

315 

316Provider and federation rule creation, updates, and archival generate audit

317events. Use the [Compliance API and audit event

318guidance](https://learn.chatgpt.com/docs/enterprise/compliance-api) to export the events your workspace

319supports. Correlate them with your identity provider's issuance logs, and do not

320record upstream assertions or OpenAI access tokens in either system.

321 

322When the process supplies `OPENAI_WORKLOAD_IDENTITY_CONTEXT`, successful

323token-issuance audit events also contain the stable attribution ID and

324normalized context described above.

325 

326## Troubleshoot

327 

328| Symptom | Check |

329| --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |

330| Codex reports incomplete workload identity configuration | Set both required variables in the same process and use an absolute token-file path. |

331| Codex reports that its login policy does not permit workload identity | Allow ChatGPT authentication in the effective policy and include the rule's workspace in its permitted workspaces. |

332| Codex reports another credential | Load both required WIF variables into the Codex process, then start a new process and rerun `codex login status`. |

333| OpenAI rejects workload context | Check its JSON shape, size, allowed characters, and field limits. Remove sensitive or Customer Content. |

334| OpenAI rejects the token | Compare `iss`, `aud`, expiry, signature key, and assertion lifetime with the provider configuration. |

335| The rule does not match | Confirm the client uses the intended rule ID and that every subject, audience, exact-claim, and CEL check passes. |

336| OpenAI rejects the principal | Confirm the user or service account is active and is an active member of the selected workspace. |

337| OpenAI rejects a repeated assertion | Get a new JWT with a new `jti`; do not retry the same replay-protected assertion. |

338| A long-running process stops refreshing | Confirm the host refresh process is still replacing the token file before expiry. |

339 

340For provider verification, limits, and CEL details, see the [federation rule

341reference](https://developers.openai.com/api/docs/guides/workload-identity-federation/federation-rules).

Details

2 2 

3> For the complete documentation index, see [llms.txt](https://learn.chatgpt.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to the page URL.3> For the complete documentation index, see [llms.txt](https://learn.chatgpt.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to the page URL.

4 4 

5Model availability depends on the product surface and authentication boundary.5The models available to someone depend on the product surface and how they

6A ChatGPT workspace model setting isn't a universal model switch for Codex in6signed in. A model setting in your ChatGPT workspace doesn't automatically

7the ChatGPT desktop app, Codex CLI, IDE extension, Codex cloud, or Platform API.7apply to Codex in the ChatGPT desktop app, Codex CLI, the IDE extension, Codex

8cloud, or the OpenAI API.

8 9 

9For the complete administration model, see10For the complete administration model, see

10[Roles and workspace permissions](https://learn.chatgpt.com/docs/enterprise/roles-and-workspace-permissions).11[Roles and workspace permissions](https://learn.chatgpt.com/docs/enterprise/roles-and-workspace-permissions).


23effect for Codex in the ChatGPT desktop app, Codex CLI, IDE extension, Codex24effect for Codex in the ChatGPT desktop app, Codex CLI, IDE extension, Codex

24cloud, and the API Platform.25cloud, and the API Platform.

25 26 

27## Set a clear starting experience for employees

28 

29Review [Models settings](https://help.openai.com/en/articles/8411955) for your

30workspace before inviting a pilot group. Workspace owners and admins can

31configure separate starting defaults for Chat and for Work and Codex. Where

32supported, choose a starting model, reasoning level, speed, and new-chat

33behavior for Chat, Work, and local Codex surfaces.

34 

35Treat these choices as defaults, not permissions. Available models still depend

36on the member's seat, role, workspace or API identity, enforced workspace

37requirements, and the specific surface they're using. Starting defaults don't

38grant access to unavailable models or override those requirements. Codex cloud

39doesn't support changing its default model.

40 

41Fast mode availability depends on the workspace, product surface, and any

42enforced `features.fast_mode` setting in

43[`requirements.toml`](https://learn.chatgpt.com/docs/config-file/config-reference#requirementstoml).

44This setting can pin Fast mode on or off for managed local Codex clients; it

45isn't a starting default and can't override workspace or product availability.

46 

26## Prepare for the GPT-5.4 retirement47## Prepare for the GPT-5.4 retirement

27 48 

28On August 31, 2026, GPT-5.4 and GPT-5.4 mini retire from Codex for users signed49On August 31, 2026, GPT-5.4 and GPT-5.4 mini retire from Codex for users signed

Details

45## Authentication and network45## Authentication and network

46 46 

47| Variable | Used by | Description |47| Variable | Used by | Description |

48| ---------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |48| ---------------------------------- | ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- |

49| `CODEX_API_KEY` | `codex exec` | Provides an API key for a single non-interactive run. This is only supported in `codex exec`; set it inline rather than job-wide when running repository-controlled code. |49| `CODEX_API_KEY` | Exec, review, TypeScript SDK, remote exec-server | Provides an API key to a non-interactive Codex process. Set it inline rather than job-wide when running repository-controlled code. |

50| `CODEX_ACCESS_TOKEN` | CLI, app-server, trusted automation | Provides a ChatGPT or Codex access token for trusted automation. For persisted login, pipe it to `codex login --with-access-token`. |50| `CODEX_ACCESS_TOKEN` | CLI, app-server, trusted automation | Provides a ChatGPT or Codex access token for trusted automation. For persisted login, pipe it to `codex login --with-access-token`. |

51| `CODEX_CA_CERTIFICATE` | HTTPS, login, and WebSocket clients | Points to a PEM CA bundle for environments with corporate TLS interception or private root CAs. Takes precedence over `SSL_CERT_FILE`. |51| `OPENAI_FEDERATION_RULE_ID` | Workload identity | Selects the federation rule configured for the workload. |

52| `OPENAI_IDENTITY_TOKEN_FILE` | Workload identity | Points to the absolute path of the file that contains the current OIDC token or SPIFFE JWT-SVID. |

53| `OPENAI_WORKLOAD_IDENTITY_CONTEXT` | Workload identity | Optionally supplies bounded JSON identifiers for client-reported audit attribution. It does not affect authentication or authorization. |

54| `CODEX_CA_CERTIFICATE` | HTTPS, login, and WebSocket clients | Points to a PEM CA bundle for environments with corporate TLS interception or private root certificates. Takes precedence over `SSL_CERT_FILE`. |

52| `SSL_CERT_FILE` | HTTPS, login, and WebSocket clients | Fallback PEM CA bundle path when `CODEX_CA_CERTIFICATE` is unset. |55| `SSL_CERT_FILE` | HTTPS, login, and WebSocket clients | Fallback PEM CA bundle path when `CODEX_CA_CERTIFICATE` is unset. |

53 56 

54For provider API keys, set57For provider API keys, set


59For automation secret handling, see62For automation secret handling, see

60[Use API key auth](https://learn.chatgpt.com/docs/non-interactive-mode#use-api-key-auth).63[Use API key auth](https://learn.chatgpt.com/docs/non-interactive-mode#use-api-key-auth).

61For access token setup, see [Access tokens](https://learn.chatgpt.com/docs/enterprise/access-tokens).64For access token setup, see [Access tokens](https://learn.chatgpt.com/docs/enterprise/access-tokens).

65For workload identity setup, see

66[Workload identity federation](https://learn.chatgpt.com/docs/enterprise/workload-identity).

62 67 

63## Diagnostics68## Diagnostics

64 69 

Details

38 38 

39If stdin is piped and you also provide a prompt argument, Codex treats the prompt as the instruction and the piped content as additional context.39If stdin is piped and you also provide a prompt argument, Codex treats the prompt as the instruction and the piped content as additional context.

40 40 

41This makes it easy to generate input with one command and hand it directly to Codex:41This lets you generate input with one command and hand it directly to Codex:

42 42 

43```bash43```bash

44curl -s https://jsonplaceholder.typicode.com/comments \44curl -s https://jsonplaceholder.typicode.com/comments \


130 130 

131`codex exec` reuses saved CLI authentication by default. In CI, it's common to provide credentials explicitly:131`codex exec` reuses saved CLI authentication by default. In CI, it's common to provide credentials explicitly:

132 132 

133If your trusted cloud or CI runtime already receives short-lived workload

134tokens, use

135[workload identity federation](https://learn.chatgpt.com/docs/enterprise/workload-identity)

136instead of storing an OpenAI credential.

137 

133### Use API key auth138### Use API key auth

134 139 

135For GitHub Actions, use the [Codex GitHub Action](https://learn.chatgpt.com/docs/github-action) instead of installing and authenticating the CLI yourself. The action is designed to reduce API key exposure by installing Codex, starting a Responses API proxy, and running Codex with a configurable safety strategy.140For GitHub Actions, use the [Codex GitHub Action](https://learn.chatgpt.com/docs/github-action) instead of installing and authenticating the CLI yourself. The action is designed to reduce API key exposure by installing Codex, starting a Responses API proxy, and running Codex with a configurable safety strategy.

136 141 

137Do not set `OPENAI_API_KEY` or `CODEX_API_KEY` as a job-level environment variable in workflows that check out or run repository-controlled code. Build scripts, tests, dependency lifecycle hooks, or a compromised action in the same job can read those environment variables.142Do not set `OPENAI_API_KEY` or `CODEX_API_KEY` as a job-level environment variable in workflows that check out or run repository-controlled code. Build scripts, tests, dependency lifecycle hooks, or a compromised action in the same job can read those environment variables.

138 143 

139For other automation environments, set `CODEX_API_KEY` only for the single `codex exec` invocation and make sure no untrusted code runs in the same process environment.144For other automation environments, set `CODEX_API_KEY` only for the Codex

145invocation that needs it, and make sure no untrusted code runs in the same

146process environment.

140 147 

141To use a different API key for a single run, set `CODEX_API_KEY` inline:148To use a different API key for a single run, set `CODEX_API_KEY` inline:

142 149 


144CODEX_API_KEY=<api-key> codex exec --json "triage open bug reports"151CODEX_API_KEY=<api-key> codex exec --json "triage open bug reports"

145```152```

146 153 

147`CODEX_API_KEY` is only supported in `codex exec`.154You can use `CODEX_API_KEY` with `codex exec`, `codex review`, the TypeScript

155SDK, and `codex exec-server --remote`.

148 156 

149<ToggleSection title="Use ChatGPT-managed auth in CI/CD (advanced)">157<ToggleSection title="Use ChatGPT-managed auth in CI/CD (advanced)">

150Read this if you need to run CI/CD jobs with a Codex user account instead of an158Read this if you need to run CI/CD jobs with a Codex user account instead of an

plugins.md +49 −0

Details

209 209 

210 210 

211 211 

212</ContentModeSwitch>

213 

214<ContentModeSwitch group="codex-surface" id="app">

215 

216### Use Apple Messages from Codex

217 

218The Apple Messages plugin is available on all plans in the ChatGPT desktop app

219for macOS. In Codex and ChatGPT Work, it can read and search iMessage, SMS, and

220RCS chats on your Mac and send messages on your behalf through the Messages app.

221It doesn't let you interact with ChatGPT remotely through Messages, and it

222doesn't work in regular ChatGPT chats.

223 

224For this release, the Messages plugin is included only in the Apple Silicon

225(arm64) build of the ChatGPT desktop app.

226 

227<WorkflowSteps>

228 

2291. Open **Plugins**, find the Apple Messages plugin, and install it.

2302. Start a new Codex or ChatGPT Work chat and ask it to find, summarize, draft,

231 or send a message.

2323. Grant the requested macOS permissions before ChatGPT reads Messages.

2334. Review the message and its recipients before allowing a send.

234 

235</WorkflowSteps>

236 

237By default, ChatGPT sends messages only after you approve the message and its

238recipients. Choose **Allow once** to approve only that send. If you select

239**Always allow sending to this chat**, ChatGPT can send future messages to that

240Messages chat without another send approval.

241 

242Keep per-send approval for chats that may contain untrusted or misleading

243instructions. Persistent approval removes your final chance to review a message

244before ChatGPT sends it as you. Use it only when you accept that risk.

245 

246To restore per-send approval, open **Settings** > **Computer use** and select

247**Manage** next to **Messages**. Under **Always allowed to send**, select the

248trash icon next to the chat, then confirm **Remove**. ChatGPT will ask

249before sending to that chat again.

250 

251**Known issue:** If your task is set to **Full access** or otherwise disables

252approval prompts, Apple Messages may be unable to show the confirmation needed

253to send. Switch to **Ask for approval** or **Approve for me** and try again.

254 

255Apple Messages runs on your Mac. It isn't directly available in ChatGPT on the

256web or mobile, Codex CLI, or the IDE extension.

257 

258In managed workspaces, administrators can disable Apple Messages through the

259existing Computer Use control.

260 

212</ContentModeSwitch>261</ContentModeSwitch>

213 262 

214<ContentModeSwitch group="codex-surface" id="cli">263<ContentModeSwitch group="codex-surface" id="cli">

security.md +3 −2

Details

19 19 

20## Use Codex Security in the desktop app20## Use Codex Security in the desktop app

21 21 

22In the ChatGPT desktop app, open the ChatGPT dropdown and select **Codex**.

22Install and enable the Codex Security plugin to open **Security** in the23Install and enable the Codex Security plugin to open **Security** in the

23desktop-app sidebar. The Security workbench keeps your scans, findings, and24sidebar. The Security workbench keeps your scans, findings, and repositories in

24repositories in one place while Codex runs each scan in a task.25one place while Codex runs each scan in a task.

25 26 

26- Use **Scans** to start scans, follow their progress, and review saved results.27- Use **Scans** to start scans, follow their progress, and review saved results.

27- Use **Findings** to inspect issues and evidence across completed scans.28- Use **Findings** to inspect issues and evidence across completed scans.

Details

6in the Codex desktop app. Codex performs scan analysis in a regular task, while6in the Codex desktop app. Codex performs scan analysis in a regular task, while

7the workbench keeps the scan and its results available when you return.7the workbench keeps the scan and its results available when you return.

8 8 

9In the ChatGPT desktop app, open the ChatGPT dropdown and select **Codex**.

9Install and enable the [Codex Security plugin](https://learn.chatgpt.com/docs/security/plugin), then10Install and enable the [Codex Security plugin](https://learn.chatgpt.com/docs/security/plugin), then

10select **Security** in the desktop-app sidebar.11select **Security** in the sidebar.

11 12 

12If **Security** doesn't appear, confirm that the plugin is installed and13If **Security** doesn't appear, confirm that **Codex** is selected and the

13 enabled. Update the desktop app and plugin if needed, and check whether your14 plugin is installed and enabled. Update the desktop app and plugin if needed,

14 workspace administrator allows the plugin.15 and check whether your workspace administrator allows the plugin.

15 16 

16## Start a scan17## Start a scan

17 18 

sites.md +56 −2

Details

272- **Anyone in the workspace**, where supported272- **Anyone in the workspace**, where supported

273- **Anyone on the internet**, only when public publishing is enabled273- **Anyone on the internet**, only when public publishing is enabled

274 274 

275Sharing lets people visit the Site; it doesn't let them edit it. In Enterprise275Visitor access lets people open the Site; it doesn't give them editing access.

276workspaces, public publishing is off by default and must be enabled by an admin.276In Enterprise workspaces, public publishing is off by default and must be

277enabled by an admin.

277 278 

278For limited sharing, invited visitors must sign in with the account that279For limited sharing, invited visitors must sign in with the account that

279received access. A public Site is available without ChatGPT workspace access. A280received access. A public Site is available without ChatGPT workspace access. A


287current Site and confirming its URL.288current Site and confirming its URL.

288```289```

289 290 

291### Collaborate on a Site

292 

293Site collaboration requires a workspace. When the feature is available, a Site

294owner can invite active members of the same workspace as editors.

295 

296Editors can read the Site's live database data. Invite only people you trust

297with the Site's code and data.

298 

299<WorkflowSteps>

300 

3011. Open the Site and select **Share**.

3022. Under **Add people or groups**, find and select a workspace member. They

303 are added as a visitor.

3043. Open **Can view** next to that person and choose **Can edit**. Access saves

305 automatically. The Site appears under **Shared with you** in the member's

306 Sites view.

3074. The editor can open the Site, make changes, save versions, and publish

308 updates after the owner has published the Site for the first time.

309 

310</WorkflowSteps>

311 

312The Site owner manages editor access and can promote an existing visitor to

313editor, change an editor to **Can view**, or remove their access. Co-editing

314doesn't add a separate workspace permission toggle.

315 

316Editors can't change the Site's audience, invite or remove other people, manage

317settings or analytics, restore an earlier version, or transfer ownership. An

318editor also can't perform the Site's first publish; the owner must publish the

319Site before editors can publish later updates.

320 

321Editor access is separate from visitor access. The steps above first add the

322person as a visitor, then grant editing access. Promoting a visitor to editor

323doesn't change the Site's audience setting.

324 

290### Configure runtime environment values325### Configure runtime environment values

291 326 

292Open **Sites**, then open the Site's settings to add, update, or remove hosted327Open **Sites**, then open the Site's settings to add, update, or remove hosted


312 347 

313</ContentModeSwitch>348</ContentModeSwitch>

314 349 

350## Change a Site URL

351 

352Where URL editing is available, Site owners can change the ChatGPT-hosted URL

353for an existing Site without creating another deployment.

354 

3551. Open **Sites**, find the Site, and open its settings.

3562. Find the Site URL and select **Change URL**.

3573. Enter an available name. It must contain at least five characters, start

358 with a lowercase letter, and use only lowercase letters, numbers, and single

359 hyphens. It can't end with a hyphen or contain consecutive hyphens.

3604. Confirm the change and wait while Sites updates the address.

361 

362The URL change doesn't create another deployment. The previous address

363redirects to the new one, including routes and query parameters.

364 

365Changing the ChatGPT-hosted URL doesn't add, remove, or change a custom domain.

366Custom domains are a separate, existing feature; use the custom-domain

367settings when that feature is available.

368 

315## Connect a custom domain369## Connect a custom domain

316 370 

317Where custom domains are available, you can connect an apex domain or subdomain371Where custom domains are available, you can connect an apex domain or subdomain

third-party/gitlab.md +235 −0 created

Details

1# Review GitLab merge requests with Codex

2 

3> For the complete documentation index, see [llms.txt](https://learn.chatgpt.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to the page URL.

4 

5Use Codex code review to get another high-signal review pass on GitLab merge

6requests. Codex reviews the merge request diff, follows your repository

7guidance, and posts a standard GitLab code review focused on serious issues.

8 

9GitLab support is in beta and is available on all ChatGPT plans. The Codex

10integration runs in Codex cloud. GitHub-style repository controls in the

11desktop app, such as **Create pull request**, aren't included in this beta.

12 

13## Before you start

14 

15Make sure you have:

16 

17- A connected GitLab account. GitLab.com requires the

18 [standard connection flow](https://help.openai.com/articles/20001486);

19 self-managed or Dedicated GitLab instances require

20 [workspace-admin template setup](https://help.openai.com/articles/20001487).

21- An `AGENTS.md` file if you want Codex to follow repository-specific review

22 guidance.

23 

24## Set up Codex code review

25 

26### Set up the GitLab connection and Codex review identity

27 

28For GitLab.com, connect your GitLab account in Codex once you've

29[connected to GitLab in ChatGPT](https://help.openai.com/articles/20001486).

30For self-managed or Dedicated GitLab, each reviewer should connect after the

31[workspace-admin template](https://help.openai.com/articles/20001487) has been

32published.

33 

34For self-managed or Dedicated GitLab, open **Codex Cloud** → **Settings** →

35[**Connectors**](https://chatgpt.com/codex/cloud/settings/connectors). A

36workspace admin can let Codex create a service account or save an existing

37service-account personal access token.

38 

39#### Let Codex create the account

40 

41In **Codex Cloud** → **Settings** → **Connectors**, select the app for your

42self-managed or Dedicated GitLab host → select **Set up service account** →

43**Create a service account**. The workspace admin completing setup must have

44administrator access to the GitLab instance. Choose either **Selected groups**

45or **Selected projects only**, then select where Codex should operate and create

46the account. The group option grants Developer access to each chosen group,

47inherited by its projects and subgroups; the project option grants Developer

48access only to the individual projects you choose. Codex will create the ChatGPT

49Codex Connector instance service account with a personal access token with the

50`api` scope.

51 

52#### Use an existing account

53 

54In GitLab, create or choose a service account and grant it Developer access

55only in the groups or projects where Codex should operate. From the **Service

56accounts** page, select the account → **Manage access tokens** → **Add new

57token** to

58[create a personal access token](https://docs.gitlab.com/user/profile/service_accounts/#create-a-personal-access-token-for-a-service-account)

59with the `api` scope and an expiration date at least 30 days away. Back in

60Codex, choose **Use an existing service account**, paste the token, and select

61**Save token**. The token is encrypted when saved and is never shown again.

62 

63#### Manage the service-account token

64 

65Workspace admins can manage the service account in **Codex Cloud** →

66**Settings** → **Connectors**. For a Codex-created account, admins can revoke

67the current token and generate a new one. For an existing account, admins can

68replace or remove the saved token in Codex and revoke it separately in GitLab if

69needed. Codex cannot respond to GitLab activity until a valid token is

70configured.

71 

72### Choose how GitLab activity reaches Codex

73 

74#### Create a project environment for coding tasks or project-specific setup

75 

76In **Codex Cloud** → **Settings** → **Environments**, choose the GitLab project

77and create a project environment when you want Codex to write or execute code

78for that project—for example, to edit files, commit changes, or push updates to

79a merge request branch—or when a review depends on project-specific secrets,

80network access, or setup commands.

81 

82For GitLab.com, a project environment is also required to enable Codex reviews.

83 

84While creating the environment, turn on **Enable Codex activity from GitLab**

85to install the project webhook that delivers merge request, comment, and issue

86events to Codex. Creating the project webhook requires Maintainer or Owner

87access, administrator access, or a custom role that can administer project

88webhooks. Signed project and group webhooks require GitLab 19.0 or newer. On

89self-managed GitLab 19.0, confirm the `webhook_signing_token` feature flag is

90enabled; it is enabled by default and was removed in GitLab 19.1.

91 

92#### Enable activity for Codex reviews for projects across a GitLab group

93 

94For self-managed or Dedicated GitLab, workspace admins can open **Environments**

95→ **GitLab activity** → **Manage groups** to enable Codex reviews across a group

96and its subgroups. Codex will install a group webhook covering projects

97throughout that group. The connected GitLab user must be a group Owner, and

98group webhooks require GitLab Premium or Ultimate and GitLab 19.0 or newer.

99 

100Group activity enables code reviews but does not create project environments.

101To run GitLab-triggered coding tasks, such as editing files, running commands,

102committing changes, or pushing updates to a merge request, create a project

103environment.

104 

105### Configure code review policies

106 

107Configure code review policies in

108[Codex review settings](https://chatgpt.com/codex/cloud/settings/code-review?provider=gitlab).

109Choose the repository policy: `Review my MRs`, `Review team MRs`,

110`Review all MRs`, or `Follow personal`. Then choose when reviews run: **On MR open**,

111**On every push**, or **Smart Trigger (Experimental)**. Repository settings can

112override personal defaults.

113 

114## Request a Codex review

115 

1161. In a merge request comment, mention `@codex review`.

1172. Wait for Codex to react (👀) and post a review.

118 

119Codex posts GitLab discussions and notes on the merge request, just like a

120teammate would. By default, manually requested reviews can include P0, P1, and

121P2 findings, while automatic reviews focus on P0 and P1 findings.

122 

123## Enable automatic reviews

124 

125To review qualifying merge requests automatically, turn on **Automatic

126reviews** in Codex settings, choose the GitLab repository policy, and choose a

127trigger: **On MR open**, **On every push**, or **Smart Trigger (Experimental)**.

128Codex runs without an `@codex review` comment when the merge request event

129matches that policy and trigger.

130 

131GitLab activity must be enabled through a project webhook or an ancestor group

132webhook. For self-managed or Dedicated GitLab, the configured service account

133must also have access to write back to the project. Codex uses a configured

134project environment when present. If an ancestor group already enables

135activity, descendant projects inherit that coverage.

136 

137## Customize what Codex reviews

138 

139Codex searches your repository for `AGENTS.md` files and follows the applicable

140code review rules. Add a `## Code Review Rules` section to the file closest to

141the code the rules govern. Use `###` headings to group related checks when

142helpful.

143 

144For example, an experiment-reporting service can keep post-exposure behavior

145from changing a comparison cohort:

146 

147```md

148## Code Review Rules

149 

150### Experiment cohorts

151 

152- Do not filter treatment comparisons on post-exposure behavior, including conversion or retention.

153 Safe path: build cohorts from assignment or exposure; report conversion as an outcome.

154```

155 

156Put repository-wide rules in the root `AGENTS.md` and service-specific rules in

157a nested file, such as `services/experiment_reporting/AGENTS.md`. Codex applies

158the root and more-specific guidance that covers each changed file, so unrelated

159changes don't have to carry service-specific context.

160 

161Start with two or three concise rules that encode checks reviewers often

162explain. Useful rules:

163 

164- **Focus on consequential, repository-specific behavior.** Describe the

165 compatibility constraint, data boundary, or unsafe side effect to flag and

166 why it matters.

167- **State the safe path or exception.** Give Codex enough context to distinguish

168 a real issue from expected behavior.

169- **Keep rules scoped and durable.** Prefer outcomes over function names that

170 can change, and place guidance near the code it governs.

171- **Leave mechanical checks in CI.** Keep formatting, lint, and other

172 deterministic checks out of review rules.

173 

174Open a representative merge request and request a review with `@codex review`.

175Refine the rules based on the findings and feedback you see, and narrow or

176remove guidance that produces noise.

177 

178Code review rules guide Codex; they don't replace tests, branch protections, or

179required approvals.

180 

181For a one-off focus, add it to your merge request comment:

182 

183`@codex review for issues in the database migration`

184 

185## Act on review findings

186 

187Fixing review findings requires a **configured project environment**; group

188activity alone supports reviews but cannot run coding tasks. If the project has

189an environment, ask Codex to fix an issue in the same merge request by leaving

190another comment:

191 

192```md

193@codex fix the P1 issue

194```

195 

196Codex starts a [cloud chat](https://learn.chatgpt.com/docs/cloud) with the merge request as context and

197can push a fix back to the branch when it has permission to do so.

198 

199## Give Codex other tasks

200 

201Other coding tasks also require a **configured project environment**; group

202activity alone supports reviews. If you mention `@codex` in a comment with

203anything other than `review`, Codex starts a [cloud chat](https://learn.chatgpt.com/docs/cloud) using

204your merge request as context.

205 

206```md

207@codex fix the CI failures

208```

209 

210## Troubleshoot code review

211 

212If Codex doesn't react or post a review:

213 

214- Confirm the intended GitLab app has been selected; if you use project-specific

215 setup, confirm the project has the intended Codex cloud environment.

216- Confirm activity for the project or an ancestor group. In GitLab, check

217 **Webhooks** →

218 [**Recent events**](https://docs.gitlab.com/user/project/integrations/webhooks/)

219 and verify merge request and note deliveries succeed.

220- For self-managed or Dedicated GitLab, confirm the project or group webhook is

221 signed, SSL verification is enabled, and the instance is on GitLab 19.0 or

222 newer. On self-managed GitLab 19.0, confirm the `webhook_signing_token` feature

223 flag is enabled; repair hooks disabled automatically after failures.

224- For self-managed or Dedicated GitLab, confirm an existing service-account

225 personal access token is active and has the `api` scope. If Codex created the

226 service account, confirm it is correctly configured in

227 [Codex connector settings](https://chatgpt.com/codex/cloud/settings/connectors)

228 and that the project or group is enabled.

229- For self-managed or Dedicated GitLab, confirm the workspace service

230 account—not just the connected GitLab user—has Developer access to the project

231 or a parent group so Codex can post reviews and reactions. Membership is

232 inherited; activity and service-account access are separate.

233- Confirm **Code review** or **Automatic reviews** is enabled and the MR matches

234 the repository policy and trigger.

235- Use `@codex review`.

use-chatgpt.md +42 −0

Details

221Plugin availability depends on your plan, workspace settings, and the plugin221Plugin availability depends on your plan, workspace settings, and the plugin

222itself. Learn more about [skills and plugins](https://learn.chatgpt.com/docs/skills-and-plugins).222itself. Learn more about [skills and plugins](https://learn.chatgpt.com/docs/skills-and-plugins).

223 223 

224## Share a read-only snapshot of a Codex thread

225 

226On all Codex plans, you can create a read-only snapshot of a local Codex thread

227in the ChatGPT desktop app for macOS. The snapshot doesn't give other people

228access to your project or computer.

229 

230Before sharing, check who can open the link:

231 

232- **Personal account:** Anyone with the link can open the snapshot.

233- **Workspace account:** Only authenticated members of the workspace that

234 created the snapshot can open it. You can allow everyone in that workspace

235 or restrict access to invited people and groups. A workspace administrator

236 can turn off workspace share links.

237 

2381. Open the thread and select **Share**. You can also use `/share` where slash

239 commands are available.

2402. For a workspace account, use **Who has access** to choose everyone in your

241 workspace or **Only people and groups invited**. For invited-only access,

242 add existing workspace members by email or choose workspace groups.

2433. Wait for the snapshot to finish uploading, then select **Copy link**.

244 Opening the dialog starts the upload, but Codex publishes the snapshot only

245 when you select **Copy link**, using your chosen audience and recipients.

2464. Open the copied link and review the shared view before sending it to anyone.

247 

248A snapshot captures the supported thread content available when you share it.

249Later messages and changes don't update the existing snapshot.

250 

251Shared snapshots can include user-visible messages, reasoning summaries, image

252attachments, images viewed or generated by the agent, and file changes,

253including paths and diffs. They don't include the original thread's tool calls,

254shell commands, or tool input or output.

255 

256Codex redacts known secret patterns before uploading a snapshot. Review the

257shared view before sending its link because sensitive content, including file

258paths, may remain in messages, images, or diffs.

259 

260You can't fork the original thread from a shared snapshot. You can import the

261snapshot as an attachment and refer to it in a new thread.

262 

263To view or revoke a shared link, open [ChatGPT data

264controls](https://chatgpt.com/#settings/DataControls) and select **Shared links**.

265 

224## Make the result ready to use266## Make the result ready to use

225 267 

226Treat the first result as a draft you can inspect, challenge, and improve. A268Treat the first result as a draft you can inspect, challenge, and improve. A

whats-new.md +57 −0

Details

6work, with examples and links to learn more. For every versioned update, bug fix,6work, with examples and links to learn more. For every versioned update, bug fix,

7and minor improvement, see the [Codex changelog](https://learn.chatgpt.com/docs/changelog).7and minor improvement, see the [Codex changelog](https://learn.chatgpt.com/docs/changelog).

8 8 

9## August 17–21, 2026

10 

11### Work with more of your apps and content

12 

13- **Apple Messages:** [Find chats, summarize messages, prepare replies, and send through Messages on your Mac](https://learn.chatgpt.com/docs/plugins?surface=app#app-use-apple-messages-from-codex). The plugin is available on all plans in the ChatGPT desktop app for macOS. Use it in ChatGPT Work and Codex, not in regular ChatGPT chats. By default, ChatGPT sends messages only after you approve the message and its recipients.

14 

15- **Site co-editing:** Where available, [invite active members of your workspace as editors](https://learn.chatgpt.com/docs/sites#collaborate-on-a-site). Editors can refine the Site and publish updates after its owner publishes it for the first time. Invited editors can read the Site's live database data; owners retain control of sharing and settings.

16 

17- **Editable Site URLs:** Where available, [choose a new ChatGPT-hosted address for an existing Site](https://learn.chatgpt.com/docs/sites#change-a-site-url) without redeploying it. The previous address redirects to the new one.

18 

19- **Computer History in Europe:** Use [Computer History](https://learn.chatgpt.com/docs/customization/computer-history) in the EEA, Switzerland, and the United Kingdom. It remains off by default for ChatGPT Pro, Business, and Enterprise users on macOS. Business and Enterprise administrators must enable access first.

20 

21- **Shared thread snapshots:** [Share a read-only snapshot of a local Codex thread](https://learn.chatgpt.com/docs/use-chatgpt#share-a-read-only-snapshot-of-a-codex-thread) from the ChatGPT desktop app for macOS. Personal-account links are viewable by anyone with the link; workspace-account links are limited to the originating workspace. Codex redacts known secret patterns, but review the snapshot before sharing because sensitive content may remain.

22 

23- **Unified pinned threads:** Keep your [pinned chats](https://learn.chatgpt.com/docs/projects?surface=app#app-organize-projects-and-chats) in sync between desktop and iOS.

24 

25 

26 

27**Prompt:**

28 

29```text

30Find the latest Messages conversation about tomorrow's launch, summarize the open questions, and draft a reply without sending it.

31```

32 

33[Read the August 20 release notes](https://learn.chatgpt.com/docs/changelog#codex-2026-08-20-app).

34 

35### Work with GitLab projects in Codex cloud

36 

37[GitLab support](https://learn.chatgpt.com/docs/third-party/gitlab) is available in beta on all ChatGPT

38plans. Connect a project, create a cloud environment, start tasks from issues

39or merge requests with `@codex`, and request one-off or automatic merge request

40reviews.

41 

42The integration runs in Codex cloud, and a managed workspace admin can disable

43it. GitLab-triggered activity requires permission to configure the applicable

44webhook. GitLab Self-Managed and GitLab Dedicated connections require

45workspace admin setup; webhook activity requires GitLab 19.0 or later.

46 

47[Read the August 19 GitLab release

48notes](https://learn.chatgpt.com/docs/changelog#codex-2026-08-19-gitlab).

49 

50### Export public plugin metadata for review

51 

52Eligible ChatGPT Enterprise workspace owners and admins can download a CSV of

53the public plugins visible to their workspace. In

54[Admin > Plugins](https://chatgpt.com/admin/plugins), select **Public**, then

55select the download icon (**Export CSV**).

56 

57The export lists plugin, app, and Chat skill names and descriptions, together

58with developer, version, date added in UTC, and OpenAI verification metadata.

59It uses a public-catalog snapshot that can be up to 48 hours old and excludes

60plugins created for the workspace. The export isn't available in FedRAMP

61workspaces.

62 

63[Read the August 17 admin export release

64notes](https://learn.chatgpt.com/docs/changelog#codex-2026-08-17-admin-csv).

65 

9## August 10–14, 202666## August 10–14, 2026

10 67 

11### Find earlier work with Computer History68### Find earlier work with Computer History