SpyBara
Go Premium

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

22 files changed +1,020 −57. View all changes and history on the product overview
2026
Mon 31 19:59 Sat 29 07:02 Fri 28 23:02 Thu 27 21:01 Wed 26 23:58 Tue 25 19:59 Mon 24 22:00 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.

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