SpyBara
Go Premium

Documentation 2026-10-06 23:02 UTC to 2026-10-07 23:57 UTC

32 files changed +762 −149. View all changes and history on the product overview
2026
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

194 icon: "storage",194 icon: "storage",

195 },195 },

196 {196 {

197 title: "Connect to a gateway",197 title: "Sign in with ChatGPT through a gateway",

198 description:

199 "Keep your gateway for model requests while using your ChatGPT workspace identity.",

200 href: "/codex/enterprise/sign-in-with-chatgpt-through-a-gateway",

201 icon: "connect",

202 },

203 {

204 title: "Use API/provider credentials",

198 description:205 description:

199 "Configure one Codex client to use your organization's model gateway and verify the connection.",206 "Configure one Codex client to use your organization's model gateway and verify the connection.",

200 href: "/codex/enterprise/connect-to-a-gateway",207 href: "/codex/enterprise/connect-to-a-gateway",

201 icon: "connect",208 icon: "connect",

202 },209 },

203 {210 {

204 title: "Deploy Codex through a gateway",211 title: "Roll out a gateway",

205 description:212 description:

206 "Configure model routes, issue credentials, and deploy Codex through your organization’s gateway.",213 "Configure model routes, issue credentials, and deploy Codex through your organization’s gateway.",

207 href: "/codex/enterprise/roll-out-a-gateway",214 href: "/codex/enterprise/roll-out-a-gateway",

Details

7Bedrock using AWS-managed authentication and access controls.7Bedrock using AWS-managed authentication and access controls.

8 8 

9This page covers direct access to Bedrock. If your organization already9This page covers direct access to Bedrock. If your organization already

10 provides a model gateway, follow [Connect to a10 provides a model gateway, follow [Use API/provider

11 gateway](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway). To configure a gateway11 credentials](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway). To configure a gateway

12 backed by Bedrock, see [Bedrock through12 backed by Bedrock, see [Bedrock through

13 LiteLLM](https://learn.chatgpt.com/docs/enterprise/bedrock-through-litellm).13 LiteLLM](https://learn.chatgpt.com/docs/enterprise/bedrock-through-litellm).

14 14 

Details

158</section>160</section>

159```161```

160 162 

163<div

164 id="try-annotation-metadata"

165 className="annotation-request-demo not-prose"

166 data-annotation-example="metadata"

167 hidden

168>

169 **Try it**

170

171 

172 <section oai-annotation-container>

173 <div

174 className="annotation-contact-preview"

175 data-example-target

176 oai-annotatable="Alex Morgan"

177 oai-annotation-metadata='{"email":"alex@example.com"}'

178 >

179 **Alex Morgan**

180

181Project lead

182 

183

184 

185 </section>

186

187 

188 Select the contact in Annotation mode to see the email address included as

189 context.

190

191 

192

193 

194 

195 

196 

161Selecting either line selects the entire row. The metadata appears with the197Selecting either line selects the entire row. The metadata appears with the

162annotation and accompanies it in the conversation. Include only context you198annotation and accompanies it in the conversation. Include only context you

163intend to share with both the user and the model. Sending an email would still199intend to share with both the user and the model. Sending an email would still


187Site-initiated requests may require user permission; users can re-enable blocked223Site-initiated requests may require user permission; users can re-enable blocked

188annotation features under **Site tools > Annotation features**.224annotation features under **Site tools > Annotation features**.

189 225 

190Add this button beside the chart card from the selection example, then run the226This example opens an annotation on a paragraph without selection attributes.

191script after both elements exist:227Run the script after both elements exist:

192 228 

193```html229```html

194<button id="discuss-chart" type="button" hidden>Explain more</button>230<p id="delivery-summary">

231 Standard delivery takes three to five business days.

232</p>

233<button id="discuss-delivery" type="button" hidden>Explain more</button>

195```234```

196 235 

197```javascript236```javascript

198const card = document.getElementById("chart-card");237const summary = document.getElementById("delivery-summary");

199const button = document.getElementById("discuss-chart");238const button = document.getElementById("discuss-delivery");

200 239 

201button.hidden = typeof document.oai?.annotation?.request !== "function";240button.hidden = typeof document.oai?.annotation?.request !== "function";

202 241 


204 const annotation = document.oai?.annotation;243 const annotation = document.oai?.annotation;

205 if (typeof annotation?.request !== "function") return;244 if (typeof annotation?.request !== "function") return;

206 245 

207 annotation.request(card, {246 annotation.request(summary, {

208 initialComment: "Explain the latest trend in this graph.",247 initialComment: "Explain this delivery estimate.",

209 });248 });

210});249});

211```250```

212 251 

213Selecting **Explain more** asks the browser to open an annotation with the card252Selecting **Explain more** asks the browser to open an annotation with the

214selected and an editable comment. The person can edit, save, and send it with253paragraph selected and an editable comment. The person can edit, save, and send it with

215their message. Opening an annotation doesn't send a message to ChatGPT; only254their message. Opening an annotation doesn't send a message to ChatGPT; only

216the user can submit it.255the user can submit it.

217 256 

257<div

258 id="try-annotation-request"

259 className="annotation-request-demo not-prose"

260 data-annotation-request-demo

261 hidden

262>

263 **Try it**

264

265 

266

267 

268 Standard delivery takes three to five business days.

269

270 

271 <button

272 type="button"

273 className="annotation-prompt-button"

274 data-annotation-request-button

275 data-prompt="Explain this delivery estimate."

276 >

277 Explain more

278 </button>

279

280 <p

281 className="annotation-try-it-hint"

282 data-annotation-request-feedback

283 role="status"

284 aria-live="polite"

285 >

286 

287

288 

289 

290 

291 

218Keep the call within the active user interaction. Awaiting a network request292Keep the call within the active user interaction. Awaiting a network request

219first can lose that interaction.293first can lose that interaction.

220 294 


239### Request an annotation for a text range313### Request an annotation for a text range

240 314 

241Pass a DOM `Range` to request feedback on a passage without changing the browser's315Pass a DOM `Range` to request feedback on a passage without changing the browser's

242text selection. This example selects the paragraph's contents; it doesn't need316text selection. This example selects only the highlighted phrase; it doesn't need

243an `oai-annotation-container-text` attribute:317an `oai-annotation-container-text` attribute:

244 318 

245```html319```html

246<p id="draft-passage">Leave more space between separate groups.</p>320<p>

247<button id="discuss-passage" type="button" hidden>Discuss this passage</button>321 Your trial includes full access for <mark id="draft-passage">14 days</mark>.

322</p>

323<button id="discuss-passage" type="button" hidden>

324 Ask about highlighted text

325</button>

248```326```

249 327 

250Run this script after both elements exist:328Run this script after both elements exist:


262 const range = document.createRange();340 const range = document.createRange();

263 range.selectNodeContents(passage);341 range.selectNodeContents(passage);

264 annotation.request(range, {342 annotation.request(range, {

265 initialComment: "Suggest a clearer version of this guidance.",343 initialComment: "Explain when this trial ends.",

266 });344 });

267});345});

268```346```

269 347 

348<div

349 id="try-annotation-text-range"

350 className="annotation-request-demo not-prose"

351 data-annotation-example="text-range"

352 hidden

353>

354 **Try it**

355

356 

357

358 

359 Your trial includes full access for

360 <mark data-example-target>14 days</mark>.

361

362 

363

364 

365 Open an annotation on just the highlighted words.

366

367 

368 <button

369 type="button"

370 className="annotation-prompt-button"

371 data-example-request

372 data-prompt="Explain when this trial ends."

373 >

374 Ask about highlighted text

375 </button>

376

377 <p

378 className="annotation-try-it-hint"

379 data-example-feedback

380 role="status"

381 aria-live="polite"

382 >

383 

384

385 

386 

387 

388 

270The range must contain nonempty visible text in the current document, with at389The range must contain nonempty visible text in the current document, with at

271least part of the selection in the visible page area. It can contain at most390least part of the selection in the visible page area. It can contain at most

27220,000 UTF-16 code units. Collapsed ranges, whitespace-only text, hidden selected39120,000 UTF-16 code units. Collapsed ranges, whitespace-only text, hidden selected


306 425 

307### Preview a shared spacing token426### Preview a shared spacing token

308 427 

309Both cards in this example use the same CSS property:428Both cards in this example use the same CSS property. Register the controls on

429the cards directly; selection attributes aren't required:

310 430 

311```html431```html

312<style>432<style>


320 }440 }

321</style>441</style>

322 442 

323<section id="component-preview" oai-annotation-container>443<section id="component-preview">

324 <article class="preview-card" oai-annotatable="Profile card">444 <article class="preview-card">Profile card</article>

325 Profile card445 <article class="preview-card">Summary card</article>

326 </article>

327 <article class="preview-card" oai-annotatable="Summary card">

328 Summary card

329 </article>

330</section>446</section>

331```447```

332 448 


372}488}

373```489```

374 490 

491<div

492 id="try-annotation-spacing"

493 className="annotation-request-demo not-prose"

494 data-annotation-example="spacing"

495 hidden

496>

497 **Try it**

