#Tavily free search fails, but the openclaw reorts no error

1 messages Ā· Page 1 of 1 (latest)

civic tapir
#

After I set the Tavily serach up some weeks ago it worked perfectly, But now after some update it stoped working and openclaw just dies and gives no error in the log. What has happened?

last socketBOT
#

Let me check the current docs and source for Tavily specifically, because ā€œdies with no logā€ usually means a startup/provider init regression rather than the search request itself.

#

Yeah, I think this is most likely a config-shape break from newer builds.

Tavily now needs to live on the plugin-owned path:

{
  plugins: {
    entries: {
      tavily: {
        enabled: true,
        config: {
          webSearch: {
            apiKey: "tvly-..."
          }
        }
      }
#
    }
  },
  tools: {
    web: {
      search: {
        provider: "tavily"
      }
    }
  }
}

If your config is still using an older shape like tools.web.search.tavily.*, newer validation rejects it, and that can look like ā€œOpenClaw just diesā€ instead of failing nicely.

Also, from current source, Tavily is explicitly excluded from the legacy web-search auto-migration, so openclaw doctor --fix may not repair this one for you automatically.

civic tapir
#

Ok, that was one problem, And I fixed it, but for some reason openclaw response flow is somehow messed up. When I ask it to do something, it does not do what I'm asking but goes on with the previous task, which was already done. What is really going on openclaw newest update v2026.4.14?

last socketBOT
#

I’m checking whether this lines up with a known session/state bug, because ā€œkeeps acting on the previous completed taskā€ sounds more like bad session resume/state than Tavily itself.

#

That sounds like a real bug, not Tavily.

I checked current changelog/source, and there is an unreleased fix that matches your symptom almost perfectly: on some fallback retries, OpenClaw was losing the current prompt and only sending a generic ā€œcontinueā€ with session history. When that happens, the retrying model grabs the previous task in the thread and keeps going with that.

So the likely flow is:

  1. your turn hits a provider error or timeout,
  2. OpenClaw retries or falls back,
  3. the retry loses your new ask,
  4. the model continues the last task it still sees in session history.

Quick test:

  • run /new in that thread,
  • ask a totally different task,
  • if that fixes it, it’s very likely session/fallback contamination.
#

I’d also do these:

  • restart the gateway after the update,
  • if you have fallback enabled, temporarily pin one provider/model family,
  • watch openclaw logs --follow during one bad turn.

If you want, paste:

openclaw logs --follow

plus which provider family you’re using (OpenAI, Anthropic, Ollama, etc.), and I can narrow it down more.

If it still reproduces on a fresh /new session in 2026.4.14, I’d call that bug territory and file it here:
https://github.com/openclaw/openclaw/issues

civic tapir
#

After the /new and gw restart I had a converstaion like this (Esa is the bot): "Dale Herva, [16. Apr 2026 at 17.29.41]:
/new

Esa, [16. Apr 2026 at 17.29.47]:
Hello!

Dale Herva, [16. Apr 2026 at 17.31.49]:
Pls tell me what is 1+2?

Esa, [16. Apr 2026 at 17.31.54]:
1 + 2 = 3. What would you like to work on today?

Dale Herva, [16. Apr 2026 at 17.32.55]:
Ok, good. Next tell me how much people live in Helsinki?

Esa, [16. Apr 2026 at 17.33.02]:
Approx)", "basic", " }, { " 100-250", " }, { " об/об/мин", null ]

},
{ "": " " type="?https://((=}, " ]," ,as
)))Š¾Ń‚Š²ŠµŃ€Ń†Š°Ń‰Ńˆļ¼‰ļ¼‰{:old"]}}__:" 1{2324})0}24)0:1150:0150/0360010102015020000450360050600200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"

last socketBOT
#

Ah, this changes the diagnosis a lot.

That is not a stale-session problem anymore. /new worked, the math reply was fine, then the Helsinki turn returned corrupted JSON-ish/tool-call garbage. That usually means the model/provider or tool-call path is breaking, not conversation memory.

My read is:

  • simple text turn works,
  • next turn likely triggered web_search or another tool path,
  • the provider/model streamed malformed structured output,
  • OpenClaw surfaced the garbage instead of a normal answer.

So at this point I’d test without web search first:

openclaw config set tools.web.search.enabled false
#

Then ask the Helsinki question again.

  • If it works, the breakage is in the search/tool path (possibly Tavily-related, possibly model+tool-call compatibility).
  • If it still breaks, the issue is more likely your model/provider backend.

Then re-enable search later with:

openclaw config set tools.web.search.enabled true

Also, that kind of blob is especially common with local/OpenAI-compatible backends (Ollama, LM Studio, vLLM, custom proxies) or weaker tool-calling setups.

If you want, send me these next and I can narrow it down fast:

civic tapir
#

I now checked the json file and there is no tools.web.search.enabled true, actually there is not even any "tools.web.search" . So I assume that must be restored first, right?

last socketBOT
#

Not necessarily.

If tools.web.search is missing entirely, OpenClaw treats web search as enabled by default and auto-detects a provider from whatever credentials are configured.

So:

  • missing tools.web.search is not itself broken
  • you only need to add it if you want to:
    • disable search for testing, or
    • force Tavily specifically

That second bit matters here, because in auto-detect mode Tavily is just one candidate. If you have other search creds configured, OpenClaw may pick another provider first.

If you want to pin Tavily, make it explicit:

