ACP flag docs and delegate tool corrections
NousResearch/hermes-agent · cluster 19055 · agent
Data as of
Nothing open on GitHub. Fix merged in #21201. Check it covers your case.
The short answer
- Known?
- Yes. 9 related items grouped here, 3 issues already closed.
- Fix event
- A fix was merged to main in PR #21201. Check it covers your case. No release data is tracked.
- Tracker
- The maintainers' tracker marks this
partially resolved, deciding PRs #21201, #22806. That is separate from the fix event. - Still open
- Nothing open on GitHub.
Multiple issues and fixes addressing incorrect documentation and behavior around ACP flags in the delegate tool, specifically that Claude Code CLI does not support --acp or --stdio flags. Includes guards against hallucinated acp_command values and schema guidance updates.
Open issues0
Open PRs0
Fixes on record
-
#21201 fix(delegate): correct ACP docs — Claude Code CLI has no --acp flag (salvage #19058)
files:
tools/delegate_tool.py -
#22806 fix(delegate): add do-not-use guidance to acp schema (carve-out of #22680)
files:
tests/tools/test_delegate.py,tools/delegate_tool.pyShow the diff
-
tests/tools/test_delegate.py@@ -2032,6 +2032,32 @@ def test_schema_has_role_top_level_and_per_task(self): self.assertIn("role", task_props) self.assertEqual(task_props["role"]["enum"], ["leaf", "orchestrator"]) + def test_acp_command_description_has_do_not_set_guidance(self): + # acp_command/acp_args descriptions must NOT bias the model toward + # assuming an ACP CLI (Claude, Copilot, etc.) is installed. They must + # carry explicit "do not set unless told" guidance so the model doesn't + # hallucinate ACP availability (#22013). + from tools.delegate_tool import DELEGATE_TASK_SCHEMA + props = DELEGATE_TASK_SCHEMA["parameters"]["properties"] + + top_acp_desc = props["acp_command"]["description"] + self.assertIn("Do NOT set", top_acp_desc) + self.assertIn("explicitly told you", top_acp_desc) + + task_props = props["tasks"]["items"]["properties"] + per_task_acp_desc = task_props["acp_command"]["description"] + self.assertIn("Do NOT set", per_task_acp_desc) + + def test_acp_command_description_has_no_claude_as_example(self): + # Descriptions must not list 'claude' as a canonical example value — + # that directly primes the model to attempt Claude ACP even when it is + # not installed (#22013). + from tools.delegate_tool import DELEGATE_TASK_SCHEMA + props = DELEGATE_TASK_SCHEMA["parameters"]["properties"] + top_acp_desc = props["acp_command"]["description"].lower() + self.assertNotIn("e.g. 'claude'", top_acp_desc) + self.assertNotIn("e.g. \"claude\"", top_acp_desc) + # Sentinel used to distinguish "role kwarg omitted" from "role=None". _SENTINEL = object() -
tools/delegate_tool.py@@ -2681,12 +2681,16 @@ def _build_dynamic_schema_overrides() -> dict: }, "acp_command": { "type": "string", - "description": "Per-task ACP command override (e.g. 'copilot'). Overrides the top-level acp_command for this task only.", + "description": ( + "Per-task ACP command override (e.g. 'copilot'). " + "Overrides the top-level acp_command for this task only. " + "Do NOT set unless the user explicitly told you an ACP CLI is installed." + ), }, "acp_args": { "type": "array", "items": {"type": "string"}, - "description": "Per-task ACP args override.", + "description": "Per-task ACP args override. Leave empty unless acp_command is set.", }, "role": { "type": "string", @@ -2713,7 +2717,10 @@ def _build_dynamic_schema_overrides() -> dict: "When set, children use ACP subprocess transport instead of inheriting " "the parent's transport. Requires an ACP-compatible CLI " "(currently GitHub Copilot CLI via 'copilot --acp --stdio'). " - "See agent/copilot_acp_client.py for the implementation." + "See agent/copilot_acp_client.py for the implementation. " + "IMPORTANT: Do NOT set this unless the user has explicitly told you " + "a specific ACP-compatible CLI is installed and configured. " + "Leave empty to use the parent's default transport (Hermes subagents)." ), }, "acp_args": { @@ -2721,7 +2728,8 @@ def _build_dynamic_schema_overrides() -> dict: "items": {"type": "string"}, "description": ( "Arguments for the ACP command (default: ['--acp', '--stdio']). " - "Only used when acp_command is set." + "Only used when acp_command is set. " + "Leave empty unless acp_command is explicitly provided." ), }, },
-
4 PRs closed without merging
From the close comments: merged via another change 2 · closed without comment 1 · done elsewhere 1
- #19058 fix(delegate): correct ACP docs — Claude Code CLI has no --acp flag · closed without comment
-
#19059 fix(docs): correct ACP command docs - remove misleading claude references · merged via another change →
#19058,#21201 -
#22680 fix(delegate): add explicit do-not-use guidance to acp_command/acp_args schema descriptions · merged via another change →
#22806,#22013,#22548,#21944,#22780,#22798,#22150 -
#39462 fix(delegate): reject acp_command values the transport can't drive · done elsewhere →
#52346,#56386
Closed issues · 3
- Closed#19055Bug: delegate_tool.py docs claim 'claude --acp --stdio' works — Claude Code CLI has no --acp flag
- Closed#22013[Bug]: delegate_task hard-codes bias toward Claude platforms causes errors when user does not use Claude and does not have Claude platforms installed.
- Closed#38662bug: /claude gateway command passes `--acp --stdio` to Claude Code CLI which doesn't support these flags
How this cluster was grouped
-
Link evidence (
partly structural links): some members are connected by structural evidence (shared changed files, or a closing/superseded reference); the rest are joined by an automated relevance judgement over their text. - Members outside that structural core may belong to a different underlying problem.
-
Pairwise link density
0.19: the share of item pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36.1.00means every pair is linked.
Pick up a Lab task
Check whether a fix covers the open issues here, with your own agent. Bring back evidence for maintainers.
Open the Lab