498

499 

500 **Card padding (pixels)**

501 <div

502 className="annotation-spacing-preview"

503 data-example-preview

504 oai-annotation-container

505 >

506 <article data-example-target oai-annotatable="">

507 Profile card

508 </article>

509 <article data-example-target oai-annotatable="">

510 Summary card

511 </article>

512

513 

514

515 

516 Select either card in Annotation mode, then change Card padding (pixels).

517 Select Adjust if needed. Both cards update together.

518

519 

520

521 

522 

523 

524 

375Annotate either card and change **Card padding (pixels)** from 16 to 24. On525Annotate either card and change **Card padding (pixels)** from 16 to 24. On

376hosted sites in ChatGPT, the controls appear automatically; in Codex or on526hosted sites in ChatGPT, the controls appear automatically; in Codex or on

377localhost, select **Adjust** if needed. Both cards update. The annotation records the label, reference,527localhost, select **Adjust** if needed. Both cards update. The annotation records the label, reference,


380 530 

381### Collect a choice without a preview531### Collect a choice without a preview

382 532 

383Use the contact row from the metadata example to offer an email tone:533This example offers an email tone for a plain paragraph. It doesn't need

534selection attributes or metadata. Run the script after the paragraph exists:

535 

536```html

537<p id="email-draft">Draft a follow-up email about the project timeline.</p>

538```

384 539 

385```javascript540```javascript

386const contact = document.getElementById("contact-row");541const draft = document.getElementById("email-draft");

