docs: add web search and web fetch design proposal#117
Conversation
- Design for operator-managed web search via spec.webSearch (Brave, Tavily, DuckDuckGo, Gemini) and web fetch via spec.webFetch - Search API keys use proxy credential injection — secrets never reach gateway - Three provider categories: standalone API, key-free, LLM-as-search - Companion questions doc with all design decisions and rationale Signed-off-by: Alexey Kazakov <alkazako@redhat.com> Co-authored-by: Cursor <cursoragent@cursor.com>
WalkthroughAdds two final design documents specifying operator-managed web search and web fetch support in the Claw CRD (status: Final, 2026-05-12), covering schema, validation, proxy configuration, provider categories (Brave, Tavily, DuckDuckGo, Gemini), reconciliation flow, and example specs. ChangesWeb Search & Web Fetch Design Proposal
Estimated code review effort🎯 2 (Simple) | ⏱️ ~15 minutes Possibly related PRs
Suggested labelsdocumentation, proposal 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
- Add PLATFORM.md skill update (configmap.yaml) to files-to-change - Expand provider-setup.md entry with per-provider and web fetch details - Add explicit documentation steps to implementation sequence Signed-off-by: Alexey Kazakov <alkazako@redhat.com> Co-authored-by: Cursor <cursoragent@cursor.com>
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 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 `@docs/proposals/web-search-design.md`:
- Around line 88-89: Add explicit SSRF guardrails for webFetch and type:none
allowlist expansion: validate spec.credentials entries and any code paths that
set tools.web.fetch.enabled (when spec.webFetch.enabled is true) to reject or
strip domains that resolve to localhost/127.0.0.0/8, loopback/link-local ranges,
RFC1918 private ranges, metadata endpoints (e.g., 169.254.169.254 and cloud
provider metadata hostnames), IP-literal hosts (raw IPs in host portion), and
non-HTTP(S) schemes before updating the proxy allowlist; enforce the same
denylist in the proxy's runtime resolver/fetch layer so even allowed domains
cannot be used to reach these targets, and surface clear validation errors when
a spec.credentials entry with type:none is rejected.
🪄 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: Enterprise
Run ID: 3decb940-6a7f-41e1-9e8f-8a5d34feebc6
📒 Files selected for processing (1)
docs/proposals/web-search-design.md
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: E2E Tests
- GitHub Check: Unit Tests
🧰 Additional context used
📓 Path-based instructions (1)
**
⚙️ CodeRabbit configuration file
-Focus on major issues impacting performance, readability, maintainability and security. Avoid nitpicks and avoid verbosity.
Files:
docs/proposals/web-search-design.md
🪛 LanguageTool
docs/proposals/web-search-design.md
[grammar] ~88-~88: Ensure spelling is correct
Context: ... the proxy (LLM providers, search APIs, builtin passthroughs). Users can open additiona...
(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
[uncategorized] ~252-~252: “Google” is a proper noun and needs to be capitalized.
Context: ...which the operator already sets for the google LLM provider. If the user provides `spe...
(A_GOOGLE)
[uncategorized] ~252-~252: “Google” is a proper noun and needs to be capitalized.
Context: ...es.google.config.webSearch` (OpenClaw's google extension id) for provider-specific tun...
(A_GOOGLE)
🪛 markdownlint-cli2 (0.22.1)
docs/proposals/web-search-design.md
[warning] 92-92: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
Summary by CodeRabbit