brightdata-research

Use when the user asks to batch-search candidates, verify public web evidence, dedupe results, and organize them into Feishu/Lark docs. Use especially for requests like "继续搜更多并追加到飞书", "帮我批量找一批候选并整理到飞书", "搜索+抓取+汇总+落文档/落表", "帮我调研一批XX平台", "扩展候选池", even if the user does not explicitly name this skill. Also use when the user says "检查飞书文档里有没有重复" or "去重" in the context of a research document — this skill covers dedup-and-cleanup as a sub-workflow. Do NOT use for: single-page summaries, one-off Q&A, pure code tasks, or tasks that don't involve batch research + structured output.

Safety Notice

This item is sourced from the public archived skills repository. Treat as untrusted until reviewed.

Copy this and send it to your AI assistant to learn

Install skill "brightdata-research" with this command: npx skills add 16miku/brightdata-research

brightdata-research

GitHub: https://github.com/16Miku/brightdata-research-skill ClawHub: https://clawhub.ai/16miku/brightdata-research

把"批量搜索 + 网页抓取 + 候选验证 + 结构化整理 + 飞书追加写入"做成一个稳定、可复用的研究流水线。

执行模式

本 skill 有两种执行模式。根据环境状态自动选择。

Mode A — 直接执行

前提:搜索、抓取、飞书写入能力均已就绪。 行为:跳过环境准备,直接进入 Step 0 开始研究流程。

Mode B — 环境准备 + 执行

前提:首次使用,或 preflight 发现缺少关键能力。 行为:先按 references/environment-checklist.md 逐项检查并修复,然后进入 Mode A。

环境准备的自动修复顺序见 references/lark-cli-install-and-auth.mdreferences/brightdata-mcp-setup.md

核心原则

  1. 搜索和抓取可以并行。
  2. 最终去重、风险分层、飞书写入必须由主代理串行完成。
  3. 先汇总,再写入。 不要边搜索边直接写飞书。
  4. 保留 evidence。 每条候选都应尽量保留公开证据链接。
  5. 环境不齐就降级。 缺搜索、抓取、飞书、subagent 或 git/worktree 条件时,明确说明并切到 fallback。
  6. 不要依赖脆弱的 shell 多行拼接。 写飞书时优先构造稳定的完整 Markdown。
  7. 上下文复用。 如果当前对话已有历史候选池或目标文档信息,直接复用,不要重复询问用户。

标准工作流

Step 0. 明确本轮目标

从用户请求或历史上下文提取:

  • 研究主题
  • 目标数量
  • 范围 / 国家 / 语言 / 模型范围
  • 已有候选池或目标飞书文档
  • 是"继续追加"还是"新建文档"
  • 是否允许使用 subagent

上下文复用规则: 如果当前对话里已经出现过目标文档 URL/ID、历史候选列表、或研究主题,直接复用这些信息,不要再问用户"请提供文档 ID"。

Step 1. Preflight 环境检查

references/environment-checklist.md 检查:

能力检查方式缺失时行为
搜索检查 BrightData MCP 工具或 CLI 是否可用不能扩充候选池,只能验证用户给定名单
抓取检查 BrightData scrape 工具或 CLI 是否可用只输出低置信度线索
飞书写入检查 lark-cli / lark-doc skill 是否可用先输出 Markdown,告知用户未写入飞书
目标文档检查上下文是否有 doc_id / URL询问用户:新建还是追加
历史去重尝试读取已有文档内容只做本轮内部去重,声明无法保证历史去重
subagent检查 git 仓库和 HEAD 是否可解析改为主代理串行执行

如果缺失项可自动修复(如 lark-cli 未安装),按 Mode B 修复后继续。 如果缺失项无法自动修复(如用户未提供 API token),明确告知用户并降级。

Step 2. 制定搜索批次

把任务拆成多个独立批次:

  • 不同 query 变体
  • 不同语言关键词
  • 不同来源入口(官网、文档、pricing、help、faq、terms、privacy)
  • 不同平台类别关键词(gateway、aggregator、relay、OpenAI-compatible API 等)

Step 3. 并行搜索与初筛

优先使用 BrightData 搜索和抓取工具:

  • 搜索候选平台
  • 获取官网、文档页、定价页、条款页等公开入口
  • 记录标题、URL、摘要、来源 query