387const registration = document.oai?.annotation?.registerControls?.({542const registration = document.oai?.annotation?.registerControls?.({

388 targets: contact,543 targets: draft,

389 controlsHeading: "Email options",544 controlsHeading: "Email options",

390 controlsMode: "replace",545 controlsMode: "replace",

391 controls: [546 controls: [


407This control doesn't need an event handler because it doesn't preview a page562This control doesn't need an event handler because it doesn't preview a page

408change. Omitting `currentValue` tells the browser to include the selected tone563change. Omitting `currentValue` tells the browser to include the selected tone

409even if the user keeps the initial option. Call `registration?.dispose()` when564even if the user keeps the initial option. Call `registration?.dispose()` when

410removing the row.565removing the paragraph.

411 566 

412For select controls, preview callbacks receive `option.value`, such as567For select controls, preview callbacks receive `option.value`, such as

413`"professional"`. Annotation history and ChatGPT receive the visible568`"professional"`. Annotation history and ChatGPT receive the visible


424heading isn't included in the context sent to ChatGPT.579heading isn't included in the context sent to ChatGPT.

425 580 

426A registration supports up to 12 controls. Each requires a `type`, visible581A registration supports up to 12 controls. Each requires a `type`, visible

427`label`, and `callback` identifier:582`label`, and `callback` identifier.

583 

584**Name controls by what they change.** Use a stable property or design-role

585label, such as "Page background," "Primary brand color," or "Accent color,"

586rather than the current value, such as "Warm ivory" or "Deep forest." The label

587should remain meaningful when the value changes. Use `currentValue` for the

588existing value and `reference` for the underlying token or property.

589 

590For example, this control definition keeps the label separate from the color:

591 

592```javascript

593const pageBackgroundControl = {

594 type: "color",

595 label: "Page background",

596 callback: "setPageBackground",

597 reference: "--color-background",

598 currentValue: "#f6f3ec",

599};

600```

601 

602<div

603 id="try-annotation-color"

604 className="annotation-request-demo not-prose"

605 data-annotation-example="color"

606 hidden

607>

608 **Try it**

609

610 

611 **Page background**

612 <div

613 className="annotation-color-preview"

614 oai-annotatable=""

615 data-example-target

616 data-example-preview

617 >

618

619Page preview

620 

621

622 

623

624 

625 Select the preview in Annotation mode, then change Page background. Select

626 Adjust if needed. The label stays the same as the color changes.

627

628 

629

630 

631 

632 

633 

634The supported control types are:

428 635 

429| Type | Value | Additional fields |636| Type | Value | Additional fields |

430| -------- | ------------------------------ | ------------------------------------------------- |637| -------- | ------------------------------ | ------------------------------------------------- |


525The host must be a connected HTML element outside shadow DOM in a secure,732The host must be a connected HTML element outside shadow DOM in a secure,

526top-level document. Surface registration isn't supported inside an iframe.733top-level document. Surface registration isn't supported inside an iframe.

527 734 

528This example draws a revenue bar and makes it selectable. Put the script after735### Start with picking and identity

529the canvas:736 

737This example draws a revenue bar and makes it selectable using only `hitTest`

738and a stable object ID. Put the script after the canvas:

530 739 

531```html740```html

532<canvas id="revenue-canvas" width="480" height="240">741<canvas id="revenue-canvas" width="480" height="240">


539const context = canvas.getContext("2d");748const context = canvas.getContext("2d");

540const bar = { x: 40, y: 60, width: 320, height: 100 };749const bar = { x: 40, y: 60, width: 320, height: 100 };

541 750 

542function drawRevenue(highlighted = false) {751context.fillStyle = "#2563eb";

543 context.clearRect(0, 0, canvas.width, canvas.height);752context.fillRect(bar.x, bar.y, bar.width, bar.height);

544 context.fillStyle = "#2563eb";

545 context.fillRect(bar.x, bar.y, bar.width, bar.height);

546 if (highlighted) {

547 context.strokeStyle = "#111827";

548 context.lineWidth = 3;

549 context.strokeRect(bar.x, bar.y, bar.width, bar.height);

550 }

551}

552 

553drawRevenue();

554 753 

555const surface = document.oai?.annotation?.registerSurface?.({754const surface = document.oai?.annotation?.registerSurface?.({

556 element: canvas,755 element: canvas,


574 return null;773 return null;

575 }774 }

576 775 

577 return {776 return { id: "revenue-this-quarter" };

578 id: "revenue-this-quarter",

579 name: "Revenue this quarter",

580 role: "chart-bar",

581 metadata: { Metric: "Revenue", Value: 120000 },

582 rect,

583 };

584 },

585 renderSelection({ hoveredId, selectedId }) {

586 drawRevenue(

587 hoveredId === "revenue-this-quarter" ||

588 selectedId === "revenue-this-quarter"

589 );

590 },777 },

591});778});

592```779```

593 780 

594Hovering over the bar in Annotation mode highlights it. Selecting it opens an781<div

595annotation with the object's name, metadata, and a screenshot of the selection.782 id="try-annotation-canvas"

783 className="annotation-request-demo not-prose"

784 data-annotation-example="canvas"

785 hidden

786>

787 **Try it**

788

789 

790

791 

792 <canvas

793 className="annotation-canvas-preview"

794 data-example-canvas

795 oai-annotatable=""

796 width="640"

797 height="360"

798 >

799

800Circle

801 

802

803Triangle

804 

805

806Square

596 807 

597Keep IDs stable within a surface. The optional `name` is visible to the user;808

598`role` gives a short semantic description. The optional `rect` uses CSS pixels809Star

599relative to the visible page area, matching `clientX` and `clientY`. Convert from scene coordinates,810 

600including scale, pan, and zoom.811 </canvas>

812

813 

814

815 

816 Enter Annotation mode, then select a shape to see its name, ID, and fill

817 color in the annotation. The space between shapes is not selectable.

818

819 

820

821 

822 

823 

824 

825In the code sample, selecting the bar in Annotation mode identifies it as

826`revenue-this-quarter`.

827Keep IDs stable within a surface. The example returns `null` for empty space.

601 828 

602`hitTest` can return a promise and receives an `AbortSignal` as `signal` to829`hitTest` can return a promise and receives an `AbortSignal` as `signal` to

603cancel superseded work. The browser allows 250 milliseconds before falling830cancel superseded work. The browser allows 250 milliseconds before falling


610settle the pending promise when its work is aborted; dropping a canceled worker837settle the pending promise when its work is aborted; dropping a canceled worker

611response can block subsequent canvas picking.838response can block subsequent canvas picking.

612 839 

613Use the optional `renderSelection` callback for application-specific feedback.840Call `surface?.invalidate()` after moving objects or changing zoom, and

614Clear feedback when both IDs are `null`. Call `surface?.invalidate()` after841`surface?.dispose()` when removing the integration. Both return synchronously

615moving objects or changing zoom, and `surface?.dispose()` when removing the842without a value.

616integration. Both return synchronously without a value.843 

844### Add optional object context

845 

846The `id` is enough to identify the object. To include a display name, semantic

847role, hidden context, or selection bounds, replace the successful return in

848the preceding `hitTest` callback with:

849 

850```javascript

851return {

852 id: "revenue-this-quarter",

853 name: "Revenue this quarter",

854 role: "chart-bar",

855 metadata: { metricId: "quarterly-revenue" },

856 rect,

857};

858```

859 

860The optional `name` is visible to the user; `role` gives a short semantic

861description. Include metadata only when it adds context that isn't already

862visible. The optional `rect` uses CSS pixels relative to the visible page area,

863matching `clientX` and `clientY`. The picking example already computes this

864rectangle. Convert from scene coordinates, including scale, pan, and zoom.

865 

866### Add optional selection feedback

867 

868Use the optional `renderSelection` callback to draw your own hover and

869selection feedback. It doesn't require the optional context fields.

870 

871For the canvas above, define this function and add

872`renderSelection: renderRevenueSelection` to the `registerSurface()` options:

873 

874```javascript

875function renderRevenueSelection({ hoveredId, selectedId }) {

876 context.clearRect(0, 0, canvas.width, canvas.height);

877 context.fillStyle = "#2563eb";

878 context.fillRect(bar.x, bar.y, bar.width, bar.height);

879 

880 if (

881 hoveredId === "revenue-this-quarter" ||

882 selectedId === "revenue-this-quarter"

883 ) {

884 context.strokeStyle = "#111827";

885 context.lineWidth = 3;

886 context.strokeRect(bar.x, bar.y, bar.width, bar.height);

887 }

888}

889```

890 

891This callback redraws the bar with an outline while it's hovered or selected.

892When both IDs are `null`, it redraws the bar without an outline.

617 893 

618### Add controls to canvas objects894### Add controls to canvas objects

619 895 

app/browser.md +4 −2

Details

107bug, and fix only the overflowing controls.107bug, and fix only the overflowing controls.

108```108```

109 109 

110ChatGPT asks before it uses a website unless you have already allowed that110In **Settings > Browser > Agent permissions**, choose default permissions for

111site. Manage allowed and blocked sites in **Settings > Browser**. ChatGPT also111browsing, downloads, and uploads, and add exceptions for specific websites.

112Removing a site's custom permissions restores its defaults. Your organization

113can restrict these controls. ChatGPT also

112asks for confirmation before sensitive actions such as submitting information,114asks for confirmation before sensitive actions such as submitting information,

113making a purchase, changing permissions, or deleting data. ChatGPT can't115making a purchase, changing permissions, or deleting data. ChatGPT can't

114automate file uploads in the built-in browser.116automate file uploads in the built-in browser.

Details

102 102 

103If you started a chat with the wrong target (**Local**, **Worktree**, or **Cloud**) by accident, you can cancel the current run and recover your previous prompt by pressing the up arrow key in the composer.103If you started a chat with the wrong target (**Local**, **Worktree**, or **Cloud**) by accident, you can cancel the current run and recover your previous prompt by pressing the up arrow key in the composer.

104 104 

105### Approve for me is missing or disabled

106 

107To use automatic review, select **Approve for me** from the permissions control

108below the composer. If the mode is missing or disabled:

109 

1101. Update the desktop app and check the permissions menu in the chat where

111 you want to use automatic review. The available choices can differ between

112 local and cloud environments.

1132. For local Codex execution, check your effective configuration for an

114 explicit `features.guardian_approval = false` setting and review the

115 configured permission profile, approval policy, and approval reviewer.

116 See [Config basics](https://learn.chatgpt.com/docs/config-file/config-basic) for configuration

117 precedence. Local configuration doesn't control a managed cloud runtime.

1183. If a mode is disabled or missing in a managed workspace, ask your

119 administrator to check the allowed permission profiles, sandbox modes,

120 approval policies, and approval reviewers. Organization or device policy

121 can restrict these choices; local settings can't override it.

122 

123If the mode is still unexpectedly unavailable, include your app version,

124operating system, execution environment, and whether the option is missing or

125disabled in your [feedback](#feedback-and-logs).

126 

105### Feature is working in the Codex CLI but not in the ChatGPT desktop app127### Feature is working in the Codex CLI but not in the ChatGPT desktop app

106 128 

107The ChatGPT desktop app and Codex CLI can include different Codex versions, so129The ChatGPT desktop app and Codex CLI can include different Codex versions, so

108features may reach one surface before the other. Experimental features might130features may reach one surface before the other.

109also land in Codex CLI first.

110 131 

111To get the version of the Codex CLI on your system run:132To get the version of the Codex CLI on your system run:

112 133 

Details

20open as interactive previews. Switch between the rendered preview and source20open as interactive previews. Switch between the rendered preview and source

21view to inspect the output or its underlying HTML.21view to inspect the output or its underlying HTML.

22 22 

23Open a standalone `.tex` file to edit its LaTeX source alongside a PDF preview.

24When the built-in compiler is available, the app compiles the document and

25refreshes the preview after edits. If compilation fails, the last successful

26PDF remains visible and your source edits are preserved.

27 

23Use annotations to point at a specific part of a supported preview and request28Use annotations to point at a specific part of a supported preview and request

24a focused revision.29a focused revision.

25 30 

auth.md +4 −3

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 

5For a local client using an organization-provided model gateway, follow5For a local client using an organization-provided model gateway, choose

6[Connect to a gateway](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway) for the gateway6[Sign in with ChatGPT through a gateway](https://learn.chatgpt.com/docs/enterprise/sign-in-with-chatgpt-through-a-gateway)

7credential and provider configuration. Direct Bedrock access uses the7or [API/provider credentials](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway).

8Direct Bedrock access uses the

8[Amazon Bedrock authentication options](https://learn.chatgpt.com/docs/amazon-bedrock#authentication-options).9[Amazon Bedrock authentication options](https://learn.chatgpt.com/docs/amazon-bedrock#authentication-options).

9 10 

10## OpenAI authentication11## OpenAI authentication

browser.md +4 −2

Details

107bug, and fix only the overflowing controls.107bug, and fix only the overflowing controls.

108```108```

109 109 

110ChatGPT asks before it uses a website unless you have already allowed that110In **Settings > Browser > Agent permissions**, choose default permissions for

111site. Manage allowed and blocked sites in **Settings > Browser**. ChatGPT also111browsing, downloads, and uploads, and add exceptions for specific websites.

112Removing a site's custom permissions restores its defaults. Your organization

113can restrict these controls. ChatGPT also

112asks for confirmation before sensitive actions such as submitting information,114asks for confirmation before sensitive actions such as submitting information,

113making a purchase, changing permissions, or deleting data. ChatGPT can't115making a purchase, changing permissions, or deleting data. ChatGPT can't

114automate file uploads in the built-in browser.116automate file uploads in the built-in browser.

Details

186**Approve for me** for eligible approval requests, **Full access**, and named or186**Approve for me** for eligible approval requests, **Full access**, and named or

187custom permissions profiles.187custom permissions profiles.

188 188 

189<PermissionModeSelectorDemo client:load />189<PermissionModeSelectorDemo

190 client:load

191 instructions="Select a mode to explore this documentation example. This doesn't change your ChatGPT or Codex permissions."

192/>

190 193 

191</ContentModeSwitch>194</ContentModeSwitch>

192 195 

Details

25[reviewer-policy configuration](#configuration). The warning doesn't restore25[reviewer-policy configuration](#configuration). The warning doesn't restore

26the sandbox boundary or override organization policy.26the sandbox boundary or override organization policy.

27 27 

28## Select automatic review

29 

30In the desktop app, choose **Approve for me** from the permissions control

31below the composer. Check that it's selected for the current chat. See

32[Permissions](https://learn.chatgpt.com/docs/permission-modes) for mode selection and troubleshooting.

33 

34For the CLI or a local Codex configuration, set

35`approvals_reviewer = "auto_review"` with an eligible interactive approval

36policy, such as `approval_policy = "on-request"`. Changing the approval policy

37alone doesn't select the reviewer. Managed requirements take precedence over

38local settings; see [Managed configuration](https://learn.chatgpt.com/docs/enterprise/managed-configuration#configure-automatic-review-policy).

39 

28## How auto-review works40## How auto-review works

29 41 

30At a high level, the flow is:42At a high level, the flow is:


52- File edits outside the allowed writable roots.64- File edits outside the allowed writable roots.

53- MCP or app tool calls that require approval based on their tool annotations65- MCP or app tool calls that require approval based on their tool annotations

54 or configured approval mode.66 or configured approval mode.

55- Computer Use access to a new website or domain.

56 67 

57Auto-review does not run for routine actions already allowed inside the68Auto-review does not run for routine actions already allowed inside the

58sandbox. If a command can run under the active `sandbox_mode`, or a tool call69sandbox. If a command can run under the active `sandbox_mode`, or a tool call


112Timeouts are surfaced separately from explicit denials, and the main agent is123Timeouts are surfaced separately from explicit denials, and the main agent is

113informed that a timeout alone is not proof that the action is unsafe.124informed that a timeout alone is not proof that the action is unsafe.

114 125 

115There is also an explicit override path for denied actions. In the current126Codex also provides an explicit override path for denied actions. In the current

116open-source TUI, run `/approve` to open the **Auto-review Denials** picker, then127open-source TUI, run `/approve` to open the **Auto-review Denials** picker, then

117select one recent denied action to approve for one retry. Codex records up to 10128select one recent denied action to approve for one retry. Codex records up to 10

118recent denials per task. That approval is narrow: it applies to the exact129recent denials per task. That approval is narrow: it applies to the exact


255 for scratch directories or neighboring repos you intentionally use.266 for scratch directories or neighboring repos you intentionally use.

256- Add narrowly scoped [prefix rules](https://learn.chatgpt.com/docs/agent-configuration/rules). Prefer precise command267- Add narrowly scoped [prefix rules](https://learn.chatgpt.com/docs/agent-configuration/rules). Prefer precise command

257 prefixes such as `["cargo", "test"]` or `["pnpm", "run", "lint"]` over broad268 prefixes such as `["cargo", "test"]` or `["pnpm", "run", "lint"]` over broad

258 patterns such as `["python"]` or `["curl"]`. Broad rules often erase the very269 patterns such as `["python"]` or `["curl"]`. Broad rules often erase the

259 boundary Auto-review is meant to guard.270 boundary Auto-review is meant to guard.

260 271 

261Auto-review session transcripts are retained under `~/.codex/sessions` by272Auto-review session transcripts are retained under `~/.codex/sessions` by


267Auto-review improves the default operating point for long-running agentic work,278Auto-review improves the default operating point for long-running agentic work,

268but it is not a deterministic security guarantee.279but it is not a deterministic security guarantee.

269 280 

270- It only evaluates actions that ask to cross a boundary.281- It only evaluates eligible approval requests, including requests triggered by

282 explicit command rules or tool approval settings.

271- It can still make mistakes, especially in adversarial or unusual contexts.283- It can still make mistakes, especially in adversarial or unusual contexts.

272- It should complement, not replace, good sandbox design, monitoring, and284- It should complement, not replace, good sandbox design, monitoring, and

273 organization-specific policy.285 organization-specific policy.

Details

180## Custom model providers180## Custom model providers

181 181 

182If your organization provides a model gateway, follow182If your organization provides a model gateway, follow

183[Connect to a gateway](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway) for client setup183[Sign in with ChatGPT through a gateway](https://learn.chatgpt.com/docs/enterprise/sign-in-with-chatgpt-through-a-gateway)

184and verification. For organization-wide deployment, see184or [Use API/provider credentials](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway)

185[Deploy Codex through a gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway).185for client setup and verification. For organization-wide deployment, see

186[Roll out a gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway).

186 187 

187A model provider defines how Codex connects to a model (base URL, wire API, authentication, and optional HTTP headers). Custom providers can't reuse the reserved built-in provider IDs: `openai`, `ollama`, and `lmstudio`.188A model provider defines how Codex connects to a model (base URL, wire API, authentication, and optional HTTP headers). Custom providers can't reuse the reserved built-in provider IDs: `openai`, `ollama`, and `lmstudio`.

188 189 

Details

180## Custom model providers180## Custom model providers

181 181 

182If your organization provides a model gateway, follow182If your organization provides a model gateway, follow

183[Connect to a gateway](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway) for client setup183[Sign in with ChatGPT through a gateway](https://learn.chatgpt.com/docs/enterprise/sign-in-with-chatgpt-through-a-gateway)

184and verification. For organization-wide deployment, see184or [Use API/provider credentials](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway)

185[Deploy Codex through a gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway).185for client setup and verification. For organization-wide deployment, see

186[Roll out a gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway).

186 187 

187A model provider defines how Codex connects to a model (base URL, wire API, authentication, and optional HTTP headers). Custom providers can't reuse the reserved built-in provider IDs: `openai`, `ollama`, and `lmstudio`.188A model provider defines how Codex connects to a model (base URL, wire API, authentication, and optional HTTP headers). Custom providers can't reuse the reserved built-in provider IDs: `openai`, `ollama`, and `lmstudio`.

188 189 

Details

2480 description:2480 description:

2481 "Required access decision for matching executables. `deny` blocks access. `allow` overrides only this policy source's default and still requires any other policy source and the normal approval flow to allow the app.",2481 "Required access decision for matching executables. `deny` blocks access. `allow` overrides only this policy source's default and still requires any other policy source and the normal approval flow to allow the app.",

2482 },2482 },

2483 {

2484 key: "application",

2485 type: "table",

2486 description: "Managed desktop application requirements.",

2487 },

2488 {

2489 key: "application.network",

2490 type: "table",

2491 description:

2492 "Destination restrictions for desktop app network requests, separate from command networking and browser origin rules. This doesn't impose destination restrictions on native modules or spawned processes.",

2493 },

2494 {

2495 key: "application.network.enabled",

2496 type: "boolean",

2497 description:

2498 "Defaults to true when the table is present. When true, external desktop app requests require an explicitly allowed domain. An empty domain map allows no external destinations. An absent application network policy or false value doesn't restrict destinations through this policy.",

2499 },

2500 {

2501 key: "application.network.domains",

2502 type: "table<allow | deny>",

2503 description:

2504 "Exact domain rules for desktop app requests. Enabled policies allow HTTPS and WSS requests only to explicitly allowed domains; subdomains aren't implicitly allowed.",

2505 },

2506 {

2507 key: "application.network.domains.<domain>",

2508 type: "allow | deny",

2509 description:

2510 "Allow or deny an exact domain. Use domain names without URL schemes, ports, or wildcards.",

2511 },

2483 {2512 {

2484 key: "experimental_network",2513 key: "experimental_network",

2485 type: "table",2514 type: "table",

Details

2480 description:2480 description:

2481 "Required access decision for matching executables. `deny` blocks access. `allow` overrides only this policy source's default and still requires any other policy source and the normal approval flow to allow the app.",2481 "Required access decision for matching executables. `deny` blocks access. `allow` overrides only this policy source's default and still requires any other policy source and the normal approval flow to allow the app.",

2482 },2482 },

2483 {

2484 key: "application",

2485 type: "table",

2486 description: "Managed desktop application requirements.",

2487 },

2488 {

2489 key: "application.network",

2490 type: "table",

2491 description:

2492 "Destination restrictions for desktop app network requests, separate from command networking and browser origin rules. This doesn't impose destination restrictions on native modules or spawned processes.",

2493 },

2494 {

2495 key: "application.network.enabled",

2496 type: "boolean",

2497 description:

2498 "Defaults to true when the table is present. When true, external desktop app requests require an explicitly allowed domain. An empty domain map allows no external destinations. An absent application network policy or false value doesn't restrict destinations through this policy.",

2499 },

2500 {

2501 key: "application.network.domains",

2502 type: "table<allow | deny>",

2503 description:

2504 "Exact domain rules for desktop app requests. Enabled policies allow HTTPS and WSS requests only to explicitly allowed domains; subdomains aren't implicitly allowed.",

2505 },

2506 {

2507 key: "application.network.domains.<domain>",

2508 type: "allow | deny",

2509 description:

2510 "Allow or deny an exact domain. Use domain names without URL schemes, ports, or wildcards.",

2511 },

2483 {2512 {

2484 key: "experimental_network",2513 key: "experimental_network",

2485 type: "table",2514 type: "table",

Details

18<ContentModeSwitch group="codex-surface" id="app">18<ContentModeSwitch group="codex-surface" id="app">

19 19 

20In the ChatGPT desktop app, use `/memories` to choose whether a chat can use20In the ChatGPT desktop app, use `/memories` to choose whether a chat can use

21local memories or contribute to future memories. Manage the feature from21local memories or contribute to future memories. In **Settings >

22**Settings > Personalization** when you need to turn it on or off.22Personalization**, use **Enable Codex memories** to turn the feature on or off

23for the selected machine. Use **Allow memories from tool-assisted chats** to

24choose whether chats that use MCP tools or web search can contribute to future

25memories.

26 

27To reset the selected machine's memory store, select **Delete Codex memories**

28and confirm. On the local machine, this also clears Computer History when that

29feature is available.

23 30 

24</ContentModeSwitch>31</ContentModeSwitch>

25 32 


116## Configure local memories123## Configure local memories

117 124 

118Local Codex memories are off by default. In the ChatGPT desktop app, open125Local Codex memories are off by default. In the ChatGPT desktop app, open

119**Settings > Personalization** and turn on **Enable memories**.126**Settings > Personalization** and turn on **Enable Codex memories**.

120 127 

121For config-based setup, add the feature flag to `config.toml`:128For config-based setup, add the feature flag to `config.toml`:

122 129 

Details

17one boundary.17one boundary.

18 18 

19If you manage a model gateway for local Codex clients, use19If you manage a model gateway for local Codex clients, use

20[Deploy Codex through a gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway) for gateway20[Roll out a gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway) for gateway

21qualification, credential distribution, and the client handoff. Configure21qualification, credential distribution, and the client handoff. Configure

22workspace access separately where your deployment uses workspace features.22workspace access separately where your deployment uses workspace features.

23 23 

Details

12 see [Amazon Bedrock](https://learn.chatgpt.com/docs/amazon-bedrock).12 see [Amazon Bedrock](https://learn.chatgpt.com/docs/amazon-bedrock).

13 13 

14Other gateway products follow the same [gateway requirements](https://learn.chatgpt.com/docs/enterprise/gateway-compatibility)14Other gateway products follow the same [gateway requirements](https://learn.chatgpt.com/docs/enterprise/gateway-compatibility)

15and [Codex connection flow](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway).15and [API/provider connection flow](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway).

16 16 

17## Connect to an existing gateway17## Connect to an existing gateway

18 18 


291. Ask your gateway team to confirm that the gateway serves `POST /v1/responses`,291. Ask your gateway team to confirm that the gateway serves `POST /v1/responses`,

30 streams responses, preserves follow-up turns and tool calls, and routes the30 streams responses, preserves follow-up turns and tool calls, and routes the

31 approved alias. See [Gateway compatibility](https://learn.chatgpt.com/docs/enterprise/gateway-compatibility).31 approved alias. See [Gateway compatibility](https://learn.chatgpt.com/docs/enterprise/gateway-compatibility).

322. Follow [Connect to a gateway](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway#configure-the-provider)322. Follow [Use API/provider credentials](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway#configure-the-provider)

33 to configure the provider, model, and credential.33 to configure the provider, model, and credential.

343. Verify the active provider and alias, send the short `gateway-ok` prompt from343. Verify the active provider and alias, send the short `gateway-ok` prompt from

35 the connection guide, and confirm that the LiteLLM record shows the expected35 the connection guide, and confirm that the LiteLLM record shows the expected

36 user and alias.36 user and alias.

374. For organization-wide distribution, continue with [Deploy Codex through a gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway).374. For organization-wide distribution, continue with [Roll out a gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway).

38 38 

39Your gateway credential authenticates you to LiteLLM. The gateway manages its own Bedrock credentials; you don't need to copy those credentials to your workstation.39Your gateway credential authenticates you to LiteLLM. The gateway manages its own Bedrock credentials; you don't need to copy those credentials to your workstation.

40 40 


138 138 

139Preserve the remaining fields, including the model's instructions and context limits. Keep the edited entry in the catalog's top-level `models` array. These changes mirror the released [Bedrock metadata adjustments](https://github.com/openai/codex/blob/rust-v0.158.0/codex-rs/model-provider/src/amazon_bedrock/catalog.rs) and [Runtime search restriction](https://github.com/openai/codex/blob/rust-v0.158.0/codex-rs/model-provider/src/amazon_bedrock/runtime_catalog.rs). Recheck them against the matching source when changing the client version or upstream model.139Preserve the remaining fields, including the model's instructions and context limits. Keep the edited entry in the catalog's top-level `models` array. These changes mirror the released [Bedrock metadata adjustments](https://github.com/openai/codex/blob/rust-v0.158.0/codex-rs/model-provider/src/amazon_bedrock/catalog.rs) and [Runtime search restriction](https://github.com/openai/codex/blob/rust-v0.158.0/codex-rs/model-provider/src/amazon_bedrock/runtime_catalog.rs). Recheck them against the matching source when changing the client version or upstream model.

140 140 

141Distribute the complete JSON file and configure `model_catalog_json` using [Deploy Codex through a gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway#supply-metadata-for-a-custom-alias). Keep `web_search = "disabled"` in the Runtime client configuration. Verify the edited catalog through the gateway before distributing it to more users.141Distribute the complete JSON file and configure `model_catalog_json` using [Roll out a gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway#supply-metadata-for-a-custom-alias). Keep `web_search = "disabled"` in the Runtime client configuration. Verify the edited catalog through the gateway before distributing it to more users.

142 142 

143### Verify Responses support143### Verify Responses support

144 144 


157Complete these checks before expanding access:157Complete these checks before expanding access:

158 158 

1591. Confirm that the HTTPS certificate matches the gateway host name and the service is healthy.1591. Confirm that the HTTPS certificate matches the gateway host name and the service is healthy.

1602. Connect one user through [Connect to a gateway](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway).1602. Connect one user through [Use API/provider credentials](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway).

1613. Run a short prompt, a follow-up turn, and a read-only tool task.1613. Run a short prompt, a follow-up turn, and a read-only tool task.

1624. Confirm that gateway records show the expected identity, alias, and upstream route without exposing credentials or sensitive prompt content.1624. Confirm that gateway records show the expected identity, alias, and upstream route without exposing credentials or sensitive prompt content.

1635. Test credential expiration or revocation and confirm that unauthorized model aliases are rejected.1635. Test credential expiration or revocation and confirm that unauthorized model aliases are rejected.

164 164 

165Keep the deployed image version, route configuration, and test results with your rollout record. Continue with [Deploy Codex through a gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway) for team distribution and ongoing operations.165Keep the deployed image version, route configuration, and test results with your rollout record. Continue with [Roll out a gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway) for team distribution and ongoing operations.

166 166 

167## Troubleshoot the connection167## Troubleshoot the connection

168 168 

Details

1# Connect to a gateway1# Use API/provider credentials through a gateway

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 

5Connect Codex to an LLM gateway using the gateway URL, model alias, and credential5Connect Codex to an LLM gateway using the gateway URL, model alias, and credential

6or token resolver your organization provides.6or token resolver your organization provides.

7 7 

8To roll out a gateway for your organization, see [Deploy Codex through a8To keep the gateway while signing in with a ChatGPT workspace, use

9[Sign in with ChatGPT through a gateway](https://learn.chatgpt.com/docs/enterprise/sign-in-with-chatgpt-through-a-gateway).

10 

11For an organization-wide rollout, see [Roll out a

9 gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway). For the required API behavior,12 gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway). For the required API behavior,

10 see [Gateway compatibility](https://learn.chatgpt.com/docs/enterprise/gateway-compatibility). To13 see [Gateway compatibility](https://learn.chatgpt.com/docs/enterprise/gateway-compatibility). To

11 connect directly to Bedrock without a gateway, see [Amazon14 connect directly to Bedrock without a gateway, see [Amazon


207 plan to use. Have your gateway team complete the210 plan to use. Have your gateway team complete the

208 [streaming, tool, and follow-up checks](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway#test-the-client-and-gateway).211 [streaming, tool, and follow-up checks](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway#test-the-client-and-gateway).

2096. After the pilot passes, follow2126. After the pilot passes, follow

210 [Deploy Codex through a gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway) to distribute the213 [Roll out a gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway) to distribute the

211 configuration to other developers.214 configuration to other developers.

212 215 

213For the administrator migration checklist and configuration mapping, see216For the administrator migration checklist and configuration mapping, see

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 

5Codex gateways must preserve the Responses API behavior described here:5These requirements cover the API/provider credential path through a gateway.

6For gateways that forward ChatGPT workspace requests, see [Sign in with

7ChatGPT through a gateway](https://learn.chatgpt.com/docs/enterprise/sign-in-with-chatgpt-through-a-gateway).

8 

9For this path, the gateway must preserve the Responses API behavior described here:

6endpoints, streaming, continuation, tool calls, authentication, routing, and10endpoints, streaming, continuation, tool calls, authentication, routing, and

7useful errors.11useful errors.

8 12 

9To roll out a gateway, see [Deploy Codex through a13To roll out a gateway, see [Roll out a

10 gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway). To configure a developer14 gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway). To configure a developer

11 machine, see [Connect to a gateway](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway).15 machine, see [Use API/provider

16 credentials](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway).

12 17 

13## Requests and endpoints18## Requests and endpoints

14 19 

Details

531 531 

532Empty environment requirements inherit Global. Manage Networking Off is not the Cloud environment Internet access Off switch. See [Configure networking in the UI](https://learn.chatgpt.com/docs/enterprise/agent-security#configure-networking-in-the-ui).532Empty environment requirements inherit Global. Manage Networking Off is not the Cloud environment Internet access Off switch. See [Configure networking in the UI](https://learn.chatgpt.com/docs/enterprise/agent-security#configure-networking-in-the-ui).

533 533 

534### Control desktop app network destinations

535 

536Use `[application.network]` in `requirements.toml` to restrict the desktop

537app's network destinations. With `enabled = true`, external requests must use

538HTTPS or WSS and match an exact domain with an `"allow"` value in

539`[application.network.domains]`. Subdomains aren't implicitly allowed. An empty

540domain map permits no external destinations. See the [Configuration

541Reference](https://learn.chatgpt.com/docs/config-file/config-reference) for the supported keys.

542 

543This policy is separate from command networking and browser origin rules. It

544doesn't impose destination restrictions on native modules or spawned processes,

545and it doesn't govern Work Cloud execution.

546 

534### Control browser and Computer Use547### Control browser and Computer Use

535 548 

536Use the `[browser_use]` and `[computer_use]` tables in `requirements.toml` to549Use the `[browser_use]` and `[computer_use]` tables in `requirements.toml` to

Details

1# Deploy Codex through a gateway1# Roll out a gateway

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 

5Deploy Codex through your organization’s LLM gateway. Configure model routes, issue developer credentials, and distribute a verified Codex configuration.5Roll out the API/provider credential path through your gateway. Configure model

6routes, issue developer credentials, and distribute a verified Codex

7configuration. For a gateway that forwards ChatGPT workspace requests, see

8[Sign in with ChatGPT through a gateway](https://learn.chatgpt.com/docs/enterprise/sign-in-with-chatgpt-through-a-gateway).

6 9 

7To configure Codex on your own machine with values you were given, see10To configure Codex on your own machine with values you were given, see [Use

8 [Connect to a gateway](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway). Before11 API/provider credentials](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway). Before

9 choosing or rolling out a gateway, review the [gateway compatibility12 choosing or rolling out a gateway, review the [gateway compatibility

10 requirements](https://learn.chatgpt.com/docs/enterprise/gateway-compatibility).13 requirements](https://learn.chatgpt.com/docs/enterprise/gateway-compatibility).

11 14 


108 111 

109## Test Codex through the gateway112## Test Codex through the gateway

110 113 

111Before distributing anything, follow [Connect to a gateway](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway) to configure one isolated test user with the provider block and credential mechanism you plan to distribute.114Before distributing anything, follow [Use API/provider credentials](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway) to configure one isolated test user with the provider block and credential mechanism you plan to distribute.

112 115 

113Run the checks below from the same CLI or desktop surface developers will use:116Run the checks below from the same CLI or desktop surface developers will use:

114 117 


120| Follow-up | Ask a follow-up in the same thread. | The answer uses the prior turn; the gateway accepts replayed input. If WebSocket or incremental transport is enabled, it also preserves `previous_response_id`. |123| Follow-up | Ask a follow-up in the same thread. | The answer uses the prior turn; the gateway accepts replayed input. If WebSocket or incremental transport is enabled, it also preserves `previous_response_id`. |

121| Errors and attribution | Repeat with an intentionally invalid test alias or expired test credential. | The client receives a useful routing or authentication error, and valid requests remain attributed to the test user. |124| Errors and attribution | Repeat with an intentionally invalid test alias or expired test credential. | The client receives a useful routing or authentication error, and valid requests remain attributed to the test user. |

122 125 

123After these checks succeed, direct developers to [Connect to a gateway](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway) to configure and verify their own machine.126After these checks succeed, direct developers to [Use API/provider credentials](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway) to configure and verify their own machine.

124 127 

125## Distribute the configuration128## Distribute the configuration

126 129 


189 192 

190### Hand developers the configuration values193### Hand developers the configuration values

191 194 

192If you do not have managed distribution, give each developer the gateway URL, provider ID, model alias, credential variable or resolver, and any catalog path. Send them to [Connect to a gateway](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway) to configure and verify their own machine.195If you do not have managed distribution, give each developer the gateway URL, provider ID, model alias, credential variable or resolver, and any catalog path. Send them to [Use API/provider credentials](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway) to configure and verify their own machine.

193 196 

194Manual setup is not an enforcement channel. Project-local `.codex/config.toml` cannot override sensitive provider or authentication routing keys.197Manual setup is not an enforcement channel. Project-local `.codex/config.toml` cannot override sensitive provider or authentication routing keys.

195 198 


200To confirm that the distributed settings reached a developer machine:203To confirm that the distributed settings reached a developer machine:

201 204 

2021. Restart Codex and confirm the expected provider and model.2051. Restart Codex and confirm the expected provider and model.

2032. Run the short test in [Connect to a gateway](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway#verify-the-connection).2062. Run the short test in [Use API/provider credentials](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway#verify-the-connection).

2043. Ask one follow-up to confirm continuation, then check the gateway logs for that2073. Ask one follow-up to confirm continuation, then check the gateway logs for that

205 developer's request.208 developer's request.

206 209 


2391. Inventory the current Claude path: gateway URL, credential source, required headers, model aliases, Bedrock profile mappings, and managed delivery channel.2421. Inventory the current Claude path: gateway URL, credential source, required headers, model aliases, Bedrock profile mappings, and managed delivery channel.

2402. Add a parallel Codex-facing Responses route and Codex model aliases.2432. Add a parallel Codex-facing Responses route and Codex model aliases.

2413. Issue one scoped Codex credential. If Codex will use a static credential, expose that new credential through `env_key`; if Claude uses a credential helper, implement and test the Codex command-backed resolver contract.2443. Issue one scoped Codex credential. If Codex will use a static credential, expose that new credential through `env_key`; if Claude uses a credential helper, implement and test the Codex command-backed resolver contract.

2424. Configure that developer with the [provider block](#what-to-distribute). For a managed rollout, translate the payload into the Codex paths and precedence described in [Deploy Codex through a gateway](#distribute-the-configuration).2454. Configure that developer with the [provider block](#what-to-distribute). For a managed rollout, translate the payload into the Codex paths and precedence described in [Roll out a gateway](#distribute-the-configuration).

2435. Run the short connection check on the developer's actual CLI or desktop surface, then run the full streaming, continuation, tool-call, error, logging, and alias-routing checks in [Test Codex through the gateway](#test-the-client-and-gateway).2465. Run the short connection check on the developer's actual CLI or desktop surface, then run the full streaming, continuation, tool-call, error, logging, and alias-routing checks in [Test Codex through the gateway](#test-the-client-and-gateway).

2446. After the pilot passes, [distribute the configuration](#distribute-the-configuration) to the remaining developers.2476. After the pilot passes, [distribute the configuration](#distribute-the-configuration) to the remaining developers.

245 248 

246## Related docs249## Related docs

247 250 

248- [Connect to a gateway](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway)251- [Use API/provider credentials](https://learn.chatgpt.com/docs/enterprise/connect-to-a-gateway)

249- [MCP](https://learn.chatgpt.com/docs/extend/mcp)252- [MCP](https://learn.chatgpt.com/docs/extend/mcp)

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

251- [Managed configuration](https://learn.chatgpt.com/docs/enterprise/managed-configuration)254- [Managed configuration](https://learn.chatgpt.com/docs/enterprise/managed-configuration)

Details

1# Sign in with ChatGPT through a gateway

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 

5## Why you would want this

6 

7If you already have a model gateway and use Codex with the API Platform, you can keep your gateway while moving to **Sign in with ChatGPT**. This gives you access to eligible ChatGPT workspace features and controls, including [voice mode](#voice-through-a-gateway), while keeping your model gateway. Compare the sign-in methods in [Feature availability](https://learn.chatgpt.com/docs/pricing#feature-availability).

8 

9## How to set it up

10 

11Existing [command-backed authentication](https://learn.chatgpt.com/docs/config-file/config-advanced#custom-model-providers) places the gateway key in `Authorization`. With ChatGPT sign-in, that header carries the ChatGPT token. Choose how to supply the separate gateway credential:

12 

13- **Option A:** Reuse your credential command through a small launch helper. Send the same gateway key in a separate header.

14- **Option B:** Let Codex obtain the gateway credential through native OAuth.

15 

16Add the selected provider configuration to your workspace's cloud-managed `requirements.toml` in [Managed configuration](https://learn.chatgpt.com/docs/enterprise/managed-configuration). These requirements apply after users sign in with ChatGPT; they do not restrict other sign-in methods. The gateway's Codex-compatible base URL must proxy `/models` and `/responses` to `https://chatgpt.com/backend-api/codex`.

17 

18### Option A: Reuse your credential command with a helper

19 

20Keep your existing credential command. A small helper runs it before launching Codex and exports its output as `GATEWAY_KEY`. This is the same gateway key you use today; only its delivery header changes.

21 

22For example, your existing API/provider configuration might contain:

23 

24```toml

25# config.toml — existing API/provider setup

26model_provider = "enterprise_gateway"

27 

28[model_providers.enterprise_gateway]

29name = "Enterprise gateway"

30base_url = "https://gateway.example.com/v1"

31requires_openai_auth = false

32 

33[model_providers.enterprise_gateway.auth]

34command = "/usr/local/bin/fetch-gateway-token"

35```

36 

37For ChatGPT sign-in, replace that provider with the following managed configuration. Remove its `auth` block: command-backed provider auth cannot be combined with `requires_openai_auth = true`.

38 

39```toml

40# requirements.toml

41model_provider = "enterprise_gateway"

42 

43[model_providers.enterprise_gateway]

44name = "Enterprise gateway"

45base_url = "https://gateway.example.com/backend-api/codex" # Keep the gateway route.

46requires_openai_auth = true # Use the ChatGPT credential for OpenAI.

47env_http_headers = { "X-Gateway-Key" = "GATEWAY_KEY" } # Send the same gateway key separately.

48```

49 

50Use a launch helper such as this shell function for the CLI. Replace the command and arguments with those from your existing `auth` block:

51 

52```sh

53codex_with_gateway() (

54 set -eu

55 GATEWAY_KEY=$(/usr/local/bin/fetch-gateway-token)

56 test -n "$GATEWAY_KEY"

57 export GATEWAY_KEY

58 exec codex "$@"

59)

60 

61codex_with_gateway

62```

63 

64Configure your gateway to accept `X-Gateway-Key`, validate the key, and remove that header before forwarding the request. The request now carries:

65 

66```http

67Authorization: Bearer <ChatGPT token>

68ChatGPT-Account-ID: <workspace ID, when available>

69X-Gateway-Key: <same gateway key returned by your command>

70```

71 

72The helper runs once per launch. Codex does not rerun it or refresh this header; when the key expires, obtain a new key and relaunch. For desktop, your launch integration must supply `GATEWAY_KEY` to the app process. Choose Option B if you want Codex to manage gateway sign-in and token renewal.

73 

74The diagrams abbreviate the request headers and launch helper. Use `Authorization: Bearer <ChatGPT token>` and keep the helper's empty-key check from the examples above. If `GATEWAY_KEY` is empty, Codex omits `X-Gateway-Key`.

75 

76 

77 

78![Option A: Reuse the credential command through a launch helper. The same gateway key moves from Authorization to X-Gateway-Key while ChatGPT sign-in supplies Authorization.](<https://developers.openai.com/images/codex/gateways/chatgpt-gateway-before-after-header-light.webp>)

79 

80 

81 

82 

83 

84![Option A runtime: The gateway validates and removes X-Gateway-Key, then forwards ChatGPT Authorization and any account ID unchanged to the Codex backend.](<https://developers.openai.com/images/codex/gateways/chatgpt-gateway-runtime-header-light.webp>)

85 

86 

87 

88### Option B: Use native gateway OAuth

89 

90Use this option to replace the command and launch helper with Codex-managed gateway sign-in. Your gateway must have an OAuth authorization server. Register a public client that supports authorization code with PKCE, then replace the example URLs and client ID. Remove the existing provider's `auth` block and use the following managed configuration.

91 

92```toml

93# requirements.toml

94model_provider = "enterprise_gateway"

95 

96[model_providers.enterprise_gateway]

97name = "Enterprise gateway"

98base_url = "https://gateway.example.com/backend-api/codex" # Keep the gateway route.

99requires_openai_auth = true # Use the ChatGPT credential for OpenAI.

100 

101[model_providers.enterprise_gateway.gateway_oauth] # Add gateway OAuth.

102authorization_url = "https://login.example.com/oauth/authorize"

103token_url = "https://login.example.com/oauth/token"

104client_id = "YOUR_PUBLIC_CLIENT_ID"

105delivery = { kind = "cookie", name = "auth-openid" } # Add gateway auth as a cookie.

106# redirect_port = 43127

107```

108 

109Codex uses a free loopback port by default. If your identity provider requires a fixed redirect URI, set `redirect_port` and register `http://127.0.0.1:43127/callback` for this example.

110 

111 

112 

113![Option B: Replace API-key gateway auth with native gateway OAuth alongside ChatGPT sign-in.](<https://developers.openai.com/images/codex/gateways/chatgpt-gateway-before-after-light.webp>)

114 

115 

116 

117 

118 

119![Option B runtime: The gateway consumes its OAuth cookie and forwards the ChatGPT credential to the Codex backend.](<https://developers.openai.com/images/codex/gateways/chatgpt-gateway-runtime-light.webp>)

120 

121 

122 

123### Add routing headers (optional)

124 

125With either option, Codex can send custom routing headers to the gateway. For example, add these headers to the same `enterprise_gateway` provider in your cloud-managed `requirements.toml`:

126 

127```toml

128[model_providers.enterprise_gateway.http_headers]

129x-portkey-config = "<gateway-routing-config-id>"

130x-portkey-metadata = '{"tool_id":"codex"}'

131```

132 

133Codex sends the headers on model-provider requests; the gateway applies the routing rules. Use `env_http_headers` for values read from the Codex process environment. Test a request to confirm the gateway receives both headers and selects the intended route. See [Custom model providers](https://learn.chatgpt.com/docs/config-file/config-advanced#custom-model-providers) for more header options.

134 

135### Keep the credentials on their own paths

136 

137Codex sends the ChatGPT `Authorization` header, any `ChatGPT-Account-ID` header, and the gateway header or cookie. Have the gateway verify and remove its credential, then forward the ChatGPT headers unchanged.

138 

139## Caveats and limitations

140 

141- Use a Codex build that supports managed model-provider requirements and, for Option B, native gateway OAuth. Older builds may ignore or reject unsupported fields.

142- This route covers requests through the selected model provider. ChatGPT sign-in, MCP, plugins, and other app connections can use different paths.

143- Your gateway can see request data and both credentials. Redact them in logs; never forward gateway credentials upstream.

144- Native gateway OAuth needs a browser and a reachable loopback callback. It has no device-code fallback. Without a refresh token, users must repeat browser sign-in when the access token expires.

145- A generic OpenAI `/v1/models` response is insufficient: Codex expects a `models` array. Test the model list, a prompt, and each feature your deployment uses.

146 

147### Voice through a gateway

148 

149This setup routes Codex model-provider requests; it does not enable [ChatGPT Voice](https://learn.chatgpt.com/docs/features/voice). For WebRTC voice sessions, call creation and the sideband connection use separate routes. The experimental `experimental_realtime_webrtc_call_base_url` setting in `~/.codex/config.toml` changes only the HTTP base URL for call creation. It does not redirect the sideband connection, media, or ordinary model requests. Work with OpenAI to verify the call destination and credential handling before using this override, then test a complete voice session.

150 

151For the API/provider credential path, see [Gateway compatibility](https://learn.chatgpt.com/docs/enterprise/gateway-compatibility) and [Roll out a gateway](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway). For these managed settings, see [Managed configuration](https://learn.chatgpt.com/docs/enterprise/managed-configuration) and the [Configuration Reference](https://learn.chatgpt.com/docs/config-file/config-reference).

memories.md +10 −3

Details

18<ContentModeSwitch group="codex-surface" id="app">18<ContentModeSwitch group="codex-surface" id="app">

19 19 

20In the ChatGPT desktop app, use `/memories` to choose whether a chat can use20In the ChatGPT desktop app, use `/memories` to choose whether a chat can use

21local memories or contribute to future memories. Manage the feature from21local memories or contribute to future memories. In **Settings >

22**Settings > Personalization** when you need to turn it on or off.22Personalization**, use **Enable Codex memories** to turn the feature on or off

23for the selected machine. Use **Allow memories from tool-assisted chats** to

24choose whether chats that use MCP tools or web search can contribute to future

25memories.

26 

27To reset the selected machine's memory store, select **Delete Codex memories**

28and confirm. On the local machine, this also clears Computer History when that

29feature is available.

23 30 

24</ContentModeSwitch>31</ContentModeSwitch>

25 32 


116## Configure local memories123## Configure local memories

117 124 

118Local Codex memories are off by default. In the ChatGPT desktop app, open125Local Codex memories are off by default. In the ChatGPT desktop app, open

119**Settings > Personalization** and turn on **Enable memories**.126**Settings > Personalization** and turn on **Enable Codex memories**.

120 127 

121For config-based setup, add the feature flag to `config.toml`:128For config-based setup, add the feature flag to `config.toml`:

122 129 

Details

12For most work, start with **Ask for approval**. It lets ChatGPT work within the12For most work, start with **Ask for approval**. It lets ChatGPT work within the

13current workspace and pauses before reaching beyond that boundary.13current workspace and pauses before reaching beyond that boundary.

14 14 

15Select different modes below to understand how each one works.15## Choose a mode

16 16 

17<PermissionModeSelectorDemo client:load />17Open the permissions control below the composer and select **Approve for me**

18to send eligible approval requests to automatic review. Check the selected

19mode for the current chat; having a mode available doesn't mean it's selected.

18 20 

19## Enable modes

20 21 

21When you're using the ChatGPT desktop app for the first time, you need to enable modes in application settings.

22 22 

23**Ask for approval** is always available. To add **Approve for me** (called23> Illustration: Interactive permission mode example, initially showing Approve for me selected and Full access enabled.

24**Auto&#45;review** in settings) or **Full access** to the permissions menu, open

25**Settings > General** in the ChatGPT desktop app, then turn on the mode under

26**Permissions**. Enabling a mode makes it available in the menu; it doesn't

27select the mode or change an existing chat.

28 24 

29 25 

30 26 

31> Illustration: Permission visibility controls showing Default permissions, automatic review, and Full access.27Available modes depend on your app version, execution environment, local

28 configuration, and your organization's requirements. A mode can be disabled or

29 omitted when it isn't available. Managed requirements can also restrict **Ask

30 for approval**.

32 31 

33 32If **Approve for me** is missing or disabled, see

34 33[permission troubleshooting](https://learn.chatgpt.com/docs/reference/troubleshooting#approve-for-me-is-missing-or-disabled).

35The available modes can depend on your local configuration and your

36 organization's requirements. A mode that isn't allowed appears disabled.

37 34 

38## How permissions work35## How permissions work

39 36 

personalize.md +6 −6

Details

6preferences. You control which personalization features are enabled and can6preferences. You control which personalization features are enabled and can

7change them in settings. Available controls vary between web and desktop.7change them in settings. Available controls vary between web and desktop.

8 8 

9## Choose a personality9## Choose a personality on the web

10 10 

11Choose **Friendly**, **Pragmatic**, or **None** as the default personality in11On ChatGPT web, open **Settings > Personalization > Base style and tone** to

12**Settings > Personalization**. A personality changes how ChatGPT communicates;12choose how ChatGPT responds. A personality changes its style and tone; it

13it doesn't change what the model can do.13doesn't change its capabilities.

14 14 

15## Add custom instructions15## Add custom instructions

16 16 


60 60 

61## Manage personalization61## Manage personalization

62 62 

63Open [**Settings**](codex://settings) to update your personality, custom63Open [**Settings**](codex://settings) to update your personal instructions,

64instructions, memories, and other available personalization controls. See64memories, and other available personalization controls. See

65[ChatGPT desktop app settings](https://learn.chatgpt.com/docs/reference/settings) for an overview of65[ChatGPT desktop app settings](https://learn.chatgpt.com/docs/reference/settings) for an overview of

66everyday preferences.66everyday preferences.

prompting.md +2 −2

Details

187 187 

188## Use voice dictation188## Use voice dictation

189 189 

190In the ChatGPT desktop app, press <kbd>Ctrl+Shift+D</kbd> while the composer is190In the ChatGPT desktop app, select **Dictate** in the composer, then start

191visible, then start talking. ChatGPT transcribes your speech into the composer191talking. ChatGPT transcribes your speech into the composer

192so you can review and edit it before sending the prompt.192so you can review and edit it before sending the prompt.

193 193 

194 194 

Details

102 102 

103If you started a chat with the wrong target (**Local**, **Worktree**, or **Cloud**) by accident, you can cancel the current run and recover your previous prompt by pressing the up arrow key in the composer.103If you started a chat with the wrong target (**Local**, **Worktree**, or **Cloud**) by accident, you can cancel the current run and recover your previous prompt by pressing the up arrow key in the composer.

104 104 

105### Approve for me is missing or disabled

106 

107To use automatic review, select **Approve for me** from the permissions control

108below the composer. If the mode is missing or disabled:

109 

1101. Update the desktop app and check the permissions menu in the chat where

111 you want to use automatic review. The available choices can differ between

112 local and cloud environments.

1132. For local Codex execution, check your effective configuration for an

114 explicit `features.guardian_approval = false` setting and review the

115 configured permission profile, approval policy, and approval reviewer.

116 See [Config basics](https://learn.chatgpt.com/docs/config-file/config-basic) for configuration

117 precedence. Local configuration doesn't control a managed cloud runtime.

1183. If a mode is disabled or missing in a managed workspace, ask your

119 administrator to check the allowed permission profiles, sandbox modes,

120 approval policies, and approval reviewers. Organization or device policy

121 can restrict these choices; local settings can't override it.

122 

123If the mode is still unexpectedly unavailable, include your app version,

124operating system, execution environment, and whether the option is missing or

125disabled in your [feedback](#feedback-and-logs).

126 

105### Feature is working in the Codex CLI but not in the ChatGPT desktop app127### Feature is working in the Codex CLI but not in the ChatGPT desktop app

106 128 

107The ChatGPT desktop app and Codex CLI can include different Codex versions, so129The ChatGPT desktop app and Codex CLI can include different Codex versions, so

108features may reach one surface before the other. Experimental features might130features may reach one surface before the other.

109also land in Codex CLI first.

110 131 

111To get the version of the Codex CLI on your system run:132To get the version of the Codex CLI on your system run:

112 133 

sandboxing.md +4 −1

Details

186**Approve for me** for eligible approval requests, **Full access**, and named or186**Approve for me** for eligible approval requests, **Full access**, and named or

187custom permissions profiles.187custom permissions profiles.

188 188 

189<PermissionModeSelectorDemo client:load />189<PermissionModeSelectorDemo

190 client:load

191 instructions="Select a mode to explore this documentation example. This doesn't change your ChatGPT or Codex permissions."

192/>

190 193 

191</ContentModeSwitch>194</ContentModeSwitch>

192 195 

Details

25[reviewer-policy configuration](#configuration). The warning doesn't restore25[reviewer-policy configuration](#configuration). The warning doesn't restore

26the sandbox boundary or override organization policy.26the sandbox boundary or override organization policy.

27 27 

28## Select automatic review

29 

30In the desktop app, choose **Approve for me** from the permissions control

31below the composer. Check that it's selected for the current chat. See

32[Permissions](https://learn.chatgpt.com/docs/permission-modes) for mode selection and troubleshooting.

33 

34For the CLI or a local Codex configuration, set

35`approvals_reviewer = "auto_review"` with an eligible interactive approval

36policy, such as `approval_policy = "on-request"`. Changing the approval policy

37alone doesn't select the reviewer. Managed requirements take precedence over

38local settings; see [Managed configuration](https://learn.chatgpt.com/docs/enterprise/managed-configuration#configure-automatic-review-policy).

39 

28## How auto-review works40## How auto-review works

29 41 

30At a high level, the flow is:42At a high level, the flow is:


52- File edits outside the allowed writable roots.64- File edits outside the allowed writable roots.

53- MCP or app tool calls that require approval based on their tool annotations65- MCP or app tool calls that require approval based on their tool annotations

54 or configured approval mode.66 or configured approval mode.

55- Computer Use access to a new website or domain.

56 67 

57Auto-review does not run for routine actions already allowed inside the68Auto-review does not run for routine actions already allowed inside the

58sandbox. If a command can run under the active `sandbox_mode`, or a tool call69sandbox. If a command can run under the active `sandbox_mode`, or a tool call


112Timeouts are surfaced separately from explicit denials, and the main agent is123Timeouts are surfaced separately from explicit denials, and the main agent is

113informed that a timeout alone is not proof that the action is unsafe.124informed that a timeout alone is not proof that the action is unsafe.

114 125 

115There is also an explicit override path for denied actions. In the current126Codex also provides an explicit override path for denied actions. In the current

116open-source TUI, run `/approve` to open the **Auto-review Denials** picker, then127open-source TUI, run `/approve` to open the **Auto-review Denials** picker, then

117select one recent denied action to approve for one retry. Codex records up to 10128select one recent denied action to approve for one retry. Codex records up to 10

118recent denials per task. That approval is narrow: it applies to the exact129recent denials per task. That approval is narrow: it applies to the exact


255 for scratch directories or neighboring repos you intentionally use.266 for scratch directories or neighboring repos you intentionally use.

256- Add narrowly scoped [prefix rules](https://learn.chatgpt.com/docs/agent-configuration/rules). Prefer precise command267- Add narrowly scoped [prefix rules](https://learn.chatgpt.com/docs/agent-configuration/rules). Prefer precise command

257 prefixes such as `["cargo", "test"]` or `["pnpm", "run", "lint"]` over broad268 prefixes such as `["cargo", "test"]` or `["pnpm", "run", "lint"]` over broad

258 patterns such as `["python"]` or `["curl"]`. Broad rules often erase the very269 patterns such as `["python"]` or `["curl"]`. Broad rules often erase the

259 boundary Auto-review is meant to guard.270 boundary Auto-review is meant to guard.

260 271 

261Auto-review session transcripts are retained under `~/.codex/sessions` by272Auto-review session transcripts are retained under `~/.codex/sessions` by


267Auto-review improves the default operating point for long-running agentic work,278Auto-review improves the default operating point for long-running agentic work,

268but it is not a deterministic security guarantee.279but it is not a deterministic security guarantee.

269 280 

270- It only evaluates actions that ask to cross a boundary.281- It only evaluates eligible approval requests, including requests triggered by

282 explicit command rules or tool approval settings.

271- It can still make mistakes, especially in adversarial or unusual contexts.283- It can still make mistakes, especially in adversarial or unusual contexts.

272- It should complement, not replace, good sandbox design, monitoring, and284- It should complement, not replace, good sandbox design, monitoring, and

273 organization-specific policy.285 organization-specific policy.

security.md +3 −1

Details

91[Cloud setup](https://learn.chatgpt.com/docs/security/setup) to connect GitHub and start your first scan.91[Cloud setup](https://learn.chatgpt.com/docs/security/setup) to connect GitHub and start your first scan.

92 92 

93<CtaPillLink93<CtaPillLink

94 href="https://chatgpt.com/plugins"94 href="https://chatgpt.com/plugins/plugin_connector_1p_6317a32dbf5c81919acd66de6722daf5"

95 label="Find Codex Security Cloud"95 label="Find Codex Security Cloud"

96 target="_blank"

97 rel="noopener noreferrer"

96 icon="external"98 icon="external"

97 class="my-8"99 class="my-8"

98/>100/>

Details

17 installed plugins or sidebar.17 installed plugins or sidebar.

18 18 

19<CtaPillLink19<CtaPillLink

20 href="https://chatgpt.com/plugins"20 href="https://chatgpt.com/plugins/plugin_connector_1p_6317a32dbf5c81919acd66de6722daf5"

21 label="Open plugin marketplace"21 label="Open plugin marketplace"

22 target="_blank"

23 rel="noopener noreferrer"

22 icon="external"24 icon="external"

23 class="my-8"25 class="my-8"

24/>26/>

workflows.md +2 −2

Details

187 187 

188## Use voice dictation188## Use voice dictation

189 189 

190In the ChatGPT desktop app, press <kbd>Ctrl+Shift+D</kbd> while the composer is190In the ChatGPT desktop app, select **Dictate** in the composer, then start

191visible, then start talking. ChatGPT transcribes your speech into the composer191talking. ChatGPT transcribes your speech into the composer

192so you can review and edit it before sending the prompt.192so you can review and edit it before sending the prompt.

193 193 

194 194