---
type: "firecrawl-provider"
description: "Official ChatGPT and Codex documentation from learn.chatgpt.com (where developers.openai.com/codex now redirects): OpenAI's own docs search restricted to the site, any page as clean Markdown with a heading outline and section reads, the llms.txt page index, and the dated ChatGPT and Codex changelog. Public machine-readable sources only; no login."
use_when: "Official ChatGPT and Codex documentation from learn.chatgpt.com (where developers.openai.com/codex now redirects): OpenAI's own docs search restricted to the site, any page as clean Markdown with a heading outline and section reads, the llms.txt page index, and the dated ChatGPT and Codex changelog. Public machine-readable sources only; no login."
categories: "Developer"
capabilities: 4
credits_per_call: 5
---
# ChatGPT and Codex docs on Firecrawl Alexandria

Official ChatGPT and Codex documentation from learn.chatgpt.com (where developers.openai.com/codex now redirects): OpenAI's own docs search restricted to the site, any page as clean Markdown with a heading outline and section reads, the llms.txt page index, and the dated ChatGPT and Codex changelog. Public machine-readable sources only; no login.

- Categories: Developer
- Category index: [Developer category](https://firecrawl.dev/alexandria/agents/categories/developer)
- Provider key: `learn-chatgpt-com`
- Access: Firecrawl credits
- Cost: 5 credits per call

## More

- [Human guide](https://firecrawl.dev/app/alexandria/learn-chatgpt-com)
- [OpenAPI spec](https://firecrawl.dev/alexandria/agents/providers/learn-chatgpt-com/openapi.json)

## Capabilities

- [Get page](https://firecrawl.dev/alexandria/agents/providers/learn-chatgpt-com/developer-documentation/get_page): One learn.chatgpt.com page as clean Markdown from its .md twin (GET /docs/{slug}.md), with title, description (from llms.txt), url, markdown_url, the full heading outline (level, text, anchor) and the content. An optional section returns only that heading's subtree; max_chars truncates. The site's boilerplate index note is removed. Unknown pages and sections are not_found.
- [List changelog](https://firecrawl.dev/alexandria/agents/providers/learn-chatgpt-com/developer-documentation/list_changelog): Dated ChatGPT and Codex release notes from the official changelog RSS feed (GET /docs/changelog/rss.xml, the source of learn.chatgpt.com/docs/changelog): app, CLI, iOS, model and admin updates, newest first, each with id, date, title, summary, the entry Markdown and a citable source URL. Filter by since/until date and words; offset-paginated.
- [List pages](https://firecrawl.dev/alexandria/agents/providers/learn-chatgpt-com/developer-documentation/list_pages): The learn.chatgpt.com page index from llms.txt (GET /docs/llms.txt): every listed ChatGPT and Codex page with group, title, slug, url, markdown_url and description, filterable by words (q) and group, offset-paginated. Also returns all group names. An unknown group is not_found.
- [Search docs](https://firecrawl.dev/alexandria/agents/providers/learn-chatgpt-com/developer-documentation/search_docs): Official OpenAI docs search restricted to learn.chatgpt.com (ChatGPT and Codex guides, references, the changelog and What's new). Calls search_openai_docs on OpenAI's public docs MCP server (developers.openai.com/mcp), which ranks pages and sections across all OpenAI docs sites, and keeps only learn.chatgpt.com hits in the vendor's order. Each result has the page title, the matched heading path, the section anchor, a snippet of up to 400 characters and the page slug to pass to get_page.

## 1. Choose this provider when

Official ChatGPT and Codex documentation from learn.chatgpt.com (where developers.openai.com/codex now redirects): OpenAI's own docs search restricted to the site, any page as clean Markdown with a heading outline and section reads, the llms.txt page index, and the dated ChatGPT and Codex changelog. Public machine-readable sources only; no login.

## 2. Minimal request

Call `POST https://api.firecrawl.dev/v2/scrape` with `{ alexandria: { provider, capability, options } }`. For a batch, send `{ alexandria: [...] }` with up to 10 calls.

```json
{
  "provider": "learn-chatgpt-com",
  "capability": "developer-documentation/get_page",
  "options": {
    "max_chars": 1500,
    "section": "Matcher patterns",
    "slug": "hooks"
  }
}
```

## 3. Add provider options

Use only the options needed for the task:

- `max_chars` (number): Truncate content to this many characters. Example: `200`
- `section` (string): Return only this heading and its subsections: heading text or anchor, case-insensitive (e.g. Matcher patterns or matcher-patterns). Overrides a URL anchor. Unknown sections are not_found. Example: `<section>`
- `slug` (string): Docs slug after /docs/, e.g. hooks, agent-configuration/subagents, whats-new/devday-2026 (a trailing .md is accepted). list_pages and search_docs return slugs. Pattern: ^/?[A-Za-z0-9][A-Za-z0-9._-]*(/[A-Za-z0-9][A-Za-z0-9._-]*)*/?$. Example: `<slug>`
- `url` (string): Alternatively a page URL: https://learn.chatgpt.com/docs/hooks, its .md twin, or a legacy https://developers.openai.com/codex/... URL (resolved through the site redirect). A #anchor selects that section. Pattern: ^https?://. Example: `<url>`

## 4. Request through your preferred interface

### JavaScript

```javascript
const result = await firecrawl.scrape({
  alexandria: {
    provider: "learn-chatgpt-com",
    capability: "developer-documentation/get_page",
    options: {
      max_chars: 1500,
      section: "Matcher patterns",
      slug: "hooks",
    },
  },
});
```

### Python

```python
result = firecrawl.scrape_alexandria({
  "provider": "learn-chatgpt-com",
  "capability": "developer-documentation/get_page",
  "options": {
    "max_chars": 1500,
    "section": "Matcher patterns",
    "slug": "hooks"
  }
})
```

### cURL

```sh
curl https://api.firecrawl.dev/v2/scrape \
  -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "alexandria": {
    "provider": "learn-chatgpt-com",
    "capability": "developer-documentation/get_page",
    "options": {
      "max_chars": 1500,
      "section": "Matcher patterns",
      "slug": "hooks"
    }
  }
}'
```

### CLI

```sh
firecrawl scrape 'learn-chatgpt-com/developer-documentation/get_page' \
  --options '{"max_chars":1500,"section":"Matcher patterns","slug":"hooks"}'
```


### MCP

Call the FCX MCP retrieve tool with this object:

```json
{
  "provider": "learn-chatgpt-com",
  "capability": "developer-documentation/get_page",
  "options": {
    "max_chars": 1500,
    "section": "Matcher patterns",
    "slug": "hooks"
  }
}
```

Ask for only the returned fields needed by the task.

## 5. Full request shape

```json
{
  "provider": "learn-chatgpt-com",
  "capability": "developer-documentation/get_page",
  "options": {
    "max_chars": 1500,
    "section": "Matcher patterns",
    "slug": "hooks"
  }
}
```

## 6. Response data

The response includes `success`, `provider`, `capability`, `creditsCost` and `data`. This example shows the provider payload in `data`:

```json
{
  "chars": 4172,
  "content": "## Matcher patterns\n\nThe `matcher` field is a regex string that filters when hooks fire. Use `\"*\"`,\n`\"\"`, or omit `matcher` entirely to match every occurrence of a supported\nevent.\n\nOnly some current Codex events honor `matcher`:\n\n| Event               | What `matcher` filters | Notes                                                          |\n| ------------------- | ---------------------- | -------------------------------------------------------------- |\n| `PermissionRequest` | tool name              | Support includes `Bash`, `apply_patch`\\*, and MCP tool names   |\n| `PostToolUse`       | tool name              | See [Tool coverage](#tool-coverage)                            |\n| `PostCompact`       | compaction trigger     | Values are `manual` or `auto`                                  |\n| `PreCompact`        | compaction trigger     | Values are `manual` or `auto`                                  |\n| `PreToolUse`        | tool name              | See [Tool coverage](#tool-coverage)                            |\n| `SessionEnd`        | end reason             | Currently only `other`                                         |\n| `SessionStart`      | start source           | Values are `startup`, `resume`, `clear`, `compact`, and `fork` |\n| `SubagentStart`     | subagent type          | Values depend on the subagent that starts                      |\n| `SubagentStop`      | subagent type          | Values depend on the subagent that stops                       |\n| `UserPromptSu",
  "description": "Run scripts or MCP tools during the Codex lifecycle",
  "markdown_url": "https://learn.chatgpt.com/docs/hooks.md",
  "observed_at_ms": 1792515977843,
  "outline": [
    {
      "anchor": null,
      "level": 1,
      "text": "Hooks"
    },
    {
      "anchor": "where-codex-looks-for-hooks",
      "level": 2,
      "text": "Where Codex looks for hooks"
    },
    {
      "anchor": "review-and-trust-hooks",
      "level": 2,
      "text": "Review and trust hooks"
    },
    {
      "anchor": "config-shape",
      "level": 2,
      "text": "Config shape"
    },
    {
      "anchor": "mcp-tool-hooks",
      "level": 2,
      "text": "MCP tool hooks"
    },
    {
      "anchor": "configure-an-mcp-tool-hook",
      "level": 3,
      "text": "Configure an MCP tool hook"
    },
    {
      "anchor": "expand-arguments-from-the-hook-event",
      "level": 3,
      "text": "Expand arguments from the hook event"
    },
    {
      "anchor": "execution-and-lifecycle",
      "level": 3,
      "text": "Execution and lifecycle"
    },
    {
      "anchor": "turn-hooks-off",
      "level": 2,
      "text": "Turn hooks off"
    },
    {
      "anchor": "managed-hooks-from-requirementstoml",
      "level": 2,
      "text": "Managed hooks from requirements.toml"
    },
    {
      "anchor": "plugin-bundled-hooks",
      "level": 2,
      "text": "Plugin-bundled hooks"
    },
    {
      "anchor": "matcher-patterns",
      "level": 2,
      "text": "Matcher patterns"
    },
    {
      "anchor": "tool-coverage",
      "level": 3,
      "text": "Tool coverage"
    },
    {
      "anchor": "common-input-fields",
      "level": 2,
      "text": "Common input fields"
    },
    {
      "anchor": "common-output-fields",
      "level": 2,
      "text": "Common output fields"
    },
    {
      "anchor": "large-hook-output",
      "level": 3,
      "text": "Large hook output"
    },
    {
      "anchor": "run-hooks-in-the-background",
      "level": 2,
      "text": "Run hooks in the background"
    },
    {
      "anchor": "configure-a-background-hook",
      "level": 3,
      "text": "Configure a background hook"
    },
    {
      "anchor": "how-background-hooks-run",
      "level": 3,
      "text": "How background hooks run"
    },
    {
      "anchor": "limitations",
      "level": 3,
      "text": "Limitations"
    },
    {
      "anchor": "hooks",
      "level": 2,
      "text": "Hooks"
    },
    {
      "anchor": "sessionstart",
      "level": 3,
      "text": "SessionStart"
    },
    {
      "anchor": "sessionend",
      "level": 3,
      "text": "SessionEnd"
    },
    {
      "anchor": "subagentstart",
      "level": 3,
      "text": "SubagentStart"
    },
    {
      "anchor": "pretooluse",
      "level": 3,
      "text": "PreToolUse"
    },
    {
      "anchor": "permissionrequest",
      "level": 3,
      "text": "PermissionRequest"
    },
    {
      "anchor": "posttooluse",
      "level": 3,
      "text": "PostToolUse"
    },
    {
      "anchor": "tool-calls-from-code-mode",
      "level": 4,
      "text": "Tool calls from code mode"
    },
    {
      "anchor": "precompact",
      "level": 3,
      "text": "PreCompact"
    },
    {
      "anchor": "postcompact",
      "level": 3,
      "text": "PostCompact"
    },
    {
      "anchor": "userpromptsubmit",
      "level": 3,
      "text": "UserPromptSubmit"
    },
    {
      "anchor": "subagentstop",
      "level": 3,
      "text": "SubagentStop"
    },
    {
      "anchor": "stop",
      "level": 3,
      "text": "Stop"
    },
    {
      "anchor": "interrupt",
      "level": 3,
      "text": "Interrupt"
    },
    {
      "anchor": "schemas",
      "level": 2,
      "text": "Schemas"
    },
    {
      "anchor": "plain-text-aliases",
      "level": 3,
      "text": "Plain-text aliases"
    }
  ],
  "section": {
    "anchor": "matcher-patterns",
    "level": 2,
    "text": "Matcher patterns"
  },
  "slug": "hooks",
  "title": "Hooks",
  "truncated": true,
  "url": "https://learn.chatgpt.com/docs/hooks"
}
```

## API reference-derived contract

The following capability contract is generated from the same normalized Alexandria API reference exposed in the API spec.

### Get page

- Capability: `developer-documentation/get_page`
- Description: One learn.chatgpt.com page as clean Markdown from its .md twin (GET /docs/{slug}.md), with title, description (from llms.txt), url, markdown_url, the full heading outline (level, text, anchor) and the content. An optional section returns only that heading's subtree; max_chars truncates. The site's boilerplate index note is removed. Unknown pages and sections are not_found.
- Instructions: To read official ChatGPT or Codex guidance verbatim (e.g. hooks lifecycle events and config, subagents, AGENTS.md, plugins and skills, Sites), or one section of it, with a citable source URL.
- Cost: 5 credits per call
- Capability file: [Get page](https://firecrawl.dev/alexandria/agents/providers/learn-chatgpt-com/developer-documentation/get_page)

Accepted options:
- `max_chars` (number): Truncate content to this many characters. Example: `200`
- `section` (string): Return only this heading and its subsections: heading text or anchor, case-insensitive (e.g. Matcher patterns or matcher-patterns). Overrides a URL anchor. Unknown sections are not_found. Example: `<section>`
- `slug` (string): Docs slug after /docs/, e.g. hooks, agent-configuration/subagents, whats-new/devday-2026 (a trailing .md is accepted). list_pages and search_docs return slugs. Pattern: ^/?[A-Za-z0-9][A-Za-z0-9._-]*(/[A-Za-z0-9][A-Za-z0-9._-]*)*/?$. Example: `<slug>`
- `url` (string): Alternatively a page URL: https://learn.chatgpt.com/docs/hooks, its .md twin, or a legacy https://developers.openai.com/codex/... URL (resolved through the site redirect). A #anchor selects that section. Pattern: ^https?://. Example: `<url>`

Response schema example:
```json
{
  "chars": 4172,
  "content": "## Matcher patterns\n\nThe `matcher` field is a regex string that filters when hooks fire. Use `\"*\"`,\n`\"\"`, or omit `matcher` entirely to match every occurrence of a supported\nevent.\n\nOnly some current Codex events honor `matcher`:\n\n| Event               | What `matcher` filters | Notes                                                          |\n| ------------------- | ---------------------- | -------------------------------------------------------------- |\n| `PermissionRequest` | tool name              | Support includes `Bash`, `apply_patch`\\*, and MCP tool names   |\n| `PostToolUse`       | tool name              | See [Tool coverage](#tool-coverage)                            |\n| `PostCompact`       | compaction trigger     | Values are `manual` or `auto`                                  |\n| `PreCompact`        | compaction trigger     | Values are `manual` or `auto`                                  |\n| `PreToolUse`        | tool name              | See [Tool coverage](#tool-coverage)                            |\n| `SessionEnd`        | end reason             | Currently only `other`                                         |\n| `SessionStart`      | start source           | Values are `startup`, `resume`, `clear`, `compact`, and `fork` |\n| `SubagentStart`     | subagent type          | Values depend on the subagent that starts                      |\n| `SubagentStop`      | subagent type          | Values depend on the subagent that stops                       |\n| `UserPromptSu",
  "description": "Run scripts or MCP tools during the Codex lifecycle",
  "markdown_url": "https://learn.chatgpt.com/docs/hooks.md",
  "observed_at_ms": 1792515977843,
  "outline": [
    {
      "anchor": null,
      "level": 1,
      "text": "Hooks"
    },
    {
      "anchor": "where-codex-looks-for-hooks",
      "level": 2,
      "text": "Where Codex looks for hooks"
    },
    {
      "anchor": "review-and-trust-hooks",
      "level": 2,
      "text": "Review and trust hooks"
    },
    {
      "anchor": "config-shape",
      "level": 2,
      "text": "Config shape"
    },
    {
      "anchor": "mcp-tool-hooks",
      "level": 2,
      "text": "MCP tool hooks"
    },
    {
      "anchor": "configure-an-mcp-tool-hook",
      "level": 3,
      "text": "Configure an MCP tool hook"
    },
    {
      "anchor": "expand-arguments-from-the-hook-event",
      "level": 3,
      "text": "Expand arguments from the hook event"
    },
    {
      "anchor": "execution-and-lifecycle",
      "level": 3,
      "text": "Execution and lifecycle"
    },
    {
      "anchor": "turn-hooks-off",
      "level": 2,
      "text": "Turn hooks off"
    },
    {
      "anchor": "managed-hooks-from-requirementstoml",
      "level": 2,
      "text": "Managed hooks from requirements.toml"
    },
    {
      "anchor": "plugin-bundled-hooks",
      "level": 2,
      "text": "Plugin-bundled hooks"
    },
    {
      "anchor": "matcher-patterns",
      "level": 2,
      "text": "Matcher patterns"
    },
    {
      "anchor": "tool-coverage",
      "level": 3,
      "text": "Tool coverage"
    },
    {
      "anchor": "common-input-fields",
      "level": 2,
      "text": "Common input fields"
    },
    {
      "anchor": "common-output-fields",
      "level": 2,
      "text": "Common output fields"
    },
    {
      "anchor": "large-hook-output",
      "level": 3,
      "text": "Large hook output"
    },
    {
      "anchor": "run-hooks-in-the-background",
      "level": 2,
      "text": "Run hooks in the background"
    },
    {
      "anchor": "configure-a-background-hook",
      "level": 3,
      "text": "Configure a background hook"
    },
    {
      "anchor": "how-background-hooks-run",
      "level": 3,
      "text": "How background hooks run"
    },
    {
      "anchor": "limitations",
      "level": 3,
      "text": "Limitations"
    },
    {
      "anchor": "hooks",
      "level": 2,
      "text": "Hooks"
    },
    {
      "anchor": "sessionstart",
      "level": 3,
      "text": "SessionStart"
    },
    {
      "anchor": "sessionend",
      "level": 3,
      "text": "SessionEnd"
    },
    {
      "anchor": "subagentstart",
      "level": 3,
      "text": "SubagentStart"
    },
    {
      "anchor": "pretooluse",
      "level": 3,
      "text": "PreToolUse"
    },
    {
      "anchor": "permissionrequest",
      "level": 3,
      "text": "PermissionRequest"
    },
    {
      "anchor": "posttooluse",
      "level": 3,
      "text": "PostToolUse"
    },
    {
      "anchor": "tool-calls-from-code-mode",
      "level": 4,
      "text": "Tool calls from code mode"
    },
    {
      "anchor": "precompact",
      "level": 3,
      "text": "PreCompact"
    },
    {
      "anchor": "postcompact",
      "level": 3,
      "text": "PostCompact"
    },
    {
      "anchor": "userpromptsubmit",
      "level": 3,
      "text": "UserPromptSubmit"
    },
    {
      "anchor": "subagentstop",
      "level": 3,
      "text": "SubagentStop"
    },
    {
      "anchor": "stop",
      "level": 3,
      "text": "Stop"
    },
    {
      "anchor": "interrupt",
      "level": 3,
      "text": "Interrupt"
    },
    {
      "anchor": "schemas",
      "level": 2,
      "text": "Schemas"
    },
    {
      "anchor": "plain-text-aliases",
      "level": 3,
      "text": "Plain-text aliases"
    }
  ],
  "section": {
    "anchor": "matcher-patterns",
    "level": 2,
    "text": "Matcher patterns"
  },
  "slug": "hooks",
  "title": "Hooks",
  "truncated": true,
  "url": "https://learn.chatgpt.com/docs/hooks"
}
```

### List changelog

- Capability: `developer-documentation/list_changelog`
- Description: Dated ChatGPT and Codex release notes from the official changelog RSS feed (GET /docs/changelog/rss.xml, the source of learn.chatgpt.com/docs/changelog): app, CLI, iOS, model and admin updates, newest first, each with id, date, title, summary, the entry Markdown and a citable source URL. Filter by since/until date and words; offset-paginated.
- Instructions: To answer what changed in ChatGPT or Codex and when (model retirements, new features, app releases), with dates and source URLs.
- Cost: 5 credits per call
- Capability file: [List changelog](https://firecrawl.dev/alexandria/agents/providers/learn-chatgpt-com/developer-documentation/list_changelog)

Accepted options:
- `limit` (number): limit Example: `10`
- `max_chars` (number): Truncate each entry content to this many characters. Example: `100`
- `offset` (number): offset Example: `0`
- `q` (string): Words that must all appear in title, summary or content (case-insensitive). Example: `<q>`
- `since` (string): Earliest entry date, inclusive (YYYY-MM-DD). Pattern: ^\d{4}-\d{2}-\d{2}$. Example: `<since>`
- `until` (string): Latest entry date, inclusive (YYYY-MM-DD). Pattern: ^\d{4}-\d{2}-\d{2}$. Example: `<until>`

Response schema example:
```json
{
  "count": 5,
  "entries": [
    {
      "content": "Composer predictions adds autocomplete-style suggestions for your next message in\nthe Codex desktop app. After Codex responds, it uses the current conversation to\nsuggest a follow-up prompt in the message box. Press **Tab** to accept the suggestion\nas an editable draft, or type your own message. Accepting a prediction doesn't send\nit for you.\n\nThe feature is available in beta to users aged 18 and ",
      "content_chars": 627,
      "date": "2026-10-09",
      "id": "codex-2026-10-09-composer-predictions",
      "source_url": "https://developers.openai.com/codex/changelog/#codex-2026-10-09-composer-predictions",
      "summary": null,
      "title": "Composer predictions in Codex",
      "truncated": true,
      "url": "https://learn.chatgpt.com/docs/changelog#codex-2026-10-09-composer-predictions"
    },
    {
      "content": "### Performance improvements and bug fixes\n\n- Fixed queued messages getting stuck on **Sending** and restored **Steer** in\n  secondary app windows.\n- Improved scrolling and navigation between files in the **Changes** panel.\n- Added clearer recovery guidance when a tool call needs approval but the chat's\n  permissions prevent approval requests, with a link to those permissions when available.",
      "content_chars": 394,
      "date": "2026-10-08",
      "id": "codex-2026-10-08-app",
      "source_url": "https://developers.openai.com/codex/changelog/#codex-2026-10-08-app",
      "summary": null,
      "title": "Codex app",
      "truncated": false,
      "url": "https://learn.chatgpt.com/docs/changelog#codex-2026-10-08-app"
    },
    {
      "content": "Ultrafast mode speeds up token generation with GPT-6.1 Sol in Codex and\nChatGPT Work.\n\nUltrafast is available on Pro $500 and eligible Enterprise and Edu plans.\nEnterprise access is off by default; workspace owners must enable it.\nGPT-6.1 Sol Ultrafast supports inference residency in the United States and\nEurope (EEA + Switzerland).\n\nSee [Ultrafast mode](https://developers.openai.com/codex/agent-c",
      "content_chars": 642,
      "date": "2026-10-08",
      "id": "codex-2026-10-08-gpt-61-sol-ultrafast",
      "source_url": "https://developers.openai.com/codex/changelog/#codex-2026-10-08-gpt-61-sol-ultrafast",
      "summary": null,
      "title": "GPT-6.1 Sol Ultrafast in Codex and ChatGPT Work",
      "truncated": true,
      "url": "https://learn.chatgpt.com/docs/changelog#codex-2026-10-08-gpt-61-sol-ultrafast"
    },
    {
      "content": "### Performance improvements and bug fixes\n\n- Fixed Windows sandbox refresh failures after app updates.\n- Fixed worktree creation and chat forking for WSL repositories whose paths\n  conflicted with Windows directories.\n- Kept the recent chats section collapsed when switching between chats.\n- Fixed **Remove from section** so it removes a chat from its sidebar section\n  without pinning it.",
      "content_chars": 390,
      "date": "2026-10-07",
      "id": "codex-2026-10-07-app",
      "source_url": "https://developers.openai.com/codex/changelog/#codex-2026-10-07-app",
      "summary": null,
      "title": "Codex app",
      "truncated": false,
      "url": "https://learn.chatgpt.com/docs/changelog#codex-2026-10-07-app"
    },
    {
      "content": "### New features\n\n- Page previews now appear inline in responses.\n- Added support for opening Codex task links directly on iOS.\n\n### Improvements and bug fixes\n\n- Redesigned the approval picker with clearer permission choices.\n- Find plugins from a single Plugins entry in the composer's plus menu.\n- Faster streaming in long threads, with fewer freezes.\n- New tasks keep your selected computer while",
      "content_chars": 789,
      "date": "2026-10-07",
      "id": "codex-2026-10-07-mobile",
      "source_url": "https://developers.openai.com/codex/changelog/#codex-2026-10-07-mobile",
      "summary": null,
      "title": "ChatGPT for iOS",
      "truncated": true,
      "url": "https://learn.chatgpt.com/docs/changelog#codex-2026-10-07-mobile"
    }
  ],
  "feed_title": "ChatGPT & Codex changelog",
  "matched": 7,
  "newest_date": "2026-10-14",
  "next_offset": 5,
  "observed_at_ms": 1792515977850,
  "query": {
    "limit": 5,
    "max_chars": 400,
    "offset": 0,
    "q": null,
    "since": "2026-10-01",
    "until": "2026-10-09"
  },
  "source_url": "https://learn.chatgpt.com/docs/changelog/rss.xml",
  "total_entries": 140
}
```

### List pages

- Capability: `developer-documentation/list_pages`
- Description: The learn.chatgpt.com page index from llms.txt (GET /docs/llms.txt): every listed ChatGPT and Codex page with group, title, slug, url, markdown_url and description, filterable by words (q) and group, offset-paginated. Also returns all group names. An unknown group is not_found.
- Instructions: To browse what the ChatGPT and Codex docs cover, list a group's pages (e.g. Agent Configuration, Plugins, Skills And Plugins, Sites, Whats New), or map a topic to slugs without a search query.
- Cost: 5 credits per call
- Capability file: [List pages](https://firecrawl.dev/alexandria/agents/providers/learn-chatgpt-com/developer-documentation/list_pages)

Accepted options:
- `group` (string): Exact group name, case-insensitive (see groups in any result). Example: `<group>`
- `limit` (number): limit Example: `50`
- `offset` (number): offset Example: `0`
- `q` (string): Words that must all appear in title, description, slug or group (case-insensitive). Example: `<q>`

Response schema example:
```json
{
  "count": 1,
  "groups": [
    "Documentation sets",
    "Administration",
    "Agent Approvals Security",
    "Agent Configuration",
    "Amazon Bedrock",
    "Annotations Extensibility",
    "App",
    "App Server",
    "Appshots",
    "Artifacts Viewer",
    "Auth",
    "Automations",
    "Browser",
    "Build Plugins",
    "Build Skills",
    "Chrome Extension",
    "Cli",
    "Cli Customization",
    "Cloud",
    "Code Review",
    "Codex Sdk",
    "Community",
    "Computer Use",
    "Config File",
    "Configuration",
    "Custom Prompts",
    "Customization",
    "Cyber Safety",
    "Developers",
    "Dots",
    "Enterprise",
    "Environments",
    "Extend",
    "Feature Maturity",
    "Features",
    "Get Started With Work",
    "Github Action",
    "Glossary",
    "Guides",
    "Hooks",
    "Ide",
    "Image Generation",
    "Image Inputs",
    "Import",
    "Integrated Terminal",
    "Learn",
    "Linux",
    "Long Running Work",
    "Mcp Server",
    "Migrate Custom Gpts",
    "Mobile",
    "Model Selection",
    "Models",
    "Non Interactive Mode",
    "Notifications",
    "Open Source",
    "Overview",
    "Permission Modes",
    "Permissions",
    "Personalize",
    "Pets",
    "Plugins",
    "Pricing",
    "Projects",
    "Prompting",
    "Quickstart",
    "Reference",
    "Remote Connections",
    "Resources",
    "Sandboxing",
    "Security",
    "Security Administration",
    "Sign In With Chatgpt",
    "Sites",
    "Skills And Plugins",
    "Space",
    "Third Party",
    "Use Chatgpt",
    "Videos",
    "Visualizations",
    "Web",
    "Web Search",
    "Webmcp",
    "Whats New",
    "Windows"
  ],
  "matched": 1,
  "next_offset": null,
  "observed_at_ms": 1792515977845,
  "pages": [
    {
      "description": "Run scripts or MCP tools during the Codex lifecycle",
      "group": "Hooks",
      "markdown_url": "https://learn.chatgpt.com/docs/hooks.md",
      "slug": "hooks",
      "title": "Hooks",
      "url": "https://learn.chatgpt.com/docs/hooks"
    }
  ],
  "query": {
    "group": null,
    "limit": 50,
    "offset": 0,
    "q": "hooks"
  },
  "source_url": "https://learn.chatgpt.com/docs/llms.txt",
  "total_pages": 200
}
```

### Search docs

- Capability: `developer-documentation/search_docs`
- Description: Official OpenAI docs search restricted to learn.chatgpt.com (ChatGPT and Codex guides, references, the changelog and What's new). Calls search_openai_docs on OpenAI's public docs MCP server (developers.openai.com/mcp), which ranks pages and sections across all OpenAI docs sites, and keeps only learn.chatgpt.com hits in the vendor's order. Each result has the page title, the matched heading path, the section anchor, a snippet of up to 400 characters and the page slug to pass to get_page.
- Instructions: To find which ChatGPT or Codex page and section covers a topic (hooks, AGENTS.md, subagents, sandboxing, plugins, skills, Sites, pricing) before reading it with get_page.
- Cost: 5 credits per call
- Capability file: [Search docs](https://firecrawl.dev/alexandria/agents/providers/learn-chatgpt-com/developer-documentation/search_docs)

Accepted options:
- `cursor` (string): next_cursor from an earlier result, to continue the same query. Pattern: ^[0-9]{1,6}\.[0-9]{1,3}\.[A-Za-z0-9+/=_-]{1,480}$. Example: `<cursor>`
- `limit` (number): Results to return (default 10). Example: `10`
- `q` (string, required): Search text, e.g. codex hooks or plugin capability boundaries. Example: `<q>`

Response schema example:
```json
{
  "count": 10,
  "next_cursor": "11.10._",
  "observed_at_ms": 1792515977842,
  "query": {
    "cursor": null,
    "limit": 10,
    "q": "codex hooks"
  },
  "results": [
    {
      "anchor": "install-and-enforce-administrator-managed-hooks",
      "hierarchy": [
        "Codex security cookbook",
        "Combined recipes for enterprise security goals",
        "Keep Codex from changing its own safeguards",
        "Install and enforce administrator-managed hooks"
      ],
      "hit_type": "lvl4",
      "page_url": "https://learn.chatgpt.com/docs/enterprise/security-cookbook",
      "rank": 1,
      "section": "Install and enforce administrator-managed hooks",
      "slug": "enterprise/security-cookbook",
      "snippet": null,
      "title": "Codex security cookbook",
      "url": "https://learn.chatgpt.com/docs/enterprise/security-cookbook#install-and-enforce-administrator-managed-hooks"
    },
    {
      "anchor": "configure-an-mcp-tool-hook",
      "hierarchy": [
        "Hooks",
        "MCP tool hooks",
        "Configure an MCP tool hook"
      ],
      "hit_type": "content",
      "page_url": "https://learn.chatgpt.com/docs/hooks",
      "rank": 2,
      "section": "Configure an MCP tool hook",
      "slug": "hooks",
      "snippet": "This hook asks the scanner MCP server to scan each patch after Codex writes or\nedits files:\ntype\nMust be mcp_tool.\nserver\nRequired name of an already-connected MCP server.\ntool\nRequired name of a tool exposed by that server.\ninput\nOptional JSON object of argument templates. Defaults to {}.\ntimeout\nOptional active execution timeout in seconds. Defaults to 600.\nstatusMessage\nOptional message shown w",
      "title": "Hooks",
      "url": "https://learn.chatgpt.com/docs/hooks#configure-an-mcp-tool-hook"
    },
    {
      "anchor": "api-overview",
      "hierarchy": [
        "Codex App Server",
        "API overview"
      ],
      "hit_type": "content",
      "page_url": "https://learn.chatgpt.com/docs/app-server",
      "rank": 3,
      "section": "API overview",
      "slug": "app-server",
      "snippet": "thread/start - create a new thread; emits thread/started and automatically subscribes you to turn/item events for that thread.\nthread/resume - reopen an existing thread by id so later turn/start calls append to it.\nthread/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-me",
      "title": "Codex App Server",
      "url": "https://learn.chatgpt.com/docs/app-server#api-overview"
    },
    {
      "anchor": "how-do-scan-cost-limits-work",
      "hierarchy": [
        "Codex Security CLI FAQ",
        "Automation and cost",
        "How do scan cost limits work"
      ],
      "hit_type": "content",
      "page_url": "https://learn.chatgpt.com/docs/security/cli/faq",
      "rank": 4,
      "section": "How do scan cost limits work",
      "slug": "security/cli/faq",
      "snippet": "Set an estimated cost limit in USD before starting the scan:\nThe limit is an estimate, not a hard spending cap. Requests already in\nprogress can finish above it. If a deep scan reaches the limit after Codex\nSecurity aggregates completed worker results, the CLI can save a completed\nreport with a budget warning. It returns 0, or 1 if findings meet the\nconfigured severity threshold. If it can’t produ",
      "title": "Codex Security CLI FAQ",
      "url": "https://learn.chatgpt.com/docs/security/cli/faq#how-do-scan-cost-limits-work"
    },
    {
      "anchor": "troubleshoot-code-review",
      "hierarchy": [
        "Review GitLab merge requests with Codex",
        "Troubleshoot code review"
      ],
      "hit_type": "content",
      "page_url": "https://learn.chatgpt.com/docs/third-party/gitlab",
      "rank": 5,
      "section": "Troubleshoot code review",
      "slug": "third-party/gitlab",
      "snippet": "If Codex doesn’t react or post a review:\nConfirm the intended GitLab app has been selected; if you use project-specific\nsetup, confirm the project has the intended Codex cloud environment.\nConfirm activity for the project or an ancestor group. In GitLab, check\nWebhooks →\nRecent events\nand verify merge request and note deliveries succeed.\nFor self-managed or Dedicated GitLab, confirm the project or",
      "title": "Review GitLab merge requests with Codex",
      "url": "https://learn.chatgpt.com/docs/third-party/gitlab#troubleshoot-code-review"
    },
    {
      "anchor": "improvements-and-bug-fixes",
      "hierarchy": [
        "ChatGPT & Codex changelog",
        "May 2026",
        "Improvements and bug fixes"
      ],
      "hit_type": "content",
      "page_url": "https://learn.chatgpt.com/docs/changelog",
      "rank": 6,
      "section": "Improvements and bug fixes",
      "slug": "changelog",
      "snippet": "Improved iPad keyboard shortcuts.\nImproved setup and relaunch reliability.\nFixed issues with task progress, loading archived threads, previewing code\nchanges, and switching hosts.\n2026-05-21 Appshots, goal mode, and more 26.519 Appshots are now available in the Codex app on macOS. Press\nboth Command keys to send the frontmost app window to Codex with a screenshot\nand available text, so Codex can w",
      "title": "ChatGPT & Codex changelog",
      "url": "https://learn.chatgpt.com/docs/changelog#improvements-and-bug-fixes"
    },
    {
      "anchor": "codex-security-install-hook",
      "hierarchy": [
        "Codex Security CLI reference",
        "codex-security install-hook"
      ],
      "hit_type": "lvl2",
      "page_url": "https://learn.chatgpt.com/docs/security/cli/reference",
      "rank": 7,
      "section": "codex-security install-hook",
      "slug": "security/cli/reference",
      "snippet": null,
      "title": "Codex Security CLI reference",
      "url": "https://learn.chatgpt.com/docs/security/cli/reference#codex-security-install-hook"
    },
    {
      "anchor": "which-hooks-are-supported-in-local-computer-access-with-work-cloud",
      "hierarchy": [
        "ChatGPT Work admin FAQ",
        "Work across devices",
        "Which hooks are supported in Local computer access with Work Cloud?"
      ],
      "hit_type": "content",
      "page_url": "https://learn.chatgpt.com/docs/enterprise/work-admin-faq",
      "rank": 8,
      "section": "Which hooks are supported in Local computer access with Work Cloud?",
      "slug": "enterprise/work-admin-faq",
      "snippet": "When managed policy and remote hooks are enabled, Work Cloud with local access and dots use admin-managed remote MCP hooks on the cloud orchestrator. Configure mcp_tool handlers in Global requirements.toml. Work Cloud without local access and personal accounts do not use these enterprise hooks. Command/shell, prompt, and agent handlers; hooks from local configuration, plugins, or local directories",
      "title": "ChatGPT Work admin FAQ",
      "url": "https://learn.chatgpt.com/docs/enterprise/work-admin-faq#which-hooks-are-supported-in-local-computer-access-with-work-cloud"
    },
    {
      "anchor": "hooks-in-local-computer-access-with-work-cloud",
      "hierarchy": [
        "Agent Security",
        "Choose controls and configuration fields",
        "Hooks in Local computer access with Work Cloud"
      ],
      "hit_type": "content",
      "page_url": "https://learn.chatgpt.com/docs/enterprise/agent-security",
      "rank": 9,
      "section": "Hooks in Local computer access with Work Cloud",
      "slug": "enterprise/agent-security",
      "snippet": "When managed policy and remote hooks are enabled, Work Cloud with local access and dots use admin-managed remote MCP hooks on the cloud orchestrator. Configure mcp_tool handlers in Global requirements.toml. Work Cloud without local access and personal accounts do not use these enterprise hooks. Command/shell, prompt, and agent handlers; hooks from local configuration, plugins, or local directories",
      "title": "Agent Security",
      "url": "https://learn.chatgpt.com/docs/enterprise/agent-security#hooks-in-local-computer-access-with-work-cloud"
    },
    {
      "anchor": "codex-exec",
      "hierarchy": [
        "Developer commands",
        "Command details",
        "codex exec"
      ],
      "hit_type": "content",
      "page_url": "https://learn.chatgpt.com/docs/developer-commands",
      "rank": 10,
      "section": "codex exec",
      "slug": "developer-commands",
      "snippet": "Use codex exec (or the short form codex e) for scripted or CI-style runs that should finish without human interaction.\n--approve-for-me, --not-so-yolo\nboolean\nUse automatic approval review with on-request approvals and the workspace-write sandbox. Conflicts with --sandbox and --yolo; the interactive CLI also rejects --ask-for-approval.\n--cd, -C\npath\nSet the workspace root before executing the task",
      "title": "Developer commands",
      "url": "https://learn.chatgpt.com/docs/developer-commands#codex-exec"
    }
  ],
  "source_url": "https://developers.openai.com/mcp",
  "upstream_total_hits": 62
}
```