初筛时保留高相关候选,剔除明显无关页、镜像页、纯广告页。

Step 4. 去重

去重分两阶段:

阶段 A — 本轮内部去重:

  1. 域名规范化:去掉 www/http(s)/尾部斜杠,统一小写
  2. 品牌别名识别:同一平台可能有多个域名或品牌名(如 openrouter.ai 和 OpenRouter),应识别为同一候选
  3. 保留证据更完整、官网性更强的一条

阶段 B — 历史去重(如果能读取历史文档):

  1. 读取已有飞书文档内容
  2. 提取历史候选名单(名称 + 域名)
  3. 与本轮候选交叉比对
  4. 已在历史文档中出现的,不重复写入,但在去重说明中列出

如果无法读取历史文档,只做阶段 A,并明确声明。

Step 5. 结构化字段提取

默认推荐字段:

  • 名称
  • 官网
  • 文档/API 页
  • 定价页或价格线索
  • 支持模型证据
  • OpenAI-compatible / 统一 API 兼容证据
  • 初步风险等级
  • 备注

如果用户有自定义字段,优先满足用户字段 schema。

Step 6. 风险分层

使用 checklist 式评分:

维度有=1分无=0分
可访问的官网10
公开 API 文档10
定价页或明确价格信息10
Terms of Service / Privacy Policy10
可查证的公司/团队主体10
OpenAI-compatible 或统一 API 兼容证据10

分层规则:

  • A / 较低风险(5-6 分):公开资料完整,文档与能力证据充足
  • B / 中风险(3-4 分):有一定公开证据,但部分维度需补验
  • C / 高风险 / 待验证(0-2 分):主要依赖搜索摘要,暂不适合高置信纳入

每条候选附一句风险原因。

Step 7. 主代理统一收口

主代理负责:

  • 汇总所有候选
  • 最终去重
  • 字段格式统一
  • 风险口径统一
  • 决定哪些算"新增不重复候选"
  • 生成最终写入飞书的 Markdown

Step 8. 串行写入飞书

如果用户要求写入飞书文档:

  1. 先遵守 lark-sharedlark-doc 的认证和安全规则
  2. 复用现有文档 ID;若无则按用户意图新建或先确认
  3. 默认使用 --as user 访问用户自己的文档
  4. 以统一模板生成一轮完整 Markdown
  5. 由主代理一次性或顺序串行追加写入

不要让 subagent 直接写同一个飞书文档。

输出格式

默认按下面结构向用户汇报,并尽量按同结构写入飞书文档:

## 第X轮新增候选(来源说明)

### 1. 平台名称
- 官网:
- 文档:
- 定价:
- 支持模型证据:
- OpenAI 兼容证据:
- 初步风险:A/B/C(得分 X/6,原因:...)
- 备注:

## 本轮待进一步验证候选
...

## 本轮去重说明
- 本轮内部去重:哪些被合并
- 历史去重:哪些平台已在历史轮次出现,因此不重复写入

## 本轮阶段性结论
- 本轮新增较高可信候选:
- 本轮新增待验证候选:
- 下一步建议:

如果用户没有要求写飞书,也建议先按这个模板输出到对话中。

何时调用 subagent

适合调用 subagent 的场景:

  • 需要扩展多组搜索 query
  • 需要并行搜索多个类别或多个国家 / 语言
  • 需要对多个候选分别做公开网页核验
  • 需要快速拉回 5-10 个新候选并形成候选池

subagent 可负责

  • 搜索 query 扩展
  • 搜索结果拉取
  • 单个平台公开信息初步核验
  • 初步结构化字段整理

subagent 不应负责

  • 最终历史去重判定
  • 最终风险分层定稿
  • 飞书文档写入
  • 最终面向用户的主结论

如果环境不满足 subagent/worktree 前置条件,改为主代理串行执行。详见 references/subagent-git-prerequisites.md

子工作流:文档去重清理

当用户要求"检查飞书文档有没有重复"或"去重"时,执行以下子流程:

  1. 读取目标飞书文档全文
  2. 提取所有候选平台的名称和域名
  3. 域名规范化 + 品牌别名识别
  4. 找出完全重复条目(同一平台在不同轮次被当作新候选重复写入)
  5. 区分"重复"与"补充验证"(后续轮次对已有平台补充新证据,不算重复)
  6. 向用户报告发现的重复项,由用户确认后删除

