SpyBara
Go Premium

Documentation 2026-07-28 23:01 UTC to 2026-07-29 22:01 UTC

19 files changed +1,036 −274. View all changes and history on the product overview
2026
Thu 30 10:00 Wed 29 22:01 Tue 28 23:01 Mon 27 18:59 Fri 24 15:00 Thu 23 21:57 Wed 22 20:02 Tue 21 22:02 Mon 20 23:01 Fri 17 22:57 Thu 16 20:57 Wed 15 19:58 Tue 14 17:03 Wed 8 02:01 Mon 6 22:58

app-server.md +130 −9

Details

277 277 

278- `thread/start` - create a new thread; emits `thread/started` and automatically subscribes you to turn/item events for that thread.278- `thread/start` - create a new thread; emits `thread/started` and automatically subscribes you to turn/item events for that thread.

279- `thread/resume` - reopen an existing thread by id so later `turn/start` calls append to it.279- `thread/resume` - reopen an existing thread by id so later `turn/start` calls append to it.

280- `thread/fork` - fork a thread into a new thread id by copying stored history. Pass `lastTurnId` to copy history through that turn and omit later turns. Emits `thread/started` for the new thread; returned threads include `forkedFromId` when available.280- `thread/fork` - fork a thread into a new thread id by copying stored history. Pass `lastTurnId` to copy history through that turn and omit later turns, or `ephemeral: true` to create an in-memory fork. Emits `thread/started` for the new thread; returned threads include `forkedFromId` when available.

281- `thread/read` - read a stored thread by id without resuming it; set `includeTurns` to return full turn history. Returned `thread` objects include runtime `status`.281- `thread/read` - read a stored thread by id without resuming it; set `includeTurns` to return full turn history. Returned `thread` objects include runtime `status`.

282- `thread/list` - page through stored thread logs; supports cursor-based pagination plus `modelProviders`, `sourceKinds`, `archived`, `cwd`, `useStateDbOnly`, `searchTerm`, and experimental `parentThreadId` or `ancestorThreadId` filters. Returned `thread` objects include runtime `status`.282- `thread/list` - page through stored thread logs; supports cursor-based pagination plus `modelProviders`, `sourceKinds`, `archived`, `isPinned`, `cwd`, `useStateDbOnly`, `searchTerm`, and experimental `parentThreadId` or `ancestorThreadId` filters. Returned `thread` objects include runtime `status`.

283- `thread/turns/list` - experimental; page through a stored thread's turn history without resuming it. `itemsView` controls whether turn items are omitted, summarized, or fully loaded.283- `thread/turns/list` - experimental; page through a stored thread's turn history without resuming it. `itemsView` controls whether turn items are omitted, summarized, or fully loaded.

284- `thread/items/list` - experimental; page through persisted thread items, optionally restricted to one `turnId`. The active thread store must support item pagination.284- `thread/items/list` - experimental; page through persisted thread items, optionally restricted to one `turnId`. The active thread store must support item pagination.

285- `thread/loaded/list` - list the thread ids currently loaded in memory.285- `thread/loaded/list` - list the thread ids currently loaded in memory.


287- `thread/goal/set` - set the goal for a thread; emits `thread/goal/updated`.287- `thread/goal/set` - set the goal for a thread; emits `thread/goal/updated`.

288- `thread/goal/get` - read the current goal for a thread.288- `thread/goal/get` - read the current goal for a thread.

289- `thread/goal/clear` - clear the goal for a thread; emits `thread/goal/cleared`.289- `thread/goal/clear` - clear the goal for a thread; emits `thread/goal/cleared`.

290- `thread/metadata/update` - patch SQLite-backed stored thread metadata; currently supports persisted `gitInfo`.290- `thread/metadata/update` - patch SQLite-backed stored thread metadata, including persisted `gitInfo` and `isPinned`.

291- `thread/archive` - move a thread's log file into the archived directory and attempt to archive spawned descendant thread logs that aren't already archived; returns `{}` on success and emits `thread/archived` for each archived thread.291- `thread/archive` - move a thread's log file into the archived directory and attempt to archive spawned descendant thread logs that aren't already archived; returns `{}` on success and emits `thread/archived` for each archived thread.

292- `thread/delete` - permanently delete a persisted active or archived thread and any spawned descendant threads; returns `{}` on success and emits `thread/deleted` for each deleted thread.292- `thread/delete` - permanently delete a persisted active or archived thread and any spawned descendant threads; returns `{}` on success and emits `thread/deleted` for each deleted thread.

293- `thread/unsubscribe` - unsubscribe this connection from thread turn/item events. If this was the last subscriber, the server unloads the thread after a no-subscriber inactivity grace period and emits `thread/closed`.293- `thread/unsubscribe` - unsubscribe this connection from thread turn/item events. If this was the last subscriber, the server unloads the thread after a no-subscriber inactivity grace period and emits `thread/closed`.


333- `plugin/install` - under development; install a plugin from a marketplace path or remote marketplace name. Don't call this method from production clients yet.333- `plugin/install` - under development; install a plugin from a marketplace path or remote marketplace name. Don't call this method from production clients yet.

334- `plugin/uninstall` - under development; uninstall an installed plugin. Don't call this method from production clients yet.334- `plugin/uninstall` - under development; uninstall an installed plugin. Don't call this method from production clients yet.

335- `plugin/skill/read` - read remote plugin skill Markdown on demand by remote marketplace, plugin id, and skill name.335- `plugin/skill/read` - read remote plugin skill Markdown on demand by remote marketplace, plugin id, and skill name.

336- `app/installed` - read installed app runtime state, including each app's effective enabled and callable states.

336- `app/list` - list available apps (connectors) with pagination plus accessibility/enabled metadata.337- `app/list` - list available apps (connectors) with pagination plus accessibility/enabled metadata.

338- `app/read` - fetch metadata and optional display-only tool summaries for specific app ids.

337- `skills/config/write` - enable or disable skills by path.339- `skills/config/write` - enable or disable skills by path.

338- `mcpServer/oauth/login` - start an OAuth login for a configured MCP server; returns an authorization URL and emits `mcpServer/oauthLogin/completed` on completion.340- `mcpServer/oauth/login` - start an OAuth login for a configured MCP server; returns an authorization URL and emits `mcpServer/oauthLogin/completed` on completion.

339- `tool/requestUserInput` - prompt the user with 1-3 short questions for a tool call (experimental); questions can set `isOther` for a free-form option.341- `tool/requestUserInput` - prompt the user with 1-3 short questions for a tool call (experimental); questions can set `isOther` for a free-form option.


351- `externalAgentConfig/import` - apply selected external-agent migration items by passing explicit `migrationItems` with `cwd` (`null` for home). Supported item types include config, skills, `AGENTS.md`, plugins, MCP server config, subagents, hooks, commands, and sessions; non-empty imports emit `externalAgentConfig/import/progress` and `externalAgentConfig/import/completed` as work finishes. Plugin and session imports can complete asynchronously.353- `externalAgentConfig/import` - apply selected external-agent migration items by passing explicit `migrationItems` with `cwd` (`null` for home). Supported item types include config, skills, `AGENTS.md`, plugins, MCP server config, subagents, hooks, commands, and sessions; non-empty imports emit `externalAgentConfig/import/progress` and `externalAgentConfig/import/completed` as work finishes. Plugin and session imports can complete asynchronously.

352- `config/value/write` - write a single configuration key/value to the user's `config.toml` on disk.354- `config/value/write` - write a single configuration key/value to the user's `config.toml` on disk.

353- `config/batchWrite` - apply configuration edits atomically to the user's `config.toml` on disk.355- `config/batchWrite` - apply configuration edits atomically to the user's `config.toml` on disk.

354- `configRequirements/read` - fetch requirements from `requirements.toml` and/or MDM, including allow-lists, pinned `featureRequirements`, and residency/network requirements (or `null` if you haven't set any up).356- `configRequirements/read` - fetch requirements from `requirements.toml` and/or MDM, including exact managed configuration, allowlists, pinned `featureRequirements`, and residency/network requirements (or `null` if you haven't set any up).

355- `fs/readFile`, `fs/writeFile`, `fs/createDirectory`, `fs/getMetadata`, `fs/readDirectory`, `fs/remove`, `fs/copy`, `fs/watch`, `fs/unwatch`, and `fs/changed` (notify) - operate on absolute filesystem paths through the app-server v2 filesystem API.357- `fs/readFile`, `fs/writeFile`, `fs/createDirectory`, `fs/getMetadata`, `fs/readDirectory`, `fs/remove`, `fs/copy`, `fs/watch`, `fs/unwatch`, and `fs/changed` (notify) - operate on absolute filesystem paths through the app-server v2 filesystem API.

356 358 

357Plugin summaries include a `source` union. Local plugins return359Plugin summaries include a `source` union. Local plugins return


452 resuming it. Use `itemsView` to choose whether turn items are omitted,454 resuming it. Use `itemsView` to choose whether turn items are omitted,

453 summarized, or fully loaded.455 summarized, or fully loaded.

454- `thread/items/list` is experimental and pages through persisted thread items, optionally restricted to one turn.456- `thread/items/list` is experimental and pages through persisted thread items, optionally restricted to one turn.

455- `thread/list` supports cursor pagination plus `modelProviders`, `sourceKinds`, `archived`, `cwd`, `useStateDbOnly`, `searchTerm`, and experimental `parentThreadId` or `ancestorThreadId` filtering.457- `thread/list` supports cursor pagination plus `modelProviders`, `sourceKinds`, `archived`, `isPinned`, `cwd`, `useStateDbOnly`, `searchTerm`, and experimental `parentThreadId` or `ancestorThreadId` filtering.

456- `thread/loaded/list` returns the thread IDs currently in memory.458- `thread/loaded/list` returns the thread IDs currently in memory.

457- `thread/archive` moves the thread's persisted JSONL log into the archived directory and attempts to archive spawned descendant thread logs that aren't already archived.459- `thread/archive` moves the thread's persisted JSONL log into the archived directory and attempts to archive spawned descendant thread logs that aren't already archived.

458- `thread/delete` permanently deletes a persisted active or archived thread and its spawned descendant threads.460- `thread/delete` permanently deletes a persisted active or archived thread and its spawned descendant threads.

459- `thread/metadata/update` patches stored thread metadata, currently including persisted `gitInfo`.461- `thread/metadata/update` patches stored thread metadata, including persisted `gitInfo` and `isPinned`.

460- `thread/unsubscribe` unsubscribes the current connection from a loaded thread and can trigger `thread/closed` after an inactivity grace period.462- `thread/unsubscribe` unsubscribes the current connection from a loaded thread and can trigger `thread/closed` after an inactivity grace period.

461- `thread/unarchive` restores an archived thread rollout back into the active sessions directory.463- `thread/unarchive` restores an archived thread rollout back into the active sessions directory.

462- `thread/compact/start` triggers compaction and returns `{}` immediately.464- `thread/compact/start` triggers compaction and returns `{}` immediately.


583source thread is mid-turn, the fork records an interruption marker instead of585source thread is mid-turn, the fork records an interruption marker instead of

584retaining an unmarked partial turn.586retaining an unmarked partial turn.

585 587 

588Pass `ephemeral: true` to create an in-memory fork without adding it to stored

589thread listings:

590 

591```json

592{

593 "method": "thread/fork",

594 "id": 13,

595 "params": {

596 "threadId": "thr_123",

597 "ephemeral": true

598 }

599}

600{

601 "id": 13,

602 "result": {

603 "thread": {

604 "id": "thr_789",

605 "sessionId": "thr_789",

606 "forkedFromId": "thr_123",

607 "ephemeral": true

608 }

609 }

610}

611```

612 

613Ephemeral forks of paginated threads also require `excludeTurns: true`. That

614field is experimental and requires `capabilities.experimentalApi = true`.

615 

586When a user-facing thread title has been set, app-server hydrates `thread.name` on `thread/list`, `thread/read`, `thread/resume`, `thread/unarchive`, and `thread/rollback` responses. `thread/start` and `thread/fork` may omit `name` (or return `null`) until a title is set later.616When a user-facing thread title has been set, app-server hydrates `thread.name` on `thread/list`, `thread/read`, `thread/resume`, `thread/unarchive`, and `thread/rollback` responses. `thread/start` and `thread/fork` may omit `name` (or return `null`) until a title is set later.

587 617 

588### Read a stored thread (without resuming)618### Read a stored thread (without resuming)


639- `modelProviders` - restrict results to specific providers; unset, null, or an empty array includes all providers.669- `modelProviders` - restrict results to specific providers; unset, null, or an empty array includes all providers.

640- `sourceKinds` - restrict results to specific thread sources. When omitted or `[]`, the server defaults to interactive sources only: `cli` and `vscode`.670- `sourceKinds` - restrict results to specific thread sources. When omitted or `[]`, the server defaults to interactive sources only: `cli` and `vscode`.

641- `archived` - when `true`, list archived threads only. When `false` or omitted, list non-archived threads (default).671- `archived` - when `true`, list archived threads only. When `false` or omitted, list non-archived threads (default).

672- `isPinned` - when provided, return only threads with the matching persisted pin state. Omit it to return pinned and unpinned threads.

642- `cwd` - restrict results to threads whose session current working directory exactly matches this path, or one of the paths in an array. Relative paths resolve from the app-server process working directory.673- `cwd` - restrict results to threads whose session current working directory exactly matches this path, or one of the paths in an array. Relative paths resolve from the app-server process working directory.

643- `useStateDbOnly` - when `true`, return state database results without scanning JSONL thread logs to repair metadata. Omit it or pass `false` for the default scan-and-repair behavior.674- `useStateDbOnly` - when `true`, return state database results without scanning JSONL thread logs to repair metadata. Omit it or pass `false` for the default scan-and-repair behavior.

644- `searchTerm` - restrict results to threads whose extracted title contains this case-sensitive text fragment.675- `searchTerm` - restrict results to threads whose extracted title contains this case-sensitive text fragment.


668} }699} }

669{ "id": 20, "result": {700{ "id": 20, "result": {

670 "data": [701 "data": [

671 { "id": "thr_a", "preview": "Create a TUI", "ephemeral": false, "modelProvider": "openai", "createdAt": 1730831111, "updatedAt": 1730831111, "name": "TUI prototype", "status": { "type": "notLoaded" } },702 { "id": "thr_a", "preview": "Create a TUI", "ephemeral": false, "isPinned": true, "modelProvider": "openai", "createdAt": 1730831111, "updatedAt": 1730831111, "name": "TUI prototype", "status": { "type": "notLoaded" } },

672 { "id": "thr_b", "preview": "Fix tests", "ephemeral": true, "modelProvider": "openai", "createdAt": 1730750000, "updatedAt": 1730750000, "status": { "type": "notLoaded" } }703 { "id": "thr_b", "preview": "Fix tests", "ephemeral": false, "isPinned": false, "modelProvider": "openai", "createdAt": 1730750000, "updatedAt": 1730750000, "status": { "type": "notLoaded" } }

673 ],704 ],

674 "nextCursor": "opaque-token-or-null"705 "nextCursor": "opaque-token-or-null"

675} }706} }


679 710 

680### Update stored thread metadata711### Update stored thread metadata

