tinyhumansai/openhuman · error · anyhow::Error
Web search unavailable: no backend session token. Sign in fi
Error message
Web search unavailable: no backend session token. Sign in first so the server can proxy search.
What it means
Session-prerequisite guard in WebSearchTool::execute_with_options: neither a direct Seltz searcher is configured nor a backend session token is available, so the server-proxied search path cannot authenticate to the TinyHumans backend. The tool refuses to run rather than issuing an unauthenticated request; the faulting condition is being signed out with no direct provider fallback.
Source
Thrown at src/openhuman/search/tools/web_search.rs:202
if let Some(direct_search) = &self.direct_search {
tracing::debug!(
query_len = query.chars().count(),
max_results = self.max_results,
timeout_secs = self.timeout_secs,
"[web_search] direct Seltz search"
);
let mut normalized_args = args;
if let Some(obj) = normalized_args.as_object_mut() {
obj.insert("query".to_string(), Value::String(query.clone()));
}
return direct_search
.execute_with_options(normalized_args, options)
.await;
}
let client = self.client.as_ref().ok_or_else(|| {
anyhow::anyhow!(
"Web search unavailable: no backend session token. Sign in first so the server can proxy search."
)
})?;
let query_fingerprint = hex::encode(Sha256::digest(query.as_bytes()));
tracing::debug!(
query_len = query.chars().count(),
query_fingerprint = %query_fingerprint[..16],
max_results = self.max_results,
timeout_secs = self.timeout_secs,
"[web_search] backend parallel search"
);
// Body matches `parallelSearchSchema` in backend-2. The legacy
// `numResults` / `maxCharactersPerExcerpt` aliases still work, but
// current fields are `maxResults` / `maxCharsPerResult`. Also dropping
// `timeoutSecs` — the validator does not declare it and Parallel's
// per-mode deadlines drive timing on the upstream side.View on GitHub (pinned to 7491200858)
Solutions
- Sign in to the app so a backend session token is available for the proxied search.
- Alternatively configure SELTZ_API_KEY / OPENHUMAN_SELTZ_API_KEY so the direct Seltz path is used.
- Re-authenticate if the session token expired.
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at src/openhuman/search/tools/web_search.rs:202 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17).
Data as JSON: /api/errors/e87219f7155d279f.
Report an issue: GitHub.