Skip to main content
The naive_search_agent harness runs the AgentCompass built-in deep-search agent, having the model under test complete research benchmarks such as GAIA, DeepSearchQA, and FrontierScience one task at a time. You only need to provide the model’s access credentials; the harness automatically sets up the search agent in the run environment, drives the model through multi-turn retrieval with tools such as search / visit to produce an answer, and finally collects the model’s final answer and full search trajectory. Credentials are passed via the CLI --model-base-url / --model-api-key, and both the openai-chat and openai-responses --model-api-protocol protocols are supported.

How it works

  • Tools and loop. tools selects the enabled tools (search / browse / visit); the engine interacts with the model over multiple turns using the function-calling protocol. max_iterations caps per-task iterations, max_tool_calls_per_turn caps tool calls in a single assistant message, and max_tool_response_length truncates an over-long single tool response (keeping the head and tail). When the model stops issuing tool calls, the answer is considered complete and the content of the last assistant message is taken as the final answer.
  • External services. search depends on Serper, and browse / visit depend on Jina Reader; keys are supplied via serper_api_key / jina_api_key (defaulting to the same-named environment variables). tool_model_name can set a dedicated web-summary model for visit, falling back to the model under test when left empty.

Built-in tools

The agent can call the following three tools during the search loop. Use the tools parameter to choose which to enable (default ["search", "visit"]); they can be combined as needed.
ToolInputsPurposeDependencies
searchquery (search terms)Runs a single Google search and returns a result list (titles, snippets, links, etc.). Used to discover pages relevant to the question — the entry point of retrieval.Serper
visiturl (a single link or an array of links), goal (what this visit aims to obtain)Fetches one or more pages and returns a summary of the content focused on goal (rather than the full text). The summary is generated by the model set in tool_model_name, falling back to the model under test. Suited for targeted extraction from long pages.Jina Reader + summary model
browseurl (a single link)Fetches the full content of a single page (title, summary, body) and returns it verbatim, without LLM summarization. Suited for cases that need to preserve the page’s original detail.Jina Reader
The default combination search + visit matches the typical deep-search flow: use search to find candidate pages, then use visit with an explicit goal to read closely and extract information. When you need the page’s original text rather than a summary (for example, comparing tables, code, or clauses verbatim), switch to or add browse. The difference between visit and browse is that the former returns a goal-oriented summary while the latter returns the full text.

Parameters

Pass a JSON object via --harness-params '{...}', or a harness.params block in the YAML given to --config; the CLI wins on shared keys (deep-merge).

Parameter reference

ParameterTypeDefaultChoices / valuesDescription
install_rootstring/opt/agentcompass/naive_search_agentEngine package unpack directory inside the sandbox (unused in host_process local mode).
toolslist[“search”, “visit”]search / browse / visitEnabled tool list.
max_iterationsint50≥ 1Maximum agent iterations per task.
max_retryint10≥ 1Application-level retry limit for one LLM or tool call.
retry_intervalint5≥ 1Seconds to wait between retries.
max_tool_calls_per_turnint5≥ 1Maximum tool calls allowed in one assistant message.
max_tool_response_lengthint8192≥ 1Maximum printable units retained from a tool response (truncated beyond this, keeping head and tail).
request_timeoutint2000≥ 1Read timeout for one LLM HTTP request in seconds.
tool_model_namestring""Dedicated web-summary model for the visit tool; falls back to the model under test when empty.
serper_api_keystringSerper search API key.
jina_api_keystringJina Reader API key.
envdict{}Additional environment variables injected into the engine process.
timeoutint / null9000≥ 1Task wall-clock timeout in seconds; aborts on timeout. null = no limit.

Search and parsing API keys

serper_api_key / jina_api_key default to environment-variable references (${SERPER_API_KEY} / ${JINA_API_KEY}): set the same-named variables in your shell and they are injected automatically, or pass the keys inline in --harness-params. When only search is enabled you can omit the Jina key; when only visit / browse are enabled you can omit the Serper key — just provide the key matching the tools actually enabled.

Run examples

naive_search_agent is passed as the second positional argument to agentcompass run <benchmark> naive_search_agent <model>; harness configuration is passed via --harness-params. GAIA, DeepSearchQA, and similar benchmarks are all judge-scored and require a judge model judge_model via --benchmark-params, otherwise tasks cannot be scored (see the respective benchmark docs).
Pass the Serper / Jina keys directly via --harness-params, defaults for the rest.

Output

The harness returns a RunResult per task: the final answer (final_answer), the trajectory, the execution status, and diagnostic metrics (iteration count, engine exit code, config / prompt / result paths, etc.). When the engine exits abnormally, errors out, or does not finish cleanly, the status is recorded as RUN_ERROR with the error message attached. Per-task details and aggregate metrics are written by the benchmark under results/<benchmark>/<model>/<run>/ (see Results).