681 712 

682Use `thread/metadata/update` to patch stored thread metadata without resuming the thread. Today this supports persisted `gitInfo`; omitted fields are left unchanged, and explicit `null` clears a stored value.713Use `thread/metadata/update` to patch stored thread metadata without resuming the

714thread. Set `isPinned` to pin or unpin the thread, or update `gitInfo` to change

715persisted Git metadata. Omitted fields stay unchanged; explicit `null` clears a

716stored Git metadata value.

683 717 

684```json718```json

685{ "method": "thread/metadata/update", "id": 21, "params": {719{ "method": "thread/metadata/update", "id": 21, "params": {

686 "threadId": "thr_123",720 "threadId": "thr_123",

721 "isPinned": true,

687 "gitInfo": { "branch": "feature/sidebar-pr" }722 "gitInfo": { "branch": "feature/sidebar-pr" }

688} }723} }

689{ "id": 21, "result": {724{ "id": 21, "result": {

690 "thread": {725 "thread": {

691 "id": "thr_123",726 "id": "thr_123",

727 "isPinned": true,

692 "gitInfo": { "sha": null, "branch": "feature/sidebar-pr", "originUrl": null }728 "gitInfo": { "sha": null, "branch": "feature/sidebar-pr", "originUrl": null }

693 }729 }

694} }730} }


1466 1502 

1467## Apps (connectors)1503## Apps (connectors)

1468 1504 

1505Use `app/installed` to read the latest committed installed app runtime snapshot.

1506Each result includes the app `id`, `runtimeName` (or `null`), effective

1507`enabled` state, and `callable` state. An app is callable only when effective

1508configuration enables it and at least one model-visible tool complies with the

1509app and tool policies.

1510 

1511```json

1512{

1513 "method": "app/installed",

1514 "id": 49,

1515 "params": {

1516 "threadId": "thread-1",

1517 "forceRefresh": false

1518 }

1519}

1520{

1521 "id": 49,

1522 "result": {

1523 "apps": [

1524 {

1525 "id": "demo-app",

1526 "runtimeName": "Demo App",

1527 "enabled": true,

1528 "callable": true

1529 }

1530 ]

1531 }

1532}

1533```

1534 

1535Omit `threadId` to use the global configuration instead of a loaded thread's

1536configuration. Set `forceRefresh: true` to refresh the connector runtime

1537snapshot before reading it. When global or workspace policy blocks app access,

1538an observed app can still appear with `enabled` and `callable` set to `false`.

1539 

1469Use `app/list` to fetch available apps. In the CLI/TUI, `/apps` is the user-facing picker; in custom clients, call `app/list` directly. Each entry includes both `isAccessible` (available to the user) and `isEnabled` (enabled in `config.toml`) so clients can distinguish install/access from local enabled state. App entries can also include optional `branding`, `appMetadata`, and `labels` fields.1540Use `app/list` to fetch available apps. In the CLI/TUI, `/apps` is the user-facing picker; in custom clients, call `app/list` directly. Each entry includes both `isAccessible` (available to the user) and `isEnabled` (enabled in `config.toml`) so clients can distinguish install/access from local enabled state. App entries can also include optional `branding`, `appMetadata`, and `labels` fields.

1470 1541 

1471```json1542```json


1526}1597}

1527```1598```

1528 1599 

1600Use `app/read` when you already know the app ids and need app metadata rather

1601than installed runtime state. Pass at most 100 `appIds`. The server keeps only

1602the first occurrence of each repeated id and preserves that order in both

1603`apps` and `missingAppIds`. Unknown or inaccessible apps are returned in

1604`missingAppIds` without failing the entire request.

1605 

1606```json

1607{

1608 "method": "app/read",

1609 "id": 52,

1610 "params": {

1611 "appIds": ["demo-app", "missing-app"],

1612 "includeTools": true

1613 }

1614}

1615{

1616 "id": 52,

1617 "result": {

1618 "apps": [

1619 {

1620 "id": "demo-app",

1621 "name": "Demo App",

1622 "description": "Example connector for documentation.",

1623 "iconUrl": null,

1624 "iconUrlDark": null,

1625 "distributionChannel": null,

1626 "installUrl": null,

1627 "pluginDisplayNames": [],

1628 "toolSummaries": [

1629 {

1630 "name": "search",

1631 "title": "Search",

1632 "description": "Search the app.",

1633 "isEnabled": true,

1634 "disabledReason": null,

1635 "isReadOnly": true

1636 }

1637 ]

1638 }

1639 ],

1640 "missingAppIds": ["missing-app"]

1641 }

1642}

1643```

1644 

1645Set `includeTools: true` to request display-only public tool summaries. The

1646metadata response doesn't include installed app runtime state or authorize a

1647tool call; use `app/installed` to check effective `enabled` and `callable`

1648state.

1649 

1529Invoke an app by inserting `$<app-slug>` in the text input and adding a `mention` input item with the `app://<id>` path (recommended).1650Invoke an app by inserting `$<app-slug>` in the text input and adding a `mention` input item with the `app://<id>` path (recommended).

1530 1651 

1531```json1652```json

Details

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

10 10 

11The ChatGPT desktop app previews generated documents, presentations,11The ChatGPT desktop app previews generated documents, presentations,

12spreadsheets, and PDF files alongside the chat. Use annotations to point at a12spreadsheets, and PDF files alongside the chat. When automatic previews are

13specific part of a preview and request a focused revision.13enabled, the app can open a generated file after a task finishes.

14 

15When HTML previews are available, generated `.html` and `.htm` files can also

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

17view to inspect the output or its underlying HTML.

18 

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

20a focused revision.

14 21 

15</ContentModeSwitch>22</ContentModeSwitch>

16 23 

cli/reference.md +13 −0

Details

269 269 

270Continue an interactive session by ID or resume the most recent chat. `codex resume` scopes `--last` to the current working directory unless you pass `--all`. It accepts the same global flags as `codex`, including model and sandbox overrides.270Continue an interactive session by ID or resume the most recent chat. `codex resume` scopes `--last` to the current working directory unless you pass `--all`. It accepts the same global flags as `codex`, including model and sandbox overrides.

271 271 

272If the current working directory differs from the session's saved directory,

273Codex asks which directory to use. Set

274[`tui.resume_cwd`](https://learn.chatgpt.com/docs/config-file/config-reference) to `"current"` or

275`"session"` to reuse that choice without a prompt. An explicit `--cd` (`-C`)

276override takes precedence over `tui.resume_cwd`.

277 

272<ConfigTable client:load options={resumeOptions} />278<ConfigTable client:load options={resumeOptions} />

273 279 

274### `codex fork`280### `codex fork`

275 281 

276Fork a previous interactive session into a new chat. By default, `codex fork` opens the session picker; add `--last` to fork your most recent session instead.282Fork a previous interactive session into a new chat. By default, `codex fork` opens the session picker; add `--last` to fork your most recent session instead.

277 283 

284When the current and saved session directories differ, `codex fork` uses the

285same working-directory prompt and `tui.resume_cwd` setting as `codex resume`.

286 

278<ConfigTable client:load options={forkOptions} />287<ConfigTable client:load options={forkOptions} />

279 288 

280### `codex sandbox`289### `codex sandbox`


519Expected: Codex clears the terminal, resets the visible transcript, and starts528Expected: Codex clears the terminal, resets the visible transcript, and starts

520a fresh chat in the same CLI session.529a fresh chat in the same CLI session.

521 530 

531To name the new chat as you create it, run `/clear release prep`.

532 

522Unlike <kbd>Ctrl</kbd>+<kbd>L</kbd>, `/clear` starts a new chat.533Unlike <kbd>Ctrl</kbd>+<kbd>L</kbd>, `/clear` starts a new chat.

523 534 

524<kbd>Ctrl</kbd>+<kbd>L</kbd> only clears the terminal view and keeps the current535<kbd>Ctrl</kbd>+<kbd>L</kbd> only clears the terminal view and keeps the current


749Expected: Codex starts a fresh chat in the same CLI session, so you760Expected: Codex starts a fresh chat in the same CLI session, so you

750can switch chats without leaving your terminal.761can switch chats without leaving your terminal.

751 762 

763To name the new chat as you create it, run `/new bug bash`.

764 

752Unlike `/clear`, `/new` doesn't clear the current terminal view first.765Unlike `/clear`, `/new` doesn't clear the current terminal view first.

753 766 

754<a id="rename-the-current-chat-with-rename"></a>767<a id="rename-the-current-chat-with-rename"></a>

Details

269 269 

270Continue an interactive session by ID or resume the most recent chat. `codex resume` scopes `--last` to the current working directory unless you pass `--all`. It accepts the same global flags as `codex`, including model and sandbox overrides.270Continue an interactive session by ID or resume the most recent chat. `codex resume` scopes `--last` to the current working directory unless you pass `--all`. It accepts the same global flags as `codex`, including model and sandbox overrides.

271 271 

272If the current working directory differs from the session's saved directory,

273Codex asks which directory to use. Set

274[`tui.resume_cwd`](https://learn.chatgpt.com/docs/config-file/config-reference) to `"current"` or

275`"session"` to reuse that choice without a prompt. An explicit `--cd` (`-C`)

276override takes precedence over `tui.resume_cwd`.

277 

272<ConfigTable client:load options={resumeOptions} />278<ConfigTable client:load options={resumeOptions} />

273 279 

274### `codex fork`280### `codex fork`

275 281 

276Fork a previous interactive session into a new chat. By default, `codex fork` opens the session picker; add `--last` to fork your most recent session instead.282Fork a previous interactive session into a new chat. By default, `codex fork` opens the session picker; add `--last` to fork your most recent session instead.

277 283 

284When the current and saved session directories differ, `codex fork` uses the

285same working-directory prompt and `tui.resume_cwd` setting as `codex resume`.

286 

278<ConfigTable client:load options={forkOptions} />287<ConfigTable client:load options={forkOptions} />

279 288 

280### `codex sandbox`289### `codex sandbox`


519Expected: Codex clears the terminal, resets the visible transcript, and starts528Expected: Codex clears the terminal, resets the visible transcript, and starts

520a fresh chat in the same CLI session.529a fresh chat in the same CLI session.

521 530 

531To name the new chat as you create it, run `/clear release prep`.

532 

522Unlike <kbd>Ctrl</kbd>+<kbd>L</kbd>, `/clear` starts a new chat.533Unlike <kbd>Ctrl</kbd>+<kbd>L</kbd>, `/clear` starts a new chat.

523 534 

524<kbd>Ctrl</kbd>+<kbd>L</kbd> only clears the terminal view and keeps the current535<kbd>Ctrl</kbd>+<kbd>L</kbd> only clears the terminal view and keeps the current


749Expected: Codex starts a fresh chat in the same CLI session, so you760Expected: Codex starts a fresh chat in the same CLI session, so you

750can switch chats without leaving your terminal.761can switch chats without leaving your terminal.

751 762 

763To name the new chat as you create it, run `/new bug bash`.

764 

752Unlike `/clear`, `/new` doesn't clear the current terminal view first.765Unlike `/clear`, `/new` doesn't clear the current terminal view first.

753 766 

754<a id="rename-the-current-chat-with-rename"></a>767<a id="rename-the-current-chat-with-rename"></a>

Details

427 key: "hooks.<Event>",427 key: "hooks.<Event>",

428 type: "array<table>",428 type: "array<table>",

429 description:429 description:

430 "Matcher groups for hook events such as `PreToolUse`, `PermissionRequest`, `PostToolUse`, `PreCompact`, `PostCompact`, `SessionStart`, `SubagentStart`, `SubagentStop`, `UserPromptSubmit`, or `Stop`.",430 "Matcher groups for hook events such as `PreToolUse`, `PermissionRequest`, `PostToolUse`, `PreCompact`, `PostCompact`, `SessionStart`, `SessionEnd`, `SubagentStart`, `SubagentStop`, `UserPromptSubmit`, or `Stop`.",

431 },431 },

432 {432 {

433 key: "hooks.<Event>[].hooks",433 key: "hooks.<Event>[].hooks",


1257 description:1257 description:

1258 "Control alternate screen usage for the TUI (default: auto; auto skips it in Zellij to preserve scrollback).",1258 "Control alternate screen usage for the TUI (default: auto; auto skips it in Zellij to preserve scrollback).",

1259 },1259 },

1260 {

1261 key: "tui.resume_cwd",

1262 type: "current | session",

1263 description:

1264 "Working directory to use when resuming or forking a session. When unset, Codex asks you to choose if your current directory differs from the session's saved directory.",

1265 },

