Repository navigation
agent_registry_update of the orchestrator's subagents allowlist does not reach the spawn_async_subagent enum #6934
Description
Summary
Updating the orchestrator's subagents.allowlist through openhuman.agent_registry_update persists in the registry but never reaches the spawn_async_subagent tool: its agent_id enum keeps the compiled default list, even after a core restart, so a registered custom sub-agent cannot be delegated to.
Problem
Headless openhuman-core serve 0.64.10. Steps:
openhuman.agent_registry_create_customwithid: "researcher"(tool allowlistweb_search_tool,web_fetch,tool_search).agent_registry_listshows it,source: custom.openhuman.agent_registry_updatewithid: "orchestrator"andsubagents: {allowlist: [<the ten defaults>, "researcher"]}.agent_registry_getreturns the eleven-entry allowlist.- Restart the core.
- In a chat turn, ask the orchestrator to call
spawn_async_subagentwithagent_id: "researcher".
Result, verbatim from the tool:
invalid arguments for tool `spawn_async_subagent`: validation error: tool `spawn_async_subagent` arguments.agent_id must be one of the declared enum values; expected schema: {"properties":{"agent_id":{"description":"Sub-agent id (only these are dispatchable from here).","enum":["agent_memory","flow_discovery","image_agent","presentation_agent","profile_memory_agent","skill_setup","task_manager_agent","video_agent","vision_agent","workflow_builder"],...
Expected: the enum (and execute's allowlist check) follow the registry's current subagents.allowlist for the orchestrator, or the docs state that default agents' delegation policy is fixed and point at the supported way to let the orchestrator reach a custom agent.
Where it comes from, as far as I can tell: agent/registry/defaults.rs builds subagents: AgentSubagentPolicy::from_allowlist(def.subagents ...) from the compiled harness definition, and agent/orchestration/tools/spawn_async_subagent.rs::scope_spawn_async_subagent_spec scopes the enum from that definition; the registry override is not consulted at session build.
Solution (optional)
Resolve the parent's subagents policy from the registry snapshot (custom overrides win over defaults) when building the session's tool specs, the same way tool_allowlist overrides are honoured. If delegation for default agents is meant to be immutable, reject the agent_registry_update with a clear error instead of accepting it.
Acceptance criteria
- Repro gone — after step 2,
spawn_async_subagentlists and acceptsresearcherwithout a restart. - Regression safety — unit test: registry override of
subagents.allowlistchanges the scoped spec. - Diff coverage ≥ 80%.
Related
Found on https://github.com/kamelhar/openhuman-oci while building a research fan-out; sibling headless findings #6925, #6926, #6927, #6933.
Activity
tinysweeper commentedon Oct 2, 2026
agent_registry_update of orchestrator subagents allowlist does not propagate to spawn_async_subagent tool's enum, preventing delegation to custom sub-agents even after restart
Labelled
priority: p1.fix(agent): honour a saved subagents.allowlist override and resolve c…
fix(agent): honour a saved subagents.allowlist override and resolve c…
senamakel commentedon Oct 9, 2026
Triage: valid — Current review confirms this is a concrete, in-scope engineering issue or request: “agent_registry_update of the orchestrator's subagents allowlist does not reach the spawn_async_subagent enum”. No complete resolution is evident in current main.
senamakel commentedon Oct 9, 2026
Triage: needs opinion — “agent_registry_update of the orchestrator's subagents allowlist does not reach the spawn_async_subagent enum” needs a maintainer decision on product scope/priority or fresh reproduction evidence before its status can be settled. Please advise whether to pursue, narrow, or close it.
senamakel commentedon Oct 9, 2026
Triage correction: valid — Current review confirms “agent_registry_update of the orchestrator's subagents allowlist does not reach the spawn_async_subagent enum” is an actionable, in-scope gap; no complete resolution is evident in current main.