Hmbown/CodeWhale · error · anyhow::Error

Tool Web is limited to search/fetch in the read-only evidenc

Error message

Tool Web is limited to search/fetch in the read-only evidence profile

What it means

Role-profile guard in the read-only evidence worker's execute_full: the Web tool was invoked with an action outside search/fetch (the matched action fell outside the allowed set). The read-only evidence profile deliberately narrows Web to retrieval; mutating or exotic Web actions are refused before dispatch.

Source

Thrown at crates/tui/src/tools/subagent/mod.rs:14751

    async fn execute_full(
        &self,
        agent_id: &str,
        tool_id: &str,
        name: &str,
        input: Value,
    ) -> Result<RichToolResult> {
        if self.role_blocks_unhardened_process_tool(name) {
            return Err(anyhow!(
                "Tool {name} is not available to this read-only worker because its process path does not share the hardened evidence boundary. Use read/search, classifier-bounded bash reads, or the verifier's bounded Run tool instead."
            ));
        }
        let action = input.get("action").and_then(Value::as_str);
        if matches!(&self.agent_type, FleetRole::Scout | FleetRole::Reviewer)
            && name == "Web"
            && !matches!(action, Some("search" | "fetch"))
        {
            return Err(anyhow!(
                "Tool Web is limited to search/fetch in the read-only evidence profile"
            ));
        }
        let family_action_allowed = if !Self::ACTION_ALIASES
            .iter()
            .any(|(family, _, _)| *family == name)
        {
            true
        } else if let Some(action) = action {
            self.is_action_allowed(name, action)
        } else {
            self.allowed_tools
                .as_ref()
                .is_none_or(|list| list.iter().any(|allowed| allowed == name))
        };
        if !self.is_tool_allowed(name) || !family_action_allowed {
            return Err(anyhow!("Tool {name} not allowed for this sub-agent"));
        }

View on GitHub (pinned to 0c42157ee5)

Solutions

  1. Restrict Web calls to search or fetch actions in this worker
  2. Perform other Web actions from a write-capable agent or the parent
  3. Check the action alias used — unknown aliases also fail the allow set
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/tui/src/tools/subagent/mod.rs:14751 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of Hmbown/CodeWhale@0c42157ee5 (2026-08-20). Data as JSON: /api/errors/fe543803de2afa1e. Report an issue: GitHub.