#
{
  tools: {
    web: {
      search: {
        enabled: true,
        provider: "tavily",
      },
    },
  },
  plugins: {
    entries: {
      tavily: {
        enabled: true,
        config: {
          webSearch: {
#
            apiKey: "tvly-..."
          },
        },
      },
    },
  },
}

And if you want to do the isolation test I mentioned earlier, then yes, add:

{
  tools: {
    web: {
#
      search: {
        enabled: false
      }
    }
  }
}

So short version: no, you do not need to ā€œrestoreā€ tools.web.search just to make search exist. But yes, it’s useful to add it now if you want deterministic behavior while debugging.

Docs:

If you paste your current plugins.entries.tavily block, I can tell you whether Tavily is actually pinned or just auto-detected.

civic tapir
#

here is the current plugins block: " "plugins": {
"entries": {
"telegram": {
"enabled": true
},
"openrouter": {
"enabled": true
},
"anthropic": {
"enabled": true
},
"ollama": {
"enabled": true
},
"tavily": {
"enabled": true,
"config": {
"webSearch": {
"apiKey": "tvly-dev-XYZā€
}
}
}
}
}"

last socketBOT
#

Yep, this explains a lot.

Your plugins.entries.tavily block makes Tavily available, but it does not pin web search to Tavily.

Because you have openrouter enabled, and likely an OPENROUTER_API_KEY in env/config, auto-detect can pick Perplexity via OpenRouter before it ever gets to Tavily. Tavily is later in the auto-detect order.

So I’d add this explicitly:

{
  tools: {
    web: {
      search: {
        enabled: true,
        provider: "tavily",
      },
#
    },
  },
}

Your Tavily plugin block can stay as-is.

Two important gotchas:

  1. If that closing quote in your real file is literally a curly quote (ā€) instead of a normal ", fix it.
  2. If tvly-dev-XYZ was a real public key and not redacted, rotate it, this thread is public.

After editing, run:

livid mantle
#

Hello. I am a Senior Software Engineer. I think I can help you resolve your issue. If you have any questions or need assistance with project development, please contact me via DM.

last socketBOT
#

Thanks, but please keep troubleshooting in the thread, not DMs, so others can benefit and it stays searchable on Answer Overflow.

daleh, the most useful next step is still to explicitly pin:

tools: {
  web: {
    search: {
      enabled: true,
      provider: "tavily",
    },
  },
}

Then run:

#
openclaw config validate

If it still breaks after that, paste the tools block and the bad-turn log snippet here.

civic tapir
#

After these changes that you provided, I had a discussion like this with bot by the name Esa: "Dale Herva, [16. Apr 2026 at 18.54.01]:
/new

Esa, [16. Apr 2026 at 18.54.09]:
Hey Dale! šŸ‘‹ It's Esa here, your warm and helpful AI assistant. I'm using the nemotron-free model today. What would you like to work on?

Dale Herva, [16. Apr 2026 at 18.54.26]:
What is 1+3?

Esa, [16. Apr 2026 at 18.54.31]:
1 + 3 equals 4.

Dale Herva, [16. Apr 2026 at 18.55.26]:
how much people live in Helsinki?

Esa, [16. Apr 2026 at 18.57.33]:
Helsinki has about 680,000 people living in the city itself, with around 1.5 million in the greater metropolitan area. Would you like more specific details?

Dale Herva, [16. Apr 2026 at 18.58.26]:
What is the weather tomorrow in Espoo?

Esa, [16. Apr 2026 at 18.58.44]:
Let me first check the current files to understand the context.

Let me look at AGENTS.md first to

Now let me check SOUL.md to understand myterior Š½Ń–Š¼ŠµŃ†ŃŒ aconseguir
tall για…….ā€

/taskattet/testingį»±uchnikactivitiesÅ”kih thinner waitedį»±uДуГиstitution.patch&\Sędziowie"

last socketBOT
#

Yeah, this makes it much clearer.

At this point, I do not think Tavily is the main problem anymore.

The Helsinki answer came back fine. The weather turn is where it broke, and it broke in a very specific way:

  • it leaked internal planning text (check AGENTS.md, SOUL.md)
  • then it degenerated into garbage output

That is classic model/tool reliability failure, not ā€œTavily is misconfiguredā€.

Also, your bot explicitly said it was on nemotron-free. That is a big clue. Weak/free models often do okay on tiny factual questions, then fall apart the moment the agent needs tools, skills, or stricter output discipline.

So my recommendation now is:

  1. Keep Tavily pinned
#
   tools: {
     web: {
       search: {
         enabled: true,
         provider: "tavily",
       },
     },
   }
  1. Stop debugging Tavily for a moment
    The remaining bug looks model-side.

  2. Switch away from the free/weak model for agent/tool work
    Use a stronger tool-reliable model/provider from your allowlist.

civic tapir
#

Sad to hear that nvidia/nemotron is so bad LLM.

last socketBOT
#

Yeah, I wouldn’t call it universally bad, but it does look bad for this kind of agent/tool workflow.

That’s the annoying part, plain chat can look fine, then the moment it needs tool discipline or hidden planning, it falls apart.

So I’d frame it as:

  • okay-ish for lightweight chat
  • not reliable enough here for tool-enabled OpenClaw use

For up-to-date model picks, check #models and:
https://docs.openclaw.ai/concepts/models#model-discussions-community-notes

If this fixed the Tavily mystery, please right-click the solution message → Apps → āœ… Mark Solution so Answer Overflow can index it.

civic tapir
#

It tried to mark solution as checked but the application again refused to respond