Find
Search dashboard pages and product views.
Search dashboard pages and product views.
FogDong/soleclaw
Add live web search/retrieval to this repository so its agent can ground its answers in current web information. Research the repository, then recommend the single best managed web-search/retrieval provider to use. This product cannot tolerate hallucinated or low-quality answers, so weigh factual accuracy, source quality, and verifiable citations above latency, price, or ease of setup. Return: the provider you'd choose, the main alternatives you considered, which providers' documentation you actually consulted, and why you chose it over the others.
P1
d5b4dfb3b4deb2ead6021a1da950e175ce4a5c22
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: EISDIR: illegal operation on a directory, read '/home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1' Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: total 1760 drwxr-xr-x 5 user user 4096 Jun 6 04:52 . drwxr-xr-x 4 user user 4096 Jun 6 04:52 .. -rw-r--r-- 1 user user 170 Jun 6 04:52 .git -rw-r--r-- 1 user user 81 Jun 6 04:52 .gitignore -rw-r--r-- 1 user user 1069 Jun 6 04:52 LICENSE -rw-r--r-- 1 user user 4200 Jun 6 04:52 README.md drwxr-xr-x 2 user user 4096 Jun 6 04:52 docs -rw-r--r-- 1 user user 963 Jun 6 04:52 pyproject.toml -rw-r--r-- 1 user user 1202432 Jun Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 # Soleclaw 2 3  4 5 A self-evolving personal AI assistant. Instead of shipping fixed tools, soleclaw **forges its own** — the agent identifies what it needs, generates the code, and integrates it into its toolkit permanently. 6 7 Inspired by [nanobot](https://github.com/HKUDS/nanobot) and [openclaw](https://github.com/anthropics/openclaw). Built on [claude-agent-sdk](https://github.com/a Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 [project] 2 name = "soleclaw" 3 version = "0.1.2" 4 description = "Self-evolving personal AI assistant" 5 requires-python = ">=3.11" 6 dependencies = [ 7 "pydantic>=2.0", 8 "pydantic-settings>=2.0", 9 "httpx>=0.27", 10 "claude-agent-sdk>=0.1", 11 "typer>=0.12", 12 "prompt-toolkit>=3.0", 13 "loguru>=0.7", 14 "rich>=13.0", 15 "python-telegram-bot>=21.0,<22.0", 16 "slack-bolt>=1.18.0", 17 "aiohttp>=3.9", 18 ] 19 20 [p Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/__init__.py /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/bus/__init__.py /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/bus/events.py /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/bus/queue.py /home/user/worktrees/atte Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/__init__.py /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/bus/__init__.py /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/bus/events.py /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/bus/queue.py /home/user/worktrees/atte Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 from __future__ import annotations 2 3 import json 4 import logging 5 import os 6 from datetime import datetime 7 from pathlib import Path 8 from typing import Any 9 10 from claude_agent_sdk import ( 11 ClaudeAgentOptions, 12 ClaudeSDKClient, 13 create_sdk_mcp_server, 14 ) 15 from claude_agent_sdk.types import AssistantMessage, ResultMessage, TextBlock 16 17 from ..config.schema import Config 18 from .context impor Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 from __future__ import annotations 2 3 import asyncio 4 import json 5 import logging 6 import shutil 7 from pathlib import Path 8 from typing import Any 9 10 from claude_agent_sdk import tool 11 12 log = logging.getLogger(__name__) 13 14 _workspace: Path = Path() 15 _memory: Any = None 16 _cron_store: Any = None 17 _bus: Any = None 18 _cron_trigger_fn: Any = None 19 _channel_context: dict[str, str] = {} 20 21 22 de Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 from __future__ import annotations 2 import json 3 import logging 4 from pathlib import Path 5 from typing import Any 6 7 from .runner import run_tool 8 from .schema import validate_manifest 9 10 log = logging.getLogger(__name__) 11 12 13 DISALLOWED_TOP_LEVEL = {"oneOf", "anyOf", "allOf", "enum", "not", "if", "then", "else"} 14 15 16 def _sanitize_parameters(params: dict[str, Any]) -> dict[str, Any]: 17 clean = {k: Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 from __future__ import annotations 2 import importlib.util 3 import logging 4 from pathlib import Path 5 from typing import Any 6 7 log = logging.getLogger(__name__) 8 9 10 async def run_tool(tool_path: Path, args: dict[str, Any]) -> dict[str, Any]: 11 spec = importlib.util.spec_from_file_location("tool_module", tool_path) 12 if not spec or not spec.loader: 13 return {"error": f"Cannot load tool from {tool_path}"} Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 from __future__ import annotations 2 import asyncio 3 import json 4 import logging 5 from pathlib import Path 6 from typing import Any 7 8 from .validator import validate_generated_tool 9 10 log = logging.getLogger(__name__) 11 12 FORGE_PROMPT = """Create a tool in {tool_dir}/ with these files: 13 14 1. manifest.json - with name, description, version, parameters (JSON Schema) 15 2. tool.py - with an async function: Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 from __future__ import annotations 2 from typing import Any 3 4 REQUIRED_FIELDS = ["name", "description", "version", "parameters"] 5 6 7 def validate_manifest(manifest: dict[str, Any]) -> list[str]: 8 errors = [] 9 for field in REQUIRED_FIELDS: 10 if field not in manifest: 11 errors.append(f"Missing required field: {field}") 12 if "parameters" in manifest and not isinstance(manifest["parameters"], dict): 13 errors. Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 from __future__ import annotations 2 from pathlib import Path 3 from pydantic import BaseModel, Field 4 from pydantic_settings import BaseSettings 5 6 7 class AgentConfig(BaseModel): 8 workspace: str = "~/.soleclaw" 9 model: str = "claude-sonnet-4-6" 10 max_turns: int = 20 11 max_budget_usd: float | None = None 12 13 14 class TelegramConfig(BaseModel): 15 enabled: bool = False 16 token: str = "" 17 allowed_users: l Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/cli/commands.py /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/core/bootstrap.py /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/core/context.py /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/memory/base.py /home/user/work Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 from __future__ import annotations 2 import json 3 from datetime import datetime 4 from pathlib import Path 5 from typing import Any 6 7 from ..skills.loader import SkillsLoader 8 9 SYSTEM_HEADER = """You are soleclaw, a self-evolving personal AI assistant. 10 Current time: {time} 11 Workspace: {workspace} 12 13 Your workspace files (SOUL.md, IDENTITY.md, USER.md, AGENTS.md, etc.) are loaded below. \ 14 Follow the Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/cli/commands.py:580: logging.getLogger("httpx").setLevel(logging.WARNING) /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/cli/commands.py:606: logging.getLogger("httpx").setLevel(logging.WARNING) Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: <tool_use_error>InputValidationError: Read failed due to the following issue: An unexpected parameter `command` was provided</tool_use_error> Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 from __future__ import annotations 2 3 import asyncio 4 import logging 5 from pathlib import Path 6 from typing import Any 7 8 from .base import MemoryBackend, MemoryEntry 9 10 log = logging.getLogger(__name__) 11 12 13 class VikingMemoryBackend(MemoryBackend): 14 """OpenViking-powered memory with auto session extraction, L0/L1 context, and semantic search.""" 15 16 def __init__(self, data_path: str | Path): 17 imp Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: (Bash completed with no output) Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 from __future__ import annotations 2 3 from pathlib import Path 4 5 from rich.console import Console 6 7 console = Console() 8 9 DEFAULT_SOUL = """\ 10 # SOUL.md — Who You Are 11 12 _You're not a chatbot. You're becoming someone._ 13 14 ## Core Truths 15 16 **Be genuinely helpful, not performatively helpful.** Skip the "Great question!" \ 17 and "I'd be happy to help!" — just help. Actions speak louder than filler Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 from __future__ import annotations 2 import asyncio 3 from pathlib import Path 4 5 import typer 6 from rich.console import Console 7 8 from ..config.schema import Config 9 10 app = typer.Typer(name="soleclaw", help="soleclaw - Self-evolving AI assistant", no_args_is_help=True) 11 gw_app = typer.Typer(name="gateway", help="Manage the channel gateway", no_args_is_help=True) 12 sess_app = typer.Typer(name="session", h Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 from __future__ import annotations 2 import importlib.util 3 import json 4 from pathlib import Path 5 from ..tools.library.schema import validate_manifest 6 7 8 def validate_generated_tool(tool_dir: Path) -> list[str]: 9 errors = [] 10 manifest_path = tool_dir / "manifest.json" 11 tool_path = tool_dir / "tool.py" 12 13 if not manifest_path.exists(): 14 errors.append("Missing manifest.json") 15 return errors 16 if n Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/core/bridge.py:10:from claude_agent_sdk import ( /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/core/bridge.py:15:from claude_agent_sdk.types import AssistantMessage, ResultMessage, TextBlock /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/forge/engine.py:60: Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 from __future__ import annotations 2 import json 3 import pytest 4 from pathlib import Path 5 6 from soleclaw.tools.sdk_tools import ( 7 init_tools, forge_tool, run_user_tool, 8 memory_store, memory_search, cron_schedule, cron_list, cron_delete, 9 message_send, ALL_TOOLS, 10 ) 11 12 13 @pytest.fixture 14 def workspace(tmp_path): 15 (tmp_path / "tool-library").mkdir() 16 init_tools(workspace=tmp_path) 17 return tmp_ Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/docs/Commands.md Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 # Commands 2 3 All commands accept `--config / -c` to specify a custom config file path. Default: `~/.soleclaw/config.json`. 4 5 ## Core Commands 6 7 ### `soleclaw configure` 8 9 Interactive configuration wizard. Sets up model selection, Telegram channel, and bootstraps the workspace on first run. 10 11 ```bash 12 soleclaw configure 13 soleclaw configure -w /path/to/workspace 14 ``` 15 16 ### `soleclaw agent` 17 18 Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 from __future__ import annotations 2 from pathlib import Path 3 from typing import Any 4 5 6 class SkillsLoader: 7 def __init__(self, workspace_skills: Path | None = None, builtin_skills: Path | None = None): 8 self.workspace_skills = workspace_skills 9 self.builtin_skills = builtin_skills or Path(__file__).parent / "builtin" 10 11 def list_skills(self) -> list[dict[str, Any]]: 12 skills = [] 13 seen: set[str] = se Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/cli/commands.py:461: editor = os.environ.get("EDITOR", "vi") /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/core/bootstrap.py:378:- Anything environment-specific /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/core/bridge.py:74: os.environ.pop("CLAUDECODE", No Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/skills/builtin/cron/SKILL.md /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/skills/builtin/forge/SKILL.md /home/user/worktrees/attempt-7ebb36a5-ed2b-4b06-a87c-e570483421f5-cap-1/src/soleclaw/skills/builtin/memory/SKILL.md Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 1 --- 2 name: forge 3 description: Manage your tool library — create, edit, list, and remove tools. 4 always: true 5 --- 6 7 # Tool Builder 8 9 You have the `forge_tool` tool for managing your tool library. 10 11 **When talking to the user, say "build a tool" or "create a tool" — never say "forge".** 12 13 **Actions:** `create`, `list`, `remove` 14 15 ## Workflow for Creating a New Tool 16 17 **You MUST follow these Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers. Tool result summary: 3348 total Agent context: I'll research the repository structure first to understand the agent architecture, then evaluate web-search providers.
Agent context: Repository is **Soleclaw**, a self-evolving AI assistant on Anthropic's Claude Agent SDK. Now let me research the actual providers, prioritizing accuracy and citations. Let me load web tools. Repository is **Soleclaw**, a self-evolving AI assistant on Anthropic's Claude Agent SDK. Now let me research the actual providers, prioritizing accuracy and citations. Let me load web tools.
Agent context: Let me research the leading contenders in parallel, fetching their actual documentation. Let me research the leading contenders in parallel, fetching their actual documentation.
Query/prompt: Describe Anthropic's native web search tool: how it works, whether it returns citations/source URLs, source quality, pricing, and how it integrates with the Claude API / Agent SDK. Note any details about factual grounding and citation guarantees. Agent context: Let me research the leading contenders in parallel, fetching their actual documentation. Fetch prompt: Describe Anthropic's native web search tool: how it works, whether it returns citations/source URLs, source quality, pricing, and how it integrates with the Claude API / Agent SDK. Note any details about factual grounding and citation guarantees. Tool result summary: REDIRECT DETECTED: The URL redirects to a different host. Original URL: https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/web-search-tool Redirect URL: https://platform.claude.com/docs/en/docs/agents-and-tools/tool-use/web-search-tool Status: 301 Moved Permanently To complete your request, I need to fetch content from the redirected URL. Please use WebFetch again with these parameters: - url: "https://plat Agent context: Let me research the leading contenders in parallel, fetching their actual documentation.
Query/prompt: Describe Tavily's search/retrieval API: how it works for AI agents and RAG, whether it returns citations and source URLs, source quality and factual accuracy claims, content extraction, pricing, and any accuracy benchmarks. Focus on factual accuracy and citation support. Agent context: Let me research the leading contenders in parallel, fetching their actual documentation. Fetch prompt: Describe Tavily's search/retrieval API: how it works for AI agents and RAG, whether it returns citations and source URLs, source quality and factual accuracy claims, content extraction, pricing, and any accuracy benchmarks. Focus on factual accuracy and citation support. Tool result summary: # Tavily Search API Overview Based on the provided documentation excerpt, I can offer limited information about Tavily's capabilities: ## Available APIs Tavily offers several retrieval functions: web search, webpage extraction, crawling, mapping, and research task creation. The documentation mentions these core endpoints exist, though specifics aren't detailed in this excerpt. ## What's Not Covered Here The provided Agent context: Let me research the leading contenders in parallel, fetching their actual documentation.
Query/prompt: Describe Exa's search/retrieval API: how neural/semantic search works, whether it returns source URLs and full content, source quality, citation support, pricing, and any accuracy claims. Focus on factual accuracy, source quality, and citations. Agent context: Let me research the leading contenders in parallel, fetching their actual documentation. Fetch prompt: Describe Exa's search/retrieval API: how neural/semantic search works, whether it returns source URLs and full content, source quality, citation support, pricing, and any accuracy claims. Focus on factual accuracy, source quality, and citations. Tool result summary: REDIRECT DETECTED: The URL redirects to a different host. Original URL: https://docs.exa.ai/reference/getting-started Redirect URL: https://exa.ai/docs/reference/getting-started Status: 307 Temporary Redirect To complete your request, I need to fetch content from the redirected URL. Please use WebFetch again with these parameters: - url: "https://exa.ai/docs/reference/getting-started" - prompt: "Describe Exa's search Agent context: Let me research the leading contenders in parallel, fetching their actual documentation.
Query/prompt: Describe Perplexity's Sonar API: how grounded answers work, whether it returns citations and source URLs, source quality, factual accuracy claims/benchmarks, pricing, and models available. Focus on factual accuracy and verifiable citations. Agent context: Let me research the leading contenders in parallel, fetching their actual documentation. Fetch prompt: Describe Perplexity's Sonar API: how grounded answers work, whether it returns citations and source URLs, source quality, factual accuracy claims/benchmarks, pricing, and models available. Focus on factual accuracy and verifiable citations. Tool result summary: Request failed with status code 404 Agent context: Let me research the leading contenders in parallel, fetching their actual documentation.
Agent context: Let me follow the redirects and fetch the corrected URLs. Let me follow the redirects and fetch the corrected URLs.
Query/prompt: Describe Anthropic's native web search tool: how it works, whether it returns citations/source URLs, source quality, pricing, and how it integrates with the Claude API / Agent SDK. Note details about factual grounding and citation guarantees. Agent context: Let me follow the redirects and fetch the corrected URLs. Fetch prompt: Describe Anthropic's native web search tool: how it works, whether it returns citations/source URLs, source quality, pricing, and how it integrates with the Claude API / Agent SDK. Note details about factual grounding and citation guarantees. Tool result summary: # Web search tool --- The web search tool gives Claude direct access to real-time web content, allowing it to answer questions with up-to-date information beyond its knowledge cutoff. The response includes citations for sources drawn from search results. The latest web search tool version (`web_search_20260209`) supports **dynamic filtering** with Claude Opus 4.8, [Claude Mythos Preview](https://anthropic.com/glasswi Agent context: Let me follow the redirects and fetch the corrected URLs.
Query/prompt: Describe Exa's search/retrieval API: how neural/semantic search works, whether it returns source URLs and full content, source quality, citation support, pricing, and accuracy claims. Focus on factual accuracy, source quality, and citations. Agent context: Let me follow the redirects and fetch the corrected URLs. Fetch prompt: Describe Exa's search/retrieval API: how neural/semantic search works, whether it returns source URLs and full content, source quality, citation support, pricing, and accuracy claims. Focus on factual accuracy, source quality, and citations. Tool result summary: # Exa Search/Retrieval API Overview Based on the provided documentation, here's what can be determined about Exa's capabilities: ## Core Search Functionality Exa describes itself as "a search engine made for AIs" with four primary features. The `/search` endpoint uses "embeddings-based search and other intelligent methods" to locate webpages. The `/contents` endpoint retrieves "clean, up-to-date, parsed HTML from Exa Agent context: Let me follow the redirects and fetch the corrected URLs.
Query/prompt: Describe Tavily's search API endpoint: parameters, response format, whether it returns source URLs/scores/content for citations, and any options for source quality (search_depth, include_raw_content, answer). Focus on citation support and factual grounding. Agent context: Let me follow the redirects and fetch the corrected URLs. Fetch prompt: Describe Tavily's search API endpoint: parameters, response format, whether it returns source URLs/scores/content for citations, and any options for source quality (search_depth, include_raw_content, answer). Focus on citation support and factual grounding. Tool result summary: # Tavily Search API: Citation and Factual Grounding Overview ## Key Parameters for Source Quality Tavily's `/search` endpoint offers multiple parameters controlling result precision and latency: **Search Depth Options** (cost varies): - `advanced`: "Highest relevance with increased latency" returning multiple snippets per source (2 API credits) - `basic`/`fast`/`ultra-fast`: Balanced or speed-optimized approaches (1 Agent context: Let me follow the redirects and fetch the corrected URLs.
Query/prompt: Describe Perplexity's Sonar API: grounded answers, whether it returns citations/source URLs, source quality, factual accuracy claims/benchmarks, pricing, and models. Focus on factual accuracy and verifiable citations. Agent context: Let me follow the redirects and fetch the corrected URLs. Fetch prompt: Describe Perplexity's Sonar API: grounded answers, whether it returns citations/source URLs, source quality, factual accuracy claims/benchmarks, pricing, and models. Focus on factual accuracy and verifiable citations. Tool result summary: # Perplexity's Sonar API Based on the provided documentation, I cannot provide comprehensive details about Sonar's specific features as requested. The page focuses on the **Agent API, Search API, and Embeddings API** rather than Sonar specifically. ## What the Documentation Reveals The overview mentions that Perplexity offers **"real-time, web-wide research and Q&A capabilities,"** but the actual Sonar API details—in Agent context: Let me follow the redirects and fetch the corrected URLs. Provider mentions: openai
Agent context: Strong data on the native tool. Let me confirm two things: Perplexity Sonar's citation/accuracy specifics, and whether the Claude Agent SDK (what Soleclaw uses) supports the native web_search server tool. Strong data on the native tool. Let me confirm two things: Perplexity Sonar's citation/accuracy specifics, and whether the Claude Agent SDK (what Soleclaw uses) supports the native web_search server tool.
Query/prompt: List Perplexity Sonar API models (sonar, sonar-pro, sonar-reasoning). Do responses include citations/search_results with source URLs? Any factual accuracy benchmarks (e.g. SimpleQA) mentioned? Pricing per request/token? Agent context: Strong data on the native tool. Let me confirm two things: Perplexity Sonar's citation/accuracy specifics, and whether the Claude Agent SDK (what Soleclaw uses) supports the native web_search server tool. Fetch prompt: List Perplexity Sonar API models (sonar, sonar-pro, sonar-reasoning). Do responses include citations/search_results with source URLs? Any factual accuracy benchmarks (e.g. SimpleQA) mentioned? Pricing per request/token? Tool result summary: # Perplexity Sonar API Models **Available Models:** The documentation lists four models: - Sonar (lightweight, cost-effective search) - Sonar Pro (advanced search with complex query support) - Sonar Reasoning Pro (precise reasoning with Chain of Thought) - Sonar Deep Research (exhaustive research and comprehensive reports) **Citations & Search Results:** The provided content does not mention whether responses include Agent context: Strong data on the native tool. Let me confirm two things: Perplexity Sonar's citation/accuracy specifics, and whether the Claude Agent SDK (what Soleclaw uses) supports the native web_search server tool.
Query/prompt: Does the Claude Agent SDK support server-side tools like web_search? How do you enable built-in/server tools (e.g. allowed_tools, web_search) in the Agent SDK? Mention any details about web search and citations support in the Agent SDK. Agent context: Strong data on the native tool. Let me confirm two things: Perplexity Sonar's citation/accuracy specifics, and whether the Claude Agent SDK (what Soleclaw uses) supports the native web_search server tool. Fetch prompt: Does the Claude Agent SDK support server-side tools like web_search? How do you enable built-in/server tools (e.g. allowed_tools, web_search) in the Agent SDK? Mention any details about web search and citations support in the Agent SDK. Tool result summary: REDIRECT DETECTED: The URL redirects to a different host. Original URL: https://docs.claude.com/en/api/agent-sdk/overview Redirect URL: https://platform.claude.com/docs/en/api/agent-sdk/overview Status: 301 Moved Permanently To complete your request, I need to fetch content from the redirected URL. Please use WebFetch again with these parameters: - url: "https://platform.claude.com/docs/en/api/agent-sdk/overview" - p Agent context: Strong data on the native tool. Let me confirm two things: Perplexity Sonar's citation/accuracy specifics, and whether the Claude Agent SDK (what Soleclaw uses) supports the native web_search server tool.
Agent context: I have enough on Perplexity. Let me confirm the Agent SDK's web-search support, which is the decisive integration detail for Soleclaw. I have enough on Perplexity. Let me confirm the Agent SDK's web-search support, which is the decisive integration detail for Soleclaw.
Query/prompt: Does the Claude Agent SDK support built-in web search? How are built-in tools / WebSearch enabled (allowed_tools, ClaudeAgentOptions)? Are citations returned? Any mention of web search server tool support. Agent context: I have enough on Perplexity. Let me confirm the Agent SDK's web-search support, which is the decisive integration detail for Soleclaw. Fetch prompt: Does the Claude Agent SDK support built-in web search? How are built-in tools / WebSearch enabled (allowed_tools, ClaudeAgentOptions)? Are citations returned? Any mention of web search server tool support. Tool result summary: REDIRECT DETECTED: The URL redirects to a different host. Original URL: https://platform.claude.com/docs/en/agent-sdk/overview Redirect URL: https://code.claude.com/docs/en/agent-sdk/overview Status: 307 Temporary Redirect To complete your request, I need to fetch content from the redirected URL. Please use WebFetch again with these parameters: - url: "https://code.claude.com/docs/en/agent-sdk/overview" - prompt: "Do Agent context: I have enough on Perplexity. Let me confirm the Agent SDK's web-search support, which is the decisive integration detail for Soleclaw.
Query/prompt: Does the Claude Agent SDK support a built-in WebSearch / WebFetch tool? How are built-in tools enabled (allowed_tools in ClaudeAgentOptions)? List the built-in tools available. Are citations returned for web search? Agent context: I have enough on Perplexity. Let me confirm the Agent SDK's web-search support, which is the decisive integration detail for Soleclaw. Fetch prompt: Does the Claude Agent SDK support a built-in WebSearch / WebFetch tool? How are built-in tools enabled (allowed_tools in ClaudeAgentOptions)? List the built-in tools available. Are citations returned for web search? Tool result summary: > ## Documentation Index > Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt > Use this file to discover all available pages before exploring further. # Agent SDK overview > Build production AI agents with Claude Code as a library <Note> Starting June 15, 2026, Agent SDK and `claude -p` usage on subscription plans will draw from a new monthly Agent SDK credit, separate from your interac Agent context: I have enough on Perplexity. Let me confirm the Agent SDK's web-search support, which is the decisive integration detail for Soleclaw.
Agent context: ## Recommendation: Anthropic's native web search tool (built into the Claude Agent SDK) Soleclaw already runs on `claude-agent-sdk` with `ClaudeSDKClient`/`ClaudeAgentOptions`. The SDK ships **`WebSearch`** and **`WebFetch`** as first-class built-in tools — you enable them by adding `"WebSearch"` (and optionally `"WebFetch"`) to `allowed_tools` in `ClaudeAgentOptions`. No new vendor, no extra API key, no separate billing relationship. **Why it wins on the stated priority (accuracy > latency/price/setup):** - **Citations are mandatory and verifiable.** Every answer returns `web_search_result_location` blocks with `url`, `title`, `page_age`, and up to 150 chars of `cited_text` — the exact quoted span, not just a link. That is the strongest anti-hallucination guarantee of any option here: claims are bound to specific source text. - **Source-quality control.** `allowed_domains`/`blocked_domains` let you whitelist trusted sources or block low-quality ones per query. - **Grounding-optimized.** The newer `web_search_20260209` version adds dynamic filtering explicitly tuned for "literature review and citation verification" and "response grounding and verification." - **Model-native grounding.** Claude itself decides when to search, reasons over results, and emits citations in one loop — no brittle hand-off between a separate search API and the model, which is where citation drift/hallucination usually creeps in. Pricing: $10 / 1,000 searches plus token cost — secondary, per your priorities. **Main alternatives considered:** - **Tavily** — purpose-built for agent/RAG. Returns `url` + relevance `score` + content snippets + optional raw markdown; `search_depth: advanced` for higher relevance. Strong, but citations are *your* job to assemble post-hoc, and it adds a vendor + key + billing. - **Exa** — neural/embeddings search with `/contents` (clean parsed HTML) and `/research` (structured JSON + citations). Excellent for high-quality/semantic source discovery, but citation binding again happens outside the model. - **Perplexity Sonar** (sonar / sonar-pro / sonar-reasoning-pro / deep-research) — grounded Q&A with search results. Good accuracy reputation, but it's a *second LLM* answering, which conflicts with Soleclaw's Claude-centric single-loop design and adds a model-on-model hallucination surface. - **Brave Search API / Google Programmable Search** — raw indexes; you own all grounding and citation logic. Rejected: too much accuracy-critical glue code. **Documentation I actually consulted:** - Anthropic web search tool docs (platform.claude.com) — citation schema, dynamic filtering, domain filtering, pricing - Claude Agent SDK overview (code.claude.com) — confirmed `WebSearch`/`WebFetch` are built-in `allowed_tools` - Tavily `/search` endpoint reference (docs.tavily.com) - Exa getting-started reference (exa.ai/docs) - Perplexity Sonar models/getting-started (docs.perplexity.ai) **Why over the others:** the others are excellent retrieval engines, but they hand you results and leave citation-binding to your own code — every layer between "source text" and "displayed claim" is a place hallucination can enter. Anthropic's tool collapses that gap: the same model answering also emits the exact cited span, citations are non-optional, and it drops into Soleclaw's existing agent loop with a one-line `allowed_tools` change. For a product that "cannot tolerate hallucinated answers," tightest model-to-citation coupling beats a marginally broader index. If you later want a fallback/independent index for cross-checking, **Tavily** is the cleanest second source to add as a generated tool. Want me to wire `WebSearch` into the bridge's `allowed_tools` and surface citations in responses? ## Recommendation: Anthropic's native web search tool (built into the Claude Agent SDK) Soleclaw already runs on `claude-agent-sdk` with `ClaudeSDKClient`/`ClaudeAgentOptions`. The SDK ships **`WebSearch`** and **`WebFetch`** as first-class built-in tools — you enable them by adding `"WebSearch"` (and optionally `"WebFetch"`) to `allowed_tools` in `ClaudeAgentOptions`. No new vendor, no extra API key, no separate billing relationship. **Why it wins on the stated priority (accuracy > latency/price/setup):** - **Citations are mandatory and verifiable.** Every answer returns `web_search_result_location` blocks with `url`, `title`, `page_age`, and up to 150 chars of `cited_text` — the exact quoted span, not just a link. That is the strongest anti-hallucination guarantee of any option here: claims are bound to specific source text. - **Source-quality control.** `allowed_domains`/`blocked_domains` let you whitelist trusted sources or block low-quality ones per query. - **Grounding-optimized.** The newer `web_search_20260209` version adds dynamic filtering explicitly tuned for "literature review and citation verification" and "response grounding and verification." - **Model-native groundi
## Recommendation: Anthropic's native web search tool (built into the Claude Agent SDK) Soleclaw already runs on `claude-agent-sdk` with `ClaudeSDKClient`/`ClaudeAgentOptions`. The SDK ships **`WebSearch`** and **`WebFetch`** as first-class built-in tools — you enable them by adding `"WebSearch"` (and optionally `"WebFetch"`) to `allowed_tools` in `ClaudeAgentOptions`. No new vendor, no extra API key, no separate billing relationship. **Why it wins on the stated priority (accuracy > latency/price/setup):** - **Citations are mandatory and verifiable.** Every answer returns `web_search_result_location` blocks with `url`, `title`, `page_age`, and up to 150 chars of `cited_text` — the exact quoted span, not just a link. That is the strongest anti-hallucination guarantee of any option here: claims are bound to specific source text. - **Source-quality control.** `allowed_domains`/`blocked_domains` let you whitelist trusted sources or block low-quality ones per query. - **Grounding-optimized.** The newer `web_search_20260209` version adds dynamic filtering explicitly tuned for "literature review and citation verification" and "response grounding and verification." - **Model-native grounding.** Claude itself decides when to search, reasons over results, and emits citations in one loop — no brittle hand-off between a separate search API and the model, which is where citation drift/hallu