diff --git a/.openclaw-sync/source.json b/.openclaw-sync/source.json index 138b3ac3a..0578bf934 100644 --- a/.openclaw-sync/source.json +++ b/.openclaw-sync/source.json @@ -1,5 +1,5 @@ { "repository": "openclaw/openclaw", - "sha": "60f93583488a6a636a7eb073a3afdfb688dbb975", - "syncedAt": "2026-04-25T16:57:37.547Z" + "sha": "f3ba962fd05b394331ffd446c931a9206a20eb92", + "syncedAt": "2026-04-25T17:00:39.081Z" } diff --git a/docs/tools/browser.md b/docs/tools/browser.md index cb4471e1c..19f8c1208 100644 --- a/docs/tools/browser.md +++ b/docs/tools/browser.md @@ -69,6 +69,24 @@ Browser config changes require a Gateway restart so the plugin can re-register i ## Agent guidance +Tool-profile note: `tools.profile: "coding"` includes `web_search` and +`web_fetch`, but it does not include the full `browser` tool. If the agent or a +spawned sub-agent should use browser automation, add browser at the profile +stage: + +```json5 +{ + tools: { + profile: "coding", + alsoAllow: ["browser"], + }, +} +``` + +For a single agent, use `agents.list[].tools.alsoAllow: ["browser"]`. +`tools.subagents.tools.allow: ["browser"]` alone is not enough because sub-agent +policy is applied after profile filtering. + The browser plugin ships two levels of agent guidance: - The `browser` tool description carries the compact always-on contract: pick diff --git a/docs/tools/index.md b/docs/tools/index.md index 16c154fe3..53842f0c7 100644 --- a/docs/tools/index.md +++ b/docs/tools/index.md @@ -143,6 +143,12 @@ Per-agent override: `agents.list[].tools.profile`. | `messaging` | `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status` | | `minimal` | `session_status` only | +`coding` includes lightweight web tools (`web_search`, `web_fetch`, `x_search`) +but not the full browser-control tool. Browser automation can drive real +sessions and logged-in profiles, so add it explicitly with +`tools.alsoAllow: ["browser"]` or a per-agent +`agents.list[].tools.alsoAllow: ["browser"]`. + The `coding` and `messaging` profiles also allow configured bundle MCP tools under the plugin key `bundle-mcp`. Add `tools.deny: ["bundle-mcp"]` when you want a profile to keep its normal built-ins but hide all configured MCP tools. diff --git a/docs/tools/subagents.md b/docs/tools/subagents.md index 70331775d..2626aec13 100644 --- a/docs/tools/subagents.md +++ b/docs/tools/subagents.md @@ -305,7 +305,11 @@ Announce payloads include a stats line at the end (even when wrapped): ## Tool Policy (sub-agent tools) -By default, sub-agents get **all tools except session tools** and system tools: +Sub-agents use the same profile and tool-policy pipeline as the parent or target +agent first. After that, OpenClaw applies the sub-agent restriction layer. + +With no restrictive `tools.profile`, sub-agents get **all tools except session +tools** and system tools: - `sessions_list` - `sessions_history` @@ -341,6 +345,24 @@ Override via config: } ``` +`tools.subagents.tools.allow` is a final allow-only filter. It can narrow the +already-resolved tool set, but it cannot add back a tool removed by +`tools.profile`. For example, `tools.profile: "coding"` includes +`web_search`/`web_fetch`, but not the `browser` tool. To let coding-profile +sub-agents use browser automation, add browser at the profile stage: + +```json5 +{ + tools: { + profile: "coding", + alsoAllow: ["browser"], + }, +} +``` + +Use per-agent `agents.list[].tools.alsoAllow: ["browser"]` when only one agent +should get browser automation. + ## Concurrency Sub-agents use a dedicated in-process queue lane: