Skip to main content

AW capability support

AW composes Hooks, managed MCP and policy updates in one configuration, selecting a target through aw run --config aw.yaml --agent <target>. This page compares Adapters and launch modes. Each row applies to the versions and integration steps in its linked reference.

Hooks and MCP​

All eight Adapters support observation and blocking at tool.before, and observation at tool.after. One configuration selects steps by target and tool, composing boolean commands, structured Providers and native Hook commands. See tool selection.

Adapter / entrypointAfter result replacementManaged MCP boundaryConfigurable withhold_result
Qoder CLISupported successful PostToolUse results; failure callback not connectedNo separate managed boundaryUnsupported
Qoder SDKUnsupportedIn-process handlers through managed createSdkMcpServerOrdinary resident supported
OpenClawRuntime-scoped native result slotsNo separate managed boundaryUnsupported
HermesNative tool result slotsNo separate managed boundaryUnsupported
QwenPawSupported native result slotsmanaged_mcp_tools(client) around actual ClientSession.call_toolOrdinary resident supported
Pi SDKSuccessful single text resultsMCP clients exposed through managed custom toolsNot configurable
Claude SDKAuthorized native text or managed MCP result slotsIn-process aw_claude.create_sdk_mcp_server handlers with a resident clientNot configurable
AgentScope SDKSupported middleware resultsNo separate managed boundaryUnsupported

Only structured Providers can replace authorized result slots, preserving native envelopes and failure status. withhold_result prevents result delivery after an after-step failure; ordinary Qoder SDK and QwenPaw support it for structured Providers and boolean Hooks. Pi and Claude SDK resident callback failures stop the task. Existing tool side effects remain, and native permissions and denials retain precedence.

Managed MCP checks identity, server, tool and approved arguments at the actual handler or remote call. Entrypoints without a separate managed boundary cover the native tool callbacks exposed by their framework. Check these differences when choosing an entrypoint.

  • Qoder SDK provides Query identity without the originating model tool ID; parentIdentity: "required" is rejected.
  • QwenPaw's helper resolves a fixed tool list; dynamic Toolkit(mcps=[client]) discovery needs separate integration.
  • Claude managed MCP replaces only successful single text results without structured content. Pi uses its managed custom-tool policy path.

See native integration for MCP setup, identity and cancellation rules, and the structured MCP and Claude MCP designs for protocol details. Configure security checks and output compression for the tool's actual semantics, preserving structured and multimodal results.

Policy update modes​

Policy updates can change Providers, events and execution.default_event_budget_ms. AW validates the complete candidate and explicitly activates it after checking that the instance is idle. Editing a file does not trigger an update. A task's before/after checks and managed MCP use the same policy revision.

Adapter / launch modeIdle policy updateReadiness and switching conditions
Ordinary Qoder SDK 1.0.56 / Worker 1.1.78 residentSupported; retains strict Post, managed MCP and private execution leasesManaged startDaemon() confirms readiness; all Queries must fully close and cleanup must finish
Ordinary QwenPaw 2.2.2.post1 / AgentScope 2.0.10 App residentSupported; retains strict Post, managed MCP and private execution leasesManaged App startup confirms readiness; all replies and cleanup must finish
Qoder 1.1.73 TUI, or the above Qoder SDK / QwenPaw in --reloadable modeRestrictedNative idle bridge; SDK requires explicit daemon and initialized Query; resident strict Post and private execution leases unavailable
Externally started Qoder 1.1.73 TUI / QwenPaw AppRestricted, through PID attachmentAttach before the first request; satisfy the restricted bridge's native idle and cleanup conditions
Ordinary Qoder CLI, Pi SDK, Claude SDK, OpenClaw, Hermes, AgentScope SDKUnsupportedPolicy is fixed at host launch; restart to change it

Pause task dispatch, run aw update --config aw.yaml --agent TARGET, and resume dispatch after success. Use --instance ID when a target has multiple instances. Prewarm ordinary Qoder SDK with managed startDaemon(). Without an explicit daemon, initialize createQuery() within the 30-second startup deadline; that Query occupies the instance until fully closed.

Active tasks or unfinished cleanup cause busy; updates are not queued. Candidate preparation failures and revision conflicts retain the old policy. Audit failure after activation stops further dispatch; stop affected workers, then restart the service and workers with the intended policy. Changes to model credentials, SDK/Worker versions, launch configuration or AW binaries require restart or deployment. See update a prewarmed instance for operations and recovery, and attach an already-running native process for external PID integration.

Capabilities awaiting implementation​

The other fourteen configuration event names have no public Provider dispatch. See the developer configuration reference for the full vocabulary. replace_input, portable ask and guards are unsupported; sec-core uses selected tool.before steps. Active-task policy switching, a general MCP gateway, and Tokenless Schema/BeforeModel and Retrieve integration remain unimplemented.

Acceptance evidence​

The Adapter catalog, regression matrix and native inventory maintain support claims. The native inventory records pinned versions, commands and automated/manual boundaries. Qoder SDK hosted managed-MCP cases still use manual container evidence. See Contributing for the full acceptance scope.

<details> <summary>Hook event and effect contract catalog</summary>

This table is generated from the regression matrix. CI checks declarations against contract cases. ✓ means declared with contract coverage; × means unsupported. Native result limits and launch modes follow the sections above.

<!-- aw-regression-matrix:start -->

Agenttool.before / observetool.before / blocktool.after / observetool.after / replace_result
agentscope✓✓✓✓
claude-sdk✓✓✓✓
hermes✓✓✓✓
openclaw✓✓✓✓
pi✓✓✓✓
qoder✓✓✓✓
qoder-sdk✓✓✓×
qwenpaw✓✓✓✓
<!-- aw-regression-matrix:end -->

</details>