# NousResearch/hermes-agent · ACP flag docs and delegate tool corrections

## Open now

- 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.

## TL;DR

- 9 member(s): 0 open issue(s), 3 closed issue(s), 0 open PR(s), 2 merged PR(s), 4 PR(s) closed without merging.
- A fix was merged to main in PR #21201. Verify it addresses your case.
- **Recommended:** read PR #21201 (and any competing PRs below) before filing. Confirm the merged change covers your symptom.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `partially_resolved` · deciding PR(s): `pr-21201,pr-22806`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_PARTIAL`): 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 member pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. `1.00` means every pair is linked.

## Closed / duplicate issues

- #19055: Bug: delegate_tool.py docs claim 'claude --acp --stdio' works — Claude Code CLI has no --acp flag
- #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.
- #38662: bug: /claude gateway command passes \`--acp --stdio\` to Claude Code CLI which doesn't support these flags

## Prior & competing PRs

- **#21201: fix(delegate): correct ACP docs — Claude Code CLI has no --acp flag (salvage #19058)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `tools/delegate_tool.py`
- **#22806: fix(delegate): add do-not-use guidance to acp schema (carve-out of #22680)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `tests/tools/test_delegate.py`, `tools/delegate_tool.py`
  - fix hunks:
  - `tests/tools/test_delegate.py`

    ```diff
    @@ -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`

    ```diff
    @@ -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",
    ```

    ```diff
    @@ -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": {
    ```

    ```diff
    @@ -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."
                     ),
                 },
             },
    ```
- **#19058: fix(delegate): correct ACP docs — Claude Code CLI has no --acp flag**. closed without merge
  - maintainer direction: category `silent_close`; implication `active`
- **#19059: fix(docs): correct ACP command docs - remove misleading claude references**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `#19058`, `#21201`
- **#22680: fix(delegate): add explicit do-not-use guidance to acp_command/acp_args schema descriptions**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `#22806`, `#22806`, `#22013`, `#22548`, `#21944`, `#22780`, `#22798`, `#22150`
- **#39462: fix(delegate): reject acp_command values the transport can't drive**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `#52346`, `#56386`

## Fix status

- Merged to main in PR #21201 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-05-09`.
- Subsystem: `agent`