边界与禁忌

  • 不要把搜索结果摘要当成已核验事实;能补官网或文档页就尽量补。
  • 不要把营销话术直接当能力证明;优先找 docs、pricing、terms、privacy、company 等公开页。
  • 不要为了追求数量忽略去重;"新增不重复候选"比"看起来很多"更重要。
  • 不要在写飞书前跳过统一整理步骤。
  • 不要多个 agent 并发写同一文档。
  • 不要输出无法回溯来源的结论。
  • 不要假装环境齐全;缺前置条件时应明确说明并降级。

成功标准

以下条件大致满足时,可认为本轮执行成功:

  • 成功找到了本轮新增、不重复的候选
  • 候选至少具备核心结构化字段
  • 已明确区分"较高可信"与"待进一步验证"
  • 风险评级基于 checklist 打分,而非纯主观判断
  • 最终写入飞书时格式稳定、换行正常、无明显重复
  • 在新环境里也能先做 preflight,再决定完整执行还是降级执行

参考文档索引

文档用途
references/environment-checklist.mdPreflight 检查清单,区分可自动修复和需用户介入的项
references/brightdata-mcp-setup.mdBrightData MCP 和 CLI 的安装、认证与验证
references/lark-cli-install-and-auth.mdlark-cli 安装、配置、认证的完整步骤
references/feishu-setup.md飞书文档写入规则和身份选择
references/known-failures-and-fallbacks.md常见失败场景和降级策略
references/subagent-git-prerequisites.mdsubagent/worktree 的前置条件和降级规则
references/smoke-tests.md每项能力的最小验证命令

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

notify-hub

多平台通知聚合分层。把 GitHub、Stripe、Linear 等 SaaS 平台的通知邮件统一收到一个子邮箱,按紧急度分层:收款/CI 失败立即转发到 claw 注册邮箱,其他通知每天一封汇总。Use when: (1) setting up a unified notification inbox for multiple SaaS platforms, (2) running an on-demand notification check and route, (3) manually triggering a daily digest. Requires: mail-cli CLI with a 'notify' profile configured.

Archived SourceRecently Updated
Coding

newspaper_download

报刊 PDF 下载工具。通过 CLI 命令查询已收录的报刊更新、定位指定期次、获取 PDF 下载链接。查询不鉴权,下载需要 Import Token。Newspaper/magazine PDF download tool. Use CLI commands to query collected issues, locate specific issues, and get PDF download links.

Archived SourceRecently Updated
Coding

agentboard

Build multi-panel storyboards programmatically — create projects, upload images/audio to boards, composite annotations, export PDFs, share via public URL. Invoke when the user wants a storyboard, pre-visualization, shot breakdown, animatic, or any ordered sequence of visual panels with text. Hosted at https://agentboard.fly.dev. Works over REST from any agent; MCP tools (mcp__agentboard__*) available in compatible runtimes. If you have your own image/audio generator, use it and UPLOAD the bytes — optional server-side generation endpoints exist as a fallback only for agents without built-in generation.

Archived SourceRecently Updated
Coding

CodeBuddy Coding