1260 {1266 {

1261 key: "tui.vim_mode_default",1267 key: "tui.vim_mode_default",

1262 type: "boolean",1268 type: "boolean",


1622app-only keys that don't belong in `config.toml`. Omitted keys remain1628app-only keys that don't belong in `config.toml`. Omitted keys remain

1623unconstrained.1629unconstrained.

1624 1630 

1631Some managed requirements enforce an exact configuration value instead of an

1632allowlist. Users can't override an enforced path, update preference, login-shell

1633policy, feedback setting, or Windows private-desktop setting.

1634 

1625Managed permission-profile allowlists require Codex 0.138.0 or later. Codex1635Managed permission-profile allowlists require Codex 0.138.0 or later. Codex

16260.137.0 and earlier ignore `allowed_permission_profiles` and managed16360.137.0 and earlier ignore `allowed_permission_profiles` and managed

1627`default_permissions`.1637`default_permissions`.


1637 1647 

1638<ConfigTable1648<ConfigTable

1639 options={[1649 options={[

1650 {

1651 key: "sqlite_home",

1652 type: "string (path)",

1653 description:

1654 "Enforce the directory where Codex stores SQLite-backed runtime state.",

1655 },

1656 {

1657 key: "log_dir",

1658 type: "string (path)",

1659 description: "Enforce the directory where Codex writes local log files.",

1660 },

1661 {

1662 key: "model_catalog_json",

1663 type: "string (path)",

1664 description: "Enforce the JSON model catalog Codex uses at startup.",

1665 },

1666 {

1667 key: "check_for_update_on_startup",

1668 type: "boolean",

1669 description: "Enforce whether Codex checks for updates when it starts.",

1670 },

1671 {

1672 key: "allow_login_shell",

1673 type: "boolean",

1674 description: "Enforce whether shell tools can start a login shell.",

1675 },

1676 {

1677 key: "feedback",

1678 type: "table",

1679 description: "Managed feedback settings.",

1680 },

1681 {

1682 key: "feedback.enabled",

1683 type: "boolean",

1684 description:

1685 "Enforce whether users can submit feedback across Codex clients.",

1686 },

1640 {1687 {

1641 key: "allowed_approval_policies",1688 key: "allowed_approval_policies",

1642 type: "array<string>",1689 type: "array<string>",


1737 description:1784 description:

1738 "Allowed native Windows sandbox implementations for `windows.sandbox` (`elevated` and `unelevated`). The list must not be empty. When both are allowed and no mode is selected, Codex prefers `elevated`.",1785 "Allowed native Windows sandbox implementations for `windows.sandbox` (`elevated` and `unelevated`). The list must not be empty. When both are allowed and no mode is selected, Codex prefers `elevated`.",

1739 },1786 },

1787 {

1788 key: "windows.sandbox_private_desktop",

1789 type: "boolean",

1790 description:

1791 "Enforce whether the native Windows sandbox starts its child process on a private desktop.",

1792 },

1740 {1793 {

1741 key: "remote_sandbox_config",1794 key: "remote_sandbox_config",

1742 type: "array<table>",1795 type: "array<table>",


1803 description:1856 description:

1804 "Pin Apps integration availability on or off for managed users.",1857 "Pin Apps integration availability on or off for managed users.",

1805 },1858 },

1859 {

1860 key: "features.in_app_updates",

1861 type: "boolean",

1862 description:

1863 "Set to `false` in `requirements.toml` to disable in-app updates. Updates remain enabled by default when this requirement is omitted.",

1864 },

1806 {1865 {

1807 key: "features.in_app_browser",1866 key: "features.in_app_browser",

1808 type: "boolean",1867 type: "boolean",


1984 key: "hooks.<Event>",2043 key: "hooks.<Event>",

1985 type: "array<table>",2044 type: "array<table>",

1986 description:2045 description:

1987 "Matcher groups for a hook event such as `PreToolUse`, `PermissionRequest`, `PostToolUse`, `PreCompact`, `PostCompact`, `SessionStart`, `SubagentStart`, `SubagentStop`, `UserPromptSubmit`, or `Stop`.",2046 "Matcher groups for a hook event such as `PreToolUse`, `PermissionRequest`, `PostToolUse`, `PreCompact`, `PostCompact`, `SessionStart`, `SessionEnd`, `SubagentStart`, `SubagentStop`, `UserPromptSubmit`, or `Stop`.",

1988 },2047 },

1989 {2048 {

1990 key: "hooks.<Event>[].hooks",2049 key: "hooks.<Event>[].hooks",

Details

573 573 

574# alternate_screen = "auto"574# alternate_screen = "auto"

575 575 

576# Working directory for resumed or forked sessions: current | session.

577 

578# Leave unset to choose when the current and saved session directories differ.

579 

580# resume_cwd = "session"

581 

576# Ordered list of footer status-line item IDs. When unset, Codex uses:582# Ordered list of footer status-line item IDs. When unset, Codex uses:

577 583 

578# ["model-with-reasoning", "context-remaining", "current-dir"].584# ["model-with-reasoning", "context-remaining", "current-dir"].

Details

427 key: "hooks.<Event>",427 key: "hooks.<Event>",

428 type: "array<table>",428 type: "array<table>",

429 description:429 description:

430 "Matcher groups for hook events such as `PreToolUse`, `PermissionRequest`, `PostToolUse`, `PreCompact`, `PostCompact`, `SessionStart`, `SubagentStart`, `SubagentStop`, `UserPromptSubmit`, or `Stop`.",430 "Matcher groups for hook events such as `PreToolUse`, `PermissionRequest`, `PostToolUse`, `PreCompact`, `PostCompact`, `SessionStart`, `SessionEnd`, `SubagentStart`, `SubagentStop`, `UserPromptSubmit`, or `Stop`.",

431 },431 },

432 {432 {

433 key: "hooks.<Event>[].hooks",433 key: "hooks.<Event>[].hooks",


1257 description:1257 description:

1258 "Control alternate screen usage for the TUI (default: auto; auto skips it in Zellij to preserve scrollback).",1258 "Control alternate screen usage for the TUI (default: auto; auto skips it in Zellij to preserve scrollback).",

1259 },1259 },

1260 {

1261 key: "tui.resume_cwd",

1262 type: "current | session",

1263 description:

1264 "Working directory to use when resuming or forking a session. When unset, Codex asks you to choose if your current directory differs from the session's saved directory.",

1265 },

1260 {1266 {

1261 key: "tui.vim_mode_default",1267 key: "tui.vim_mode_default",

1262 type: "boolean",1268 type: "boolean",


1622app-only keys that don't belong in `config.toml`. Omitted keys remain1628app-only keys that don't belong in `config.toml`. Omitted keys remain

1623unconstrained.1629unconstrained.

1624 1630 

1631Some managed requirements enforce an exact configuration value instead of an

1632allowlist. Users can't override an enforced path, update preference, login-shell

1633policy, feedback setting, or Windows private-desktop setting.

1634 

1625Managed permission-profile allowlists require Codex 0.138.0 or later. Codex1635Managed permission-profile allowlists require Codex 0.138.0 or later. Codex

16260.137.0 and earlier ignore `allowed_permission_profiles` and managed16360.137.0 and earlier ignore `allowed_permission_profiles` and managed

1627`default_permissions`.1637`default_permissions`.


1637 1647 

1638<ConfigTable1648<ConfigTable

1639 options={[1649 options={[

1650 {

1651 key: "sqlite_home",

1652 type: "string (path)",

1653 description:

1654 "Enforce the directory where Codex stores SQLite-backed runtime state.",

1655 },

1656 {

1657 key: "log_dir",

1658 type: "string (path)",

1659 description: "Enforce the directory where Codex writes local log files.",

1660 },

1661 {

1662 key: "model_catalog_json",

1663 type: "string (path)",

1664 description: "Enforce the JSON model catalog Codex uses at startup.",

1665 },

1666 {

1667 key: "check_for_update_on_startup",

1668 type: "boolean",

1669 description: "Enforce whether Codex checks for updates when it starts.",

1670 },

1671 {

1672 key: "allow_login_shell",

1673 type: "boolean",

1674 description: "Enforce whether shell tools can start a login shell.",

1675 },

1676 {

1677 key: "feedback",

1678 type: "table",

1679 description: "Managed feedback settings.",

1680 },

1681 {

1682 key: "feedback.enabled",

1683 type: "boolean",

1684 description:

1685 "Enforce whether users can submit feedback across Codex clients.",

1686 },

1640 {1687 {

1641 key: "allowed_approval_policies",1688 key: "allowed_approval_policies",

1642 type: "array<string>",1689 type: "array<string>",


1737 description:1784 description:

1738 "Allowed native Windows sandbox implementations for `windows.sandbox` (`elevated` and `unelevated`). The list must not be empty. When both are allowed and no mode is selected, Codex prefers `elevated`.",1785 "Allowed native Windows sandbox implementations for `windows.sandbox` (`elevated` and `unelevated`). The list must not be empty. When both are allowed and no mode is selected, Codex prefers `elevated`.",

1739 },1786 },

1787 {

1788 key: "windows.sandbox_private_desktop",

1789 type: "boolean",

1790 description:

1791 "Enforce whether the native Windows sandbox starts its child process on a private desktop.",

1792 },

1740 {1793 {

1741 key: "remote_sandbox_config",1794 key: "remote_sandbox_config",

1742 type: "array<table>",1795 type: "array<table>",


1803 description:1856 description:

1804 "Pin Apps integration availability on or off for managed users.",1857 "Pin Apps integration availability on or off for managed users.",

1805 },1858 },

1859 {

1860 key: "features.in_app_updates",

1861 type: "boolean",

1862 description:

1863 "Set to `false` in `requirements.toml` to disable in-app updates. Updates remain enabled by default when this requirement is omitted.",

1864 },

1806 {1865 {

1807 key: "features.in_app_browser",1866 key: "features.in_app_browser",

1808 type: "boolean",1867 type: "boolean",


1984 key: "hooks.<Event>",2043 key: "hooks.<Event>",

1985 type: "array<table>",2044 type: "array<table>",

1986 description:2045 description:

1987 "Matcher groups for a hook event such as `PreToolUse`, `PermissionRequest`, `PostToolUse`, `PreCompact`, `PostCompact`, `SessionStart`, `SubagentStart`, `SubagentStop`, `UserPromptSubmit`, or `Stop`.",2046 "Matcher groups for a hook event such as `PreToolUse`, `PermissionRequest`, `PostToolUse`, `PreCompact`, `PostCompact`, `SessionStart`, `SessionEnd`, `SubagentStart`, `SubagentStop`, `UserPromptSubmit`, or `Stop`.",

1988 },2047 },

1989 {2048 {

1990 key: "hooks.<Event>[].hooks",2049 key: "hooks.<Event>[].hooks",

Details

573 573 

574# alternate_screen = "auto"574# alternate_screen = "auto"

575 575 

576# Working directory for resumed or forked sessions: current | session.

577 

578# Leave unset to choose when the current and saved session directories differ.

579 

580# resume_cwd = "session"

581 

576# Ordered list of footer status-line item IDs. When unset, Codex uses:582# Ordered list of footer status-line item IDs. When unset, Codex uses:

577 583 

578# ["model-with-reasoning", "context-remaining", "current-dir"].584# ["model-with-reasoning", "context-remaining", "current-dir"].

security/cli.md +46 −22

Details

25Check the installed version:25Check the installed version:

26 26 

27```bash27```bash

28npx codex-security --version28npx @openai/codex-security --version

29```29```

30 30 

31List the available commands:31List the available commands:

32 32 

33```bash33```bash

34npx codex-security --help34npx @openai/codex-security --help

35```35```

36 36 

37Use `npx codex-security scan --help` or `npx codex-security export --help` for the37Use `npx @openai/codex-security scan --help` or `npx @openai/codex-security export --help` for the

38complete command help. The [CLI reference](https://learn.chatgpt.com/docs/security/cli/reference)38complete command help. The [CLI reference](https://learn.chatgpt.com/docs/security/cli/reference)

39covers each argument, output format, and exit code.39covers each argument, output format, and exit code.

40 40 


43For local use, sign in with your ChatGPT account:43For local use, sign in with your ChatGPT account:

44 44 

45```bash45```bash

46npx codex-security login46npx @openai/codex-security login

47```47```

48 48 

49On a remote or headless machine, use device authentication:49On a remote or headless machine, use device authentication:

50 50 

51```bash51```bash

52npx codex-security login --device-auth52npx @openai/codex-security login --device-auth

53```53```

54 54 

55For CI and other automated workflows, use an OpenAI API key instead:55For CI and other automated workflows, use an OpenAI API key instead:


61Keep API keys in your shell or secret manager. Codex Security can also reuse an61Keep API keys in your shell or secret manager. Codex Security can also reuse an

62existing file-backed Codex sign-in.62existing file-backed Codex sign-in.

63 63 

64If a ChatGPT sign-in and `OPENAI_API_KEY` or `CODEX_API_KEY` are both

65available, interactive scans with text output ask which credential to use. CI,

66JSON and JSONL scans, and other scans without an interactive terminal use the

67environment API key by default. Dry runs don't prompt or load credentials.

68 

69To use your stored sign-in for a scan, pass `--auth chatgpt`:

70 

71```bash

72npx @openai/codex-security scan . --auth chatgpt

73```

74 

75To use an environment API key, pass `--auth api-key`:

76 

77```bash

78npx @openai/codex-security scan . --auth api-key

79```

80 

81To make your stored sign-in the automatic default, unset both environment API

82keys:

83 

84```bash

85unset OPENAI_API_KEY CODEX_API_KEY

86```

87 

64Depending on your account and repository, full-repository scans may also88Depending on your account and repository, full-repository scans may also

65require [Trusted Access for Cyber](https://chatgpt.com/cyber). Signing in or89require [Trusted Access for Cyber](https://chatgpt.com/cyber). Signing in or

66setting an API key doesn't grant that access.90setting an API key doesn't grant that access.


81Check the repository, target, and output directory before starting a scan:105Check the repository, target, and output directory before starting a scan:

82 106 

83```bash107```bash

84npx codex-security scan "$REPOSITORY" --output-dir "$SCAN_DIR" --dry-run108npx @openai/codex-security scan "$REPOSITORY" --output-dir "$SCAN_DIR" --dry-run

85```109```

86 110 

87The dry run checks local inputs without starting Codex, loading credentials,111The dry run checks local inputs without starting Codex, loading credentials,


92Run a standard scan and keep its results in the selected directory:116Run a standard scan and keep its results in the selected directory:

93 117 

94```bash118```bash

95npx codex-security scan "$REPOSITORY" --output-dir "$SCAN_DIR"119npx @openai/codex-security scan "$REPOSITORY" --output-dir "$SCAN_DIR"

96```120```

97 121 

98The CLI writes the scan result to stdout and sends progress and its completion122The CLI writes the scan result to stdout and sends progress and its completion


106```130```

107 131 

108For a local package installation, run the suggested export command with132For a local package installation, run the suggested export command with

109`npx codex-security`.133`npx @openai/codex-security`.

110 134 

111Scans are report-only by default, so findings remain available for local135Scans are report-only by default, so findings remain available for local

112review. You may want to add a severity threshold when you are ready to [run scans in136review. You may want to add a severity threshold when you are ready to [run scans in


145Use a path scan when a repository contains separate services or packages:169Use a path scan when a repository contains separate services or packages:

146 170 

147```bash171```bash

148npx codex-security scan "$REPOSITORY" --path services/billing --path packages/auth172npx @openai/codex-security scan "$REPOSITORY" --path services/billing --path packages/auth

149```173```

150 174 

151Review committed changes between the base revision and `HEAD`:175Review committed changes between the base revision and `HEAD`:

152 176 

153```bash177```bash

154npx codex-security scan "$REPOSITORY" --diff origin/main --head HEAD178npx @openai/codex-security scan "$REPOSITORY" --diff origin/main --head HEAD

155```179```

156 180 

157Review staged and unstaged changes against `HEAD`:181Review staged and unstaged changes against `HEAD`:

158 182 

159```bash183```bash

160npx codex-security scan "$REPOSITORY" --working-tree --base HEAD184npx @openai/codex-security scan "$REPOSITORY" --working-tree --base HEAD

161```185```

162 186 

163Diff and working-tree scans expect the repository argument to be the Git187Diff and working-tree scans expect the repository argument to be the Git


166Use deep mode when a repository or path needs broader review:190Use deep mode when a repository or path needs broader review:

167 191 

168```bash192```bash

169npx codex-security scan "$REPOSITORY" --mode deep193npx @openai/codex-security scan "$REPOSITORY" --mode deep

170```194```

171 195 

172## Add architecture and security context196## Add architecture and security context


176actually works:200actually works:

177 201 

178```bash202```bash

179npx codex-security scan "$REPOSITORY" \203npx @openai/codex-security scan "$REPOSITORY" \

180 --knowledge-base /path/to/architecture.md \204 --knowledge-base /path/to/architecture.md \

181 --knowledge-base /path/to/security-policies205 --knowledge-base /path/to/security-policies

182```206```


187in USD:211in USD:

188 212 

189```bash213```bash

190npx codex-security scan "$REPOSITORY" --max-cost 5214npx @openai/codex-security scan "$REPOSITORY" --max-cost 5

191```215```

192 216 

193Requests already in progress can finish above the limit. Codex Security keeps217Requests already in progress can finish above the limit. Codex Security keeps


198Install a Git pre-commit security check for your repository:222Install a Git pre-commit security check for your repository:

199 223 

200```bash224```bash

201npx codex-security install-hook225npx @openai/codex-security install-hook

202```226```

203 227 

204The check scans staged and unstaged changes before each commit. It blocks228The check scans staged and unstaged changes before each commit. It blocks


216Discover and select repositories from your GitHub account or organization:240Discover and select repositories from your GitHub account or organization:

217 241 

218```bash242```bash

219npx codex-security bulk-scan243npx @openai/codex-security bulk-scan

220```244```

221 245 

222The interactive flow excludes archived repositories and forks. It asks you to246The interactive flow excludes archived repositories and forks. It asks you to


225To scan a prepared repository list, provide a CSV and an output directory:249To scan a prepared repository list, provide a CSV and an output directory:

226 250 

227```bash251```bash

228npx codex-security bulk-scan repositories.csv \252npx @openai/codex-security bulk-scan repositories.csv \

229 --output-dir /path/outside/repositories/security-scans \253 --output-dir /path/outside/repositories/security-scans \

230 --workers 4254 --workers 4

231```255```


263List the saved scans for your repository:287List the saved scans for your repository:

264 288 

265```bash289```bash

266npx codex-security scans list "$REPOSITORY"290npx @openai/codex-security scans list "$REPOSITORY"

267```291```

268 292 

269Copy a scan ID from the results to inspect its findings and configuration:293Copy a scan ID from the results to inspect its findings and configuration:

270 294 

271```bash295```bash

272npx codex-security scans show SCAN_ID296npx @openai/codex-security scans show SCAN_ID

273```297```

274 298 

275Run the same scan against the current checkout using its original configuration:299Run the same scan against the current checkout using its original configuration:

276 300 

277```bash301```bash

278npx codex-security scans rerun SCAN_ID302npx @openai/codex-security scans rerun SCAN_ID

279```303```

280 304 

281To compare two scans, first match findings that share the same root cause:305To compare two scans, first match findings that share the same root cause:

282 306 

283```bash307```bash

284npx codex-security scans match PREVIOUS_SCAN_ID CURRENT_SCAN_ID308npx @openai/codex-security scans match PREVIOUS_SCAN_ID CURRENT_SCAN_ID

285```309```

286 310 

287Then check which findings are new, persisting, reopened, resolved, or unknown:311Then check which findings are new, persisting, reopened, resolved, or unknown:

288 312 

289```bash313```bash

290npx codex-security scans compare PREVIOUS_SCAN_ID CURRENT_SCAN_ID314npx @openai/codex-security scans compare PREVIOUS_SCAN_ID CURRENT_SCAN_ID

291```315```

292 316 

293For the bulk-scan CSV format, scan-history filters, and command options, see317For the bulk-scan CSV format, scan-history filters, and command options, see

Details

31Start an interactive bulk scan:31Start an interactive bulk scan:

32 32 

33```bash33```bash

34npx codex-security bulk-scan34npx @openai/codex-security bulk-scan

35```35```

36 36 

37The CLI guides you through these steps:37The CLI guides you through these steps:


56Set `GH_HOST` when you start repository discovery:56Set `GH_HOST` when you start repository discovery:

57 57 

58```bash58```bash

59GH_HOST=github.example.com npx codex-security bulk-scan59GH_HOST=github.example.com npx @openai/codex-security bulk-scan

60```60```

61 61 

62Interactive discovery requires a terminal. For CI, containers, or a prepared62Interactive discovery requires a terminal. For CI, containers, or a prepared


93Pass the CSV and a private output directory outside the repositories:93Pass the CSV and a private output directory outside the repositories:

94 94 

95```bash95```bash

96npx codex-security bulk-scan repositories.csv \96npx @openai/codex-security bulk-scan repositories.csv \

97 --output-dir /path/outside/repositories/security-scans \97 --output-dir /path/outside/repositories/security-scans \

98 --workers 498 --workers 4

99```99```


143Export one completed repository scan when you need a portable result:143Export one completed repository scan when you need a portable result:

144 144 

145```bash145```bash

146npx codex-security export \146npx @openai/codex-security export \

147 /path/outside/repositories/security-scans/artifacts/payments/attempt-1 \147 /path/outside/repositories/security-scans/artifacts/payments/attempt-1 \

148 --export-format sarif \148 --export-format sarif \

149 --output /path/outside/repositories/payments.sarif149 --output /path/outside/repositories/payments.sarif


158Run the original command with the same CSV and output directory:158Run the original command with the same CSV and output directory:

159 159 

160```bash160```bash

161npx codex-security bulk-scan repositories.csv \161npx @openai/codex-security bulk-scan repositories.csv \

162 --output-dir /path/outside/repositories/security-scans \162 --output-dir /path/outside/repositories/security-scans \

163 --workers 4163 --workers 4

164```164```


177error:177error:

178 178 

179```bash179```bash

180npx codex-security bulk-scan repositories.csv \180npx @openai/codex-security bulk-scan repositories.csv \

181 --output-dir /path/outside/repositories/security-scans \181 --output-dir /path/outside/repositories/security-scans \

182 --workers 4 \182 --workers 4 \

183 --max-attempts 3183 --max-attempts 3

Details

14partners receive installation instructions with their access. Contact your14partners receive installation instructions with their access. Contact your

15account team if you need access.15account team if you need access.

16 16 

17### Why does a scan use an API key after sign-in

18 

19When your environment includes `OPENAI_API_KEY` or `CODEX_API_KEY`, scans

20without an interactive terminal and JSON and JSONL scans use the environment

21API key by default, even after a successful ChatGPT or access-token login.

22Interactive scans with text output ask you to choose when a ChatGPT sign-in is

23also available. Dry runs don't prompt or load credentials.

24 

25To use your stored credentials for a scan, select them explicitly:

26 

27```bash

28npx @openai/codex-security scan . --auth chatgpt

29```

30 

31To make your stored credentials the automatic default, run

32`unset OPENAI_API_KEY CODEX_API_KEY`. For all supported authentication modes,

33see the [CLI reference](https://learn.chatgpt.com/docs/security/cli/reference#select-scan-authentication).

34 

17### How does bulk repository scanning work35### How does bulk repository scanning work

18 36 

19Sign in with GitHub CLI:37Sign in with GitHub CLI:


25Discover and select repositories from a GitHub account or organization:43Discover and select repositories from a GitHub account or organization:

26 44 

27```bash45```bash

28npx codex-security bulk-scan46npx @openai/codex-security bulk-scan

29```47```

30 48 

31For a prepared list, provide a repository CSV and an output directory:49For a prepared list, provide a repository CSV and an output directory:

32 50 

33```bash51```bash

34npx codex-security bulk-scan repositories.csv \52npx @openai/codex-security bulk-scan repositories.csv \

35 --output-dir /path/outside/repositories/security-scans \53 --output-dir /path/outside/repositories/security-scans \

36 --workers 454 --workers 4

37```55```


48Add `--max-attempts 3` to retry temporary repository or scan errors:66Add `--max-attempts 3` to retry temporary repository or scan errors:

49 67 

50```bash68```bash

51npx codex-security bulk-scan repositories.csv \69npx @openai/codex-security bulk-scan repositories.csv \

52 --output-dir /path/outside/repositories/security-scans \70 --output-dir /path/outside/repositories/security-scans \

53 --workers 4 \71 --workers 4 \

54 --max-attempts 372 --max-attempts 3


60`--knowledge-base`:78`--knowledge-base`:

61 79 

62```bash80```bash

63npx codex-security scan . \81npx @openai/codex-security scan . \

64 --knowledge-base /path/to/architecture.md \82 --knowledge-base /path/to/architecture.md \

65 --knowledge-base /path/to/security-policies83 --knowledge-base /path/to/security-policies

66```84```


76List saved scans for your repository:94List saved scans for your repository:

77 95 

78```bash96```bash

79npx codex-security scans list /path/to/repository97npx @openai/codex-security scans list /path/to/repository

80```98```

81 99 

82Use a scan ID from the results to inspect its findings:100Use a scan ID from the results to inspect its findings:

83 101 

84```bash102```bash

85npx codex-security scans show SCAN_ID103npx @openai/codex-security scans show SCAN_ID

86```104```

87 105 

88Each completed scan keeps its report, findings, coverage, and supporting106Each completed scan keeps its report, findings, coverage, and supporting


94Match findings that share a root cause across the two scans:112Match findings that share a root cause across the two scans:

95 113 

96```bash114```bash

97npx codex-security scans match PREVIOUS_SCAN_ID CURRENT_SCAN_ID115npx @openai/codex-security scans match PREVIOUS_SCAN_ID CURRENT_SCAN_ID

98```116```

99 117 

100Compare the matched findings:118Compare the matched findings:

101 119 

102```bash120```bash

103npx codex-security scans compare PREVIOUS_SCAN_ID CURRENT_SCAN_ID121npx @openai/codex-security scans compare PREVIOUS_SCAN_ID CURRENT_SCAN_ID

104```122```

105 123 

106The comparison identifies new, persisting, reopened, resolved, and unknown124The comparison identifies new, persisting, reopened, resolved, and unknown


112Inspect the saved scan to find the occurrence ID:130Inspect the saved scan to find the occurrence ID:

113 131 

114```bash132```bash

115npx codex-security scans show SCAN_ID133npx @openai/codex-security scans show SCAN_ID

116```134```

117 135 

118Record why that finding doesn't apply:136Record why that finding doesn't apply:

119 137 

120```bash138```bash

121npx codex-security findings mark-false-positive FINDING_OCCURRENCE_ID \139npx @openai/codex-security findings mark-false-positive FINDING_OCCURRENCE_ID \

122 --reason "The framework escapes this input before it reaches the query"140 --reason "The framework escapes this input before it reaches the query"

123```141```

124 142 


135rerunning your baseline scan:153rerunning your baseline scan:

136 154 

137```bash155```bash

138npx codex-security scans rerun BASELINE_SCAN_ID156npx @openai/codex-security scans rerun BASELINE_SCAN_ID

139```157```

140 158 

141Match the baseline findings to the new scan:159Match the baseline findings to the new scan:

142 160 

143```bash161```bash

144npx codex-security scans match BASELINE_SCAN_ID REPEAT_SCAN_ID162npx @openai/codex-security scans match BASELINE_SCAN_ID REPEAT_SCAN_ID

145```163```

146 164 

147Compare the matched results:165Compare the matched results:

148 166 

149```bash167```bash

150npx codex-security scans compare BASELINE_SCAN_ID REPEAT_SCAN_ID168npx @openai/codex-security scans compare BASELINE_SCAN_ID REPEAT_SCAN_ID

151```169```

152 170 

153Provide shared architecture and security guidance when missing context may171Provide shared architecture and security guidance when missing context may


160After applying a fix, rerun the original scan:178After applying a fix, rerun the original scan:

161 179 

162```bash180```bash

163npx codex-security scans rerun BEFORE_SCAN_ID181npx @openai/codex-security scans rerun BEFORE_SCAN_ID

164```182```

165 183 

166Match the original findings to the new scan:184Match the original findings to the new scan:

167 185 

168```bash186```bash

169npx codex-security scans match BEFORE_SCAN_ID AFTER_SCAN_ID187npx @openai/codex-security scans match BEFORE_SCAN_ID AFTER_SCAN_ID

170```188```

171 189 

172Compare the matched findings:190Compare the matched findings:

173 191 

174```bash192```bash

175npx codex-security scans compare BEFORE_SCAN_ID AFTER_SCAN_ID193npx @openai/codex-security scans compare BEFORE_SCAN_ID AFTER_SCAN_ID

176```194```

177 195 

178Confirm that the new scan covers the original target and affected path without196Confirm that the new scan covers the original target and affected path without


180checkout:198checkout:

181 199 

182```bash200```bash

183npx codex-security validate /path/to/original/findings.json \201npx @openai/codex-security validate /path/to/original/findings.json \

184 "Recheck the SQL injection in src/orders.ts:42 against the current code"202 "Recheck the SQL injection in src/orders.ts:42 against the current code"

185```203```

186 204 


204Set an estimated cost limit in USD before starting the scan:222Set an estimated cost limit in USD before starting the scan:

205 223 

206```bash224```bash

207npx codex-security scan . --max-cost 5225npx @openai/codex-security scan . --max-cost 5

208```226```

209 227 

210The limit is an estimate, not a hard spending cap. Requests already in228The limit is an estimate, not a hard spending cap. Requests already in


216Install a pre-commit security check for staged and unstaged changes:234Install a pre-commit security check for staged and unstaged changes:

217 235 

218```bash236```bash

219npx codex-security install-hook237npx @openai/codex-security install-hook

220```238```

221 239 

222For pull-request checks, scan the committed changes and set a severity240For pull-request checks, scan the committed changes and set a severity

223threshold:241threshold:

224 242 

225```bash243```bash

226npx codex-security scan . \244npx @openai/codex-security scan . \

227 --diff origin/main \245 --diff origin/main \

228 --fail-on-severity high246 --fail-on-severity high

229```247```

Details

10 instructions provided with your access.10 instructions provided with your access.

11 11 

12When you install the package in a local project, invoke the executable as12When you install the package in a local project, invoke the executable as

13`npx codex-security`. Use `codex-security` directly when the executable is13`npx @openai/codex-security`. Use `codex-security` directly when the executable is

14available on your `PATH`.14available on your `PATH`.

15 15 

16## Command overview16## Command overview


46List all available commands:46List all available commands:

47 47 

48```bash48```bash

49npx codex-security --help49npx @openai/codex-security --help

50```50```

51 51 

52Add `--help` to a command to inspect its arguments and options:52Add `--help` to a command to inspect its arguments and options:

53 53 

54```bash54```bash

55npx codex-security scan --help55npx @openai/codex-security scan --help

56```56```

57 57 

58`codex-security --version` prints the installed version and exits.58`codex-security --version` prints the installed version and exits.


64Print the agent-readable command manifest:64Print the agent-readable command manifest:

65 65 

66```bash66```bash

67npx codex-security --llms67npx @openai/codex-security --llms

68```68```

69 69 

70Inspect the scan argument schema as JSON:70Inspect the scan argument schema as JSON:

71 71 

72```bash72```bash

73npx codex-security scan --schema --format json73npx @openai/codex-security scan --schema --format json

74```74```

75 75 

76Generate shell completions for Bash:76Generate shell completions for Bash:

77 77 

78```bash78```bash

79npx codex-security completions bash79npx @openai/codex-security completions bash

80```80```

81 81 

82Replace `bash` with `zsh` or `fish` for those shells.82Replace `bash` with `zsh` or `fish` for those shells.


89Register the CLI as an MCP server:89Register the CLI as an MCP server:

90 90 

91```bash91```bash

92npx codex-security mcp add92npx @openai/codex-security mcp add

93```93```

94 94 

95Sync Codex Security skills to your agents:95Sync Codex Security skills to your agents:

96 96 

97```bash97```bash

98npx codex-security skills add98npx @openai/codex-security skills add

99```99```

100 100 

101MCP exposes only the read-only `info` metadata command. Scans, exports,101MCP exposes only the read-only `info` metadata command. Scans, exports,


109```text109```text

110usage: codex-security scan [-h] [--path PATH | --diff BASE | --working-tree]110usage: codex-security scan [-h] [--path PATH | --diff BASE | --working-tree]

111 [--head HEAD] [--base BASE]111 [--head HEAD] [--base BASE]

112 [--auth {auto,chatgpt,api-key}]

112 [--knowledge-base PATH]113 [--knowledge-base PATH]

113 [--mode {standard,deep}] [--model MODEL]114 [--mode {standard,deep}] [--model MODEL]

114 [--output-dir DIR]115 [--output-dir DIR]


120 121 

121`repository` defaults to the current directory.122`repository` defaults to the current directory.

122 123 

124### Select scan authentication

125 

126Use `--auth auto`, the default, to select credentials automatically. When both

127a ChatGPT sign-in and `OPENAI_API_KEY` or `CODEX_API_KEY` are available,

128interactive scans with text output ask which credential to use. CI, JSON and

129JSONL scans, and other scans without an interactive terminal use the

130environment API key. Dry runs don't prompt or load credentials.

131 

132To use your stored credentials, pass `--auth chatgpt`:

133 

134```bash

135npx @openai/codex-security scan . --auth chatgpt

136```

137 

138To use an environment API key, pass `--auth api-key`:

139 

140```bash

141npx @openai/codex-security scan . --auth api-key

142```

143 

144To make stored credentials the automatic default, run

145`unset OPENAI_API_KEY CODEX_API_KEY`.

146 

123### Select the scan target147### Select the scan target

124 148 

125Choose one target type for each scan.149Choose one target type for each scan.


143Scan the entire repository:167Scan the entire repository:

144 168 

145```bash169```bash

146npx codex-security scan .170npx @openai/codex-security scan .

147```171```

148 172 

149Scan selected paths:173Scan selected paths:

150 174 

151```bash175```bash

152npx codex-security scan . --path src --path tests176npx @openai/codex-security scan . --path src --path tests

153```177```

154 178 

155Scan committed changes:179Scan committed changes:

156 180 

157```bash181```bash

158npx codex-security scan . --diff origin/main --head HEAD182npx @openai/codex-security scan . --diff origin/main --head HEAD

159```183```

160 184 

161Scan staged and unstaged changes:185Scan staged and unstaged changes:

162 186 

163```bash187```bash

164npx codex-security scan . --working-tree --base HEAD188npx @openai/codex-security scan . --working-tree --base HEAD

165```189```

166 190 

167Run a deeper review of the repository:191Run a deeper review of the repository:

168 192 

169```bash193```bash

170npx codex-security scan . --mode deep194npx @openai/codex-security scan . --mode deep

171```195```

172 196 

173### Add security context197### Add security context


176or security policies. Repeat the option for more files or directories:200or security policies. Repeat the option for more files or directories:

177 201 

178```bash202```bash

179npx codex-security scan . \203npx @openai/codex-security scan . \

180 --knowledge-base /path/to/architecture.md \204 --knowledge-base /path/to/architecture.md \

181 --knowledge-base /path/to/security-policies205 --knowledge-base /path/to/security-policies

182```206```


215result directory with `--archive-existing`.239result directory with `--archive-existing`.

216 240 

217```bash241```bash

218npx codex-security scan . \242npx @openai/codex-security scan . \

219 --output-dir /path/outside/repository/results \243 --output-dir /path/outside/repository/results \

220 --archive-existing244 --archive-existing

221```245```


224severity policy in CI:248severity policy in CI:

225 249 

226```bash250```bash

227npx codex-security scan . \251npx @openai/codex-security scan . \

228 --diff origin/main \252 --diff origin/main \

229 --output-dir /path/outside/repository/results \253 --output-dir /path/outside/repository/results \

230 --json \254 --json \


236probing the plugin's Python interpreter:260probing the plugin's Python interpreter:

237 261 

238```bash262```bash

239npx codex-security scan . --output-dir /path/outside/repository/results --dry-run263npx @openai/codex-security scan . --output-dir /path/outside/repository/results --dry-run

240```264```

241 265 

242### Configure the runtime266### Configure the runtime


255string:279string:

256 280 

257```bash281```bash

258npx codex-security scan . --codex 'model="<model>"'282npx @openai/codex-security scan . --codex 'model="<model>"'

259```283```

260 284 

261Codex Security owns plugin-loading configuration and rejects conflicting285Codex Security owns plugin-loading configuration and rejects conflicting


266Install a Git pre-commit security check for the current repository:290Install a Git pre-commit security check for the current repository:

267 291 

268```bash292```bash

269npx codex-security install-hook293npx @openai/codex-security install-hook

270```294```

271 295 

272The check scans staged and unstaged changes before each commit and blocks296The check scans staged and unstaged changes before each commit and blocks


275when needed:299when needed:

276 300 

277```bash301```bash

278npx codex-security install-hook . --fail-on-severity medium302npx @openai/codex-security install-hook . --fail-on-severity medium

279```303```

280 304 

281## `codex-security bulk-scan`305## `codex-security bulk-scan`


300For a prepared repository list, provide a CSV and `--output-dir`:324For a prepared repository list, provide a CSV and `--output-dir`:

301 325 

302```bash326```bash

303npx codex-security bulk-scan repositories.csv \327npx @openai/codex-security bulk-scan repositories.csv \

304 --output-dir /path/outside/repositories/security-scans \328 --output-dir /path/outside/repositories/security-scans \

305 --workers 4329 --workers 4

306```330```


330List saved scans for the current directory:354List saved scans for the current directory:

331 355 

332```bash356```bash

333npx codex-security scans357npx @openai/codex-security scans

334```358```

335 359 

336List scans for a different repository:360List scans for a different repository:

337 361 

338```bash362```bash

339npx codex-security scans list /path/to/repository363npx @openai/codex-security scans list /path/to/repository

340```364```

341 365 

342Find scans stored under a specific output directory:366Find scans stored under a specific output directory:

343 367 

344```bash368```bash

345npx codex-security scans list --scan-root /path/outside/repository/results369npx @openai/codex-security scans list --scan-root /path/outside/repository/results

346```370```

347 371 

348### Inspect or repeat a scan372### Inspect or repeat a scan


350Show a saved scan's results and configuration:374Show a saved scan's results and configuration:

351 375 

352```bash376```bash

353npx codex-security scans show SCAN_ID377npx @openai/codex-security scans show SCAN_ID

354```378```

355 379 

356Rerun the scan against the current checkout using its original configuration:380Rerun the scan against the current checkout using its original configuration:

357 381 

358```bash382```bash

359npx codex-security scans rerun SCAN_ID383npx @openai/codex-security scans rerun SCAN_ID

360```384```

361 385 

362### Match and compare findings386### Match and compare findings


364Match findings that share the same root cause across two scans:388Match findings that share the same root cause across two scans:

365 389 

366```bash390```bash

367npx codex-security scans match PREVIOUS_SCAN_ID CURRENT_SCAN_ID391npx @openai/codex-security scans match PREVIOUS_SCAN_ID CURRENT_SCAN_ID

368```392```

369 393 

370Compare the matched scans to find new, persisting, reopened, resolved, and394Compare the matched scans to find new, persisting, reopened, resolved, and

371unknown findings:395unknown findings:

372 396 

373```bash397```bash

374npx codex-security scans compare PREVIOUS_SCAN_ID CURRENT_SCAN_ID398npx @openai/codex-security scans compare PREVIOUS_SCAN_ID CURRENT_SCAN_ID

375```399```

376 400 

377A finding is unknown when the later scan has incomplete coverage or doesn't401A finding is unknown when the later scan has incomplete coverage or doesn't


382other checkouts:406other checkouts:

383 407 

384```bash408```bash

385npx codex-security scans match --all409npx @openai/codex-security scans match --all

386```410```

387 411 

388Scan results can vary even when you rerun the same configuration. Matching and412Scan results can vary even when you rerun the same configuration. Matching and


402Inspect the saved scan to identify the finding occurrence:426Inspect the saved scan to identify the finding occurrence:

403 427 

404```bash428```bash

405npx codex-security scans show SCAN_ID429npx @openai/codex-security scans show SCAN_ID

406```430```

407 431 

408Record a specific explanation for the false positive:432Record a specific explanation for the false positive:

409 433 

410```bash434```bash

411npx codex-security findings mark-false-positive FINDING_OCCURRENCE_ID \435npx @openai/codex-security findings mark-false-positive FINDING_OCCURRENCE_ID \

412 --reason "The framework escapes this input before it reaches the query"436 --reason "The framework escapes this input before it reaches the query"

413```437```

414 438 


451Write SARIF to a file:475Write SARIF to a file:

452 476 

453```bash477```bash

454npx codex-security export /path/to/scan \478npx @openai/codex-security export /path/to/scan \

455 --export-format sarif \479 --export-format sarif \

456 --source-root /path/to/repository \480 --source-root /path/to/repository \

457 --output /path/outside/repository/exports/results.sarif481 --output /path/outside/repository/exports/results.sarif


460Write SARIF to stdout:484Write SARIF to stdout:

461 485 

462```bash486```bash

463npx codex-security export /path/to/scan --export-format sarif --source-root . --output -487npx @openai/codex-security export /path/to/scan --export-format sarif --source-root . --output -

464```488```

465 489 

466Export findings as JSON:490Export findings as JSON:

467 491 

468```bash492```bash

469npx codex-security export /path/to/scan \493npx @openai/codex-security export /path/to/scan \

470 --export-format json \494 --export-format json \

471 --output /path/outside/repository/exports/findings.json495 --output /path/outside/repository/exports/findings.json

472```496```


474Export findings as CSV:498Export findings as CSV:

475 499 

476```bash500```bash

477npx codex-security export /path/to/scan \501npx @openai/codex-security export /path/to/scan \

478 --export-format csv \502 --export-format csv \

479 --output /path/outside/repository/exports/findings.csv503 --output /path/outside/repository/exports/findings.csv

480```504```


484Check whether a candidate finding is valid:508Check whether a candidate finding is valid:

485 509 

486```bash510```bash

487npx codex-security validate findings.json "Possible SQL injection in src/query.ts:42"511npx @openai/codex-security validate findings.json "Possible SQL injection in src/query.ts:42"

488```512```

489 513 

490Generate a fix with the bundled remediation skill:514Generate a fix with the bundled remediation skill:

491 515 

492```bash516```bash

493npx codex-security patch findings.json "Missing authorization check in src/routes.ts:18"517npx @openai/codex-security patch findings.json "Missing authorization check in src/routes.ts:18"

494```518```

495 519 

496Each argument can contain literal text or point to a file. Both commands work520Each argument can contain literal text or point to a file. Both commands work


504Sign in interactively:528Sign in interactively:

505 529 

506```bash530```bash

507npx codex-security login531npx @openai/codex-security login

508```532```

509 533 

510Use device authentication on a remote or headless machine:534Use device authentication on a remote or headless machine:

511 535 

512```bash536```bash

513npx codex-security login --device-auth537npx @openai/codex-security login --device-auth

514```538```

515 539 

516Check the current sign-in:540Check the current sign-in:

517 541 

518```bash542```bash

519npx codex-security login status543npx @openai/codex-security login status

520```544```

521 545 

522Remove the stored sign-in:546Remove the stored sign-in:

523 547 

524```bash548```bash

525npx codex-security logout549npx @openai/codex-security logout

526```550```

527 551 

528Store an API key by passing it on stdin:552Store an API key by passing it on stdin:

529 553 

530```bash554```bash

531printenv OPENAI_API_KEY | npx codex-security login --with-api-key555printenv OPENAI_API_KEY | npx @openai/codex-security login --with-api-key

532```556```

533 557 

534Store an enterprise access token:558Store an enterprise access token:

535 559 

536```bash560```bash

537printenv CODEX_ACCESS_TOKEN | npx codex-security login --with-access-token561printenv CODEX_ACCESS_TOKEN | npx @openai/codex-security login --with-access-token

538```562```

539 563 

540Inspect read-only SDK and bundled-plugin metadata:564Inspect read-only SDK and bundled-plugin metadata:

541 565 

542```bash566```bash

543npx codex-security info --json567npx @openai/codex-security info --json

544```568```

545 569 

546When you expose the CLI as an MCP server, `info` is the only available command.570When you expose the CLI as an MCP server, `info` is the only available command.


654## Authentication and prerequisites678## Authentication and prerequisites

655 679 

656Set `OPENAI_API_KEY` or `CODEX_API_KEY`, sign in with `codex-security login`, or680Set `OPENAI_API_KEY` or `CODEX_API_KEY`, sign in with `codex-security login`, or

657use an existing file-backed Codex sign-in. Environment API keys take precedence681use an existing file-backed Codex sign-in. When a ChatGPT sign-in and an

658over stored credentials. For CI, keep the API key scoped to the scan step and682environment API key are both available, interactive scans with text output ask

659use a trusted workflow.683which credential to use. CI, JSON and JSONL scans, and other scans without an

684interactive terminal use the environment API key by default. Dry runs don't

685prompt or load credentials. Use `--auth` to select the credential explicitly.

686For CI, keep the API key scoped to the scan step and use a trusted workflow.

660 687 

661The CLI requires Node.js 22 or later. Running a scan or exporting findings also688The CLI requires Node.js 22 or later. Running a scan or exporting findings also

662requires Python 3.10 or later. Python 3.10 also requires `tomli`. Use `--python`689requires Python 3.10 or later. Python 3.10 also requires `tomli`. Use `--python`

Details

19Have ChatGPT gather approved inputs from multiple plugins to prepare a workflow, or let it use your computer to complete tasks across desktop apps.19Have ChatGPT gather approved inputs from multiple plugins to prepare a workflow, or let it use your computer to complete tasks across desktop apps.

20 20 

21- [Coordinate new-hire onboarding](https://developers.openai.com/codex/use-cases/new-hire-onboarding): Use ChatGPT to gather approved new-hire context, stage tracker updates, draft team-by-team...21- [Coordinate new-hire onboarding](https://developers.openai.com/codex/use-cases/new-hire-onboarding): Use ChatGPT to gather approved new-hire context, stage tracker updates, draft team-by-team...

22- [Use your computer with ChatGPT](https://developers.openai.com/codex/use-cases/use-your-computer-with-codex): Use Computer Use to hand off multi-step tasks across Mac apps, windows, and files, and...22- [Use your computer with ChatGPT](https://developers.openai.com/codex/use-cases/use-your-computer-with-codex): In the ChatGPT desktop app, use Computer Use to complete a scoped task across macOS or...

23 23 

24## Keep work moving24## Keep work moving

25 25 

26Have ChatGPT check the sources you approve and return only the items that need attention: real asks, changed artifacts, blocked handoffs, reply drafts, and decisions.26Have ChatGPT check the sources you approve and return only the items that need attention: real asks, changed artifacts, blocked handoffs, reply drafts, and decisions.

27 27 

28- [Create a daily work brief](https://developers.openai.com/codex/use-cases/daily-work-brief): Give ChatGPT the sources behind your day, then ask it to identify priorities, meeting...28- [Set up a work chief of staff](https://developers.openai.com/codex/use-cases/daily-work-brief): Set up ChatGPT Work as a chief of staff that checks your connected messages, email...

29- [Get your email to inbox zero](https://developers.openai.com/codex/use-cases/manage-your-inbox): Clear an overloaded inbox and see which messages need a reply, a decision, or your attention29- [Get your email to inbox zero](https://developers.openai.com/codex/use-cases/manage-your-inbox): Clear an overloaded inbox and see which messages need a reply, a decision, or your attention

30- [Complete tasks from messages](https://developers.openai.com/codex/use-cases/complete-tasks-from-messages): Use Computer Use to read one Messages thread, complete the task, and draft a reply.30- [Complete tasks from messages](https://developers.openai.com/codex/use-cases/complete-tasks-from-messages): Use Computer Use to read one Messages thread, complete the task, and draft a reply.

31 31 


46 46 

47Let ChatGPT turn approved inputs into outputs you can share: slides, messages, and other artifacts ready for review.47Let ChatGPT turn approved inputs into outputs you can share: slides, messages, and other artifacts ready for review.

48 48 

49- [Turn feedback into actions](https://developers.openai.com/codex/use-cases/feedback-synthesis): Connect ChatGPT to multiple data sources such as Slack, GitHub, Linear, or Google Drive to...49- [Analyze product feedback across tools](https://developers.openai.com/codex/use-cases/feedback-synthesis): Give ChatGPT Work feedback from Slack, surveys, issue trackers, support, or research notes

50- [Create or revise a slide deck](https://developers.openai.com/codex/use-cases/generate-slide-decks): Create or revise a Google Slides or PowerPoint presentation from source material, a...50- [Create or revise a slide deck](https://developers.openai.com/codex/use-cases/generate-slide-decks): Create or revise a Google Slides or PowerPoint presentation from source material, a...

Details

19Have ChatGPT gather approved inputs from multiple plugins to prepare a workflow, or let it use your computer to complete tasks across desktop apps.19Have ChatGPT gather approved inputs from multiple plugins to prepare a workflow, or let it use your computer to complete tasks across desktop apps.

20 20 

21- [Coordinate new-hire onboarding](https://developers.openai.com/codex/use-cases/new-hire-onboarding): Use ChatGPT to gather approved new-hire context, stage tracker updates, draft team-by-team...21- [Coordinate new-hire onboarding](https://developers.openai.com/codex/use-cases/new-hire-onboarding): Use ChatGPT to gather approved new-hire context, stage tracker updates, draft team-by-team...

22- [Use your computer with ChatGPT](https://developers.openai.com/codex/use-cases/use-your-computer-with-codex): Use Computer Use to hand off multi-step tasks across Mac apps, windows, and files, and...22- [Use your computer with ChatGPT](https://developers.openai.com/codex/use-cases/use-your-computer-with-codex): In the ChatGPT desktop app, use Computer Use to complete a scoped task across macOS or...

23 23 

24## Keep work moving24## Keep work moving

25 25 

26Have ChatGPT check the sources you approve and return only the items that need attention: real asks, changed artifacts, blocked handoffs, reply drafts, and decisions.26Have ChatGPT check the sources you approve and return only the items that need attention: real asks, changed artifacts, blocked handoffs, reply drafts, and decisions.

27 27 

28- [Create a daily work brief](https://developers.openai.com/codex/use-cases/daily-work-brief): Give ChatGPT the sources behind your day, then ask it to identify priorities, meeting...28- [Set up a work chief of staff](https://developers.openai.com/codex/use-cases/daily-work-brief): Set up ChatGPT Work as a chief of staff that checks your connected messages, email...

29- [Get your email to inbox zero](https://developers.openai.com/codex/use-cases/manage-your-inbox): Clear an overloaded inbox and see which messages need a reply, a decision, or your attention29- [Get your email to inbox zero](https://developers.openai.com/codex/use-cases/manage-your-inbox): Clear an overloaded inbox and see which messages need a reply, a decision, or your attention

30- [Complete tasks from messages](https://developers.openai.com/codex/use-cases/complete-tasks-from-messages): Use Computer Use to read one Messages thread, complete the task, and draft a reply.30- [Complete tasks from messages](https://developers.openai.com/codex/use-cases/complete-tasks-from-messages): Use Computer Use to read one Messages thread, complete the task, and draft a reply.

31 31 


46 46 

47Let ChatGPT turn approved inputs into outputs you can share: slides, messages, and other artifacts ready for review.47Let ChatGPT turn approved inputs into outputs you can share: slides, messages, and other artifacts ready for review.

48 48 

49- [Turn feedback into actions](https://developers.openai.com/codex/use-cases/feedback-synthesis): Connect ChatGPT to multiple data sources such as Slack, GitHub, Linear, or Google Drive to...49- [Analyze product feedback across tools](https://developers.openai.com/codex/use-cases/feedback-synthesis): Give ChatGPT Work feedback from Slack, surveys, issue trackers, support, or research notes

50- [Create or revise a slide deck](https://developers.openai.com/codex/use-cases/generate-slide-decks): Create or revise a Google Slides or PowerPoint presentation from source material, a...50- [Create or revise a slide deck](https://developers.openai.com/codex/use-cases/generate-slide-decks): Create or revise a Google Slides or PowerPoint presentation from source material, a...

Details

1---1---

2name: Turn feedback into actions2name: Analyze product feedback across tools

3tagline: Synthesize feedback from multiple sources into a reviewable artifact.3tagline: Turn Slack threads, survey exports, and issue queues into clear themes

4summary: Connect ChatGPT to multiple data sources such as Slack, GitHub, Linear,4 and follow-ups.

5 or Google Drive to group feedback into a reviewable Google Sheet, Google Doc,5summary: Give ChatGPT Work feedback from Slack, surveys, issue trackers,

6 Slack update, or recurring feedback check.6 support, or research notes. It can group repeated problems into a reviewable

7 Sheet or Doc with evidence, design implications, open questions, and clear

8 follow-ups.

7skills:9skills:

8 - token: slack10 - token: slack

9 url: https://github.com/openai/plugins/tree/main/plugins/slack11 url: https://github.com/openai/plugins/tree/main/plugins/slack


18 url: https://github.com/openai/plugins/tree/main/plugins/google-drive20 url: https://github.com/openai/plugins/tree/main/plugins/google-drive

19 description: Read feedback docs, exports, and folders, then create a Google Doc21 description: Read feedback docs, exports, and folders, then create a Google Doc

20 or Sheet.22 or Sheet.

21 - token: google-sheets

22 url: /codex/plugins

23 description: Create a feedback sheet the team can sort, comment on, and update.

24bestFor:23bestFor:

25 - Analyzing feedback from Slack channels, issue threads, survey exports,24 - Teams reviewing feedback across Slack, surveys, issues, support, and

26 support-ticket CSVs, or research notes.25 research.

27 - Teams that need to turn feedback into actionable insights.26 - Product decisions that need clear themes, supporting evidence, and

27 follow-ups.

28starterPrompt:28starterPrompt:

29 title: Create the First Version29 title: Analyze product feedback

30 body: >-30 body: >-

31 Can you synthesize the beta feedback on [feature or product area] into a31 Analyze feedback on [feature or product area] from [time period] using

32 @google-sheets review sheet?32 @Slack, @GitHub, @Linear, and @Google Drive. Include any relevant support

33 33 tickets, surveys, and research notes.

34 

35 Use these sources:

36 

37 - @slack [feedback channel or thread links]

38 

39 - @github [issue search or issue links]

40 34 

41 - @google-drive [survey export, notes doc, or Drive folder]

42 35 

36 Group the feedback into clear themes, show the supporting evidence, and tell

37 me what needs attention.

43 38 

44 In the sheet, group repeated feedback, include source links or IDs, mark

45 confidence, and call out which items need product or engineering follow-up.

46 39 

47 40 Put the findings in a Google Sheet or Doc I can review. Draft any

48 Keep names and private quotes out of the visible summary unless I approve41 follow-ups, but don't post or send them.

49 them. Do not post, send, create issues, or assign owners.42 suggestedEffort: medium

50 suggestedEffort: low

51relatedLinks:43relatedLinks:

52 - label: Plugins44 - label: Plugins

53 url: /codex/plugins45 url: /codex/plugins

54 - label: Scheduled tasks46 - label: Scheduled tasks

55 url: /codex/automations47 url: /codex/automations

56 - label: Agent skills

57 url: /codex/build-skills

58---48---

59 49 

60> For the complete documentation index, see [llms.txt](/llms.txt). Markdown versions of documentation pages are available by appending `.md` to the page URL.50> For the complete documentation index, see [llms.txt](/llms.txt). Markdown versions of documentation pages are available by appending `.md` to the page URL.

61 51 

62When feedback is spread across a Slack channel, a survey export, and a few issue threads, ChatGPT can pull it together into a Google Sheet or Doc that the team can review.52## Before you start

63 53 

64## Create the first version54Product feedback might live in Slack, survey exports, issue trackers, support records, or research notes. Give ChatGPT Work the sources, product area, and date range to review. It can group repeated problems into a Sheet or Doc the team can check before deciding what to do next.

65 55 

56Start this workflow in Work on the web or desktop with connected apps and cloud files. Attach a local export first, or use the desktop app, when the source lives on your computer.

66 57 

58## What to expect

67 59 

681. Give ChatGPT the feedback sources and one sentence of context.60Here is an example using a survey export, support records, a feedback thread, and research notes for a request-review queue. The first pass groups the repeated problems; the follow-up splits a broad theme into two clearer decisions.

692. Ask for a Google Sheet or Doc with themes, evidence links, questions, and follow-ups.

703. Use the same chat to turn the reviewed sheet into a Slack update or issue draft.

714. Pin the chat and schedule a task from it if the feedback source keeps changing.

72 61 

62The first pass found three repeated problems across a survey, support records, a feedback thread, and research notes:

73 63 

64- **Conflicts are hidden in the queue:** eight mentions across four sources. Show conflict status in the list and distinguish `Ready` from `Needs attention`.

65- **Bulk approval can include blocked requests:** four mentions across four sources. Skip blocked requests by default or warn before approval.

66- **Reviewers lose their place and can't isolate work:** ten mentions across four sources. Preserve search and filters and offer a `Needs attention` view.

74 67 

75Use the starter prompt on this page for the first pass. The sources can be plugin links, attached files, or files in Google Drive.68After a follow-up to separate the last theme, the table distinguishes **search and filters resetting on return** from **blocked and unreviewed work being hard to isolate**. The table keeps the affected users, evidence IDs, confidence, design implications, open questions, and follow-ups with each theme. The counts are repeated mentions in a small sample, not product-wide incidence rates.

76 69 

77## Turn the sheet into the next draft

78 70 

79Once the sheet exists, use the same chat to make it useful for the next person. Ask ChatGPT to add a column, split a theme, draft a Slack update, or turn a reviewed theme into an issue draft.

80 71 

81 72 

73## How it works

82 74 

83**Prompt:**

84 75 

85```text

86Using the reviewed feedback sheet, draft a short Slack update.

87 76 

88Audience: [team or channel]771. Give Work the feedback sources, product area, and time period to review.

89Include:782. Ask it to group repeated feedback into themes and keep supporting links or IDs with each theme.

793. Create a Google Sheet or Doc with affected users, confidence, open questions, and the decision or follow-up needed.

804. Review the summary before turning any theme into a Slack update or issue draft.

90 81 

91- what changed

92- the top feedback themes

93- link to the sheet

94- the decision or follow-up needed

95 82 

96Draft only. Do not post it.

97```

98 83 

99## Keep a feedback channel current84Use the starter prompt on this page for the first pass, then refine any theme that is too broad, missing evidence, or mixing separate problems.

100 85 

101For a Slack channel or issue queue that keeps getting new reports, pin the chat and ask ChatGPT to schedule a task inside it.86## Turn a reviewed theme into the next draft

87 

88Once the summary exists, ask Work to split a broad theme, add missing evidence, draft a Slack update, or turn a reviewed theme into an issue draft. Name the audience and decision so the next step is clear.

102 89 

103 90 

104 91 

105**Prompt:**92**Prompt:**

106 93 

107```text94```text

108Schedule a task from this chat to check this feedback source every [weekday morning / Monday / release day].95Use the feedback summary to draft a short update for [team or channel]. Include the main themes, the evidence, and what we should do next. Don't post it.

96```

97 

98## Keep a feedback channel current

99 

100For a Slack channel or issue queue that keeps getting new reports, ask Work to [check it on a schedule](https://developers.openai.com/codex/automations#schedule-work-from-a-task). Keep the same review boundaries so new feedback does not become an unapproved post, issue, or assignment.

109 101 

110Source: [Slack channel, GitHub search, Linear view, or Google Drive folder]

111Use this reviewed Sheet or Doc as the running summary: [link]

112 102 

113Only update me when there is a new theme, stronger evidence for an existing theme, or a source you cannot read. Keep the Sheet or Doc current. Do not post, send, create issues, or assign owners.103 

104**Prompt:**

105 

106```text

107Check [feedback channel, issue tracker, or survey] every weekday. Tell me when a new theme appears, an existing issue gets worse, or we need to make a decision. Keep the feedback summary up to date, but don't post or send anything.

114```108```

Details

1---1---

2name: Create a daily work brief2name: Set up a work chief of staff

3tagline: Turn calendar, messages, email, and project context into a focused plan.3tagline: Stay on top of your priorities, meetings, messages, and commitments.

4summary: Give ChatGPT the sources behind your day, then ask it to identify4summary: Set up ChatGPT Work as a chief of staff that checks your connected

5 priorities, meeting preparation, reply needs, decisions owed, and useful FYIs5 messages, email, calendar, documents, and project trackers every hour, keeps

6 in one reviewable brief that can improve through feedback and recurring6 track of what changes, and prepares concise updates and draft replies. On

7 checks.7 desktop, ask it to create or coordinate a separate task for a specific

8 project.

8skills:9skills:

9 - token: google-calendar10 - token: google-calendar

10 url: https://github.com/openai/plugins/tree/main/plugins/google-calendar11 url: https://github.com/openai/plugins/tree/main/plugins/google-calendar

11 description: Review the day's meetings, timing, and preparation needs.12 description: Review the day's meetings, timing, and preparation needs.

12 - token: gmail13 - token: gmail

13 url: https://github.com/openai/plugins/tree/main/plugins/gmail14 url: https://github.com/openai/plugins/tree/main/plugins/gmail

14 description: Find recent email that needs a reply or changes today's priorities.15 description: Find Gmail messages that need a reply or change your priorities.

16 - token: outlook-email

17 url: https://github.com/openai/plugins/tree/main/plugins/outlook-email

18 description: Find Outlook messages that need a reply or change your priorities.

15 - token: slack19 - token: slack

16 url: https://github.com/openai/plugins/tree/main/plugins/slack20 url: https://github.com/openai/plugins/tree/main/plugins/slack

17 description: Find direct messages, mentions, decisions, and follow-ups that need21 description: Find direct messages, mentions, decisions, and follow-ups that need

18 attention.22 attention.

23 - token: teams

24 url: https://github.com/openai/plugins/tree/main/plugins/teams

25 description: Find Teams messages, decisions, and follow-ups that need attention.

19 - token: google-drive26 - token: google-drive

20 url: https://github.com/openai/plugins/tree/main/plugins/google-drive27 url: https://github.com/openai/plugins/tree/main/plugins/google-drive

21 description: Read the approved running notes, trackers, or planning docs behind28 description: Read the approved running notes, trackers, or planning docs behind

22 the day's work.29 the day's work.

23bestFor:30bestFor:

24 - People whose priorities are spread across calendar, email, Slack, docs, and31 - People managing priorities and commitments across messages, email,

25 follow-up lists.32 calendars, documents, and project trackers.

26 - Workdays with several meetings, decisions, and reply-worthy messages to33 - Workdays with meetings to prepare for, decisions to make, and follow-ups to

27 triage.34 track.

28 - Teams that want a short source-backed brief they can refine and run on a

29 schedule.

30starterPrompt:35starterPrompt:

31 title: Build my daily work brief36 title: Set up my work chief of staff

32 body: >-37 body: >-

33 Build my work brief for [date].38 Be my chief of staff.

34 39 

35 40 

36 Review my calendar, unread direct messages and mentions from the last 2441 Start by checking the work tools and sources available to you, such as Slack

37 hours, unread email from the last 24 hours, open follow-ups, and the project42 or Teams, Gmail or Outlook, my calendar, documents, notes, and project

38 notes or trackers I name. If a prior brief is available, call out what43 trackers. Figure out what I'm working on, who I work with, what I've

39 changed. Create a short brief with:44 committed to, and what needs my attention.

40 45 

41 46 

42 - top priorities47 Give me a concise update covering:

43 48 

44 - meeting preparation

45 49 

46 - messages that need replies50 - what changed and what needs a decision;

47 51 

48 - decisions I owe52 - approaching deadlines, meetings, and commitments;

49 53 

50 - useful FYIs54 - messages that need a response;

51 55 

52 - missing access or uncertain context56 - what is blocked or waiting on someone; and

53 57 

58 - what can wait.

54 59 

55 Keep confirmed facts separate from inference. Do not send messages, change60 

56 documents, or create tasks.61 Link to the original sources when possible, check the latest replies before

57 suggestedEffort: low62 resurfacing an older request, and tell me if an important source is

63 unavailable. Separate confirmed facts from assumptions and don't repeat

64 items that have already been resolved.

65 

66 

67 Suggest next steps, draft replies, and prepare meeting briefs when useful.

68 In the desktop app, when I ask you to delegate a project, create or continue

69 a separate project task and share only the context it needs.

70 

71 

72 Set up an hourly check if scheduled tasks are available. Review the

73 connected sources, compare what you find with prior updates, and interrupt

74 me only when a priority, deadline, blocker, decision, or message

75 meaningfully changes. Stay quiet when there's nothing new. If you can't

76 create the schedule, tell me instead of implying that it's active.

77 

78 

79 Apart from the hourly check I just requested, ask before creating a new

80 project task, sending anything, editing documents, changing a schedule, or

81 making commitments.

82 

83 

84 Start by telling me what I should know today.

85 suggestedEffort: medium

58relatedLinks:86relatedLinks:

59 - label: "OpenAI Academy: Everyday work"87 - label: Set up a project teammate

60 url: https://openai.com/academy/how-to-use-codex-for-everyday-work/88 url: /codex/use-cases/project-teammate

61 - label: Scheduled tasks89 - label: Scheduled tasks

62 url: /codex/automations90 url: /codex/automations

63 - label: Plugins

64 url: /codex/plugins

65---91---

66 92 

67> For the complete documentation index, see [llms.txt](/llms.txt). Markdown versions of documentation pages are available by appending `.md` to the page URL.93> For the complete documentation index, see [llms.txt](/llms.txt). Markdown versions of documentation pages are available by appending `.md` to the page URL.

68 94 

69## Start with the context behind today95## What to expect

96 

97Give ChatGPT Work ongoing responsibility for staying on top of your work. In one thread, it can check the work tools you've connected every hour, bring together your priorities, prepare you for meetings, and flag messages, decisions, or commitments that need your attention. In the desktop app, it can also help you start or coordinate a separate task for a project when you ask.

98 

99Use the sources that apply to your work, such as Slack or Teams, Gmail or Outlook, your calendar, documents, and project trackers. ChatGPT should tell you if it can't access a source rather than guess what's in it.

100 

101Choose the surface that fits how you want your chief of staff to work:

102 

103- **ChatGPT on the web:** Use connected work tools and an hourly [scheduled check](https://developers.openai.com/codex/automations?surface=web) that can continue when your laptop is off. This is a good default when you want updates wherever you are.

104- **ChatGPT desktop app:** Use the same connected sources alongside local files and apps. Your chief of staff can also create, brief, and coordinate separate project teammates when you ask. Keep your computer on and the app running if a [scheduled check](https://developers.openai.com/codex/automations?surface=app) needs local files or desktop tools.

105 

106Here's what an initial check and follow-up can look like:

107 

108**Top priorities**

109 

110- Confirm the launch docs link with Priya before 9:15 AM for the 9:30 AM readiness review.

111- Prepare an accurate customer update, respond to Finance, and review the weekly update.

112 

113**What changed:** Launch copy is approved, the missing docs link is the current blocker, and the earlier team-social request is resolved.

114 

115**Draft reply:** “Copy is approved. I'm checking the docs link now and will confirm it before the readiness review.” The reply stays unsent until you approve it.

116 

117**Catch-up prompt:** I'm back after time away. Catch me up on work by checking my available messages, email, calendar, documents, and project trackers. Show me what changed, include source links, and don't send or change anything.

118 

119 

120 

70 121 

71ChatGPT is most useful when it can see the calendar, messages, email, follow-ups, and notes that shape the day. Give it the sources it is allowed to use and ask it to distinguish urgent work from useful context.122## Make it your own

72 123 

731. Name the date, working hours, and sources ChatGPT may review.

742. Ask it to inventory access gaps before drawing conclusions.

753. Run the starter prompt to create priorities, meeting preparation, replies, decisions, and FYIs.

764. Review the source links, move uncertain items into an open-questions list, and tell ChatGPT which items were useful or noisy.

775. Continue in the same chat when a priority needs a draft, a deeper source review, or a recurring check.

78 124 

79 125 

1261. Start a thread using the starter prompt.

1272. Connect the messaging, email, calendar, and document sources relevant to your work.

1283. Review the first update and point out anything important, resolved, or missing.

1294. Keep using the same thread for follow-ups, meeting preparation, and draft replies.

1305. On desktop, ask it to create or continue a separate task when a project needs its own teammate.

1316. Review the hourly heartbeat and adjust its schedule when needed.

80 132 

81Keep the brief short enough to use at the start of the day. Do not give ChatGPT permission to send messages or update source systems until you have reviewed the proposed actions.

82 133 

83## Make the brief recurring

84 134 

85Start with one manual brief. After the structure reliably surfaces the right priorities, schedule a task from the same chat so ChatGPT can return to the approved sources each morning and compare the new brief with the previous one. Keep correcting the chat when it overweights noise or misses an important source.135The starter prompt authorizes an hourly check. ChatGPT should ask before creating another task, sending messages, updating documents, changing the schedule, or making commitments.

136 

137**Adjust the hourly heartbeat**

86 138 

87 139 

88 140 

89**Prompt:**141**Prompt:**

90 142 

91```text143```text

92Schedule a task from this chat to prepare my daily work brief every weekday morning at [time].144Check my connected work sources every hour. Tell me only about meaningful changes, approaching deadlines, decisions, blockers, or messages that need my attention. Don't repeat resolved items. Apart from this hourly check, keep everything read-only unless I approve a specific action.

145```

146 

147**Catch up after time away**

93 148 

94Check the same approved sources, compare the result with the previous brief, and only surface new or materially changed priorities, meetings, replies, decisions, and blockers.

95 149 

96Do not send messages, edit source files, or create tasks.150 

151**Prompt:**

152 

153```text

154Catch me up on what changed while I was away. Review my available messages, email, calendar, documents, and project trackers. Show me decisions, deadlines, blockers, and messages that need a reply. Link to the original sources and tell me if anything is missing. Don't send or change anything.

97```155```

98 156 

99## Review what changed157**Start a project teammate on desktop**

100 158 

101Ask ChatGPT to compare a new pass with the previous brief so you can focus on newly arrived messages, changed meetings, and follow-ups that now need attention.159When one project needs its own focused working space, ask your chief of staff to [set up a project teammate](https://developers.openai.com/codex/use-cases/project-teammate) and share the relevant context.

102 160 

103 161 

104 162 

105**Prompt:**163**Prompt:**

106 164 

107```text165```text

108Compare today's brief with the previous brief.166Create a separate teammate task for [project]. Brief it on what we're trying to accomplish, the relevant messages, documents, decisions, and open questions. Give it only the context it needs, keep its work separate from other projects, and tell me where to find it. Ask before sending messages, editing documents, or making commitments.

167```

168 

169**Continue an existing project teammate**

109 170 

110List:

111 171 

112- new priorities or decisions

113- meeting changes

114- new messages that need a reply

115- follow-ups that are now blocked or overdue

116- items that no longer need attention

117- source gaps or uncertain conclusions

118 172 

119Do not send messages or change any source files.173**Prompt:**

174 

175```text

176Check on my existing [project] teammate. Give it this follow-up: [what you need]. Then tell me what changed, what's blocked, and what needs my review. Don't create a duplicate task, contact anyone, or change anything without my approval.

177```

178 

179**Prepare the next step**

180 

181 

182 

183**Prompt:**

184 

185```text

186Use the latest context in this thread to draft the reply, handoff, or meeting brief I need next. Keep it concise, show the sources behind your recommendation, and don't send or share anything without my approval.

120```187```

188 

189Connected sources and scheduled tasks depend on your plan and workspace settings. Set up scheduled tasks in chat rather than in a voice conversation.

use-cases/project-teammate.md +162 −0 created

Details

1---

2name: Set up a project teammate

3tagline: Keep one project moving with a dedicated, context-aware teammate.

4summary: Give ChatGPT Work a dedicated task for one project or workstream. It

5 can review relevant messages, documents, decisions, and deadlines; track

6 meaningful changes on a schedule; prepare the next step; and wait for approval

7 before taking action.

8skills:

9 - token: slack

10 url: https://github.com/openai/plugins/tree/main/plugins/slack

11 description: Review the messages, decisions, and follow-ups relevant to the project.

12 - token: teams

13 url: https://github.com/openai/plugins/tree/main/plugins/teams

14 description: Review Teams messages, project decisions, and open follow-ups.

15 - token: gmail

16 url: https://github.com/openai/plugins/tree/main/plugins/gmail

17 description: Find project-related email, pending replies, and commitments.

18 - token: outlook-email

19 url: https://github.com/openai/plugins/tree/main/plugins/outlook-email

20 description: Find project-related Outlook email and outstanding requests.

21 - token: google-calendar

22 url: https://github.com/openai/plugins/tree/main/plugins/google-calendar

23 description: Check project milestones, meetings, and preparation.

24 - token: google-drive

25 url: https://github.com/openai/plugins/tree/main/plugins/google-drive

26 description: Review the project brief, notes, plans, and decision history.

27bestFor:

28 - Launches, customer accounts, events, or initiatives with decisions spread

29 across connected work tools.

30 - Projects that need a dedicated task to track progress, blockers, owners, and

31 next steps.

32starterPrompt:

33 title: Set up my project teammate

34 body: >-

35 Be my dedicated teammate for [project or workstream]. Focus only on that

36 project. If the project isn't clear, ask me before reviewing unrelated work.

37 

38 

39 Review the relevant messages, email, calendar events, documents, notes, and

40 project trackers available to you. Establish what we're trying to

41 accomplish, who's involved, what's already been decided, the current

42 deadlines, and what's still open. Tell me when a source is missing instead

43 of guessing.

44 

45 

46 Start with a concise project brief:

47 

48 

49 - the goal and current state;

50 

51 - important decisions, owners, and deadlines;

52 

53 - what's changed;

54 

55 - blockers, dependencies, and unanswered questions; and

56 

57 - the next step that would move the project forward.

58 

59 

60 Link to your sources when available, check the latest replies before

61 surfacing old requests, and distinguish confirmed facts from assumptions.

62 Keep your context limited to this project.

63 

64 

65 Help me research questions, prepare meetings, review drafts, and write

66 follow-ups as the project progresses. If I ask you to check back on a

67 schedule, watch for meaningful changes.

68 

69 

70 Ask before sending messages, editing documents, scheduling work, sharing

71 information, or making commitments.

72 suggestedEffort: medium

73relatedLinks:

74 - label: Set up a work chief of staff

75 url: /codex/use-cases/daily-work-brief

76 - label: Scheduled tasks

77 url: /codex/automations

78---

79 

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

81 

82## What to expect

83 

84Give ChatGPT Work one project to focus on. A dedicated teammate can check the messages, documents, meetings, decisions, and open questions that affect that project, then help you decide what to do next. Add a scheduled check when you want it to keep watching the project.

85 

86Unlike a [work chief of staff](https://developers.openai.com/codex/use-cases/daily-work-brief), which watches across your priorities, a project teammate stays focused on a specific launch, customer account, initiative, or event.

87 

88Choose the surface that fits your project:

89 

90- **ChatGPT on the web:** Keep a teammate focused on connected project messages, documents, meetings, and trackers. A [scheduled check](https://developers.openai.com/codex/automations?surface=web) can keep watching those sources when your laptop is off.

91- **ChatGPT desktop app:** Give a teammate access to local project files and apps. You can also ask your chief of staff to create, brief, and coordinate the teammate as a separate task. Keep your computer on and the app running if a [scheduled check](https://developers.openai.com/codex/automations?surface=app) needs local files or desktop tools.

92 

93Here's what a project check and follow-up can look like:

94 

95**Project status:** The customer-facing launch copy is approved, and the readiness review is on the calendar.

96 

97**Open questions:** The launch checklist is missing the documentation link, and security approval hasn't been confirmed.

98 

99**Next step:** Check on the final link and confirm whether the security review blocks launch.

100 

101**Draft follow-up:** “Hey, checking on the final docs link before the readiness review. Is it ready to add to the launch checklist, or is anything still blocking it?” The message remains unsent.

102 

103**Project heartbeat:** Check the launch thread, checklist, and readiness meeting every 30 minutes. Report meaningful changes without contacting anyone or updating the tracker.

104 

105 

106 

107 

108## What you can use a teammate for

109 

110- **Run a launch.** Watch the project channel, launch checklist, approvals, assets, and release timing. Flag missing materials and decisions before they become blockers.

111- **Produce a podcast or video.** Track scripts, recordings, review notes, sensitive footage, edit requests, and publishing deadlines.

112- **Ship documentation or a website.** Track pull requests, review comments, preview deployments, product changes, and outstanding publication approvals.

113- **Manage a customer project.** Keep the account conversation, meeting notes, commitments, open questions, and the next follow-up in one place.

114 

115## Set up your teammate

116 

117 

118 

1191. Choose the project, initiative, or customer account you want the teammate to focus on.

1202. Connect or provide the messages, email, calendar, documents, and trackers relevant to that work.

1213. Start a dedicated task using the starter prompt.

1224. Review the initial project brief and correct any missing context.

1235. Continue using the same task for decisions, research, meeting preparation, and draft follow-ups.

1246. Add a heartbeat when you want the teammate to keep checking for project updates.

125 

126 

127 

128Keep the project task focused. ChatGPT should ask before sending messages, updating documents, changing a tracker, scheduling work, or making commitments.

129 

130## Start with your chief of staff

131 

132In the desktop app, you can ask your [work chief of staff](https://developers.openai.com/codex/use-cases/daily-work-brief) to create and brief the project teammate. That gives the new task the relevant context without turning your chief-of-staff thread into another project workspace.

133 

134 

135 

136**Prompt:**

137 

138```text

139Create a separate teammate task for the project we just discussed. Brief it on the goal, relevant messages and documents, decisions, owners, deadlines, blockers, and open questions. Share only the context needed for that project. Tell me where to find the task, and don't send messages, change documents, or make commitments without my approval.

140```

141 

142**Check on an existing teammate**

143 

144 

145 

146**Prompt:**

147 

148```text

149Check on the existing project teammate we discussed. Tell me what changed, what's blocked, what it's waiting on, and what I need to review. Don't create a duplicate task or take action without my approval.

150```

151 

152**Add a project heartbeat**

153 

154 

155 

156**Prompt:**

157 

158```text

159Check this project's messages, documents, tracker, and upcoming meetings every 30 minutes. Tell me when an owner, deadline, approval, blocker, or decision changes. Stay quiet when nothing meaningful has changed. Don't repeat resolved items, send messages, or change project documents without my approval.

160```

161 

162Connected sources and scheduled tasks depend on your plan and workspace settings. Project-task coordination is available in the desktop app.

Details

1---

2name: Track bills, subscriptions, and spending

3tagline: Review the last 30 days and stay ahead of anything unusual.

4summary: Use ChatGPT Work on the web to review connected accounts, understand

5 your spending and savings, and get notified when something needs attention.

6skills:

7 - token: finances

8 url: https://help.openai.com/en/articles/20001222

9 description: Review connected spending, upcoming payments, recurring bills, and

10 subscriptions in ChatGPT.

11bestFor:

12 - Understanding spending, savings, account growth, and upcoming bills.

13 - Read-only daily monitoring with a short report every two weeks.

14starterPrompt:

15 title: Check your finances

16 body: "@Finances Check my finances for the last 30 days. Show me my spending,

17 savings, account balances and growth, and anything unusual."

18 suggestedEffort: low

19relatedLinks:

20 - label: Finances in ChatGPT

21 url: https://help.openai.com/en/articles/20001222

22 - label: Scheduled tasks in ChatGPT

23 url: https://help.openai.com/en/articles/10291617

24 - label: Plan a budget and schedule

25 url: /codex/use-cases/plan-budget-and-schedule

26---

27 

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

29 

30## Before you start

31 

32In ChatGPT Work on the web, open **Finances** in the sidebar, add the Finances plugin, and connect your financial accounts. You can then use `@Finances` to check your accounts. Finances is not available in the desktop app.

33 

34Finances is read-only: it can review your connected accounts, but it cannot move money, pay bills, cancel subscriptions, make trades, or change your account settings. Financial data can be incomplete or categorized incorrectly, so verify anything that needs your attention.

35 

36## What to expect

37 

38Start by asking for a review of the last 30 days, including changes to your spending and savings and anything unusual. Then ask for a daily check and a short report every two weeks.

39 

40### Example result

41 

42In the last 30 days, spending totaled $4,280, savings increased by $820, and combined cash and investment balances grew by $930. Dining increased compared with the previous month. An unfamiliar $42 charge and a possible duplicate subscription renewal need review.

43 

44As a follow-up, ask for daily alerts when something needs attention and a short report every two weeks. Connected financial accounts are read-only.

45 

46 

47 

48 

49## Take it further

50 

51**Set up daily monitoring**

52 

53 

54 

55**Prompt:**

56 

57```text

58Check every day and only notify me when something needs my attention. Every two weeks, send me a short report.

59```

60 

61**Find subscriptions you forgot about**

62 

63 

64 

65**Prompt:**

66 

67```text

68@Finances Find recurring charges across my accounts and flag any subscriptions that increased in price or that I may no longer use.

69```

70 

71**See where your money went**

72 

73 

74 

75**Prompt:**

76 

77```text

78@Finances Break down my spending over the last 30 days and show me which categories changed most from the previous month.

79```

80 

81**Check upcoming bills**

82 

83 

84 

85**Prompt:**

86 

87```text

88@Finances Show me which bills and subscriptions are coming up in the next two weeks and flag anything unusual.

89```

90 

91**Track your savings progress**

92 

93 

94 

95**Prompt:**

96 

97```text

98@Finances Show me how my savings and account balances have changed over the last 30 days and flag anything that may affect my progress.

99```

100 

101**Investigate an unfamiliar charge**

102 

103 

104 

105**Prompt:**

106 

107```text

108@Finances Help me understand this charge, check whether it has appeared before, and tell me what I should verify.

109```

Details

1---1---

2name: Use your computer with ChatGPT2name: Use your computer with ChatGPT

3tagline: Let ChatGPT click, type, and navigate apps on your Mac.3tagline: Let ChatGPT click, type, and navigate apps on your macOS or Windows computer.

4summary: Use Computer Use to hand off multi-step tasks across Mac apps, windows,4summary: In the ChatGPT desktop app, use Computer Use to complete a scoped task

5 and files, and monitor progress in picture-in-picture.5 across macOS or Windows apps and local files, with permission prompts and a

6 final result you can review. Start signed-in browser tasks separately with

7 Chrome.

6bestFor:8bestFor:

7 - Tasks that move across apps, windows, browser sessions, or local files on9 - Tasks that move across desktop apps, windows, or local files.

8 your Mac10 - Work that needs the macOS background experience or a dedicated Windows

9 - Work you want to hand off and let ChatGPT continue in the background11 foreground session.

10starterPrompt:12starterPrompt:

11 title: Hand Off One Computer Task13 title: Hand off one computer task

12 body: >-14 body: >-

13 @Computer [do the task you want completed across your Mac]15 @Computer Help me [task].

14 16 

15 17 

16 For example:18 Use my desktop apps or files as needed. Ask before sending, buying, or

17 19 changing anything important.

18 - Play some music to help me focus.

19 

20 - Help me add my interview notes from Notes to Ashby.

21 

22 - Look through my Messages app for the trip ideas Brooke sent me this week,

23 add the best options to a new note called "Yosemite ideas", and draft a

24 reply back to her.

25relatedLinks:20relatedLinks:

26 - label: Computer Use21 - label: Computer Use

27 url: /codex/computer-use22 url: /codex/computer-use


35 30 

36## Introduction31## Introduction

37 32 

38You can let ChatGPT operate an app the same way you would: by clicking, seeing, and typing. [Computer Use](https://developers.openai.com/codex/computer-use) is useful when the task lives inside a normal app UI, even if that app does not have a dedicated plugin.33Use [Computer Use](https://developers.openai.com/codex/computer-use) when a task moves across desktop apps, windows, or local files. ChatGPT can click, type, and navigate the apps you allow, then return the result for review. For a website or signed-in browser session, start a separate browser task with `@Chrome`.

34 

35**Computer Use requires the ChatGPT desktop app.** In supported regions, Computer Use is available on macOS and Windows in ChatGPT Work and Codex. Cloud Work tasks on web or mobile cannot directly access your local apps, files, or signed-in desktop browser sessions. You can start or steer a desktop task from [Remote on mobile](https://developers.openai.com/codex/remote-connections) when you connect a Mac or Windows host.

36 

37Good examples include moving notes into a system of record, checking context across a few apps before drafting a reply, or copying approved details between tools that don't have a dedicated plugin.

38 

39Here is what a safe desktop handoff can look like when Messages and Notes contain your cabin-weekend plans:

40 

41**Desktop task:** Gather cabin-weekend ideas from Messages and a shortlist in Notes, create a local note, and draft a reply.

42 

43**Result:** Pine Lodge is step-free, within two hours, and costs $690 total. Lake House may work, but travel time and accessibility still need confirmation. Cedar Ridge is excluded because it has stairs. The group size is unknown, so per-person pricing stays conditional.

44 

45The local note and reply draft are ready for review. Nothing was booked or sent.

46 

47 

39 48 

40This works especially well for tasks that jump between apps or windows, such as collecting notes, updating a system of record, copying details from one place to another, or drafting a reply after checking context in a few different apps.

41 49 

42## How to use50## How to use

43 51 

441. Install the [Computer Use plugin](https://developers.openai.com/codex/computer-use).521. Open the ChatGPT desktop app and install the [Computer Use plugin](https://developers.openai.com/codex/computer-use).

452. Start your request with `@Computer`, or mention a specific app such as `@Slack` or `@Messages`.532. Start your request with `@Computer` for desktop apps or `@Chrome` for browser tasks.

463. Describe the task and the outcome you want.543. Describe the task, the apps or files involved, and the result you want.

474. Approve access when ChatGPT needs it, then let it continue the task in the background.554. Review access prompts and pause before actions that send, submit, or change important data.

565. On Windows, keep the target app visible while Computer Use runs.

48 57 

49If you mention a specific app and a plugin exists for that app, ChatGPT may prefer the plugin over Computer Use. That is usually what you want. If no plugin exists, ChatGPT can fall back to Computer Use and operate the app directly.58If a plugin exists for an app, ChatGPT may use the plugin for the structured action. Computer Use is useful when the task depends on the app interface or a plugin isn't available.

50 59 

51For example:60## Things to try

52 61 

53- `@Computer Play some music to help me focus.`62Start with one tool: use `@Computer` for desktop apps and local files, or `@Chrome` for your browser. ChatGPT can choose other tools as needed.

54- `@Computer Help me add my interview notes from Notes to Ashby.`

55- `@Computer Go through my Slack and add reminders for everything I need to do by end of day.`

56 63 

57## Practical tips64**Turn messages into a plan**

58 65 

59### Follow along while ChatGPT works

60 66 

61When Computer Use starts working in an app, ChatGPT automatically opens a picture-in-picture (PiP) preview. Move the PiP around the ChatGPT window or click it to open the app being used. If you use a Pet, you can send the PiP to your Pet to monitor the task outside the ChatGPT window. When a task uses multiple apps or browser windows, their previews appear as a stack you can cycle through. If you dismiss the PiP, you can reopen it from the **Summary** view while Computer Use is running.

62 67 

63### Choose the browser ChatGPT should use68**Prompt:**

64 69 

65Computer Use takes control of the app it is operating. If you want to keep working in one browser while ChatGPT browses in another, tell it which browser to use. You can also set a default in [customization](https://developers.openai.com/codex/customization/overview), for example: "When using Computer Use for web browsing tasks, default to Chrome instead of Safari."70```text

71@Computer Check my Messages for our weekend trip, compare the cabin shortlist in Notes, and draft a reply. Don't send it.

72```

66 73 

67### Avoid parallel runs in the same app74**Find places to stay**

75 

76 

77 

78**Prompt:**

79 

80```text

81@Chrome Search Airbnb for cabins within two hours of San Francisco. Compare price, availability, cancellation policy, and step-free access. Don't book anything.

82```

83 

84**Catch up on a project**

85 

86 

87 

88**Prompt:**

89 

90```text

91@Computer Check my project tracker and recent messages. Tell me what's changed, what's blocked, and which follow-ups I need to send. Don't message anyone.

92```

93 

94**Update a tracker from meeting notes**

95 

96 

97 

98**Prompt:**

68 99 

69Do not run two Computer Use tasks against the same app at the same time. That makes it much harder for ChatGPT to keep stable context about the current window and state.100```text

101@Computer Open my meeting notes, find the decisions and action items, and prepare the matching updates in the project tracker. Ask me before submitting anything.

102```

70 103 

71### Stay signed in104**Work in your signed-in browser**

72 105 

73For smoother runs, make sure you are already signed in to the apps and services you want ChatGPT to use. If your Mac locks while Computer Use is running, the activity will stop.

74 106 

75## Good follow-ups

76 107 

77Once the work finishes, keep the same chat open if you want ChatGPT to summarize what it changed, double-check the result, or turn the workflow into a more repeatable pattern through [customization](https://developers.openai.com/codex/customization/overview).108**Prompt:**

78 109 

79## Suggested prompt110```text

111@Chrome Open the customer account in my signed-in browser, check the latest activity and support tickets, and draft a quick update. Don't send it.

112```

80 113 

81**Hand Off One Computer Task**114**Test a website**

82 115 

83 116 

84 117 

85**Prompt:**118**Prompt:**

86 119 

87```text120```text

88@Computer [do the task you want completed across your Mac]121@Chrome Open http://localhost:3000, check the pricing page on mobile, and tell me what needs fixing. Don't publish or submit anything.

122```

123 

124**Clean up local files**

125 

89 126 

90For example:

91 127 

92- Play some music to help me focus.128**Prompt:**

93- Help me add my interview notes from Notes to Ashby.129 

94- Look through my Messages app for the trip ideas Brooke sent me this week, add the best options to a new note called "Yosemite ideas", and draft a reply back to her.130```text

131@Computer Review my Downloads folder and show me how you'd organize the project files. Ask before moving or deleting anything.

95```132```

133 

134**Show it what you're looking at**

135 

136On macOS, use an [appshot](https://developers.openai.com/codex/appshots) to share the app window in front of you. Appshots provide visual context; Computer Use can then open, inspect, and interact with the app if you allow it.

137 

138 

139 

140**Prompt:**

141 

142```text

143@Computer Look at this AppShot, find the same screen in the app, and tell me what I need to do. Ask before changing anything.

144```

145 

146## Practical tips

147 

148### Understand how the task runs on each computer

149 

150On macOS, Computer Use can work in the background while you use other apps. A picture-in-picture preview shows the active app; open the preview to follow along or move it out of the way. If you use a Pet, you can move the preview there.

151 

152On Windows, Computer Use runs on the active desktop and takes over the foreground. Expect the pointer and keyboard to move while the task runs. Keep the device unlocked and connected, or run the desktop app in a Windows virtual machine if you need to keep using your main desktop.

153 

154### Choose the right browser

155 

156Browser tasks are often part of Computer Use. Choose the browser that has the context you need:

157 

158- **[Chrome extension](https://developers.openai.com/codex/chrome-extension):** Use `@Chrome` for browser tasks, including listing searches, websites, and your existing signed-in Chrome profile, tabs, or extensions.

159- **[Built-in browser](https://developers.openai.com/codex/browser?surface=app):** Use it when you want a separate browser session for localhost or public sites. It has its own browser state and can wait while you sign in.

160- **Cloud browser in ChatGPT Work on web or mobile:** Use it for supported public, signed-out sites. It cannot access local files, open tabs, extensions, or saved passwords, sign in to sites, or complete payments.

161 

162Name the browser in the prompt when it matters, and use [customization](https://developers.openai.com/codex/customization/overview) for a recurring desktop preference.

163 

164### Avoid parallel runs in the same app

165 

166Do not run two Computer Use tasks against the same app at the same time. Competing actions can change the current window or state and make the result unreliable.

167 

168### Prepare signed-in apps and locked use

169 

170Before starting a desktop task, sign in to the apps and services it needs. On macOS, you can enable [locked use](https://developers.openai.com/codex/computer-use#locked-use) if the task must continue after the Mac locks. Locked use is not available for Windows Computer Use.