# Content provenance

The course adapts the sixty roadmap topics and their learning purposes from [Claude How-To](https://github.com/luongnv89/claude-howto) at commit 188f468893231cbe4525f45e657d554746232072, MIT © 2024 luongnv89. Codex commands, configuration and exercises were authored for Codex rather than renamed mechanically. Different, unavailable or client-specific mechanisms are identified explicitly. Offline checks do not establish that a native Codex client selected a skill, invoked a role, trusted a hook or retrieved a connected record.

The 2.6 local design candidate uses an original Atelier presentation under assets/atelier. The earlier source-derived implementation and complete MIT permission remain under assets/reference as historical licensed material. They are not the active green/subway/typewriter design of this candidate. See [design provenance](design-sources.md), [the retained source notice](../assets/reference/SOURCE-NOTICE.md) and [third-party notices](../THIRD-PARTY-NOTICES.md).

Five getting-started guides introduce the course in English, Vietnamese, Chinese, Japanese and Ukrainian. The sixty detailed lessons, quizzes and executable practice files remain English. The [static reading curriculum](../assets/reading/index.html) provides all sixty complete lessons without JavaScript; the home snapshot links to those pages. Interactive progress, copy controls and quiz submissions remain separate.

| Codex lesson | Source topic | Adaptation |
| --- | --- | --- |
| [Open Codex and complete a first read-only task](../#lesson/s01-01) | [Overview](https://luongnv.com/claude-howto/01-slash-commands/index.html#overview) | different: The source begins with Claude slash commands. This Codex introduction first establishes the app/CLI/IDE surface, account and project, so command examples have a real operating context. |
| [Use built-in commands without guessing](../#lesson/s01-02) | [Built-in commands reference](https://luongnv.com/claude-howto/01-slash-commands/index.html#built-in) | different: Codex has its own current command inventory and desktop shortcuts. Familiar names sometimes overlap with Claude, but their availability and effects must be checked individually. |
| [Replace old custom commands with reusable skills](../#lesson/s01-03) | [Custom commands (now skills)](https://luongnv.com/claude-howto/01-slash-commands/index.html#custom) | different: Both ecosystems evolved from custom commands toward skills, but Codex uses its own discovery locations and invocation controls; deprecated /prompts workflows should not anchor new teaching. |
| [Use connected tools without inventing MCP commands](../#lesson/s01-04) | [MCP prompts as commands](https://luongnv.com/claude-howto/01-slash-commands/index.html#mcp-prompts) | alternative: The Claude lesson exposes MCP prompts as slash commands. This Codex lesson uses verified tool discovery and a capability-based request instead of assuming that namespace is supported. |
| [Create a small project skill](../#lesson/s01-05) | [Create your own commands](https://luongnv.com/claude-howto/01-slash-commands/index.html#create) | equivalent: The reusable-workflow concept transfers, while Codex requires its own .agents/skills discovery path and supported explicit invocation rather than Claude command syntax. |
| [Choose the right control for the task](../#lesson/s01-06) | [Best practices](https://luongnv.com/claude-howto/01-slash-commands/index.html#best-practices) | equivalent: The source’s command-usage habits transfer as a workflow discipline, with Codex-specific controls and an explicit distinction between task intent, verification and permission. |
| [Separate instructions, chat context and memories](../#lesson/s02-01) | [Overview](https://luongnv.com/claude-howto/02-memory/index.html#overview) | different: Claude’s CLAUDE.md and auto-memory model are replaced by Codex AGENTS.md guidance plus a separate, optional host-local memory system with its own controls. |
| [Initialize useful project guidance](../#lesson/s02-02) | [Quick start: initialize memory](https://luongnv.com/claude-howto/02-memory/index.html#quick-start) | equivalent: Codex /init serves the same broad scaffolding purpose as the source lesson, but creates AGENTS.md rather than CLAUDE.md and still requires repository-specific review. |
| [Understand the AGENTS.md instruction chain](../#lesson/s02-03) | [The memory hierarchy](https://luongnv.com/claude-howto/02-memory/index.html#hierarchy) | different: The hierarchical idea transfers from Claude memory, but Codex has explicit AGENTS.override.md selection, root-to-working-directory discovery and its own size/configuration limits. |
| [Split modular guidance from execution rules](../#lesson/s02-04) | [Modular rules system](https://luongnv.com/claude-howto/02-memory/index.html#rules) | alternative: Claude modular Markdown rules are adapted through Codex nested guidance and explicit reference documents; Codex .rules files are a distinct command-policy feature, not a matching prose-rules system. |
| [Use local memories with provenance and limits](../#lesson/s02-05) | [Auto memory](https://luongnv.com/claude-howto/02-memory/index.html#auto-memory) | different: Codex has a documented optional local memory store and /memories controls, with background generation and host-specific settings; it is not Claude’s auto-memory directory or singular /memory editor command. |
| [Know what a checkpoint actually protects](../#lesson/s08-01) | [Overview](https://luongnv.com/claude-howto/08-checkpoints/index.html#overview) | alternative: Codex is taught through explicit Git/file baselines and saved chats, rather than promising the Claude automatic checkpoint-and-rewind system or its retention behavior. |
| [Find the evidence needed for recovery](../#lesson/s08-02) | [Accessing checkpoints](https://luongnv.com/claude-howto/08-checkpoints/index.html#accessing) | alternative: The source checkpoint-access lesson becomes a Codex review/history inspection workflow, using real diffs and a verified baseline instead of an invented checkpoint menu. |
| [Choose between chat reset and file restoration](../#lesson/s08-03) | [Rewind options](https://luongnv.com/claude-howto/08-checkpoints/index.html#rewind) | alternative: Claude’s code/conversation rewind options are mapped to separate Codex chat controls and explicit file-level recovery; no identical checkpoint restore promise is made. |
| [Experiment with branches, forks and small checks](../#lesson/s08-04) | [Workflow patterns](https://luongnv.com/claude-howto/08-checkpoints/index.html#patterns) | alternative: The source’s save/rewind/try-again pattern is preserved through explicit baselines and isolated or sequential Codex experiments rather than automatic rewind snapshots. |
| [Use Git checkpoints as durable file evidence](../#lesson/s08-05) | [Checkpoints and Git](https://luongnv.com/claude-howto/08-checkpoints/index.html#git) | equivalent: The source’s distinction between conversational checkpoints and version control is retained, with Git serving as the explicit durable file baseline for the Codex workflow. |
| [Understand the interactive CLI and scripted runs](../#lesson/s10-01) | [Overview](https://luongnv.com/claude-howto/10-cli/index.html#overview) | different: Codex uses interactive codex and non-interactive codex exec; Claude print-mode flags and native-install instructions are not copied across products. |
| [Navigate the CLI command families](../#lesson/s10-02) | [CLI commands](https://luongnv.com/claude-howto/10-cli/index.html#commands) | different: The source command catalog is rewritten around Codex command families, credential checks, saved sessions and review targets rather than translating Claude subcommands by name. |
| [Set scope with deliberate CLI flags](../#lesson/s10-03) | [Core flags](https://luongnv.com/claude-howto/10-cli/index.html#flags) | different: Codex flags and configuration precedence replace Claude flags. Scope is taught with explicit working-directory and sandbox settings rather than obsolete auto-mode or bypass shortcuts. |
| [Capture final answers and structured events](../#lesson/s10-04) | [Output and formats](https://luongnv.com/claude-howto/10-cli/index.html#output) | different: Claude text/json/stream-json output is replaced by Codex stdout/stderr behavior, JSONL events, output-last-message and output-schema with their distinct contracts. |
| [Choose high-value, bounded CLI tasks](../#lesson/s10-05) | [High-value use cases](https://luongnv.com/claude-howto/10-cli/index.html#use-cases) | equivalent: The source’s high-value CLI scenarios transfer as bounded local workflows, with Codex commands, explicit input contracts and separate authorization for consequential actions. |
| [Choose the right job for a skill](../#lesson/s03-01) | [Overview](https://luongnv.com/claude-howto/03-skills/index.html#overview) | equivalent: Codex supports reusable Agent Skills, but the package extends instructions rather than automatically granting capabilities. |
| [Understand progressive disclosure](../#lesson/s03-02) | [Progressive disclosure](https://luongnv.com/claude-howto/03-skills/index.html#progressive-disclosure) | different: The staged loading idea transfers, but Claude-specific budgets, shell substitution and frontmatter behavior must not be copied into Codex. |
| [Create a project-scoped skill](../#lesson/s03-03) | [Create custom skills](https://luongnv.com/claude-howto/03-skills/index.html#create) | different: The SKILL.md standard transfers, while Codex discovery paths and client invocation must follow Codex documentation. |
| [Control when a skill is invoked](../#lesson/s03-04) | [Control skill invocation](https://luongnv.com/claude-howto/03-skills/index.html#invocation) | different: Codex uses allow_implicit_invocation in agents/openai.yaml; Claude's invocation-control frontmatter is not a direct configuration mapping. |
| [Use skills in delegated work](../#lesson/s03-05) | [Run skills in subagents](https://luongnv.com/claude-howto/03-skills/index.html#subagents) | alternative: Use explicit Codex delegation with inherited skills; Claude's skill-frontmatter fork mechanism is not taught as a Codex equivalent. |
| [Maintain, disable and evaluate skills](../#lesson/s03-06) | [Manage skills](https://luongnv.com/claude-howto/03-skills/index.html#manage) | different: Codex discovery, duplicate-name behavior and skills.config controls differ from the source's Claude reload and precedence settings. |
| [Understand the MCP request path](../#lesson/s05-01) | [Overview](https://luongnv.com/claude-howto/05-mcp/index.html#overview) | equivalent: The MCP client/server model transfers, while the available operations and authentication remain specific to the Codex connection and service. |
| [Choose a transport and verify a connection](../#lesson/s05-02) | [Installation methods](https://luongnv.com/claude-howto/05-mcp/index.html#install) | different: Codex supports STDIO and Streamable HTTP, but its codex mcp commands and config.toml format differ from Claude's transport flags and JSON files. |
| [Separate configuration scope from access scope](../#lesson/s05-03) | [MCP scopes](https://luongnv.com/claude-howto/05-mcp/index.html#scopes) | different: The need for scope management transfers, but Codex uses trusted-project and user TOML configuration rather than Claude's three-scope files and flags. |
| [Bring external resources into context accurately](../#lesson/s05-04) | [Resources via @ mentions](https://luongnv.com/claude-howto/05-mcp/index.html#resources) | alternative: A universal Claude-style resource mention is not established by the reviewed Codex guide; use exposed retrieval tools or explicitly labelled file context. |
| [Distinguish finding a tool from searching content](../#lesson/s05-05) | [MCP tool search](https://luongnv.com/claude-howto/05-mcp/index.html#tool-search) | different: The tool-discovery goal transfers, but Codex host behavior, OpenAI API tool_search configuration and Claude tool-search switches are separate interfaces. |
| [When Codex is the agent you want to embed](../#lesson/s05-06) | [Claude as an MCP server](https://luongnv.com/claude-howto/05-mcp/index.html#serve) | alternative: Hosting Codex as MCP has been removed. App-server is a separate, experimental protocol integration, not a direct equivalent. |
| [Delegate independent work with a clear contract](../#lesson/s04-01) | [Overview](https://luongnv.com/claude-howto/04-subagents/index.html#overview) | equivalent: Codex supports delegated agent workflows, but context, permission inheritance and client controls must follow Codex behavior. |
| [Configure a narrow custom Codex agent](../#lesson/s04-02) | [Configuration](https://luongnv.com/claude-howto/04-subagents/index.html#configuration) | different: Codex uses standalone custom-agent TOML and inherited parent controls, not Claude's YAML agent definitions and permissionMode fields. |
| [Use the actual Codex built-in roles](../#lesson/s04-03) | [Built-in subagents](https://luongnv.com/claude-howto/04-subagents/index.html#built-in) | different: Codex documents default, worker and explorer; Claude's Plan, Explore and guide-specific agents are not the same built-in catalogue. |
| [Chain agents through explicit evidence handoffs](../#lesson/s04-04) | [Chaining subagents](https://luongnv.com/claude-howto/04-subagents/index.html#chaining) | equivalent: Sequential delegation transfers to Codex, but the parent must route results and enforce dependencies through an explicit task contract. |
| [Manage background work without losing its state](../#lesson/s04-05) | [Background subagents](https://luongnv.com/claude-howto/04-subagents/index.html#background) | different: Codex supports background delegated work and thread inspection, but the source's background fields, shortcuts and persistence assumptions do not transfer. |
| [Separate agent threads from worktree isolation](../#lesson/s04-06) | [Worktree isolation](https://luongnv.com/claude-howto/04-subagents/index.html#worktree) | alternative: Use Codex's explicit Git worktree workflow; the source's automatic subagent isolation field is not a verified Codex role setting. |
| [Coordinate a small team without assuming a team mode](../#lesson/s04-07) | [Agent teams](https://luongnv.com/claude-howto/04-subagents/index.html#teams) | alternative: Parent-coordinated Codex subagents plus an explicit ledger cover the coordination goal without claiming Claude Agent Teams feature parity. |
| [Hooks: a lifecycle, not a reminder](../#lesson/s06-01) | [Overview](https://luongnv.com/claude-howto/06-hooks/index.html#overview) | different: Codex has lifecycle hooks, but its handler types, event coverage, trust flow, and output semantics are not identical to Claude Code. |
| [Configure hook sources deliberately](../#lesson/s06-02) | [Configuration](https://luongnv.com/claude-howto/06-hooks/index.html#configuration) | different: Codex uses hooks.json or inline hooks beside active Codex config layers, with additive loading and definition trust, rather than Claude settings-file placement. |
| [Choose a supported hook handler](../#lesson/s06-03) | [Hook types](https://luongnv.com/claude-howto/06-hooks/index.html#types) | different: Codex currently executes command and mcp_tool handlers; source prompt/agent hooks are skipped, and background hooks cannot control the triggering operation. |
| [Place checks at the right event](../#lesson/s06-04) | [Hook events](https://luongnv.com/claude-howto/06-hooks/index.html#events) | different: The learning purpose transfers, but Codex's documented event set, matcher inputs, and stop/permission semantics differ from the source matrix. |
| [Understand hook input and output](../#lesson/s06-05) | [Hook input and output](https://luongnv.com/claude-howto/06-hooks/index.html#io) | different: Structured stdin/stdout transfers, but Codex's event-specific decisions and unsupported fields require a new contract rather than a copied response schema. |
| [Build a bounded Stop review instead of an unsupported prompt hook](../#lesson/s06-06) | [Prompt-based hooks](https://luongnv.com/claude-howto/06-hooks/index.html#prompt-hooks) | alternative: Codex skips native prompt/agent handlers today. Use explicit evidence-based review, or a separately verified command/MCP evaluation integration, to retain the source's quality-check purpose. |
| [Debug hooks as small integrations](../#lesson/s06-07) | [Debugging hooks](https://luongnv.com/claude-howto/06-hooks/index.html#debugging) | different: The isolation strategy transfers, but Codex inspection uses its documented hook browser and event contracts rather than Claude-specific debug commands. |
| [Build an advanced workflow without losing control](../#lesson/s09-01) | [Overview](https://luongnv.com/claude-howto/09-advanced-features/index.html#overview) | different: The source's advanced-workflow purpose transfers, but Codex mechanisms, client surfaces, and availability replace Claude commands and product-specific settings. |
| [Plan before consequential implementation](../#lesson/s09-02) | [Planning mode](https://luongnv.com/claude-howto/09-advanced-features/index.html#planning) | equivalent: Codex Plan mode supports the same plan-before-implementation purpose, with Codex commands and independent execution permissions. |
| [Tune reasoning with evidence](../#lesson/s09-03) | [Extended thinking](https://luongnv.com/claude-howto/09-advanced-features/index.html#thinking) | different: Codex uses model-dependent reasoning controls rather than Claude's extended-thinking toggles or budget variables; compare outcomes on the actual surface. |
| [Understand automatic approval review](../#lesson/s09-04) | [Auto mode](https://luongnv.com/claude-howto/09-advanced-features/index.html#auto-mode) | different: Codex automatic review swaps the reviewer for eligible approval requests while retaining the sandbox; it is not identical to the source's per-action Auto Mode. |
| [Create, inspect and stop a scheduled task](../#lesson/s09-05) | [Scheduled tasks](https://luongnv.com/claude-howto/09-advanced-features/index.html#scheduled) | different: Codex scheduling uses supported app/web Scheduled workflows, not the source's session-loop commands; local and hosted persistence and prerequisites differ. |
| [Read permission modes as effective boundaries](../#lesson/s09-06) | [Permission modes](https://luongnv.com/claude-howto/09-advanced-features/index.html#permissions) | different: The access-control purpose transfers, but Codex sandbox modes, approval policy, reviewer selection, and surface controls replace the source's mode names. |
| [Run headless work with codex exec](../#lesson/s09-07) | [Headless mode](https://luongnv.com/claude-howto/09-advanced-features/index.html#headless) | different: Codex uses codex exec with its own stdout/stderr, JSONL, schema, and permission behavior instead of Claude print-mode flags. |
| [Plugins: reusable capability packages](../#lesson/s07-01) | [Overview](https://luongnv.com/claude-howto/07-plugins/index.html#overview) | different: Codex supports plugins, but components, universal-directory behavior, authentication, hook trust, and client support differ from the source packaging model. |
| [Design the plugin around one user journey](../#lesson/s07-02) | [Plugin architecture](https://luongnv.com/claude-howto/07-plugins/index.html#architecture) | different: The modular architecture purpose transfers, but Codex's skills/MCP/optional UI/hooks boundaries and surface compatibility replace source-specific command and agent bundles. |
| [Write the right plugin manifest](../#lesson/s07-03) | [Plugin definition structure](https://luongnv.com/claude-howto/07-plugins/index.html#structure) | different: Codex accepts a portable root manifest and supported compatibility format; source .claude-plugin paths and component declarations must be intentionally adapted. |
| [Understand directories and marketplace sources](../#lesson/s07-04) | [Plugin marketplace](https://luongnv.com/claude-howto/07-plugins/index.html#marketplace) | different: Codex uses its universal directory and documented local/Git marketplace catalogs, not the source's Anthropic marketplace names or commands. |
| [Test the package, then the workflow](../#lesson/s07-05) | [Test a plugin](https://luongnv.com/claude-howto/07-plugins/index.html#testing) | different: Layered plugin testing transfers, but Codex local marketplace and supported-client setup replace the source's plugin-dir launch workflow. |
| [Release, update and remove a plugin](../#lesson/s07-06) | [Publish a plugin](https://luongnv.com/claude-howto/07-plugins/index.html#publishing) | different: Codex distribution uses its supported catalogs, workspace controls, and OpenAI submission review rather than the source's tagging and Anthropic marketplace flow. |
