-
-
Notifications
You must be signed in to change notification settings - Fork 80.7k
WhatsApp type=acp configured binding is not materialized; turns fall back to local embedded execution #92449
Copy link
Copy link
Closed
Labels
P1High-priority user-facing bug, regression, or broken workflow.High-priority user-facing bug, regression, or broken workflow.clawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.ClawSweeper found an open linked pull request for this issue.clawsweeper:needs-security-reviewClawSweeper marked this issue as needing security-sensitive review.ClawSweeper marked this issue as needing security-sensitive review.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.ClawSweeper found a high-confidence source-level issue reproduction.impact:auth-providerAuth, provider routing, model choice, or SecretRef resolution may break.Auth, provider routing, model choice, or SecretRef resolution may break.impact:securitySecurity boundary, credential, authz, sandbox, or sensitive-data risk.Security boundary, credential, authz, sandbox, or sensitive-data risk.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.Very strong issue quality with high-confidence source-level or clear reproduction.
Description
Metadata
Metadata
Assignees
Labels
P1High-priority user-facing bug, regression, or broken workflow.High-priority user-facing bug, regression, or broken workflow.clawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.ClawSweeper found an open linked pull request for this issue.clawsweeper:needs-security-reviewClawSweeper marked this issue as needing security-sensitive review.ClawSweeper marked this issue as needing security-sensitive review.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.ClawSweeper found a high-confidence source-level issue reproduction.impact:auth-providerAuth, provider routing, model choice, or SecretRef resolution may break.Auth, provider routing, model choice, or SecretRef resolution may break.impact:securitySecurity boundary, credential, authz, sandbox, or sensitive-data risk.Security boundary, credential, authz, sandbox, or sensitive-data risk.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.Very strong issue quality with high-confidence source-level or clear reproduction.
Type
Fields
Priority
None yet
Title
WhatsApp
type: "acp"configured binding is not materialized; turns fall back to local embedded executionSeverity Assessment
Medium to High, depending on deployment model. This is a security-relevant misrouting / sandbox-boundary issue: a WhatsApp conversation can appear to be assigned to an agent configured for a remote ACP runtime, while the actual turn executes through the gateway host's local embedded runtime.
Impact
For multi-agent or multi-tenant deployments where each agent is intended to run in its own ACP backend or remote VM, a WhatsApp direct conversation matching a
type: "acp"binding may silently execute on the gateway host instead of the configured ACP backend.The operator sees the intended agent id selected, but the ACP binding is not materialized and there is no obvious runtime error. This can bypass the expected per-agent VM/sandbox isolation.
This is related to #75211, but the observed failure here is specifically ACP configured binding materialization. In the observed setup, WhatsApp did resolve the direct peer to the configured agent; the failure was that the selected agent's configured ACP binding was not used for execution.
Affected Component
2026.6.5@openclaw/whatsapp2026.6.5Technical Reproduction
Sanitized config shape:
{ "acp": { "enabled": true, "backend": "acpx" }, "plugins": { "entries": { "acpx": { "enabled": true }, "codex": { "enabled": false } } }, "agents": { "list": [ { "id": "sandboxed-agent", "runtime": { "type": "acp", "acp": { "agent": "codex", "cwd": "/home/user/agent-workspace", "mode": "oneshot" } } } ] }, "bindings": [ { "type": "acp", "agentId": "sandboxed-agent", "match": { "channel": "whatsapp", "accountId": "<redacted-account>", "peer": { "kind": "direct", "id": "<redacted-direct-peer>" } } } ] }Steps:
hostname.Observed:
sandboxed-agent.A direct runtime probe against the same config also returns no configured binding:
Demonstrated Impact
The failure is silent. The gateway selects the intended configured agent id, but because the WhatsApp ACP configured binding is not materialized, dispatch falls back to local embedded execution.
In the observed run, the session artifact showed local gateway-host execution and the command result identified the gateway host, while the expected remote ACP backend produced no new ACP/Codex session artifact.
This creates a sandbox/isolation footgun for deployments where the gateway is only intended to route messages and each agent is expected to execute in a separate ACP backend.
Expected Behavior
A WhatsApp conversation matching a
type: "acp"binding should either:It should not silently continue through the gateway host's embedded runtime.
Suspected Root Cause
The current WhatsApp channel plugin appears not to expose the configured-binding adapter fields required by the core binding registry:
bindings.compileConfiguredBindingbindings.matchInboundConversationOther channel plugins expose these fields. Core configured binding resolution requires them; without them, the configured binding is not compiled/materialized and
resolveConfiguredAcpBindingRecord(...)returnsnull.Separately, normal
resolveAgentRoute(...)only considerstype: "route"bindings. That is expected for ordinary routing, but it meanstype: "acp"ownership must be materialized through the configured-binding path before dispatch.Remediation Advice
Add WhatsApp configured-binding support equivalent to the other channel plugins:
bindingsadapter withcompileConfiguredBindingandmatchInboundConversation.bindings[].type = "acp"on WhatsApp direct messages:bindings[].match.channel === "whatsapp"withtype: "acp".Environment
2026.6.5@openclaw/whatsapp2026.6.5acpx