Skip to content

feat(codex): per-agent setting to enable Codex apps and plugins - #3553

Open
brow wants to merge 5 commits into
mainfrom
tomb/codex-apps-plugins
Open

brow wants to merge 5 commits into
mainfrom
tomb/codex-apps-plugins

Conversation

@brow

@brow brow commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

Codex agents in Buzz never see Codex Apps (ChatGPT connectors such as Gmail, Google Drive or Google Calendar) or Codex plugins. Buzz sends features.apps: false and features.plugins: false in the thread config of every thread/start and thread/resume, and a thread's config outranks config.toml. So setting apps = true in Codex's config has no effect, while the Codex CLI on the same home does get them. Codex's own logs for those sessions show feature.apps=false and feature.plugins=false.

This adds a per-agent Codex apps and plugins toggle in the Codex agent's Settings tab, off by default, described as "The agent may use apps and plugins that are installed in Codex." When it's on and the agent isn't protected, Buzz stops forcing the two features off, so Codex's own configuration decides (Codex enables Apps by default). The agent then gets the Apps connected to Codex's ChatGPT sign-in on that computer. The setting is device-local, like Workspace, because which Apps exist depends on that computer's Codex sign-in.

Unchanged: inherited MCP servers and web search stay disabled, protected agents keep both features off whatever the setting says (and the toggle is disabled for them), and security reviews keep their own config. A remote execution target doesn't show the setting and never gets Apps or plugins, since it runs its own Codex sign-in.

Screenshots

Before After (off, the default) After (on, dark)
Codex settings before Codex settings with Codex apps and plugins off Codex settings with Codex apps and plugins on, dark theme

These are the real Codex Settings tab mounted in a local fixture with a fake Codex process, not the full desktop app.

Validation

  • Live, through Buzz's Codex runtime (this branch's CodexRuntime, bundled and driven with a simulated relay like live.mjs, against Codex 0.169.0 and a real ChatGPT sign-in in a disposable Codex home that links auth.json and config.toml as codex.sh does). The same read-only prompt asking for today's Google Calendar events:
    • Setting on: the agent called codex_apps → google_calendar.search_events (completed) and replied with the count.
    • Setting off (default): no MCP tool calls, and the agent reported it had no calendar tool.
  • app-server probe on the same Codex: a thread started with Buzz's two overrides lists 0 Apps (app/list for that thread) and has no codex_apps server, while one started without them gets codex_apps with its tools. A thread started with the overrides, then resumed without them, gets codex_apps, so turning the setting on also applies to saved conversations on their next turn.
  • Tests: runtime.test.ts covers the setting on for an unprotected agent (no feature overrides, MCP and web search still off) and on for a protected agent (still off). tabs.test.tsx covers saving it on and off, its doc links, the disabled state for a protected agent, and that a remote execution target never resolves it. vitest run src/bundled/codex src/features/agents src/bundled/goose: 2,436 passed, 14 skipped. tsc --noEmit and Biome pass.
  • Not yet verified: Gmail and Google Drive specifically, which need those connectors connected on the test ChatGPT account. They go through the same codex_apps server as Calendar.

Regressions

  • Default behavior doesn't change: with the setting off (every existing agent), the thread config is byte-for-byte what it was.
  • Protected agents can't get Apps or plugins, whatever the stored setting.
  • With the setting on, an agent gets more tools: whatever Apps the ChatGPT account has connected, and any enabled Codex plugins. That's the point of the setting, and it's opt-in per agent and per computer. The help text names it.
  • No new relay traffic, and no synced-settings change (the field stays out of syncedSettingsSchema).

Buzz turned off Codex's Apps and plugins features on every Codex thread, so
connectors such as Gmail or Google Drive were never available to Buzz agents,
even with apps = true in config.toml. A thread's config outranks config.toml.

Add a per-agent, device-local "Apps and plugins" setting, off by default.
When it is on and the agent is not protected, Buzz leaves both features to
Codex's own configuration. Protected agents and security reviews keep them
off, and inherited MCP servers and web search stay disabled.

Co-authored-by: studio <dc2fc481343672df31a689840c09299972e704dac592e0da6f18486646a7ee3e@buzz.block.builderlab.xyz>
Signed-off-by: Tom Brow <tomb@squareup.com>
@brow

brow commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-15T00:07:12.786350Z 5c36821 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Chef's kiss.

Reviewed commit: d7b627f03c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

square-tomb and others added 3 commits November 14, 2026 14:27
A remote target runs its own Codex sign-in, and the setting is hidden
while bound, so this computer's choice must not carry over.

Co-authored-by: studio <dc2fc481343672df31a689840c09299972e704dac592e0da6f18486646a7ee3e@buzz.block.builderlab.xyz>
Signed-off-by: Tom Brow <tomb@squareup.com>
Retitles the setting, links its description to the apps and plugins
docs, and lets SwitchPreferenceRow take a rich description.

Co-authored-by: studio <dc2fc481343672df31a689840c09299972e704dac592e0da6f18486646a7ee3e@buzz.block.builderlab.xyz>
Signed-off-by: Tom Brow <tomb@squareup.com>
Co-authored-by: studio <dc2fc481343672df31a689840c09299972e704dac592e0da6f18486646a7ee3e@buzz.block.builderlab.xyz>
Signed-off-by: Tom Brow <tomb@squareup.com>
@brow brow changed the title feat(codex): let an agent allow Codex Apps and plugins feat(codex): per-agent setting to enable Codex apps and plugins Nov 15, 2026
@brow
brow marked this pull request as ready for review November 15, 2026 00:05
@brow
brow requested a review from a team as a code owner November 15, 2026 00:05

@kazemek21 kazemek21 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kyle reviewed the PR and the Nexus review-tracker notes. Approved with the non-blocking comment below.

Posted by Codex (gpt-6.1-sol) on behalf of kylez.

mcp_servers: { ...mcp, ...bridge?.config },
"features.plugins": false,
"features.apps": false,
...(settings.apps && !agent.protection

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P2] Keep Apps and plugins disabled in the title helper

With this setting enabled, these params also reach offerTitle(). Its separate ephemeral thread spreads the config and disables MCP servers, but now loses the Apps/plugins-off overrides, so the automatic naming helper inherits connected-tool access too. Please explicitly force both features off in the title thread, independently of the conversation setting.

Posted by Codex (gpt-6.1-sol) on behalf of kylez.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Fixed in 5a0881f: the title thread now sets features.apps and features.plugins to false whatever the conversation allows, and the Solo chat title test covers it with the setting on.

The Solo chat title thread reuses the conversation's config, so an agent
that allows Codex apps and plugins would pass them on to it.

Co-authored-by: studio <dc2fc481343672df31a689840c09299972e704dac592e0da6f18486646a7ee3e@buzz.block.builderlab.xyz>
Signed-off-by: Tom Brow <tomb@squareup.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants