NVIDIA / NVIDIA/NemoClaw

[DGX Spark][Agent&Skills] agent does not auto-invoke web_search on a natural prompt with the default local model (qwen3.6:35b, progressive tool disclosure)

Open
#7,304 0 comments 0 reactions 0 assignees View on GitHub
NV QA
Dominant language
TypeScript
Stars
22.5k
Forks
3.1k
Avg merge
1d 1h
Merged PRs (30d)
715

Description

## Description

On a DGX Spark using the default local model (Ollama qwen3.6:35b) under the default progressive tool disclosure, the OpenClaw agent does **not** automatically invoke the `web_search` tool when given a natural-language "search the web" instruction — it answers from the model's training knowledge instead (and explicitly states it cannot access web search). The web-search plumbing is fully correct: the `brave` policy preset is applied, egress to `api.search.brave.com` works, and `web_search` returns real results when it is explicitly forced. The gap is that the default Spark local model does not reliably **choose** to call `web_search` on natural language, so the web-search skill is effectively unusable via ordinary prompts for a Spark user on the default configuration.

This is an enhancement request for the default DGX Spark experience (the primary demo path), not a plumbing defect.

**Platform scope:** Reproduced on DGX Spark (GB10, aarch64) with the default local model (Ollama qwen3.6:35b, progressive tool disclosure). The same test on a strong cloud model (Nemotron-3-Super-120B) DID auto-invoke `web_search` on the identical natural prompt — so the gap is tied to the default local-model config and is expected on other weak local-model setups.

**Regression:** Unknown — not a regression; a default-config UX gap.

## Environment

```text
Device: DGX Spark (GB10, aarch64)
OS: Ubuntu 24.04 (DGX Spark 7.5.0)
Architecture: aarch64
Node.js: v22.23.1
npm: 10.9.8
Docker: 29.2.1
OpenShell CLI: 0.0.85
NemoClaw: v0.0.89
OpenClaw: 2026.6.10
```

## Steps to Reproduce

1. On a DGX Spark, onboard an OpenClaw sandbox on the default local model (Ollama qwen3.6:35b), enabling Brave web search (enter a Brave Search API key at the web-search step). Confirm the brave preset is applied:
```bash
nemoclaw {sandbox} policy-list # -> "brave [from balanced tier]" shown as applied
```
2. Give the agent a **natural** "search the web" prompt:
```bash
nemoclaw {sandbox} exec -- openclaw agent --session-id s1 \
-m "What is NVIDIA NemoClaw? Search the web and give me a summary."
```
3. Observe the response.
4. For comparison, force an explicit tool call:
```bash
nemoclaw {sandbox} exec -- openclaw agent --session-id s2 \
-m "Use tool_call to invoke web_search with query 'NVIDIA NemoClaw GitHub'. Report the real titles and URLs."
```

## Expected Result

On the default DGX Spark configuration, a natural "search the web" instruction reliably triggers the `web_search` tool and the agent returns a summary built from real search results — without the user needing to know how to force an explicit `tool_call`.

Possible directions (enhancement): default to `--tool-disclosure=direct` on Spark so the model does not have to discover-then-call the tool; and/or ship a stronger default tool-calling local model; and/or add a system-prompt nudge that maps web-search intents to the `web_search` tool.

## Actual Result

**Step 2 (natural prompt)** — the agent does NOT call `web_search`; it answers from training knowledge:

```text
"Based on the system context ... I CAN'T ACCESS WEB SEARCH RESULTS to confirm from external sources."
(the answer is full of "appears to be" / "likely" — inferred, not searched)
```

When told "call web_search now" the model confuses `web_search` with `tool_search` (the progressive tool-discovery tool) and queries the tool catalog for the phrase instead of searching the web -> `[]`.

The `web_search` tool IS present and discoverable:

```text
tool_search "web search" -> web_search: "Search web for current info; returns normalized provider results."
```

**Step 4 (explicitly forced tool_call)** — `web_search` works and returns REAL Brave results:

```text
1. GitHub - NVIDIA/NemoClaw ... https://github.com/NVIDIA/NemoClaw
2. GitHub - NVIDIA/nemoclaw-community ... https://github.com/NVIDIA/nemoclaw-community
5. NVIDIA NemoClaw: Deploy Safer AI ... https://www.nvidia.com/en-us/ai/nemoclaw/
```

(Brave API key valid, egress to `api.search.brave.com` works, results are real.)

## Logs

```text
# Natural prompt (default Spark local model qwen3.6:35b) — no web_search call:
"... I can't access web search results to confirm from external sources ..."

# Forced tool_call — web_search returns real data:
web_search(query="NVIDIA NemoClaw GitHub") ->
https://github.com/NVIDIA/NemoClaw , https://www.nvidia.com/en-us/ai/nemoclaw/ , ...

# Contrast: on a strong cloud model (Nemotron-3-Super-120B) the SAME natural prompt auto-invoked
# web_search (Brave API GET api.search.brave.com/res/v1/web/search confirmed ALLOWED in OCSF logs).

# Related (prior, closed): #2733 — "Tool-call reliability: detect/document Ollama tool-call-leak
# failure mode and recommend vLLM with parser flag for tool-calling agents." Related theme, but this
# report is specifically web_search NOT auto-invoking on a natural prompt with the default Spark
# local model + progressive tool disclosure.
```

Contributor guide

Open the contributing guide

Research direction

Start with the DGX Spark onboarding path and the default progressive tool-disclosure configuration, then reproduce the natural-prompt and forced-tool_call commands described here. Compare behavior with the strong cloud model and inspect how web_search is exposed to the default local model. Done means the default Spark experience reliably invokes web_search for a natural web-search request without requiring an explicit tool_call.

Written by the indexing model from the issue text.

Assessment

Tech stack
node.js, ollama, typescript, ubuntu
Domain
ai, tooling
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.