Skip to content

docs(search): document Exa as the managed search provider and BYOK option (#5138) - #5215

Merged
M3gA-Mind merged 5 commits into
tinyhumansai:mainfrom
M3gA-Mind:docs/GH-5138-exa-search-docs
Jul 27, 2026
Merged

docs(search): document Exa as the managed search provider and BYOK option (#5138)#5215
M3gA-Mind merged 5 commits into
tinyhumansai:mainfrom
M3gA-Mind:docs/GH-5138-exa-search-docs

Conversation

@M3gA-Mind

@M3gA-Mind M3gA-Mind commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Name Exa as the provider behind OpenHuman Managed search in the user-facing GitBook docs and the top-level README.md. The Web Search page still claimed managed search was "a server-side proxy (Parallel)", which has been wrong since feat(search): attribute managed web search to the resolved provider #5206.
  • Document the Exa BYOK engine end to end: key from exa.ai, calls going straight to https://api.exa.ai (never through the managed backend), the exa_search / exa_find_similar / exa_get_contents tools, and config.toml / env selection.
  • Add a Search engines table to gitbooks/features/native-tools/web-search.md covering all six engines (Managed, Exa, Parallel, Brave, Querit, Disabled) with "your own API key" and "where your queries go" columns.
  • Correct the "Web search proxy" data-flow row in gitbooks/features/privacy-and-security.md, which is the page a privacy-conscious user reads to learn where a search query egresses.
  • OpenHuman Managed remains the documented default. Docs only, no product code touched.

Problem

Two Exa PRs have merged and neither carried the user-facing docs:

The GitBook docs and README.md had zero mentions of Exa, and the Web Search page actively told users managed search was Parallel-backed. .env.example and the internal src/openhuman/search/README.md were updated in #5207, so the internal docs were correct while the published, user-facing ones were stale and contradictory.

Solution

Documented the behavior that actually shipped, verified against upstream/main rather than the PR descriptions:

  • Managed = Exa: resolve_managed_provider() prefers the backend-reported provider and falls back to MANAGED_DEFAULT_PROVIDER = "Exa", and default_search_engine() is still managed. So the docs say "currently powered by Exa" rather than hardcoding it as permanent, matching the code comment's intent that a future routing change flows through with no code edit.
  • BYOK Exa is direct: search/engines/exa.rs registers web_search_tool plus exa_search / exa_find_similar / exa_get_contents, all dialing https://api.exa.ai with the user's key. Tool descriptions in the doc are taken from each tool's description() so they cannot drift into marketing copy.
  • Fallback documented: selecting a BYOK engine with no key saved falls back to managed, so the agent always has working search.
  • The ## See also / SearXNG / HTTP-comparison sections are unchanged; the new material is additive.

docs/SUMMARY.md does not exist in this repo. The GitBook table of contents is gitbooks/SUMMARY.md, and features/native-tools/web-search.md is already registered there under Available Tools, so no new page and no SUMMARY entry were required.

Submission Checklist

If a section does not apply to this change, mark the item as N/A with a one-line reason. Do not delete items.

  • Tests added or updated (happy path + at least one failure / edge case) per Testing StrategyN/A: prose-only documentation change, no executable behavior. The behavior described here is already covered by the tests shipped in #5206 and #5207.
  • Diff coverage ≥ 80% — changed lines (Vitest + cargo-llvm-cov merged via diff-cover) meet the gate enforced by .github/workflows/ci-lite.yml. Run pnpm test:coverage and pnpm test:rust locally; PRs below 80% on changed lines will not merge. — N/A: only .md files changed, no instrumentable lines in the diff.
  • Coverage matrix updated — added/removed/renamed feature rows in docs/TEST-COVERAGE-MATRIX.md reflect this change (or N/A: behaviour-only change) — N/A: no feature added, removed, or renamed; #5207 already added the Exa rows.
  • All affected feature IDs from the matrix are listed in the PR description under ## RelatedN/A: no matrix feature IDs affected by a docs-only change.
  • No new external network dependencies introduced (mock backend used per Testing Strategy) — no code paths changed; exa.ai appears only as documentation hyperlinks and in illustrative config snippets.
  • Manual smoke checklist updated if this touches release-cut surfaces (docs/RELEASE-MANUAL-SMOKE.md) — N/A: documentation only, no release-cut surface touched.
  • Linked issue closed via Closes #NNN in the ## Related section

Impact

  • Runtime/platform impact: none. No Rust, TypeScript, or config file is touched; only four Markdown files change. Nothing ships in the binary or the bundle.
  • Docs sites: the published GitBook Web Search, Available Tools, and Privacy & Security pages, plus the repo landing README, stop telling users managed search is Parallel-backed.
  • Security/privacy: net positive on accuracy. The Privacy & Security data-flow table now correctly states which third party receives a managed search query and that a BYOK key changes the egress path.
  • i18n: not applicable. These are prose documentation files, not useT() UI strings, so no locale files are involved. No em dashes (U+2014) were introduced; the sole occurrence in the touched files is a pre-existing image filename that was not edited.
  • Compatibility/migration: none.

Related


AI Authored PR Metadata (required for Codex/Linear PRs)

Keep this section for AI-authored PRs. For human-only PRs, mark each field N/A.

Linear Issue

Commit & Branch

  • Branch: docs/GH-5138-exa-search-docs
  • Commit SHA: 9effc3b

Validation Run

  • pnpm --filter openhuman-app format:checkN/A: Prettier's scope is the app/ workspace only; the repo root README.md and gitbooks/ are outside it, so this command does not read any changed file.
  • pnpm typecheckN/A: no TypeScript changed.
  • Focused tests: N/A: no executable code changed. Ran instead, targeted at the changed files: a relative-Markdown-link existence check across all four (all resolve), a U+2014 em-dash scan (no new occurrences), and an HTTP check on the new https://exa.ai link (200).
  • Rust fmt/check (if changed): N/A: no Rust changed.
  • Tauri fmt/check (if changed): N/A: no Tauri shell code changed.

Validation Blocked

  • command: none
  • error: none
  • impact: none

Behavior Changes

Parity Contract

  • Legacy behavior preserved: yes, in full. Not a single runtime line changed; OpenHuman Managed stays the default engine in both the code and the docs.
  • Guard/fallback/dispatch parity checks: the documented BYOK-without-key fallback to managed matches SearchConfig::effective_engine(), and the documented tool set matches the registrations in src/openhuman/search/engines/exa.rs.

Duplicate / Superseded PR Handling

  • Duplicate PR(s): none
  • Canonical PR: this one
  • Resolution: N/A

Summary by CodeRabbit

  • Documentation
    • Clarified that the default web search runs via the OpenHuman Managed proxy and is powered by Exa.
    • Expanded web search documentation with explicit search-engine selection, including a “Disabled” mode that removes agent-facing search while preserving access to self-hosted SearXNG via RPC/MCP.
    • Added privacy-focused guidance on when queries are routed through the proxy versus sent directly when using your own provider API key.
    • Updated configuration instructions and examples for Exa (bring-your-own key), plus additional supported providers and self-hosted SearXNG setup.

…tion (tinyhumansai#5138)

The Web Search page still described managed search as a Parallel-backed
proxy. Managed search now resolves to Exa (MANAGED_DEFAULT_PROVIDER in
search/tools/web_search.rs, tinyhumansai#5206) and Exa also ships as a bring-your-own-key
engine that routes straight to api.exa.ai (tinyhumansai#5207), so the user-facing docs
were stale in both directions.

- gitbooks/features/native-tools/web-search.md: name Exa as the managed
  provider, add a Search engines table covering all six engines, and document
  the Exa BYOK path (key from exa.ai, direct api.exa.ai calls, the
  exa_search / exa_find_similar / exa_get_contents tools, config.toml and env
  selection). Note the no-key fallback to managed and the timeline
  attribution.
- gitbooks/features/native-tools/README.md: refresh the toolbelt row.
- gitbooks/features/privacy-and-security.md: name Exa in the web-search
  proxy data-flow row and note that a BYOK key egresses directly.
- README.md: mention Exa-powered search and the BYOK option.

OpenHuman Managed remains the default engine. Docs only.
@M3gA-Mind
M3gA-Mind requested a review from a team July 27, 2026 13:59
@M3gA-Mind

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 19 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 60de7563-35ac-4db4-a0da-dec79d714103

📥 Commits

Reviewing files that changed from the base of the PR and between efbb540 and cc35337.

📒 Files selected for processing (2)
  • gitbooks/features/native-tools/README.md
  • gitbooks/features/native-tools/web-search.md
📝 Walkthrough

Walkthrough

Documentation now describes Exa-powered managed web search, provider selection, bring-your-own-key configuration, fallback behavior, additional Exa tools, and request-routing implications.

Changes

Web Search Documentation

Layer / File(s) Summary
Public search positioning
README.md, gitbooks/features/native-tools/README.md
README and the native-tools table identify managed Exa search, subscription behavior, supported provider keys, and self-hosted SearXNG.
Search engine configuration
gitbooks/features/native-tools/web-search.md
The web-search page documents active engine selection, disabled search, managed fallback, Exa BYOK routing, key storage, additional tools, and configuration examples.
Search privacy and routing
gitbooks/features/privacy-and-security.md
Privacy documentation distinguishes backend-proxied managed search, direct BYOK requests, and SearXNG routing.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested labels: feature

Poem

A rabbit found Exa in the searcher’s bright burrow,
With keys tucked safely and queries to follow.
Managed paths whisper through backend halls,
BYOK hops direct when the user calls.
SearXNG waits by its self-hosted door—
“Search well!” cheers the rabbit, and bounds off once more.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The docs updates match issue #5138 by documenting Exa as the managed provider and BYOK search option across README and GitBook pages.
Out of Scope Changes check ✅ Passed The changes stay within the documented search-provider and privacy updates and do not introduce unrelated scope.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the docs-only change: it describes Exa as the managed search provider and the BYOK option.

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot added the feature Net-new user-facing capability or product behavior. label Jul 27, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9effc3b325

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread gitbooks/features/native-tools/web-search.md Outdated
Comment thread gitbooks/features/native-tools/web-search.md Outdated
@greptile-apps

greptile-apps Bot commented Jul 27, 2026

Copy link
Copy Markdown

Greptile Summary

This is a documentation-only PR that brings the user-facing GitBook pages and README.md in sync with two already-merged feature PRs (#5206, #5207): managed search is now attributed to Exa, and the Exa BYOK engine is documented end-to-end.

  • Web search page gains a six-engine comparison table, dedicated subsections for Managed and Exa BYOK (including config.toml + env-var snippets), an exa_find_similar deprecation caveat, and a corrected SearXNG registration scope (RPC/MCP only, not a registered agent tool).
  • Privacy & Security data-flow table is corrected: managed search names Exa, BYOK routes are distinguished from the Parallel backend proxy, and the existing SearXNG note is retained.
  • README.md and the native-tools overview table updated to surface Exa as the managed-search provider.

Confidence Score: 5/5

Safe to merge — no executable code was changed, only four Markdown documentation files.

All four files are prose documentation. The new content accurately reflects already-shipped behavior from #5206 and #5207: managed search attributing Exa, three Exa BYOK tools documented against the registered tool descriptions, the exa_find_similar deprecation caveat already present, and the privacy data-flow table corrected. No runtime, build, or config surface is touched.

Files Needing Attention: No files require special attention.

Important Files Changed

Filename Overview
README.md Landing-page bullet updated to name Exa as the managed search provider and mention the BYOK option; only mentions Exa BYOK (not Brave/Querit), which is acceptable brevity for a README.
gitbooks/features/native-tools/README.md Web Search row in the tools overview table updated to enumerate all six engine options; no issues.
gitbooks/features/native-tools/web-search.md Comprehensive engine documentation added: six-engine comparison table, Managed and Exa BYOK subsections, config.toml and env-var examples, exa_find_similar deprecation caveat, and corrected SearXNG registration scope.
gitbooks/features/privacy-and-security.md Web search proxy data-flow row updated to name Exa, distinguish BYOK-direct vs. backend-proxied Parallel, and retain the SearXNG note; accurate and clear.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Agent calls web_search_tool] --> B{Selected engine?}
    B -->|OpenHuman Managed default| C[OpenHuman Backend]
    B -->|Exa BYOK key saved| D[api.exa.ai direct]
    B -->|Brave BYOK key saved| E[Brave Search API direct]
    B -->|Querit BYOK key saved| F[Querit API direct]
    B -->|Parallel selected| G[OpenHuman Backend]
    B -->|BYOK key missing| C
    B -->|Disabled| H[No search tools registered]
    C --> I[Exa — currently]
    G --> J[Parallel]
    K[SearXNG RPC/MCP client] --> L[SearXNG instance — self-hosted]
Loading

Reviews (5): Last reviewed commit: "docs(search): distinguish Parallel tool ..." | Re-trigger Greptile

Comment thread gitbooks/features/native-tools/web-search.md Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@gitbooks/features/native-tools/web-search.md`:
- Around line 20-31: Clarify the Disabled engine description to account for the
independently registered SearXNG tool described later: either specify that
Disabled also removes SearXNG search, or narrow the row’s wording to only the
canonical web_search_tool.
- Around line 39-63: Clarify the Exa credential documentation around the
environment-variable and config.toml examples: state that
OPENHUMAN_EXA_API_KEY/EXA_API_KEY and search.exa.api_key are supported, with
environment variables taking precedence. Correct the storage description to
explain that secret encryption stores the key encrypted in config while the OS
keyring protects the encryption master key, not the Exa key itself; warn against
committing plaintext config entries and advise treating environment secrets as
sensitive.

In `@README.md`:
- Line 84: Update the “Batteries included” README text to clearly distinguish
managed web search, which is included with the OpenHuman subscription, from the
bring-your-own Exa key path, which uses the user’s own Exa account and billing.
Keep the surrounding feature descriptions and links unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 6101eaac-c63e-4796-9fea-57be8e8e332c

📥 Commits

Reviewing files that changed from the base of the PR and between 9a484aa and 9effc3b.

📒 Files selected for processing (4)
  • README.md
  • gitbooks/features/native-tools/README.md
  • gitbooks/features/native-tools/web-search.md
  • gitbooks/features/privacy-and-security.md

Comment thread gitbooks/features/native-tools/web-search.md Outdated
Comment thread gitbooks/features/native-tools/web-search.md Outdated
Comment thread README.md Outdated
@senamakel

Copy link
Copy Markdown
Member

@coderabbitai review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 714df6e82a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread gitbooks/features/native-tools/web-search.md Outdated
Comment thread gitbooks/features/native-tools/web-search.md Outdated
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 27, 2026
@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 27, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: efbb540b95

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread gitbooks/features/native-tools/web-search.md Outdated
Comment thread gitbooks/features/native-tools/web-search.md Outdated
Comment thread gitbooks/features/native-tools/web-search.md Outdated

@senamakel senamakel left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blocking documentation accuracy issues remain on efbb540:

  1. The Parallel row still presents the required value under “Your own API key,” but search.parallel.api_key only gates effective_engine(); the request uses a session-authenticated backend IntegrationClient, not that key. Document it as a local enablement gate rather than BYOK authentication/billing.
  2. “The agent always has working search” overstates the missing-key fallback: it resolves to Managed, which is unavailable for local/offline sessions. Qualify the fallback as requiring a backend-authenticated session and direct local providers as requiring a configured key.
  3. The SearXNG section says OpenHuman registers searxng_search for agents, but build_search_tools() never constructs it; production exposure is through the RPC/MCP controller only. Remove the agent-registration claim (or implement it in the owning feature PR).

After those statements match the shipped behavior and the resulting checks are green, this docs-only PR should be safe to approve.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 27, 2026
@senamakel
senamakel dismissed their stale review July 27, 2026 14:45

All three blocking documentation inaccuracies were corrected in f63d11f and their review threads are resolved.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f63d11f8a9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread gitbooks/features/native-tools/web-search.md Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cc353378f9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

| Family | What it covers |
| ------ | -------------- |
| [Web Search](web-search.md) | Search the live web via the managed proxy, or opt into self-hosted SearXNG. |
| [Web Search](web-search.md) | Search the live web via the managed proxy (powered by Exa), backend-proxied Parallel, your own Exa/Brave/Querit key, or self-hosted SearXNG. |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Label SearXNG as RPC/MCP-only in the agent toolbelt

For desktop users reading this agent-facing Native Tools index, listing self-hosted SearXNG as a Web Search route implies that the agent can use it, but build_search_tools() never registers SearxngSearchTool; the detailed page correctly limits it to RPC/MCP. Fresh evidence beyond the prior SearXNG comments is this newly changed index row, which still advertises SearXNG inside the agent's toolbelt; remove it from this row or explicitly label it RPC/MCP-only.

AGENTS.md reference: AGENTS.md:L27-L30

Useful? React with 👍 / 👎.

@M3gA-Mind
M3gA-Mind merged commit 44783ce into tinyhumansai:main Jul 27, 2026
21 checks passed
@M3gA-Mind

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature Net-new user-facing capability or product behavior.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Document Exa search integration: update GitBook docs and README to reflect Exa as the managed search provider and BYOK option

2 participants