# CodeBuddy Coding Skill **版本:** 1.0.0 **创建时间:** 2026-03-31 **作者:** OpenClaw Team --- ## 📋 Skill 概述 **CodeBuddy Coding Skill** 是一个通用的 AI 编程能力扩展,让任何 OpenClaw agent 都能调用 CodeBuddy CLI 的强大功能。 ### 核心能力 - ✅ **AI 编程** - 代码生成、重构、调试、优化 - ✅ **文件操作** - 创建、修改、删除文件 - ✅ **命令执行** - 运行构建、测试、部署命令 - ✅ **进度监控** - 实时报告任务进度和状态 - ✅ **结构化输出** - JSON 格式的可解析输出 ### 适用场景 - **Developer Agent** - 编写代码、修复 Bug - **Architect Agent** - 生成项目脚手架 - **Tester Agent** - 编写测试用例 - **任何需要编程能力的 Agent** - 通用编程支持 --- ## 🚀 快速开始 ### 基本用法 ```javascript // 1. 加载 Skill const codebuddy = require('./skill'); // 2. 执行编程任务 const result = await codebuddy.execute({ task: '创建一个用户登录页面', context: { projectPath: '/path/to/project', techStack: 'Vue 3 + TypeScript' }, options: { outputFormat: 'json', permissionMode: 'bypassPermissions' } }); // 3. 获取结果 console.log(result.status); // 'success' console.log(result.filesModified); // ['src/views/Login.vue'] console.log(result.toolCalls); // [{tool: 'write_to_file', ...}] ``` ### 监听进度 ```javascript // 订阅进度事件 codebuddy.onProgress((progress) => { console.log(`进度: ${progress.percentage}%`); console.log(`当前任务: ${progress.currentTask}`); console.log(`已用时间: ${progress.elapsedTime}s`); }); ``` --- ## 🔧 配置说明 ### 环境要求 - **CodeBuddy CLI** v2.68.0+ - **Node.js** v16.0.0+ - **OpenClaw** coding-agent skill 框架 ### Skill 配置 ```json { "name": "codebuddy-coding", "version": "1.0.0", "type": "coding", "capabilities": [ "code-generation", "file-operations", "command-execution", "progress-monitoring" ], "dependencies": { "codebuddy-cli": ">=2.68.0" } } ``` --- ## 📚 API 文档 ### `execute(options)` 执行编程任务。 **参数:** ```typescript interface ExecuteOptions { task: string; // 任务描述 context?: { // 任务上下文 projectPath?: string; // 项目路径 techStack?: string; // 技术栈 files?: string[]; // 相关文件 }; options?: { // 执行选项 outputFormat?: 'json' | 'text'; // 输出格式 permissionMode?: 'default' | 'bypassPermissions'; // 权限模式 timeout?: number; // 超时时间(秒) }; } ``` **返回:** ```typescript interface ExecuteResult { status: 'success' | 'failed' | 'timeout'; filesModified: string[]; // 修改的文件列表 toolCalls: ToolCall[]; // 工具调用记录 reasoning: string[]; // 推理过程 duration: number; // 执行时长(秒) error?: string; // 错误信息 } ``` ### `onProgress(callback)` 订阅进度更新事件。 **参数:** ```typescript type ProgressCallback = (progress: { percentage: number; // 完成百分比 currentTask: string; // 当前任务描述 elapsedTime: number; // 已用时间(秒) estimatedTime?: number; // 预计剩余时间(秒) filesModified: string[]; // 已修改文件 toolCalls: number; // 已调用工具次数 }) => void; ``` ### `getStatus()` 获取当前任务状态。 **返回:** ```typescript interface TaskStatus { state: 'idle' | 'running' | 'completed' | 'failed'; taskId?: string; startTime?: Date; progress?: Progress; } ``` --- ## 🎯 使用示例 ### 示例1:创建新组件 ```javascript const codebuddy = require('./skill'); // 创建登录组件 const result = await codebuddy.execute({ task: '创建一个用户登录组件,包含用户名、密码输入框和登录按钮', context: { projectPath: '/path/to/vue-project', techStack: 'Vue 3 Composition API + TypeScript' } }); if (result.status === 'success') { console.log('组件创建成功!'); console.log('创建的文件:', result.filesModified); } ``` ### 示例2:修复 Bug ```javascript const codebuddy = require('./skill'); // 修复登录验证 Bug const result = await codebuddy.execute({ task: '修复用户登录时的验证逻辑,密码应该至少8位且包含数字和字母', context: { projectPath: '/path/to/project', files: ['src/views/Login.vue', 'src/utils/validator.ts'] } }); console.log('修复完成:', result.filesModified); ``` ### 示例3:监听长时间任务进度 ```javascript const codebuddy = require('./skill'); // 订阅进度 codebuddy.onProgress((progress) => { console.log(`[${progress.percentage}%] ${progress.currentTask}`); console.log(` 已修改 ${progress.filesModified.length} 个文件`); console.log(` 已执行 ${progress.toolCalls} 次操作`); console.log(` 用时 ${progress.elapsedTime}s`); }); // 执行长时间任务 const result = await codebuddy.execute({ task: '重构整个用户管理模块,使用更清晰的架构', context: { projectPath: '/path/to/project' }, options: { timeout: 600 // 10分钟超时 } }); ``` --- ## 🔍 进度监控原理 ### JSON 输出解析 CodeBuddy CLI 支持 `--output-format json` 输出结构化数据: ```bash codebuddy -p "任务描述" --output-format json --permission-mode bypassPermissions ``` **输出格式:** ```json { "status": "running", "tool_calls": [ { "tool": "write_to_file", "parameters": { "filePath": "src/Login.vue", "content": "..." }, "result": "success" } ], "files_modified": ["src/Login.vue"], "reasoning": [ "分析任务需求", "设计组件结构", "编写代码" ], "progress": { "percentage": 45, "current_task": "编写登录表单" } } ``` ### 进度解析流程 ```mermaid graph LR A[CodeBuddy CLI] -->|JSON Stream| B[Progress Monitor] B -->|Parse JSON| C[Progress Data] C -->|Emit Event| D[Event Callbacks] D -->|Update| E[Agent UI] ``` --- ## ⚙️ 高级配置 ### 自定义输出解析器 ```javascript const codebuddy = require('./skill'); // 自定义解析器 codebuddy.setOutputParser((jsonLine) => { // 自定义解析逻辑 return { percentage: jsonLine.progress?.percentage || 0, task: jsonLine.progress?.current_task || '处理中' }; }); ``` ### 超时和重试 ```javascript const result = await codebuddy.execute({ task: '复杂重构任务', options: { timeout: 1200, // 20分钟超时 retryCount: 3, // 失败重试3次 retryDelay: 5000 // 重试间隔5秒 } }); ``` --- ## 🐛 调试和日志 ### 启用详细日志 ```javascript const codebuddy = require('./skill'); // 启用调试模式 codebuddy.setDebugMode(true); // 所有 CLI 输出会被记录到控制台 const result = await codebuddy.execute({ task: '创建测试文件' }); ``` ### 查看执行日志 ```javascript // 获取最近的执行日志 const logs = codebuddy.getExecutionLogs(); console.log(logs); // [ // { time: '11:30:01', event: 'CLI_START', command: '...' }, // { time: '11:30:02', event: 'TOOL_CALL', tool: 'write_to_file' }, // { time: '11:30:05', event: 'CLI_END', status: 'success' } // ] ``` --- ## 🚨 错误处理 ### 错误类型 ```typescript enum CodeBuddyErrorType { CLI_NOT_FOUND = 'CLI_NOT_FOUND', // CodeBuddy CLI 未安装 INVALID_TASK = 'INVALID_TASK', // 无效的任务描述 TIMEOUT = 'TIMEOUT', // 执行超时 PERMISSION_DENIED = 'PERMISSION_DENIED', // 权限被拒绝 CLI_ERROR = 'CLI_ERROR' // CLI 执行错误 } ``` ### 错误处理示例 ```javascript try { const result = await codebuddy.execute({ task: '创建文件' }); } catch (error) { if (error.type === 'CLI_NOT_FOUND') { console.error('请先安装 CodeBuddy CLI'); } else if (error.type === 'TIMEOUT') { console.error('任务超时,请增加超时时间'); } else { console.error('执行失败:', error.message); } } ``` --- ## 📦 集成到 Agent ### Developer Agent 集成 ```javascript // developer/agent.js const codebuddy = require('codebuddy-coding'); class DeveloperAgent { async implementFeature(task) { // 使用 CodeBuddy 实现功能 const result = await codebuddy.execute({ task: task.description, context: { projectPath: this.projectPath, files: task.relatedFiles } }); return result; } } ``` ### Architect Agent 集成 ```javascript // architect/agent.js const codebuddy = require('codebuddy-coding'); class ArchitectAgent { async generateProjectScaffold(requirements) { // 使用 CodeBuddy 生成脚手架 const result = await codebuddy.execute({ task: `创建项目脚手架:${requirements}`, options: { permissionMode: 'bypassPermissions' } }); return result; } } ``` --- ## 🧪 测试 ### 运行测试 ```bash # 运行所有测试 npm test # 运行特定测试 npm test -- --grep "CLI Wrapper" ``` ### 测试覆盖 - ✅ CLI Wrapper 单元测试 - ✅ Progress Monitor 单元测试 - ✅ Integration 集成测试 - ✅ E2E 端到端测试 --- ## 📄 许可证 MIT License --- ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! --- ## 📞 支持 如有问题,请联系: - GitHub Issues: [OpenClaw Repository] - Email: support@openclaw.ai --- **让每个 Agent 都拥有 AI 编程能力!** 🚀

Archived SourceRecently Updated