{"repo":"NousResearch/hermes-agent","public_id":"19055","display_label":"ACP flag docs and delegate tool corrections","summary":"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.","subsystem":"agent","counts":{"members":9,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":3,"merged_prs":2,"attempt_prs":4},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":21201},"resolution":{"state":"partially_resolved","by":"pr-21201,pr-22806"},"freshness":{"state":"verified","last_verified_at":"2026-05-09T20:37:30+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_PARTIAL","link_density":0.18666666666666665},"fix_edges":[{"issue_number":19055,"pr_number":21201,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":22013,"pr_number":22806,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true}],"members":[{"kind":"issue","number":19055,"title":"Bug: delegate_tool.py docs claim 'claude --acp --stdio' works — Claude Code CLI has no --acp flag","url":null,"state":"closed"},{"kind":"issue","number":22013,"title":"[Bug]: delegate_task hard-codes bias toward Claude platforms causes errors when user does not use Claude and does not have Claude platforms installed.","url":null,"state":"closed"},{"kind":"issue","number":38662,"title":"bug: /claude gateway command passes `--acp --stdio` to Claude Code CLI which doesn't support these flags","url":null,"state":"closed"},{"kind":"pr","number":19058,"title":"fix(delegate): correct ACP docs — Claude Code CLI has no --acp flag","url":null,"state":"closed","close_reason":{"category":"silent_close","implication":"active"},"merged":false},{"kind":"pr","number":19059,"title":"fix(docs): correct ACP command docs - remove misleading claude references","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#19058","number":19058},{"kind":"pr","value":"#21201","number":21201}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":21201,"title":"fix(delegate): correct ACP docs — Claude Code CLI has no --acp flag (salvage #19058)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["tools/delegate_tool.py"]},{"kind":"pr","number":22680,"title":"fix(delegate): add explicit do-not-use guidance to acp_command/acp_args schema descriptions","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#22806","number":22806},{"kind":"pr","value":"#22806","number":22806},{"kind":"pr","value":"#22013","number":22013},{"kind":"pr","value":"#22548","number":22548},{"kind":"pr","value":"#21944","number":21944},{"kind":"pr","value":"#22780","number":22780},{"kind":"pr","value":"#22798","number":22798},{"kind":"pr","value":"#22150","number":22150}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":22806,"title":"fix(delegate): add do-not-use guidance to acp schema (carve-out of #22680)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["tests/tools/test_delegate.py","tools/delegate_tool.py"],"fix_hunks":[{"file":"tests/tools/test_delegate.py","hunks":["@@ -2032,6 +2032,32 @@ def test_schema_has_role_top_level_and_per_task(self):\n         self.assertIn(\"role\", task_props)\n         self.assertEqual(task_props[\"role\"][\"enum\"], [\"leaf\", \"orchestrator\"])\n \n+    def test_acp_command_description_has_do_not_set_guidance(self):\n+        # acp_command/acp_args descriptions must NOT bias the model toward\n+        # assuming an ACP CLI (Claude, Copilot, etc.) is installed. They must\n+        # carry explicit \"do not set unless told\" guidance so the model doesn't\n+        # hallucinate ACP availability (#22013).\n+        from tools.delegate_tool import DELEGATE_TASK_SCHEMA\n+        props = DELEGATE_TASK_SCHEMA[\"parameters\"][\"properties\"]\n+\n+        top_acp_desc = props[\"acp_command\"][\"description\"]\n+        self.assertIn(\"Do NOT set\", top_acp_desc)\n+        self.assertIn(\"explicitly told you\", top_acp_desc)\n+\n+        task_props = props[\"tasks\"][\"items\"][\"properties\"]\n+        per_task_acp_desc = task_props[\"acp_command\"][\"description\"]\n+        self.assertIn(\"Do NOT set\", per_task_acp_desc)\n+\n+    def test_acp_command_description_has_no_claude_as_example(self):\n+        # Descriptions must not list 'claude' as a canonical example value —\n+        # that directly primes the model to attempt Claude ACP even when it is\n+        # not installed (#22013).\n+        from tools.delegate_tool import DELEGATE_TASK_SCHEMA\n+        props = DELEGATE_TASK_SCHEMA[\"parameters\"][\"properties\"]\n+        top_acp_desc = props[\"acp_command\"][\"description\"].lower()\n+        self.assertNotIn(\"e.g. 'claude'\", top_acp_desc)\n+        self.assertNotIn(\"e.g. \\\"claude\\\"\", top_acp_desc)\n+\n \n # Sentinel used to distinguish \"role kwarg omitted\" from \"role=None\".\n _SENTINEL = object()"]},{"file":"tools/delegate_tool.py","hunks":["@@ -2681,12 +2681,16 @@ def _build_dynamic_schema_overrides() -> dict:\n                         },\n                         \"acp_command\": {\n                             \"type\": \"string\",\n-                            \"description\": \"Per-task ACP command override (e.g. 'copilot'). Overrides the top-level acp_command for this task only.\",\n+                            \"description\": (\n+                                \"Per-task ACP command override (e.g. 'copilot'). \"\n+                                \"Overrides the top-level acp_command for this task only. \"\n+                                \"Do NOT set unless the user explicitly told you an ACP CLI is installed.\"\n+                            ),\n                         },\n                         \"acp_args\": {\n                             \"type\": \"array\",\n                             \"items\": {\"type\": \"string\"},\n-                            \"description\": \"Per-task ACP args override.\",\n+                            \"description\": \"Per-task ACP args override. Leave empty unless acp_command is set.\",\n                         },\n                         \"role\": {\n                             \"type\": \"string\",","@@ -2713,7 +2717,10 @@ def _build_dynamic_schema_overrides() -> dict:\n                     \"When set, children use ACP subprocess transport instead of inheriting \"\n                     \"the parent's transport. Requires an ACP-compatible CLI \"\n                     \"(currently GitHub Copilot CLI via 'copilot --acp --stdio'). \"\n-                    \"See agent/copilot_acp_client.py for the implementation.\"\n+                    \"See agent/copilot_acp_client.py for the implementation. \"\n+                    \"IMPORTANT: Do NOT set this unless the user has explicitly told you \"\n+                    \"a specific ACP-compatible CLI is installed and configured. \"\n+                    \"Leave empty to use the parent's default transport (Hermes subagents).\"\n                 ),\n             },\n             \"acp_args\": {","@@ -2721,7 +2728,8 @@ def _build_dynamic_schema_overrides() -> dict:\n                 \"items\": {\"type\": \"string\"},\n                 \"description\": (\n                     \"Arguments for the ACP command (default: ['--acp', '--stdio']). \"\n-                    \"Only used when acp_command is set.\"\n+                    \"Only used when acp_command is set. \"\n+                    \"Leave empty unless acp_command is explicitly provided.\"\n                 ),\n             },\n         },\n"]}]},{"kind":"pr","number":39462,"title":"fix(delegate): reject acp_command values the transport can't drive","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#52346","number":52346},{"kind":"pr","value":"#56386","number":56386}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false}],"trust":{"default_tier":"verified","includes_suggested":false}}