The Forge · 8 min mission

Codex Extensions: Apps, Plugins, Hooks & Memories

Codex’s extension ecosystem — apps, plugins, hooks, memories, and experimental flags — installed, scoped, and managed.

extensionspluginscodexFact-checked 2026-06-14
On this page

Codex did not stay a single binary for long. Around it grew an extension surface — connectors you attach to a prompt, installable bundles of capability, lifecycle hooks, a memory toggle, and a gate for opt-in features — and almost none of it is obvious from the chat box. This guide is that surface, command by command.

One framing to hold onto before the details: extensions are not the same thing as MCP servers. The hub already teaches MCP — wiring a single server by hand in config.toml and the deeper MCP client/server model. Extensions are the layer above that: a plugin is an installable bundle that may itself package skills, app integrations, and MCP servers, while [mcp_servers] in your config is the manual, file-based way to wire one server. When you find yourself reaching for a config file, ask first whether a plugin already bundles what you want.

The five commands at a glance

Each does one job. Learn the boundaries between them and the surface stops feeling fuzzy.

CommandWhat it does
/appsBrowse connectors and insert the one you pick into the prompt as a $app-slug mention
/pluginsBrowse, install, uninstall, and toggle plugins — bundles of skills, apps, and MCP servers
/hooksReview configured lifecycle hooks and trust or disable the non-managed ones before they run
/memoriesChoose whether Codex uses existing memories, generates new ones, or keeps memory off
/experimentalToggle opt-in experimental features such as subagents and Apps
/skillsBrowse and apply a local skill (taught in the CLI reference) — included here for context
Codex’s extension commands, verified against the official slash-command reference. Run any of them by typing the command in the TUI.

Apps vs. plugins: a connector vs. a bundle

These two get conflated, and the distinction is worth nailing. /apps opens a browser of available connectors — third-party services Codex can act through, like an issue tracker, a drive, or a chat tool. Pick one and Codex drops a $app-slug token into your composer; you then write your request around it ("use $github to open an issue for this bug"). An app is one connection, attached to one prompt.

/plugins is bigger. It opens a browser of installed and discoverable plugins, grouped by marketplace (switch sources with tabs), where you can inspect a plugin's tools, install or uninstall marketplace entries, and toggle a plugin's enabled state — all from the TUI, without hand-editing config. A plugin is a bundle: it can package several skills, app integrations, and MCP servers at once. The practical gotcha: a plugin's bundled MCP servers don't always work the instant you install — some need their own authentication or setup before Codex can call them, so a freshly installed Slack or Linear bundle may ask you to connect before it does anything.

Hooks, memories, and the experimental gate

/hooks is your audit screen for lifecycle automation. It lists the hooks configured for the session and lets you trust new or changed ones, or disable the ones you don't recognize, before they run — exactly the review you want after cloning an unfamiliar repo. One limit: managed hooks (set by an organization) appear as managed and cannot be disabled from this browser; only non-managed hooks are toggleable.

/memories is a three-way switch for memory behavior: use existing memories, generate new ones, or keep memory disabled. Turn generation off for a sensitive or throwaway session; turn it on to let Codex accumulate project context over time.

/experimental is the gate for opt-in features that aren't stable yet — the docs name subagents and Apps as examples (and list "Smart Approvals" as another example toggle rather than a documented feature). Flip on what you want to try, and restart Codex if it prompts you to — some toggles only take effect after a restart. This is how you turn on subagents before using them.

Plugin vs. MCP server — two ways to add capability

A plugin (`/plugins`)

An installable bundle from a marketplace, managed in the TUI. May package skills, app connectors, and MCP servers together. Install, toggle, and uninstall without touching a file.

Reach for it when someone has already packaged the capability you want.

An MCP server (`config.toml`)

A single server you wire by hand in [mcp_servers] — taught in CLI config and Codex MCP. Full control, version-pinned in your config.

Reach for it for a one-off server, or one no plugin bundles. A plugin may install one of these for you.

enable a feature, install a bundle, attach a connector
… scroll to run this session
A realistic extension flow: gate on an experimental feature, install a plugin from a marketplace, then attach a connector to the next prompt. Output is illustrative.

Knowledge check

You cloned an unfamiliar repo, want to enable Codex subagents, and want a Slack integration without hand-editing config — but you also want to be sure no surprise automation runs first. What is the right sequence?

Reach the end and this star joins your charted sky.