Motivation
Buzz-managed Codex agents cannot currently select a lower-cost model or a
model-pinned custom-agent profile for one delegated task without changing the
model resolution for every subagent.
The live spawn_agent interface exposes:
- a task name and prompt;
gpt-5.6-sol and gpt-5.6-terra as explicit model overrides; and
- no custom-agent role/profile selector.
This prevents a strong primary agent from delegating one bounded task to a
profile pinned to another available model such as gpt-5.6-luna, while leaving
ordinary subagent work unchanged.
Verified reproduction
Environment: Buzz ACP managed Codex session on macOS, Codex CLI 0.145.0.
-
Create .codex/agents/luna-worker.toml:
name = "luna_worker"
description = "Bounded low-cost implementation worker."
model = "gpt-5.6-luna"
model_reasoning_effort = "max"
developer_instructions = "Perform only the bounded task and return evidence."
-
Spawn a child through the Buzz-provided collaboration tool using
task_name = "luna_worker", no model override, and a fresh fork.
-
Inspect the child rollout metadata.
Actual result: the child runs on gpt-5.6-sol. Its thread metadata records the
path /root/luna_worker but agent_role: null, so the profile name is treated
only as a task label.
The same result occurs in a fresh Codex process that loads the profile before
startup, ruling out profile-discovery caching: the spawned child still records
model: gpt-5.6-sol and agent_role: null.
Proposed solution
Expose an explicit custom-agent selector on Buzz's Codex spawn_agent tool
(agent_role, agent_type, or equivalent) and forward it to Codex when the
child thread is created.
The selected profile should apply its configured model, reasoning effort,
developer instructions, and other supported session settings. The explicit
model override should also be sourced from the runtime's available model
catalog rather than a fixed Sol/Terra allowlist, so supported models such as
Luna can be selected directly when no custom profile is needed.
Suggested acceptance criteria:
task_name remains the human-readable task/path label.
- A separate optional role/profile field selects a loaded built-in or custom
Codex agent.
- A custom profile pinned to Luna/max produces child rollout metadata with
model: gpt-5.6-luna and the selected non-null agent role.
- An explicit available model and reasoning effort can be selected for a
one-off child without changing global subagent defaults.
- Omitting both fields preserves current inheritance behavior.
- Unknown or unavailable profiles/models fail clearly before work begins.
- Add an ACP integration test covering profile selection, direct model
selection, and the unchanged-default case.
Alternatives considered
- Set
agents.default_subagent_model to Luna: rejected because it silently
changes unrelated subagent work.
- Create a separate Luna-backed managed Buzz agent: works around model
selection, but adds identity, routing, permissions, and closeout overhead for
what should be an ephemeral worker.
- Change the primary agent's model: solves a different problem and weakens the
high-consequence owner rather than routing only bounded work.
Additional context
Motivation
Buzz-managed Codex agents cannot currently select a lower-cost model or a
model-pinned custom-agent profile for one delegated task without changing the
model resolution for every subagent.
The live
spawn_agentinterface exposes:gpt-5.6-solandgpt-5.6-terraas explicit model overrides; andThis prevents a strong primary agent from delegating one bounded task to a
profile pinned to another available model such as
gpt-5.6-luna, while leavingordinary subagent work unchanged.
Verified reproduction
Environment: Buzz ACP managed Codex session on macOS, Codex CLI 0.145.0.
Create
.codex/agents/luna-worker.toml:Spawn a child through the Buzz-provided collaboration tool using
task_name = "luna_worker", no model override, and a fresh fork.Inspect the child rollout metadata.
Actual result: the child runs on
gpt-5.6-sol. Its thread metadata records thepath
/root/luna_workerbutagent_role: null, so the profile name is treatedonly as a task label.
The same result occurs in a fresh Codex process that loads the profile before
startup, ruling out profile-discovery caching: the spawned child still records
model: gpt-5.6-solandagent_role: null.Proposed solution
Expose an explicit custom-agent selector on Buzz's Codex
spawn_agenttool(
agent_role,agent_type, or equivalent) and forward it to Codex when thechild thread is created.
The selected profile should apply its configured model, reasoning effort,
developer instructions, and other supported session settings. The explicit
model override should also be sourced from the runtime's available model
catalog rather than a fixed Sol/Terra allowlist, so supported models such as
Luna can be selected directly when no custom profile is needed.
Suggested acceptance criteria:
task_nameremains the human-readable task/path label.Codex agent.
model: gpt-5.6-lunaand the selected non-null agent role.one-off child without changing global subagent defaults.
selection, and the unchanged-default case.
Alternatives considered
agents.default_subagent_modelto Luna: rejected because it silentlychanges unrelated subagent work.
selection, but adds identity, routing, permissions, and closeout overhead for
what should be an ephemeral worker.
high-consequence owner rather than routing only bounded work.
Additional context
https://learn.chatgpt.com/docs/agent-configuration/subagents
primary agent's model mid-session; this request is selective model/profile
routing for a spawned child while the primary model stays fixed.
subagent,spawn_agent model,model override,per-spawn,custom agent,agent_role, andgpt-5.6-luna; no matching issue was found.