openclaw - ✅(Solved) Fix BUG: ACP runtime sends unsupported config options to Claude ACP adapter [1 pull requests, 1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#73875Fetched 2026-04-29 06:13:50
View on GitHub
Comments
1
Participants
2
Timeline
3
Reactions
0
Author
Timeline (top)
commented ×1cross-referenced ×1labeled ×1

OpenClaw-managed ACP sessions for Claude fail before producing output when OpenClaw applies generic runtime options as ACP session config options. Direct ACPX to Claude works on the same system, while the OpenClaw-managed ACP path fails with AcpRuntimeError: Internal error.

Error Message

Sanitized evidence:

  • Direct ACPX -> Claude: trivial prompt completed successfully.
  • OpenClaw managed ACP -> Claude: trivial prompt failed before output with AcpRuntimeError: Internal error.
  • Manual ACP config-option checks: session/set_config_option with configId=timeout returns an unknown config option / internal error from the Claude ACP adapter. Similar generic keys such as thinking and approval_policy are not advertised Claude ACP config options.
  • Current Claude ACP config options observed from the adapter are mode, model, and effort (category: thought_level).

Root Cause

OpenClaw-managed ACP sessions for Claude fail before producing output when OpenClaw applies generic runtime options as ACP session config options. Direct ACPX to Claude works on the same system, while the OpenClaw-managed ACP path fails with AcpRuntimeError: Internal error.

PR fix notes

PR #74048: fix(acp): skip sending unsupported config options to backends that do not advertise keys

Description (problem / solution / changelog)

Summary

The ACP runtime was sending generic runtime config options (timeout, thinking, approval_policy) to backends like Claude ACP that only support a specific set of keys (mode, model, effort/thought-level). This caused sessions to fail before producing output.

Fix

When a backend advertises its supported configOptionKeys, only those options are sent. When a backend does not advertise its supported keys (e.g., undefined), we now skip sending any config options, rather than sending all of them and causing the backend to reject unknown keys.

This avoids breaking backends that are strict about unknown config keys, while preserving the existing behavior for backends that explicitly list the options they support.

Behavior Change

ScenarioBeforeAfter
Backend advertises configOptionKeys: ["mode", "model", "effort"]Only advertised keys sentOnly advertised keys sent (unchanged)
Backend does NOT advertise configOptionKeys (undefined)All options sent → failureNo options sent → graceful skip

Testing

The fix was validated by reviewing the existing filtering logic and confirming the behavior change matches the intent described in the issue.

Closes #73875

Changed files

  • src/acp/control-plane/manager.runtime-controls.ts (modified, +11/-11)

Code Example

Sanitized evidence:
- Direct ACPX -> Claude: trivial prompt completed successfully.
- OpenClaw managed ACP -> Claude: trivial prompt failed before output with AcpRuntimeError: Internal error.
- Manual ACP config-option checks: session/set_config_option with configId=timeout returns an unknown config option / internal error from the Claude ACP adapter. Similar generic keys such as thinking and approval_policy are not advertised Claude ACP config options.
- Current Claude ACP config options observed from the adapter are mode, model, and effort (category: thought_level).
RAW_BUFFERClick to expand / collapse

Bug type

Behavior bug (incorrect output/state without crash)

Beta release blocker

No

Summary

OpenClaw-managed ACP sessions for Claude fail before producing output when OpenClaw applies generic runtime options as ACP session config options. Direct ACPX to Claude works on the same system, while the OpenClaw-managed ACP path fails with AcpRuntimeError: Internal error.

Steps to reproduce

  1. Configure ACP with the Claude ACP agent available.
  2. Verify direct ACPX can start Claude and complete a trivial prompt.
  3. Start a Claude session through OpenClaw managed ACP, for example sessions_spawn with runtime="acp" and agentId="claude", using a trivial prompt such as "Reply exactly: CLAUDE_ACP_OK".
  4. Observe that the managed ACP session fails before returning model output.
  5. Separately, send ACP session/set_config_option calls for unsupported config IDs such as timeout, thinking, or approval_policy to the Claude ACP adapter; the adapter rejects them as unknown config options / internal errors.

Expected behavior

OpenClaw should only apply ACP session config options that the target adapter advertises/supports, or should ignore/degrade gracefully for unsupported runtime options. A trivial OpenClaw-managed Claude ACP session should complete when direct ACPX to Claude succeeds.

Actual behavior

The OpenClaw-managed Claude ACP session fails before output with AcpRuntimeError: Internal error. Manual ACP testing shows the Claude ACP adapter rejects unsupported config IDs such as timeout, thinking, and approval_policy; current Claude ACP config options include mode, model, and effort/thought-level, not those generic OpenClaw runtime keys.

OpenClaw version

2026.4.26

Operating system

Ubuntu 26.04 LTS

Install method

npm global install / OpenClaw Gateway service

Model

Claude Code via ACP; repro also uses trivial exact-response prompts rather than model-specific behavior

Provider / routing chain

OpenClaw managed ACP runtime -> ACPX backend -> Claude ACP adapter -> Claude Code

Additional provider/model setup details

Direct ACPX to Claude succeeds on the same machine/auth setup. Tested with ACPX 0.6.1 and Claude Code 2.1.119. Latest checked Claude ACP adapter package exposes mode/model/effort config options; unsupported generic runtime keys are rejected.

Logs, screenshots, and evidence

Sanitized evidence:
- Direct ACPX -> Claude: trivial prompt completed successfully.
- OpenClaw managed ACP -> Claude: trivial prompt failed before output with AcpRuntimeError: Internal error.
- Manual ACP config-option checks: session/set_config_option with configId=timeout returns an unknown config option / internal error from the Claude ACP adapter. Similar generic keys such as thinking and approval_policy are not advertised Claude ACP config options.
- Current Claude ACP config options observed from the adapter are mode, model, and effort (category: thought_level).

Impact and severity

Claude Code is usable through direct ACPX but not through OpenClaw-managed ACP sessions. This blocks OpenClaw from reliably controlling Claude Code through the intended ACP runtime path.

Additional information

Suggested fix: during ACP session setup, derive the supported config option IDs from the adapter session response and only call session/set_config_option for advertised options. Map OpenClaw runtime concepts to adapter-specific config IDs where appropriate (for example effort/thought-level), and do not send generic keys such as timeout unless the adapter explicitly supports them.

extent analysis

TL;DR

Modify OpenClaw to only apply ACP session config options that the target adapter supports, ignoring or mapping unsupported runtime options.

Guidance

  • Identify the supported config option IDs from the Claude ACP adapter's session response during ACP session setup.
  • Map OpenClaw runtime concepts to adapter-specific config IDs where appropriate (e.g., effort/thought-level).
  • Only call session/set_config_option for advertised options, excluding generic keys like timeout unless explicitly supported.
  • Consider adding a fallback or logging mechanism to handle cases where the adapter does not support expected config options.

Example

No code snippet is provided due to the lack of specific implementation details in the issue.

Notes

The suggested fix relies on the ability to derive supported config option IDs from the adapter's session response. If this information is not available or unreliable, alternative approaches may be necessary.

Recommendation

Apply the suggested workaround by modifying OpenClaw to only apply supported ACP session config options, as this should resolve the issue without requiring an upgrade to a fixed version. This approach allows for a targeted fix that can be implemented and tested independently of other system components.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

OpenClaw should only apply ACP session config options that the target adapter advertises/supports, or should ignore/degrade gracefully for unsupported runtime options. A trivial OpenClaw-managed Claude ACP session should complete when direct ACPX to Claude succeeds.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING