web-search-pro by zjianru/web-search-pro
npx skills add https://github.com/zjianru/web-search-pro --skill web-search-pro此技能适用于需要不止一次性网络搜索的智能体。
在调用者需要以下功能时使用它:
此技能不是叙事报告撰写器。它的工作是搜索、检索、构建和清晰地呈现证据,以便上游模型能够在此基础上继续推理。
最短的成功路径是:
首次成功运行不需要 API 密钥。
基线角色:
ddg:尽力而为的网络搜索fetch:无密钥提取 / 爬取 / 站点地图回退node {baseDir}/scripts/doctor.mjs --json
node {baseDir}/scripts/bootstrap.mjs --json
node {baseDir}/scripts/search.mjs "OpenAI Responses API docs" --json
This skill is for agents that need more than one-shot web search.
Use it when the caller needs:
This skill is not a narrative report writer. Its job is to search, retrieve, structure, and expose evidence clearly enough that the upstream model can keep reasoning on top of it.
The shortest successful path is:
No API key is required for the first successful run.
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
这些命令的作用:
doctor.mjs:运行时现在是否可用?bootstrap.mjs:智能体现在可以依赖什么?search.mjs:在添加提供商凭据之前,证明基线检索路径成功如果只添加一个高级提供商,请从 TAVILY_API_KEY 开始。
原因:
export TAVILY_API_KEY=tvly-xxxxx
node {baseDir}/scripts/doctor.mjs --json
node {baseDir}/scripts/search.mjs "latest OpenAI news" --type news --json
node {baseDir}/scripts/search.mjs "OpenClaw web search" --json
node {baseDir}/scripts/search.mjs "OpenAI Responses API docs" --preset docs --plan --json
node {baseDir}/scripts/extract.mjs "https://platform.openai.com/docs" --json
node {baseDir}/scripts/search.mjs "OpenAI Responses API docs" --preset docs --json
node {baseDir}/scripts/search.mjs "latest OpenAI news" --type news --json
node {baseDir}/scripts/research.mjs "OpenClaw search skill landscape" --plan --json
智能体应将以下字段视为主要的运行时契约。
selectedProvider 规划器的主要路由。它并不意味着“唯一使用的提供商”。routingSummary 包含 selectionMode、confidence、topSignals、备选方案、被阻止的提供商和联合摘要的紧凑路由解释。routing.diagnostics 由 --explain-routing 或 --plan 暴露的完整路由诊断信息。federated.providersUsed 当扇出激活时实际返回结果的提供商。federated.value.additionalProvidersUsed 真正做出贡献的非主要提供商数量。federated.value.resultsRecoveredByFanout 在仅主要提供商模式下会消失的最终结果。federated.value.resultsCorroboratedByFanout 得到主要提供商和至少一个扇出提供商支持的最终结果。federated.value.duplicateSavings 通过合并移除的精确或近似重复结果。cached 结果是否来自缓存。cache 缓存年龄 / TTL 遥测数据,用于智能体决策。renderLane 浏览器支持渲染通道的运行时可用性和策略摘要。failed 当前命令失败的提供商或失败的检索单元。meta 命令级别的执行元数据和任务输入塑造。topicType 研究包的主要主题类别。topicSignals 混合主题提示,例如 docs + latest。researchAxes 研究包为何分解为给定的一组子问题。claimClusters 按规范化主张分组的证据。candidateFindings 具有支持概况和差距敏感性的候选结论。uncertainties 剩余的不确定性和对后续跟进敏感的差距。联合不仅仅是“更多提供商”。它使多提供商增益可见,以便智能体能够判断扇出是否改善了最终结果集。
重要的增益指标:
federated.value.additionalProvidersUsedfederated.value.resultsRecoveredByFanoutfederated.value.resultsCorroboratedByFanoutfederated.value.duplicateSavingsroutingSummary.federation.value解释:
node {baseDir}/scripts/search.mjs "query" --json
node {baseDir}/scripts/search.mjs "query" --plan --json
node {baseDir}/scripts/search.mjs "latest OpenAI news" --type news --json
node {baseDir}/scripts/search.mjs "OpenAI Responses API docs" --preset docs --plan --json
node {baseDir}/scripts/search.mjs "query" --engine serpapi --search-engine baidu --json
面向用户的输入:
searchType 当前已发布的值为 web | news。intentPreset 当前已发布的值为 general | code | company | docs | research。重要边界:
searchType 和 intentPreset 塑造路由输入engine 仍然是显式的提供商覆盖node {baseDir}/scripts/extract.mjs "https://example.com/article" --json
node {baseDir}/scripts/extract.mjs "https://example.com/article" --render --render-policy fallback --json
node {baseDir}/scripts/extract.mjs "https://example.com/article" --plan
node {baseDir}/scripts/render.mjs "https://example.com/article" --json
node {baseDir}/scripts/crawl.mjs "https://example.com/docs" --depth 2 --max-pages 10 --json
node {baseDir}/scripts/map.mjs "https://example.com/docs" --depth 2 --max-pages 50 --json
node {baseDir}/scripts/research.mjs "OpenClaw search skill landscape" --json
node {baseDir}/scripts/research.mjs "OpenClaw search skill landscape" --plan --json
node {baseDir}/scripts/capabilities.mjs --json
node {baseDir}/scripts/doctor.mjs --json
node {baseDir}/scripts/bootstrap.mjs --json
node {baseDir}/scripts/review.mjs --json
node {baseDir}/scripts/cache.mjs stats --json
node {baseDir}/scripts/health.mjs --json
node {baseDir}/scripts/eval.mjs list --json
node {baseDir}/scripts/eval.mjs run --suite core --json
node {baseDir}/scripts/eval.mjs run --suite research --json
node {baseDir}/scripts/eval.mjs run --suite head-to-head --json
node {baseDir}/scripts/eval.mjs run --suite head-to-head-live --json
research.mjs 是一个面向模型的证据层,而不是最终的叙事答案层。
该技能负责:
上游模型仍然负责:
详细契约:
默认配置路径:
{baseDir}/config.json覆盖路径:
WEB_SEARCH_PRO_CONFIG=/path/to/config.json配置优先级:
CLI 标志 > process.env > config.json > 内置默认值
当技能在 OpenClaw 之外直接运行时,提供商密钥必须已存在于 shell 环境中。如果 OpenClaw 启动该技能,其注入的运行时环境就足够了。
关键配置领域:
routingcachehealthfetchcrawlrender重要的路由配置字段:
routing.allowNoKeyBaselinerouting.enableFederationrouting.federationTriggersrouting.maxFanoutProvidersrouting.maxPerProviderrouting.mergePolicyrouting.fallbackPolicy重要的渲染配置字段:
render.enabledrender.policyrender.budgetMsrender.waitUntilrender.blockTypesrender.sameOriginOnly基线不需要 API 密钥。可选的提供商凭据或端点可解锁更强的覆盖范围:
可选的提供商凭据或端点可解锁增强功能。
TAVILY_API_KEY=tvly-xxxxx
EXA_API_KEY=exa-xxxxx
QUERIT_API_KEY=xxxxx
SERPER_API_KEY=xxxxx
BRAVE_API_KEY=xxxxx
SERPAPI_API_KEY=xxxxx
YOU_API_KEY=xxxxx
SEARXNG_INSTANCE_URL=https://searx.example.com
# Perplexity / Sonar: 选择一种传输路径
PERPLEXITY_API_KEY=xxxxx
OPENROUTER_API_KEY=xxxxx
OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
KILOCODE_API_KEY=xxxxx
# 或使用自定义的 OpenAI 兼容网关
PERPLEXITY_GATEWAY_API_KEY=xxxxx
PERPLEXITY_BASE_URL=https://gateway.example.com/v1
PERPLEXITY_MODEL=perplexity/sonar-pro
提供商角色:
对智能体和维护者最有用的验证界面是:
capabilities.mjs 此环境现在真正能做什么。doctor.mjs 运行时是否就绪、降级或被阻止?bootstrap.mjs 上游智能体可以安全地假设什么?review.mjs 当前的安全和合规边界是什么?health.mjs 哪些提供商已降级或处于冷却期?eval.mjs 针对核心、研究或比较套件的行为是否已退化?捆绑的 head-to-head 套件侧重于与本地 ../web-search-plus 检出进行路由优先比较。
捆绑的 head-to-head-live 套件在共享提供商凭据下,为新鲜度和引用质量添加了真实的网络比较。
node 为硬性运行时要求ddg 是尽力而为的无密钥基线,不是保证的高召回率提供商degraded 和 cooldown每周安装数
108
仓库
首次出现
2026年2月10日
安全审计
安装于
codex102
openclaw100
kimi-cli100
opencode100
github-copilot99
amp99
Baseline roles:
ddg: best-effort web search
fetch: no-key extract / crawl / map fallback
node {baseDir}/scripts/doctor.mjs --json node {baseDir}/scripts/bootstrap.mjs --json node {baseDir}/scripts/search.mjs "OpenAI Responses API docs" --json
What these commands are for:
doctor.mjs: is the runtime usable right now?bootstrap.mjs: what can the agent rely on right now?search.mjs: prove the baseline retrieval path succeeds before adding provider credentialsIf only one premium provider is added, start with TAVILY_API_KEY.
Reason:
one credential improves general web search
one credential improves news search
one credential improves extract quality
export TAVILY_API_KEY=tvly-xxxxx node {baseDir}/scripts/doctor.mjs --json node {baseDir}/scripts/search.mjs "latest OpenAI news" --type news --json
node {baseDir}/scripts/search.mjs "OpenClaw web search" --json
node {baseDir}/scripts/search.mjs "OpenAI Responses API docs" --preset docs --plan --json
node {baseDir}/scripts/extract.mjs "https://platform.openai.com/docs" --json
node {baseDir}/scripts/search.mjs "OpenAI Responses API docs" --preset docs --json
node {baseDir}/scripts/search.mjs "latest OpenAI news" --type news --json
node {baseDir}/scripts/research.mjs "OpenClaw search skill landscape" --plan --json
The agent should treat these fields as the primary runtime contract.
selectedProvider The planner's primary route. It does not mean "the only provider used".routingSummary Compact route explanation with selectionMode, confidence, topSignals, alternatives, blocked providers, and federation summary.routing.diagnostics Full route diagnostics exposed by --explain-routing or --plan.federated.providersUsed Providers that actually returned results when fanout is active.federated.value.additionalProvidersUsed Number of non-primary providers that really contributed.federated.value.resultsRecoveredByFanout Final results that would disappear in primary-only mode.federated.value.resultsCorroboratedByFanout Final results supported by both the primary and at least one fanout provider.federated.value.duplicateSavings Exact or near-duplicate results removed by merge.cached Whether the result came from cache.cache Cache age / TTL telemetry for agent decisions.renderLane Runtime availability and policy summary for the browser-backed render lane.failed Failed providers or failed retrieval units for the current command.meta Command-level execution metadata and task input shaping.topicType Primary topic class for the research pack.topicSignals Mixed-topic hints such as docs + latest.researchAxes Why the research pack decomposed into a given set of subquestions.claimClusters Evidence grouped by normalized claim.candidateFindings Candidate conclusions with support profile and gap sensitivity.uncertainties Remaining uncertainty and follow-up-sensitive gaps.Federation is not just "more providers". It makes multi-provider gain visible so an agent can tell whether fanout improved the final result set.
Important gain metrics:
federated.value.additionalProvidersUsedfederated.value.resultsRecoveredByFanoutfederated.value.resultsCorroboratedByFanoutfederated.value.duplicateSavingsroutingSummary.federation.valueInterpretation:
node {baseDir}/scripts/search.mjs "query" --json
node {baseDir}/scripts/search.mjs "query" --plan --json
node {baseDir}/scripts/search.mjs "latest OpenAI news" --type news --json
node {baseDir}/scripts/search.mjs "OpenAI Responses API docs" --preset docs --plan --json
node {baseDir}/scripts/search.mjs "query" --engine serpapi --search-engine baidu --json
User-facing inputs:
searchType Current shipped values are web | news.intentPreset Current shipped values are general | code | company | docs | research.Important boundary:
searchType and intentPreset shape routing inputengine remains the explicit provider overridenode {baseDir}/scripts/extract.mjs "https://example.com/article" --json
node {baseDir}/scripts/extract.mjs "https://example.com/article" --render --render-policy fallback --json
node {baseDir}/scripts/extract.mjs "https://example.com/article" --plan
node {baseDir}/scripts/render.mjs "https://example.com/article" --json
node {baseDir}/scripts/crawl.mjs "https://example.com/docs" --depth 2 --max-pages 10 --json
node {baseDir}/scripts/map.mjs "https://example.com/docs" --depth 2 --max-pages 50 --json
node {baseDir}/scripts/research.mjs "OpenClaw search skill landscape" --json
node {baseDir}/scripts/research.mjs "OpenClaw search skill landscape" --plan --json
node {baseDir}/scripts/capabilities.mjs --json
node {baseDir}/scripts/doctor.mjs --json
node {baseDir}/scripts/bootstrap.mjs --json
node {baseDir}/scripts/review.mjs --json
node {baseDir}/scripts/cache.mjs stats --json
node {baseDir}/scripts/health.mjs --json
node {baseDir}/scripts/eval.mjs list --json
node {baseDir}/scripts/eval.mjs run --suite core --json
node {baseDir}/scripts/eval.mjs run --suite research --json
node {baseDir}/scripts/eval.mjs run --suite head-to-head --json
node {baseDir}/scripts/eval.mjs run --suite head-to-head-live --json
research.mjs is a model-facing evidence layer, not a final narrative answer layer.
The skill is responsible for:
The upstream model remains responsible for:
Detailed contract:
Default config path:
{baseDir}/config.jsonOverride path:
WEB_SEARCH_PRO_CONFIG=/path/to/config.jsonConfig precedence:
CLI flags > process.env > config.json > built-in defaults
When the skill is run directly outside OpenClaw, provider keys must already exist in the shell environment. If OpenClaw launches the skill, its injected runtime environment is sufficient.
Key config areas:
routingcachehealthfetchcrawlrenderImportant routing config fields:
routing.allowNoKeyBaselinerouting.enableFederationrouting.federationTriggersrouting.maxFanoutProvidersrouting.maxPerProviderrouting.mergePolicyrouting.fallbackPolicyImportant render config fields:
render.enabledrender.policyrender.budgetMsrender.waitUntilrender.blockTypesrender.sameOriginOnlyNo API key is required for the baseline. Optional provider credentials or endpoints unlock stronger coverage:
Optional provider credentials or endpoints unlock enhanced features.
TAVILY_API_KEY=tvly-xxxxx
EXA_API_KEY=exa-xxxxx
QUERIT_API_KEY=xxxxx
SERPER_API_KEY=xxxxx
BRAVE_API_KEY=xxxxx
SERPAPI_API_KEY=xxxxx
YOU_API_KEY=xxxxx
SEARXNG_INSTANCE_URL=https://searx.example.com
# Perplexity / Sonar: choose one transport path
PERPLEXITY_API_KEY=xxxxx
OPENROUTER_API_KEY=xxxxx
OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
KILOCODE_API_KEY=xxxxx
# Or use a custom OpenAI-compatible gateway
PERPLEXITY_GATEWAY_API_KEY=xxxxx
PERPLEXITY_BASE_URL=https://gateway.example.com/v1
PERPLEXITY_MODEL=perplexity/sonar-pro
Provider roles:
The most useful validation surfaces for agents and maintainers are:
capabilities.mjs What this environment can truly do right now.doctor.mjs Is the runtime ready, degraded, or blocked?bootstrap.mjs What can an upstream agent safely assume?review.mjs What are the current safety and compliance boundaries?health.mjs Which providers are degraded or cooling down?eval.mjs Has behavior regressed against core, research, or comparative suites?The bundled head-to-head suite focuses on route-first comparisons against a local ../web-search-plus checkout.
The bundled head-to-head-live suite adds real networked comparisons for freshness and citation quality under shared provider credentials.
node as the hard runtime requirementddg is a best-effort no-key baseline, not a guaranteed high-recall providerdegraded from cooldownWeekly Installs
108
Repository
First Seen
Feb 10, 2026
Security Audits
Installed on
codex102
openclaw100
kimi-cli100
opencode100
github-copilot99
amp99
AI Elements:基于shadcn/ui的AI原生应用组件库,快速构建对话界面
67,500 周安装
Axiom 成本控制技能:优化云日志成本,识别浪费并设置监控仪表板
202 周安装
Skill Judge:AI Agent Skill评估工具,官方规范与17+示例提炼,优化知识增量与思维模式
205 周安装
Modal 无服务器平台:Python 云函数、GPU 加速计算和 AI/ML 部署指南
205 周安装
GRPO/RL训练实战指南:使用TRL库进行组相对策略优化,高效微调语言模型
204 周安装
Conductor TDD工作流模式指南:红绿重构循环、Git提交与质量验证
89 周安装
创业点子验证框架:9维度评分卡与RAT测试,系统性验证创业想法可行性
202 周安装