SpyBara
Go Premium

Documentation 2026-10-28 23:00 UTC to 2026-10-29 23:59 UTC

12 files changed +504 −224. View all changes and history on the product overview
2026
Fri 30 23:59 Thu 29 23:59 Wed 28 23:00 Tue 27 23:58 Mon 26 23:58 Fri 23 23:59 Thu 22 23:57 Tue 20 23:02 Mon 19 23:02 Sat 17 23:00 Fri 16 23:02 Thu 15 23:00 Wed 14 23:59 Tue 13 23:01 Mon 12 23:01 Fri 9 23:02 Thu 8 23:01 Wed 7 23:57 Tue 6 23:02 Mon 5 23:57 Fri 2 23:58 Thu 1 22:59
Details

326 icon: "connect",326 icon: "connect",

327 },327 },

328 {328 {

329 title: "Plugin management",329 title: "Import and sync plugins from GitHub",

330 description: "Import and sync workspace plugins from GitHub.",330 description: "Import and sync workspace plugins from GitHub.",

331 href: "/codex/enterprise/plugin-management",331 href: "/codex/enterprise/plugin-management",

332 icon: "connect",332 icon: "connect",

Details

46 46 

471. Open the page you want to work with.471. Open the page you want to work with.

482. Select ChatGPT from the browser toolbar or **Extensions** menu. On macOS, you482. Select ChatGPT from the browser toolbar or **Extensions** menu. On macOS, you

49 can also press <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>.</kbd>.49 can also press <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>&nbsp;.&nbsp;</kbd>.

503. Ask a question about the page or give ChatGPT a task.503. Ask a question about the page or give ChatGPT a task.

51 51 

52The panel stays with the tab where you opened it. Chats you start in side chat52The panel stays with the tab where you opened it. Chats you start in side chat

Details

232 232 

233For custom integrations or development with plugin files, see [Package your plugin](https://developers.openai.com/plugins/build/plugins). The [developer documentation](https://developers.openai.com/plugins/) covers building skills and MCP servers, [extensions](https://developers.openai.com/plugins/build/extensions), testing, and public submission.233For custom integrations or development with plugin files, see [Package your plugin](https://developers.openai.com/plugins/build/plugins). The [developer documentation](https://developers.openai.com/plugins/) covers building skills and MCP servers, [extensions](https://developers.openai.com/plugins/build/extensions), testing, and public submission.

234 234 

235For workspace distribution through GitHub, see [Plugin management](https://learn.chatgpt.com/docs/enterprise/plugin-management).235For workspace distribution through GitHub, see [Import and sync plugins from GitHub](https://learn.chatgpt.com/docs/enterprise/plugin-management).

Details

46 46 

471. Open the page you want to work with.471. Open the page you want to work with.

482. Select ChatGPT from the browser toolbar or **Extensions** menu. On macOS, you482. Select ChatGPT from the browser toolbar or **Extensions** menu. On macOS, you

49 can also press <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>.</kbd>.49 can also press <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>&nbsp;.&nbsp;</kbd>.

503. Ask a question about the page or give ChatGPT a task.503. Ask a question about the page or give ChatGPT a task.

51 51 

52The panel stays with the tab where you opened it. Chats you start in side chat52The panel stays with the tab where you opened it. Chats you start in side chat

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 

5Plugins package reusable workflows and can include skills and MCP servers that connect5Plugins help your team reuse instructions and work with information from connected

6to other tools. ChatGPT and Codex use the same public plugin directory on6apps. For example, a plugin can help prepare a weekly update using your team's

7supported surfaces, while admins decide which plugins are available in their workspace.7template and project documents. Members can use it again without adding the same

8Learn more about [plugins](https://learn.chatgpt.com/docs/plugins),8instructions to every conversation.

9[skills](https://learn.chatgpt.com/docs/skills-and-plugins), and

10[connected services](https://help.openai.com/en/articles/11487775).

11 9 

10As an admin, you decide who can use each plugin and what its apps can do. This

11guide explains how to choose settings, test access, and help members when

12something doesn't work.

12 13 

13 14 

14 {"For workspace controls and data-handling guidance, see "}

15 [{"Admin controls, security, and compliance for plugins and apps"}](https://help.openai.com/articles/11509118)

16 {" in the Help Center."}

17 15 

16 {"For setup, availability, and data handling, see the "}

17 [{"Help Center's plugin administration guide"}](https://help.openai.com/articles/11509118)

18 {"."}

18 19

19 20 

20In this guide, **app** and **MCP server** refer to the same connected

21integration and are interchangeable terms. We use **MCP server** in the prose,

22but preserve **app** in UI labels such as **Workspace apps** and

23**App permissions**, and in CSV column names.

24 21 

25A member can use an MCP server's capabilities only when the plugin and MCP server22See how plugin availability, roles, and groups work together.

26are available to their role and the authenticated account has access to the

27connected service. For a shared credential, the member also needs permission

28to use that credential; the external account can differ from their personal account.

29 23 

30Plugins work in Chat and Work across ChatGPT on the web, desktop, and mobile,24<div

31in Codex in the ChatGPT desktop app, and through the Codex CLI plugin browser.25 class="not-prose my-4 overflow-hidden rounded-md bg-gray-900"

32They aren't available in the IDE extension.26 style="padding:56.25% 0 0 0;position:relative;"

27>

28 <iframe

29 src="https://player.vimeo.com/video/1238920850?badge=0&autopause=0&player_id=0&app_id=58479"

30 frameborder="0"

31 allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share"

32 referrerpolicy="strict-origin-when-cross-origin"

33 style="position:absolute;top:0;left:0;width:100%;height:100%;"

34 title="Managing plugins as a workspace administrator"

35 ></iframe>

33 36 

34To see how these controls fit with workspace roles and permissions, see37 

38<script src="https://player.vimeo.com/api/player.js"></script>

39 

40<a id="choose-plugins-around-the-work-your-team-does"></a>

41 

42## Choose plugins for your team's tasks

43 

44A plugin can include skills, apps, or both:

45 

46- **Skills** give ChatGPT instructions, templates, and reference material for a

47 task, such as preparing a brief or presentation.

48- **Apps** let ChatGPT work with tools and information in services such as

49 Google Drive or Slack. An app can only use the information and actions allowed

50 by its settings and the connected account's permissions.

51 

52In the weekly update example, the skill supplies the reporting instructions and

53template. The app retrieves project documents the connected account can access.

54 

55You can read a plugin's skills in its preview to check whether they suit the task.

56The preview doesn't let you edit the instructions or select individual skills

57from the plugin. See [Skill controls](https://learn.chatgpt.com/docs/enterprise/skills) for more guidance.

58 

59<a id="choose-a-starting-set-of-apps"></a>

60<a id="choose-a-focused-initial-set"></a>

61 

62Before choosing settings, decide who needs the plugin and whether their task

63involves reading information, changing it, or both. A plugin that one department

64uses every week may be optional for another.

65 

66Give members a short description of when to use each approved plugin and one

67example request.

68 

69<a id="understand-the-capability-chain"></a>

70 

71## Understand what each control does

72 

73Member permissions control what people can do with plugins. Installation

74settings control which plugins they can install or receive by default. App and

75account settings control access to connected information and actions.

76 

77| What you want to control | Where to look |

78| ---------------------------------------------------------------------------- | -------------------------------------------------------------------- |

79| Who can use, upload, share, or publish plugins. | [Member permissions](#choose-what-members-can-do-with-plugins). |

80| Who can install a plugin and who gets it by default. | [Installation settings](#choose-installation-settings). |

81| Who can use an app and which actions it allows. | [App access and actions](#manage-app-access-and-actions). |

82| When ChatGPT asks before using an app. | The app's **Permissions** settings. |

83| Which files and records an account can access and which actions it can take. | Permissions in the connected service, such as Google Drive or Slack. |

84| Additional limits on content ChatGPT can access. | [Content restrictions](#review-content-access), where supported. |

85| What an agent can do on a computer or in a cloud environment. | [Environment permissions](#review-runtime-controls-and-hooks). |

86 

87 

88 

89 {"For background on plugin security, read the "}

90 [{"App Security Whitepaper (PDF, June 2026)"}](https://cdn.openai.com/business-guides-and-resources/app-security-whitepaper.pdf)

91 {"."}

92

93 

94 

95## Choose what members can do with plugins

96 

97Before choosing individual plugins, review member permissions. Open your

98workspace's **Permissions & roles** settings and search for **plugins**.

99Depending on your workspace, the controls include:

100 

101| Member permission | What it allows |

102| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |

103| Use plugins | Use plugins and apps available to the workspace. |

104| Upload plugins | Create plugins by uploading plugin ZIP files. |

105| Upload plugins with custom MCP servers | Upload or update plugins that include custom connections to tools. Members still need permission to create or edit the plugin. |

106| Share plugins | Share plugins they own with people or groups, or anyone in the workspace with a link. |

107| Publish plugins to workspace | Add plugins they own to the workspace's plugin directory. |

108| Create plugins with MCPs | Use developer mode to create custom app connections. |

109 

110Where role-based access control (RBAC) is supported, a role holds a set of

111permissions. Workspace owners can assign a role to a group so its members receive

112those permissions. For example, a team can use approved plugins while only the

113people maintaining them have permission to upload or publish them.

114 

115These permissions are separate from each plugin's installation settings. Next,

116choose which plugins members can install or receive by default. For more on

117assigning roles and groups, see

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

36 119 

37To configure plugin authentication for supported workspace120<a id="step-1-enable-plugin-availability"></a>

38experiences, see [Workspace connections](https://learn.chatgpt.com/docs/enterprise/shared-connections).121 

39Installing a plugin for everyone doesn't, by itself, provide a shared account.122## Choose installation settings

123 

124Open [Admin console](https://admin.openai.com),

125select your workspace, and open **Plugins**. The bulk edit menu offers these

126installation settings:

127 

128| Setting | What it changes | When to consider it |

129| -------------------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------------- |

130| Available for installation | Members can install the plugin. | Plugins that members choose based on their work. |

131| Installed for workspace | Installs the plugin by default and keeps any role-specific settings. | A plugin the team uses regularly. |

132| Customize by role | Sets availability for a custom role where supported. | A plugin for a particular team or responsibility. |

133| Disable | Changes the workspace default to disabled. | A plugin you no longer want available by default. Review role overrides too. |

134 

135Where per-plugin role settings are supported, **Workspace default** uses the

136workspace setting. For ordinary custom roles, **Off** means that role

137doesn't give access. A member may still get access through another role, so

138check all roles assigned to them, including those assigned through groups.

139 

140For example, make a research plugin available for members to install when they

141need it. If role controls are available, install the weekly update plugin for the

142role assigned to the people who prepare those updates. Check their app access

143before asking them to use it.

144 

145### Manage multiple plugins together

40 146 

41Plugins in Sites let each visitor use their own connected accounts. Each147To change several plugins at once, select them and choose **Edit**. Use this only

42 plugin has a separate Sites permission, with defaults that depend on the148when the plugins need the same installation setting. Review who the change

43 workspace plan. See [Enable plugin use in149affects and which apps each plugin needs before confirming. If a change fails

44 Sites](https://learn.chatgpt.com/docs/enterprise/sites#enable-plugin-use-in-sites) to review plugin150or you're unsure whether it saved, check that plugin's setting before trying again.

45 defaults, change access, and troubleshoot tenant restrictions.

46 151 

47## Understand the capability chain152For current limits and instructions, see the [Help Center's plugin administration guide](https://help.openai.com/en/articles/11509118-admin-controls-security-and-compliance-for-plugins-and-apps).

48 153 

49A plugin can span these control layers:154To manage workspace plugins from a repository, see

155[Import and sync plugins from GitHub](https://learn.chatgpt.com/docs/enterprise/plugin-management). For installation on

156other versions of ChatGPT and Codex, see [Plugins](https://learn.chatgpt.com/docs/plugins).

50 157 

51| Layer | What it determines | Where to manage it |158<a id="step-2-manage-capabilities"></a>

52| ----------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------- |

53| Availability | Whether the plugin bundle is available to the user | [Workspace settings](https://chatgpt.com/admin/settings) for supported web and desktop surfaces; the CLI plugin browser for CLI |

54| Included skills | Which reusable instructions the installed plugin contributes | The plugin package and [Skill controls](https://learn.chatgpt.com/docs/enterprise/skills) |

55| MCP server access | Whether users can use an MCP server's capabilities | [Workspace apps](https://chatgpt.com/admin/ca) and [Permissions & roles](https://chatgpt.com/admin/settings) |

56| Actions and permissions | Which actions users can run and when ChatGPT asks before using its tools | The connection's **Action control** and **App permissions** in [Workspace apps](https://chatgpt.com/admin/ca) |

57| Service authorization | Which external data and actions the authenticated identity can access | The connected service and its identity provider |

58| Runtime permissions | What an agent can do after it receives data or a tool | The runtime, sandbox, and approval controls for the active surface |

59 159 

60Use these layers as a two-step rollout: first make the right plugins available,160## Manage app access and actions

61then configure the capabilities and permissions each workflow needs.

62 161 

63## Step 1: Enable plugin availability162Installing a plugin doesn't give members access to its apps or external data.

163You also need to allow the required apps. If an app requires an account, that

164account must have permission to access the information or take the action in the

165connected service.

64 166 

65For supported web and desktop surfaces, workspace plugin controls determine167Review each included app in **Plugins** in Admin console. Where available, use

66which roles can use or install a plugin. The Codex CLI uses its own plugin168**Manage Legacy Apps** to open the older app settings page.

67browser for installation. See

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

69packaging and distribution.

70 169 

71To import workspace plugins from GitHub and keep them up to date, see170- Use **App access** to choose who can use the app.

72[Plugin management](https://learn.chatgpt.com/docs/enterprise/plugin-management).171- Where supported, use **Tools** (or **Actions**) to allow actions that read or

172 change information in the connected service.

173- Use **New tools** (or **New actions**), where supported, to decide whether to

174 allow actions added later. This doesn't turn off actions you've already enabled.

175- Use **Permissions** to choose when ChatGPT asks before using the app.

176 

177For example, summarizing documents may need only read actions. Updating project

178records needs write actions. Before allowing write actions, check what they can

179change and how members can review or correct the result. Asking for confirmation

180doesn't replace restrictions on what the app or connected account can access.

181 

182If you use a [workspace connection](https://learn.chatgpt.com/docs/enterprise/shared-connections), members

183need permission to use that shared account. Installing a plugin for everyone

184doesn't create a shared account. Choose an account with the permissions the task

185needs, and tell members which account they're using.

186 

187Plugins in Sites use each visitor's connected accounts and have a separate

188 Sites permission. See [Plugin access in

189 Sites](https://learn.chatgpt.com/docs/enterprise/sites#enable-plugin-use-in-sites) for defaults and

190 setup.

191 

192### Review content access

193 

194Some apps offer **Safety & Security Controls** to limit which content ChatGPT can

195access. These settings apply in addition to the connected service's permissions.

196 

197For example, a member may be able to open a file in Google Drive while workspace

198content restrictions prevent ChatGPT from accessing it. After choosing

199restrictions, send new requests for an allowed item and a restricted item to

200check that ChatGPT can access the allowed item but not the restricted item.

201 

202For supported apps and setup, see the [Help Center's plugin administration guide](https://help.openai.com/en/articles/11509118-admin-controls-security-and-compliance-for-plugins-and-apps).

203 

204## Check the member experience

205 

206Ask a member to try the plugin in their workspace on a version of ChatGPT or

207Codex that supports it. Test with their account because an owner's account may

208have different permissions.

209 

210| Check | What to verify |

211| ------------------------- | --------------------------------------------------------------------------------------- |

212| Find the plugin | The member can install it, or it is already installed, as intended. |

213| Use an included app | The app is enabled, and the correct account is connected with the required permissions. |

214| Try the team's task | The member can use the actions and information the task needs. |

215| Test content restrictions | A new request can access an allowed item and cannot access a restricted item. |

216| Test a write action | If enabled, use a disposable test record. Check the result in the connected service. |

217 

218If the plugin is installed but a task fails, check the app connection, allowed

219actions, content restrictions, and the connected account's permissions before

220reinstalling it. For more checks, see [Troubleshooting plugins and apps in ChatGPT](https://help.openai.com/en/articles/20001497-troubleshooting-plugins-and-apps-in-chatgpt).

73 221 

74### Troubleshoot "Disabled by admin"222### Troubleshoot "Disabled by admin"

75 223 


791. Open [Admin console](https://admin.openai.com), select the workspace, and open **Plugins** (**Apps** in2271. Open [Admin console](https://admin.openai.com), select the workspace, and open **Plugins** (**Apps** in

80 FedRAMP workspaces). Review the plugin's workspace availability and any228 FedRAMP workspaces). Review the plugin's workspace availability and any

81 supported role settings. ChatGPT Business uses workspace-wide availability.229 supported role settings. ChatGPT Business uses workspace-wide availability.

822. If your workspace supports RBAC, review the workspace default and all direct2302. If your workspace supports RBAC, open **Permissions & roles**. Check the

83 and group role assignments in **Permissions & roles**. Confirm the member's231 workspace default and every role assigned to the member, directly or through

84 general plugin permission is enabled: **Allow members to use plugins** or232 a group. The general plugin permission must be on. Look for **Allow members

85 **Use plugins**, depending on the label shown. FedRAMP workspaces may show233 to use plugins** or **Use plugins**. FedRAMP workspaces may show **Use apps**.

86 **Use apps**.

873. Confirm the member can access each app required by the plugin and that the2343. Confirm the member can access each app required by the plugin and that the

88 task's required actions are enabled.235 task's required actions are enabled.

894. Where Lockdown Mode roles are available, check all direct and group role2364. If Lockdown Mode roles are available, check whether they restrict what the

90 assignments for restrictions on the capability the member needs. Lockdown Mode237 member is trying to do. Review roles assigned directly and through groups.

91 doesn't automatically disable every app in managed workspaces, but its238 Lockdown Mode restrictions can apply even when an ordinary role gives access.

92 restrictions can apply even when an ordinary role grants access.239 They don't automatically disable every app in managed workspaces.

93 240 

94For self-serve ChatGPT Business accounts, ask the member to review [Lockdown Mode](https://help.openai.com/en/articles/20001061-lockdown-mode) in241For self-serve ChatGPT Business accounts, ask the member to review [Lockdown Mode](https://help.openai.com/en/articles/20001061-lockdown-mode) in

95**Settings > Security**, where available. Lockdown Mode doesn't affect Codex242**Settings > Security**, where available. Lockdown Mode doesn't affect Codex


99security policy. Allow up to five minutes for role changes to apply, then ask the246security policy. Allow up to five minutes for role changes to apply, then ask the

100member to try again. See [Role-based access control (RBAC)](https://help.openai.com/en/articles/11750701-rbac) for details.247member to try again. See [Role-based access control (RBAC)](https://help.openai.com/en/articles/11750701-rbac) for details.

101 248 

102### Export the public catalog for review249## Keep approved workflows useful

250 

251For each shared plugin, give members a contact who can answer questions and review

252changes to its skills and apps. Review access when the team, task, or connected

253account changes.

254 

255When you stop using a plugin, review its installation settings and app access

256separately. Disabling an app doesn't necessarily uninstall the plugin or remove

257skills that work without it. Tell members what's changing and suggest a

258replacement, if one exists.

259 

260## Export the public catalog for review

103 261 

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

105the public plugins available to their workspace. Use the export to review263the public plugins available to their workspace. Use the export to review

106plugin, MCP server, and skill metadata before changing plugin availability.264plugin descriptions, apps, and skills before changing availability. Apps use Model

265Context Protocol (MCP) to connect to services, so the export describes them as MCP

266servers. The export doesn't show what each member can access. Use the member

267checks above for that.

107 268 

1081. Open [Admin > Plugins](https://chatgpt.com/admin/plugins).2691. Open [Admin console](https://admin.openai.com) and select the intended workspace.

1092. Select **Public**.2702. Open **Plugins** and select **Public**.

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

111 272 

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

113 274 


116- MCP server metadata: `App Name(s)` and `App Description(s)`.277- MCP server metadata: `App Name(s)` and `App Description(s)`.

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

118 279 

119When a plugin includes more than one MCP server or skill, semicolons separate the280Semicolons separate multiple MCP servers or skills in the same cell. The catalog

120corresponding values. The export uses a public-catalog snapshot that can be up281data can be up to 48 hours old. It includes public plugins visible to your

121to 48 hours old,282workspace, but not plugins created for that workspace. The export isn't

122includes only public plugins visible to the current workspace, and does not283available in FedRAMP workspaces.

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

124workspaces.

125 

126## Step 2: Manage capabilities

127 

128Conversation sync does not grant additional plugin, MCP server, or connected-service access. For Local computer access with Work Cloud, Agent Security's enterprise `apps` and `plugins` requirements apply to local executors. Work cloud containers retain existing Work Cloud policies. Configure these requirements through TOML and review them alongside workspace permissions and the connected account's permissions.

129 

130Review hook support separately from plugin availability:

131 

132- **Enterprise hooks.** Where enabled for your workspace, Local computer access with Work Cloud supports admin-defined MCP hooks that run on the cloud coordinator (orchestrator) for supported lifecycle and tool events. Command hooks and hooks from local configuration or plugins are not supported with cloud orchestration, even when tools execute locally.

133- **Cloud orchestration:** Command hooks and hooks from local configuration or plugins do not run, even when tools execute locally and the plugin itself is allowed. Consumers do not have hooks support in this feature. When both orchestration and execution are local, existing supported hooks continue to work in local-only Work and Codex threads. Admins can still configure supported managed hooks in Agent Security for those workflows.

134- **Auditing.** Before relying on these hooks, test the callback connection, confirm the events it receives, and check how failures affect the task. MCP hooks do not provide a complete Compliance API audit trail.

135 

136See [Hooks](https://learn.chatgpt.com/docs/hooks) and the [Configuration Reference](https://learn.chatgpt.com/docs/config-file/config-reference) for supported requirements.

137 

138<WarningTip>

139 Making an MCP server or plugin available in ChatGPT doesn't grant access to

140 files, records, or actions in the connected service. When troubleshooting

141 access, check the member's workspace role and approved action settings. Then

142 confirm the authenticated account or shared connection has the expected

143 permissions in the connected service.

144</WarningTip>

145 

146Plugins in ChatGPT and Codex can include MCP server connections that search, retrieve, sync,

147or act on external systems. Plugin availability and the access and actions

148granted to each connection are separate controls.

149 

150Manage MCP server capabilities from

151[Workspace apps](https://chatgpt.com/admin/ca) and

152[Permissions & roles](https://chatgpt.com/admin/settings). Available controls

153let admins:

154 

155- Enable MCP server connections and assign access by workspace role.

156- For connections that support **Action control**, allow read-only actions or an

157 approved custom set, including how the workspace handles newly added actions.

158- Set **App permissions** that determine when ChatGPT asks before using a connection.

159- Keep access within the scopes and permissions granted by each connected

160 service and authenticated account.

161 

162For current availability and procedures, see

163[Admin controls, security, and compliance in apps](https://help.openai.com/en/articles/11509118).

164 284 

165## Restrict company app accounts to authorized workspaces285## Restrict company app accounts to authorized workspaces

166 286 

167When activated, verified-domain restrictions prevent users from creating new connections to supported apps with company-domain accounts in personal ChatGPT workspaces or other unauthorized workspaces. Employees must use an authorized workspace to connect those company accounts.287Verified-domain restrictions let you require employees to connect company

288accounts only in authorized ChatGPT workspaces. When activated, this blocks new

289connections to supported apps in personal or other unauthorized workspaces. It

290applies to accounts that use your company's verified domain.

168 291 

169Verifying a domain does not activate this restriction. Existing app connections are not automatically disconnected.292Verifying a domain does not activate this restriction. Existing app connections are not automatically disconnected.

170 293 

171For supported apps, availability, and setup guidance, see [Admin controls, security, and compliance for plugins and apps](https://help.openai.com/en/articles/11509118).294For supported apps, availability, and setup guidance, see [Admin controls, security, and compliance for plugins and apps](https://help.openai.com/en/articles/11509118).

172 295 

173<a id="choose-a-starting-set-of-apps"></a>296<a id="review-runtime-controls-and-hooks"></a>

174 297 

175## Choose a focused initial set298## Review permissions for the computer or cloud environment

176 299 

177Enable plugins that support an approved business need. Set each plugin’s audience to the users or roles that need it, and complete any required review before enabling it.300If an agent uses plugins on a computer or in a cloud environment, review that

301environment's permissions too. These work alongside workspace and account

302permissions.

178 303 

179For each connected service, record the business owner, permitted data, approved304Hooks can run scripts or tools at specific points during an agent's work. If you

180read or write actions, authentication method, and a support or removal contact.305use them, check that the environment supports them and test what happens when

306they fail. A hook failure doesn't necessarily stop the action. Keep access

307restrictions in place even when you use hooks.

181 308 

182Before enabling write actions or publishing a new connected capability, verify309See [Agent Security](https://learn.chatgpt.com/docs/enterprise/agent-security) for environment-specific

183its role scope and test with an account that has only the intended permissions310controls and [Hooks](https://learn.chatgpt.com/docs/hooks) for supported events and configuration.

184in the connected service.

185 311 

186For a broad rollout, begin with categories teams use every day, such as email,312## Understand data flow and security

187calendar, and file or document systems. Use the

188[Plugins Directory](https://chatgpt.com/apps) to confirm current availability

189and capabilities across supported ChatGPT and Codex surfaces.

190 313 

191Whatever the initial set, start with read actions. Before enabling write314When ChatGPT uses an app in a plugin, it sends a request to the connected service.

192actions, identify the plugin owner, review MCP server scopes and service315The account's permissions and workspace controls limit the data ChatGPT can

193permissions, confirm data access, and document external effects and a recovery316access and the actions it can take.

194path.

195 317 

196## Understand data flow and security318Before allowing access to sensitive information, review what the task needs,

319which account it uses, and whether the connected service meets your

320organization's requirements.

321 

322For current data handling, retention, and compliance guidance, see [Admin controls, security, and compliance for plugins and apps](https://help.openai.com/en/articles/11509118).

323For locally configured MCP servers, see [Codex MCP configuration](https://learn.chatgpt.com/docs/extend/mcp).

324 

325<a id="use-current-procedures-and-references"></a>

326 

327## Go deeper

197 328 

198When ChatGPT uses an MCP server included with a plugin, it sends a request329- [Install and use plugins](https://learn.chatgpt.com/docs/plugins)

199to the connected service and returns data or action results allowed by the330- [Understand skills and plugins](https://learn.chatgpt.com/docs/skills-and-plugins)

200authenticated account's permissions in that service.331- [Import and sync plugins from GitHub](https://learn.chatgpt.com/docs/enterprise/plugin-management)

201 332- Read the [App Security Whitepaper (PDF, June 2026)](https://cdn.openai.com/business-guides-and-resources/app-security-whitepaper.pdf)

202ChatGPT handles data from connected services in two ways:

203 

204- **Non-synced:** ChatGPT processes data from Chat and deep research transiently

205 and doesn't index it.

206- **Synced:** ChatGPT indexes selected connected content in advance. You can see

207 whether a connection supports sync on its plugin page.

208 

209The mode changes how ChatGPT indexes connected content; it doesn't replace

210normal chat-retention controls. ChatGPT conversations that use these connections remain

211available through the Compliance API.

212 

213OpenAI's connected-service guidance documents encryption in transit and at rest, per-user

214authorization, role and action controls, restricted network access for

215conversations that use these connections, and no model training on information accessed

216through these connections for Business, Enterprise, and Edu customers. When a request reaches

217a connected service, that service's scopes, retention, data residency, and other

218policies also apply.

219 

220See [security and compliance for connected services](https://help.openai.com/en/articles/11509118)

221and [connections with sync](https://help.openai.com/en/articles/10847137) for current

222data-handling details. For locally configured MCP servers in the ChatGPT desktop

223app, Codex CLI, or IDE extension, see

224[Codex MCP configuration](https://learn.chatgpt.com/docs/extend/mcp).

225 

226## Use current procedures and references

227 

228- [Admin controls, security, and compliance in apps](https://help.openai.com/en/articles/11509118)

229- [Apps in ChatGPT](https://help.openai.com/en/articles/11487775)

230- [Apps with sync](https://help.openai.com/en/articles/10847137)

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

232- [Plugins](https://learn.chatgpt.com/docs/plugins)

233- [Skills and plugins](https://learn.chatgpt.com/docs/skills-and-plugins)

234- [Build plugins](https://developers.openai.com/plugins/build/plugins)

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

Details

783 783 

784Command networking and desktop-app networking use different controls. Start with **Network use controls** for supported command traffic, review the environment and runtime limits, then use the separate desktop-app requirements if needed. Browser site rules remain in [Control browser and Computer Use](#control-browser-and-computer-use).784Command networking and desktop-app networking use different controls. Start with **Network use controls** for supported command traffic, review the environment and runtime limits, then use the separate desktop-app requirements if needed. Browser site rules remain in [Control browser and Computer Use](#control-browser-and-computer-use).

785 785 

786### Use the system proxy for native client requests

787 

788{/* Preserve the standard technical term "proxy auto-configuration". */}

789{/* vale Microsoft.Auto = NO */}

790 

791The experimental `features.respect_system_proxy` setting lets the native Codex

792runtime used by ChatGPT desktop and Codex use operating-system proxy settings

793for its own network requests. Enable it on devices that need a system proxy or

794proxy auto-configuration (PAC). The setting defaults to `false`.

795 

796{/* vale Microsoft.Auto = YES */}

797 

798Add the following to a supported `config.toml` defaults source or to

799[`managed_config.toml`](#locations):

800 

801```toml

802[features]

803respect_system_proxy = true

804```

805 

806Project-local configuration can't enable this setting. For macOS MDM, include

807the same TOML in [`config_toml_base64`](#macos-managed-preferences-mdm).

808Restart the client after changing local configuration. To turn off the opt-in,

809set it to `false` in the configuration source that enabled it.

810 

811#### Sign-in and cloud defaults

812 

813The separate `system_proxy_fallback` feature is enabled by default. After a

814connection failure, it can retry supported sign-in and cloud-configuration

815requests through the system proxy, even when `respect_system_proxy` is `false`.

816This fallback can let supported clients sign in and fetch cloud defaults without

817a local opt-in. Disabling `respect_system_proxy` alone doesn't disable the

818fallback.

819 

820If direct access doesn't work and the fallback is unavailable, disabled, or

821unsuccessful, deploy `respect_system_proxy` locally before sign-in.

822 

823#### Scope and limitations

824 

825Validate sign-in and an authenticated request with the client versions and on

826the networks you plan to use. Keep these boundaries in mind:

827 

828- **Request scope:** The setting applies to network clients owned by the Codex

829 runtime. It doesn't configure every ChatGPT desktop request, browser request,

830 plugin process, or shell command. It doesn't enforce a destination allowlist

831 or guarantee that direct connections are blocked. For supported traffic, see

832 the [command network requirements](#configure-network-access-requirements)

833 and [desktop app network requirements](#control-desktop-app-network-destinations).

834- **Platform support:** macOS and Windows support native system proxy discovery.

835 When system resolution is unavailable, the runtime uses explicit proxy

836 environment settings if available. Otherwise, it connects directly. Other

837 platforms use the same environment-or-direct fallback instead of native

838 system discovery.

839- **PAC routing:** The runtime selects one route from a PAC result. If that

840 connection fails, it doesn't retry later proxy or `DIRECT` entries in the result.

841- **Windows authentication:** Supported builds can respond to an HTTP `407`

842 proxy challenge during tunnel setup using the signed-in Windows user's

843 credentials with Negotiate or NTLM. HTTPS proxies that require authentication

844 tokens bound to the proxy's TLS connection aren't supported.

845 

786### Configure network access requirements846### Configure network access requirements

787 847 

788<WarningTip>848<WarningTip>

Details

1# Plugin management1# Import and sync plugins from GitHub

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 

5You can import plugins from GitHub into your workspace and keep them up to date

6as the repository changes. A marketplace is a JSON file that lists the plugins

7to import.

8 

5## Before you begin9## Before you begin

6 10 

7Workspace admins can import a plugin marketplace from GitHub and keep its plugins up to date from the repository. A marketplace is a JSON catalog that lists the plugins to import.11You need to be a workspace admin. Use a GitHub account that can read the

12marketplace repository and every repository it references. Public and private

13GitHub repositories are supported. Complete any access approval required by your

14GitHub organization before importing.

8 15 

9This page covers workspace import and sync. To configure marketplaces directly16Review the repository before you import it. These defaults affect what members

10on local clients through cloud-managed or system `config.toml`, see17can use:

11[Configure plugin marketplaces and defaults](https://learn.chatgpt.com/docs/enterprise/managed-configuration#configure-plugin-marketplaces-and-defaults).

12To enable or disable plugins for a specific project, see [Enable or disable a plugin for a

13repo](https://developers.openai.com/plugins/build/plugins#enable-or-disable-a-plugin-for-a-repo).

14 18 

15Use a GitHub account that can read the marketplace repository and any other repositories it references. Public and private GitHub repositories are supported. Complete any GitHub organization approval required for your repository access before importing.19- New plugins are **Available** for installation. If authentication is required,

20 members complete it when they install the plugin.

21- The import processes all valid entries. New marketplaces sync automatically

22 each day, adding any new plugins from the repository.

16 23 

17Review the repository content before importing. New plugins start with **Available** installation and authentication on install. New marketplaces have automatic daily sync enabled. Import processes all valid entries, and future syncs automatically add any new plugins in the repository.24This guide covers importing plugins into a workspace. For local clients, see

25[Configure plugin marketplaces and defaults](https://learn.chatgpt.com/docs/enterprise/managed-configuration#configure-plugin-marketplaces-and-defaults)

26for cloud-managed or system `config.toml` settings. For a specific project, see

27[Enable or disable a plugin for a repo](https://developers.openai.com/plugins/build/plugins#enable-or-disable-a-plugin-for-a-repo).

18 28 

19## Configure a marketplace sync29## Configure a marketplace sync

20 30 

211. Open **Admin** > **Plugins** and select **Add** > **Import marketplace**.311. Open **Admin** > **Plugins** and select **Add** > **Import marketplace**.

222. In **Source**, enter the repository URL, such as `https://github.com/example/team-plugins`. Use the repository URL only, without a branch or folder URL.322. In **Source**, enter the repository URL, such as `https://github.com/example/team-plugins`. Use the repository URL only, without a branch or folder URL.

233. If the marketplace is in a subdirectory, enter that directory in **Path**. For example, use `team-tools` for `team-tools/.agents/plugins/marketplace.json`. Leave **Path** empty for the repository root. Do not enter the manifest filename.333. If the marketplace is in a subdirectory, enter that directory in **Path**. For example, use `team-tools` for `team-tools/.agents/plugins/marketplace.json`. Leave **Path** empty for the repository root. Do not enter the manifest filename.

244. Optionally enter a **Branch, tag, or commit**. Leave this empty to use the repository's default branch. Use a branch to receive future commits; a fixed commit stays at that revision.344. Optionally enter a **Branch, tag, or commit**. Leave this empty to use the repository's default branch. A branch lets you receive later updates. A fixed commit keeps the version you selected.

255. Select **Import marketplace** and authorize GitHub access when prompted. The initial import can take up to an hour for very large marketplaces. Subsequent daily syncs typically take a few minutes.355. Select **Import marketplace** and authorize GitHub access when prompted. The initial import can take up to an hour for especially large marketplaces. Subsequent daily syncs typically take a few minutes.

266. Review **Import results**, then open each imported plugin to configure its installation policy and any required apps.366. Review **Import results**, then open each imported plugin to configure its installation policy and any required apps.

27 37 

28To request an update without waiting for the daily sync, open the marketplace under **Admin** > **Plugins** > **Marketplaces** and select **Sync now**.

29 

30## Supported formats38## Supported formats

31 39 

32The selected directory must contain one of these files:40The selected directory must contain one of these files:


93 101 

94## Configure workspace access102## Configure workspace access

95 103 

96GitHub import and sync do not apply repository installation or authentication policies, including `AVAILABLE`, `INSTALLED_BY_DEFAULT`, `NOT_AVAILABLE`, `ON_INSTALL`, and `ON_USE`. Workspace admins configure these settings for each plugin. Syncing an update or moving an existing plugin to GitHub management preserves its workspace policies.104Set each plugin's installation and authentication settings in your workspace.

105Import and sync don't apply these settings from the repository. These settings include

106`AVAILABLE`, `INSTALLED_BY_DEFAULT`, `NOT_AVAILABLE`, `ON_INSTALL`, and `ON_USE`.

107Existing workspace settings stay in place when you sync an update or move a

108plugin to GitHub management.

97 109 

98Use **Installation policy** to choose **Available** or **Installed** for each eligible role. Required apps must also be enabled, and members must have access to the connected service. Importing a plugin does not grant app access or connect members' accounts. See [Plugin controls](https://learn.chatgpt.com/docs/enterprise/apps-and-connectors) for role, app, and action controls.110Use **Installation policy** to choose **Available** or **Installed** for each

111eligible role. Also enable the apps the plugin needs and check that members have

112access to the connected service. Importing a plugin doesn't give members app

113access or connect their accounts. See [Plugin controls](https://learn.chatgpt.com/docs/enterprise/apps-and-connectors)

114for help choosing access and action settings.

99 115 

100## Move an existing plugin to GitHub management116## Move an existing plugin to GitHub management

101 117 


112}128}

113```129```

114 130 

115Open the plugin from **Admin** > **Plugins** and copy the ID after `/admin/plugins/` in its URL. Put `pluginId` beside `name` and `source` in the marketplace entry. The existing plugin must be in the same workspace.131Open the plugin from **Admin** > **Plugins** and copy the ID after `/plugins/` in its URL. Put `pluginId` beside `name` and `source` in the marketplace entry. The existing plugin must be in the same workspace, and the entry's `name` must match the existing plugin's name.

116 132 

117This moves an uploaded or otherwise unmanaged workspace plugin to GitHub management. The plugin keeps its ID, sharing, and workspace policies. Future updates come from GitHub; archive uploads can no longer replace the managed plugin. A plugin already managed by another GitHub source cannot be taken over this way.133Use this to move a workspace plugin to GitHub if it isn't already managed there.

134The plugin keeps its ID, sharing, and workspace settings. Future updates come

135from GitHub, so you can no longer replace it by uploading an archive. You can't

136use this method for a plugin already managed by a different GitHub source.

118 137 

119## Desktop-only plugins138## Desktop-only plugins

120 139 

121Any imported plugin that declares MCP servers in `mcp.json` or `.mcp.json` is marked **Desktop only** and works only in the ChatGPT desktop app. This includes servers that use a remote HTTPS URL. The same restriction applies to other supported MCP configuration forms, such as inline server declarations.140Plugins marked **Desktop only** cannot run in ChatGPT on the web. Imported

141plugins can receive this label when they declare MCP servers, including servers

142with remote HTTPS URLs. Adding an `.app.json` reference does not by itself remove

143the label.

122 144 

123## Reference an existing app with `.app.json`145## Reference an existing app with `.app.json`

124 146 


171 └── .app.json193 └── .app.json

172```194```

173 195 

174The reference does not create an app or grant permissions. Admins must make the app available to the intended roles, and members must complete any required authentication. Existing app permissions, action controls, and service access still apply.196This file points to an existing app. It doesn't create an app or give anyone

197access. Make the app available to the roles that need it, and ask members to

198complete any required authentication. The app's permissions, allowed actions,

199and connected-service access still apply.

175 200 

176## Keep plugins up to date201## Keep plugins up to date

177 202 

178New marketplaces check for updates daily. Open **Admin** > **Plugins** > **Marketplaces**, select the marketplace, and choose **Sync now** to request an update without waiting for automatic sync.203New marketplaces check for updates daily. Open **Admin** > **Plugins** > **Marketplaces**, select the marketplace, and choose **Sync now** to request an update without waiting for automatic sync.

179 204 

180Sync can add new marketplace entries and update existing plugins. Review changes to the repository before merging them, because automatic sync will import any new plugins.205Sync can add new plugins from the marketplace and update existing ones. Review

206repository changes before merging them because automatic sync imports new

207plugins too.

181 208 

182After a sync, review the status and saved report. **Completed — N errors** means the pass finished but some plugins could not be processed. If an update to an existing plugin is invalid, its last working version is retained. Fix the reported problem in GitHub, then select **Sync now** to retry.209After each sync, read the status and saved report. A completed sync can still

210include errors for individual plugins. If an update is invalid, the existing

211plugin keeps its last working version. Fix the problem in GitHub, then select

212**Sync now** to try again.

183 213 

184Removing an entry from the repository does not delete its imported workspace copy. It is marked **No longer in source**. Deleting the marketplace in ChatGPT deletes all plugins imported from it.214Removing a plugin's entry from the marketplace leaves its workspace copy in

215place, marked **No longer in source**. Deleting the marketplace in ChatGPT has a different

216effect: it deletes all plugins imported from that marketplace.

185 217 

186## Reconnect or change GitHub access218## Reconnect or change GitHub access

187 219 

188To **reconnect GitHub access**, first confirm that the GitHub account used for the import still has access to the repository and any referenced repositories. The admin who originally imported the marketplace should then open the GitHub plugin in ChatGPT and reconnect their account, since marketplace sync uses that admin’s GitHub connection.220Marketplace sync uses the GitHub connection of the admin who imported it.

221 

222To reconnect, first check that the importing admin's GitHub account can still

223read the marketplace repository and every repository it references. That admin

224should then open the GitHub plugin in ChatGPT and reconnect their account.

189 225 

190To **transfer to a new owner**, the new workspace admin should open **Admin** > **Plugins** > **Add** > **Import marketplace** and import the same marketplace using the same **Source**, **Path**, and **Branch, tag, or commit** values. Future syncs will use their GitHub connection.226To change owners, the new workspace admin imports the marketplace again from

227**Admin** > **Plugins** > **Add** > **Import marketplace**. Use the same **Source**,

228**Path**, and **Branch, tag, or commit** values. Future syncs will use the new

229admin's GitHub connection.

191 230 

192Do not delete the marketplace just to reconnect it or change ownership: deletion also removes its imported plugins.231Keep the marketplace in place when reconnecting or changing owners. Deleting it

232also deletes its imported plugins.

Details

164 164 

1653. Save this script as `Uninstall-ChatGPT.ps1` beside the MSIX, license, and installation script. Configure Intune to run this script in System context when uninstalling the app. The script removes the provisioned package and app registrations for all users on the device:1653. Save this script as `Uninstall-ChatGPT.ps1` beside the MSIX, license, and installation script. Configure Intune to run this script in System context when uninstalling the app. The script removes the provisioned package and app registrations for all users on the device:

166 166 

167 <WarningTip>

168 If you choose to [remove local data on

169 uninstall](#uninstall-and-local-data), back up any data you want to keep

170 before running this script.

171 </WarningTip>

172 

167```powershell173```powershell

168 #Requires -RunAsAdministrator174 #Requires -RunAsAdministrator

169 $ErrorActionPreference = 'Stop'175 $ErrorActionPreference = 'Stop'


573 579 

574For each CLI update, choose a new approved release, update the explicit `-Release` value or npm package version in your deployment package, and update its detection rule. Deploy through your package process, then verify the installed version, account context, and detection behavior. Do not switch the managed package back to an installer command without an explicit release. See [CLI releases](https://github.com/openai/codex/releases), [CLI installation and updates](https://learn.chatgpt.com/docs/codex/cli), and [npm version selection](https://docs.npmjs.com/cli/v11/using-npm/package-spec).580For each CLI update, choose a new approved release, update the explicit `-Release` value or npm package version in your deployment package, and update its detection rule. Deploy through your package process, then verify the installed version, account context, and detection behavior. Do not switch the managed package back to an installer command without an explicit release. See [CLI releases](https://github.com/openai/codex/releases), [CLI installation and updates](https://learn.chatgpt.com/docs/codex/cli), and [npm version selection](https://docs.npmjs.com/cli/v11/using-npm/package-spec).

575 581 

582## Uninstall and local data

583 

584Uninstall the desktop app through Windows Settings or your management tool, such

585as Intune or SCCM. Cleanup runs automatically during uninstall.

586 

587By default, local coding chats and settings are kept in the user's

588[`CODEX_HOME`](https://learn.chatgpt.com/docs/config-file/config-advanced#config-and-state-locations).

589 

590To also remove `CODEX_HOME` during uninstall, add this to `config.toml` in that

591folder before uninstalling:

592 

593```toml

594[desktop]

595uninstall_codex_home = true

596```

597 

576## Troubleshooting598## Troubleshooting

577 599 

578<details>600<details>

plugins.md +1 −1

Details

132Use the separate **Installed** row to review plugins you already installed.132Use the separate **Installed** row to review plugins you already installed.

133 133 

134Workspace admins can import and sync a GitHub marketplace for their team. See134Workspace admins can import and sync a GitHub marketplace for their team. See

135[Plugin management](https://learn.chatgpt.com/docs/enterprise/plugin-management) for setup and access135[Import and sync plugins from GitHub](https://learn.chatgpt.com/docs/enterprise/plugin-management) for setup and access

136requirements.136requirements.

137 137 

138### Install and use a plugin138### Install and use a plugin

Details

232 232 

233For custom integrations or development with plugin files, see [Package your plugin](https://developers.openai.com/plugins/build/plugins). The [developer documentation](https://developers.openai.com/plugins/) covers building skills and MCP servers, [extensions](https://developers.openai.com/plugins/build/extensions), testing, and public submission.233For custom integrations or development with plugin files, see [Package your plugin](https://developers.openai.com/plugins/build/plugins). The [developer documentation](https://developers.openai.com/plugins/) covers building skills and MCP servers, [extensions](https://developers.openai.com/plugins/build/extensions), testing, and public submission.

234 234 

235For workspace distribution through GitHub, see [Plugin management](https://learn.chatgpt.com/docs/enterprise/plugin-management).235For workspace distribution through GitHub, see [Import and sync plugins from GitHub](https://learn.chatgpt.com/docs/enterprise/plugin-management).

Details

63 before_script:63 before_script:

64 - apt-get update -qq64 - apt-get update -qq

65 - apt-get install -y -qq --no-install-recommends ca-certificates git python3 ripgrep65 - apt-get install -y -qq --no-install-recommends ca-certificates git python3 ripgrep

66 - npm install --prefix /tmp/codex-security-cli --ignore-scripts --no-audit --no-fund @openai/codex-security@0.1.2066 - npm install --prefix /tmp/codex-security-cli --ignore-scripts --no-audit --no-fund @openai/codex-security@0.8.1

67 script:67 script:

68 - |68 - |

69 set -eu69 set -eu


85 --head "$CI_COMMIT_SHA" \85 --head "$CI_COMMIT_SHA" \

86 --auth api-key \86 --auth api-key \

87 --output-dir "$RESULTS_DIR" \87 --output-dir "$RESULTS_DIR" \

88 --fail-on-severity high \

88 --json89 --json

89 scan_exit="$?"90 scan_exit="$?"

90 set -e91 set -e

91 unset codex_security_api_key92 unset codex_security_api_key

92 93 

93 case "$scan_exit" in94 case "$scan_exit" in

94 0|1|2) ;;95 0|1) ;;

95 *) exit "$scan_exit" ;;96 *) exit "$scan_exit" ;;

96 esac97 esac

97 98 


171 172 

172Open the `codex-security` job and confirm that its artifacts include:173Open the `codex-security` job and confirm that its artifacts include:

173 174 

174- `scan-manifest.json`175- `results/scan-manifest.json`

175- `findings.json`176- `results/findings.json`

176- `coverage.json`177- `results/report.md`

177- `results.sarif`178- `results.sarif`

178- `scan-exit-code.txt`179- `scan-exit-code.txt`

179 180 


212workflow calculates the merge base and binds the scan to the reviewed base and213workflow calculates the merge base and binds the scan to the reviewed base and

213head revisions.214head revisions.

214 215 

215The example pins `@openai/codex-security` to `0.1.20`. Retest authentication,216The example pins `@openai/codex-security` to `0.8.1`. Retest authentication,

216artifacts, SARIF ingestion, and policy gating before changing the pin.217artifacts, SARIF ingestion, and policy gating before changing the pin.

217 218 

218## Separate reporting from policy enforcement219## Separate reporting from policy enforcement


221report first and restores the scanner's exit status in a separate222report first and restores the scanner's exit status in a separate

222`codex-security-gate` job.223`codex-security-gate` job.

223 224 

224The report job accepts findings from exit codes `0` and `1`. It accepts exit225The report job exports findings only after exit codes `0` and `1`. Any other

225code `2` only when the scan manifest proves the scan completed, coverage is226exit code skips SARIF export and blocks the pipeline. An export failure also

226explicitly `partial`, and a non-empty SARIF report exists. Other runtime,227blocks the pipeline.

227configuration, or export failures remain blocking.

228 228 

229The final gate preserves these scanner exit codes:229The report job propagates execution errors and interruptions. When it succeeds,

230the final gate restores the scanner's policy result:

230 231 

231| Exit | Meaning |232| Exit | Meaning |

232| ---- | --------------------------------------------------------------------------- |233| ------------- | --------------------------------------------------------------------------- |

233| `0` | The scan completed with complete coverage and passed its policy. |234| `0` | The scan completed and passed its policy. |

234| `1` | The scan completed and found an issue at or above the configured threshold. |235| `1` | The scan completed and found an issue at or above the configured threshold. |

235| `2` | The scan had incomplete coverage or an input or runtime error. |236| `2` | The scan had an input, runtime, target-integrity, or required-output error. |

237| `130` / `143` | The scan was interrupted or terminated. |

236 238 

237The example temporarily allows exit `2` while you calibrate partial coverage.239The example passes `--fail-on-severity high`, so high and critical findings fail

238Remove that allowance when incomplete coverage must block the pipeline.240the gate. Without a severity threshold, completed scans exit `0` by default.

241In `results/scan-manifest.json`, read `scan.scope` for the configured scope and

242`scan.review.excludedPaths` for paths excluded from finding comparisons. Read

243`results/report.md` for follow-up work.

239 244 

240Remediation and publishing run before the final policy gate. An eligible245Remediation and publishing run before the final policy gate. An eligible

241finding can produce a verified draft merge request even when the gate later246finding can produce a verified draft merge request even when the gate later


250 255 

251The workflow:256The workflow:

252 257 

2531. Requires complete scan coverage and a `high`- or `critical`-severity2581. Requires a completed scan manifest for the current revision and a `high`- or

254 finding.259 `critical`-severity finding.

2552. Confirms that the configured regression test fails before patching.2602. Confirms that the configured regression test fails before patching.

2563. Generates a patch and rejects changes to CI, credential, binary, or2613. Generates a patch and rejects changes to CI, credential, binary, or

257 other protected files.262 other protected files.


277 <summary>Advanced: repository command isolation</summary>282 <summary>Advanced: repository command isolation</summary>

278 283 

279The `validate`, `patch`, and `verify-fix` commands receive a process-scoped284The `validate`, `patch`, and `verify-fix` commands receive a process-scoped

280`CODEX_API_KEY`. Repository-controlled setup and test commands run as a285`OPENAI_API_KEY` and use `--auth api-key`. Repository-controlled setup and test

281separate unprivileged user in a writable copy of the tracked source files.286commands run as a separate unprivileged user in a writable copy of the tracked source files.

282The copy excludes Git metadata, submodule contents, and287The copy excludes Git metadata, submodule contents, and

283downloaded artifacts. Setup and test commands that require `.git` or288downloaded artifacts. Setup and test commands that require `.git` or

284submodules must run in a separately designed credential-free job.289submodules must run in a separately designed credential-free job.


324| Variable | When needed | Default or purpose |329| Variable | When needed | Default or purpose |

325| ----------------------------------------- | --------------------------------- | ----------------------------------------------------------- |330| ----------------------------------------- | --------------------------------- | ----------------------------------------------------------- |

326| `CODEX_SECURITY_API_KEY` | Every scan | Protected, masked, hidden; scope to `codex-security/openai` |331| `CODEX_SECURITY_API_KEY` | Every scan | Protected, masked, hidden; scope to `codex-security/openai` |

327| `CODEX_SECURITY_VERSION` | CLI upgrade | Pinned to `0.1.20`; retest before changing |332| `CODEX_SECURITY_VERSION` | CLI upgrade | Pinned to `0.8.1`; retest before changing |

328| `CODEX_SECURITY_FULL_SCAN_DEFAULT_BRANCH` | Default-branch full scans | Explicit opt-in; off by default |333| `CODEX_SECURITY_FULL_SCAN_DEFAULT_BRANCH` | Default-branch full scans | Explicit opt-in; off by default |

329| `CODEX_SECURITY_SCHEDULED_DEEP_SCAN` | Scheduled deep scans | Explicit opt-in; off by default |334| `CODEX_SECURITY_SCHEDULED_DEEP_SCAN` | Scheduled deep scans | Explicit opt-in; off by default |

330| `CODEX_SECURITY_DEEP_MAX_TIME_HOURS` | Scheduled deep scans | Required time budget greater than `0` and less than `8` |335| `CODEX_SECURITY_DEEP_MAX_TIME_MINUTES` | Scheduled deep scans | Required minute budget greater than `0` and less than `480` |

331| `CODEX_SECURITY_DEEP_MAX_COST` | Scheduled deep scans | Required estimated USD cost guardrail greater than `0` |336| `CODEX_SECURITY_DEEP_MAX_COST` | Scheduled deep scans | Required estimated USD cost guardrail greater than `0` |

332| `CODEX_SECURITY_ENABLE_REMEDIATION` | Patch generation | Protected opt-in; off by default |337| `CODEX_SECURITY_ENABLE_REMEDIATION` | Patch generation | Protected opt-in; off by default |

333| `CODEX_SECURITY_VERIFICATION_COMMAND` | Patch generation | Protected regression test |338| `CODEX_SECURITY_VERIFICATION_COMMAND` | Patch generation | Protected regression test |


351Use diff scans for merge request feedback, standard repository scans356Use diff scans for merge request feedback, standard repository scans

352for the default branch, and scheduled deep scans for broader coverage. Both357for the default branch, and scheduled deep scans for broader coverage. Both

353full-repository profiles are off by default. A scheduled deep scan also requires358full-repository profiles are off by default. A scheduled deep scan also requires

354`CODEX_SECURITY_DEEP_MAX_TIME_HOURS` and `CODEX_SECURITY_DEEP_MAX_COST`; keep the359`CODEX_SECURITY_DEEP_MAX_TIME_MINUTES` and `CODEX_SECURITY_DEEP_MAX_COST`; keep the

355CLI time budget below the job's eight-hour timeout. Measure representative runs360CLI time budget below the job's eight-hour timeout. When adopting the new YAML,

361convert existing hour-based settings to minutes. Measure representative runs

356before setting a budget. Treat `--max-cost` as an estimated cost guardrail, not362before setting a budget. Treat `--max-cost` as an estimated cost guardrail, not

357a hard billing cap.363a hard billing cap.

358 364 

359Start with report-only scans. Add `--fail-on-severity` after your team has365This example gates on high and critical findings. For report-only scans, remove

360reviewed representative findings, coverage, cost, and runtime. See the366`--fail-on-severity high`; choose a threshold after reviewing representative

367findings, coverage, cost, and runtime. See the

361[CI/CD overview](https://learn.chatgpt.com/docs/security/cli/ci#choose-a-severity-policy) for severity368[CI/CD overview](https://learn.chatgpt.com/docs/security/cli/ci#choose-a-severity-policy) for severity

362policies and the [CLI reference](https://learn.chatgpt.com/docs/security/cli/reference#exit-codes-and-signals)369policies and the [CLI reference](https://learn.chatgpt.com/docs/security/cli/reference#exit-codes-and-signals)

363for exit-code details.370for exit-code details.


365When a job fails:372When a job fails:

366 373 

367- Missing scan artifacts point to a configuration or runner problem.374- Missing scan artifacts point to a configuration or runner problem.

368- Existing artifacts with partial coverage require reviewing `coverage.json`.375- For unexpected exclusions, check the scope and review details in

376 `results/scan-manifest.json`.

369- Missing GitLab findings require checking whether the SARIF report job377- Missing GitLab findings require checking whether the SARIF report job

370 succeeded and whether GitLab accepted the report.378 succeeded and whether GitLab accepted the report.

371- Skipped remediation requires checking the protected branch, complete379- Skipped remediation requires checking the protected branch, scan manifest,

372 coverage, finding severity, verification command, and opt-in variables.380 finding severity, verification command, and opt-in variables.

373- Publishing errors require checking the project token's role, scopes, and381- Publishing errors require checking the project token's role, scopes, and

374 environment restriction.382 environment restriction.

375 383 

sites.md +53 −0

Details

192 192 

193See [Creating and managing ChatGPT sites](https://help.openai.com/en/articles/20001339) for current limits and policy links.193See [Creating and managing ChatGPT sites](https://help.openai.com/en/articles/20001339) for current limits and policy links.

194 194 

195## Pricing

196 

197**Your plan includes a monthly allowance that covers your initial hosting usage.** You can create as many Sites as you want. Hosting keeps your Site available to visitors. Its usage depends on traffic and storage.

198 

199### What will my plan cover?

200 

201Your plan includes a monthly allowance for hosting, traffic, and storage across your Sites. The amount depends on your plan. Enterprise usage draws from your organization’s existing credit pool, according to your agreement. Upgrading from Plus to Pro gives you an expanded hosting allowance. Building and editing a Site count toward your plan’s [Codex usage](https://learn.chatgpt.com/docs/pricing).

202 

203Credits measure hosting usage. Your plan’s allowance covers that usage before overages apply. Traffic and storage contribute separately:

204 

205- **Traffic** is measured by the requests your Site handles, such as loading a page, image, or other resource. A page visit can generate multiple requests, typically 30–50, though the number varies by Site.

206- **Database storage** holds saved records, such as form responses. A Site with a database has a monthly base fee, even when the database is empty, plus usage for the data it stores.

207- **File storage** holds uploaded files, such as images or PDFs. Usage depends on how much you store and for how long.

208 

209Hosting is free through December 31, 2026. Starting **January 1, 2027**, we’ll

210 turn on metering and you’ll pay overages only for usage above your plan’s

211 included monthly hosting allowance. Enterprise billing follows your

212 organization’s agreement.

213 

214Starting **December 1, 2026**, you’ll be able to view traffic and storage usage for each Site. Workspace admins will be able to compare usage across their workspace.

215 

216### Hosting usage rates

217 

218The following rates are proposed to take effect on January 1, 2027. All credit amounts are approximate.

219 

220| What you use | Billing unit | Approx. credits |

221| ------------------------------------------------------------------ | ------------------------ | --------------- |

222| Site without storage | 1 Site per month | 0 |

223| Site with storage, including an empty database | 1 Site per month | 25 |

224| Traffic | 100,000 requests | 16 |

225| Database storage (saved records, such as form responses) | 1 GiB stored for a month | 150 |

226| File storage (uploaded files, such as images or PDFs) | 1 GiB stored for a month | 3.75 |

227| Custom domain (domain registration costs extra) | 1 domain per month | 25 |

228| Private connection (Enterprise only; a tunnel to a private system) | 1 tunnel per month | 125 |

229 

230For example, a Site with an empty database uses approximately 25 credits per month before traffic. With 1 GiB of saved records for a full month, its base fee and database storage use approximately 175 credits, excluding traffic and files. One GiB is about 1.07 GB.

231 

232### Estimate your monthly cost

233 

234Choose whether your Site has a database, then adjust monthly requests, saved records, and uploaded files to estimate your hosting usage.

235 

236<SitesCostEstimator

237 client:load

238 rates={{

239 traffic: { credits: 16, requests: 100000 },

240 monthlyStorageBase: 25,

241 databasePerGiB: 150,

242 filesPerGiB: 3.75,

243 }}

244/>

245 

246Estimates assume a full month of storage. Select **This Site has a database** to include its base fee even when saved records are zero. Custom domains and private connections cost extra, as listed in [Hosting usage rates](#hosting-usage-rates).

247 

195## Next up248## Next up

196 249 

197 250