---
title: "从需求到自动化：Claude Code Skill 工具链完整实战"
author: deletexiumu
pubDatetime: 2026-02-20T00:30:00+08:00
featured: false
draft: false
tags:
  - Claude Code
  - AI Agent
  - 效率
  - 教程
description: "从日报自动化的真实场景出发，用 Brainstorming、dev browser、Skill Creator、skill find 四个 Claude Code Skill 搭建完整工具链，把一次性浏览器操作固化成可复用的自动化流程。"
---

我每天发一份 AI 资讯日报——你可能在公众号或星球里看到过。

日报的数据来源是十几个网站：Hacker News、GitHub Trending、Product Hunt、36氪……每天定时自动采集，汇总成摘要，不需要我手动盯着。

但这套自动化是怎么搭起来的？其中有几个网站反爬很严——不是简单加个 headers 就能过的那种。

`import requests` 发出去，403。加 headers，还是 403。上 Selenium，弹验证码。换 undetected-chromedriver，过了验证码，但跑了三次 IP 被封。

**验证码、IP 封禁、TLS 指纹检测、行为分析——现在主流网站的反爬是一套组合拳。** requests 的 TLS 指纹直接暴露你不是浏览器；Selenium 的 `navigator.webdriver` 属性把你标记成自动化工具；就算上 headless Chrome，Canvas 指纹照样把你揪出来。

后来我用了 Claude Code 的 dev browser——它操控的是**真实 Chrome**。不是 headless，不是套壳，是你日常用的那个浏览器，带着登录态、Cookie、完整指纹。AI 在上面操作，从网站的角度看，这就是真人在点击。

反爬能检测出来吗？很难。

但这篇文章不只是讲 dev browser。搭这套日报自动化的过程里，我发现真正有价值的是一整条工具链——从想清楚要做什么，到执行，到把流程固化成可以复用的工具。这才是完整的故事。

---

## 一、工具链全貌：4 个 Skill，两条路

先上结论。整条工具链由 4 个 Skill 组成，覆盖从"想清楚"到"自动跑"的全链路：

| Skill | 解决什么问题 | 一句话定位 |
|-------|-------------|-----------|
| **Brainstorming** | 需求模糊，容易跑偏 | 强制性的"设计先行"门卫，逼你想清楚再动手 |
| **dev browser** | 传统爬虫被反爬拦住 | 真实 Chrome + AI 操控，天然绕过检测 |
| **Skill Creator** | 跑通了但下次还要重来 | 把流程固化成可复用 Skill，一句话就能跑 |
| **skill find** | 不想从零搭 | 搜索开源 Skill 生态，找现成的直接装 |

两条路径：

- **主线（从零搭）**：Brainstorming → dev browser → Skill Creator
- **捷径（找现成）**：skill find → 安装 → 直接用

先走主线。下面用一个完整案例串起来。

---

## 二、主线实战

### Step 1. Brainstorming——先想清楚

很多人拿到需求就开始写代码。但"采集 Hacker News Top10"这句话，至少有五个问题没回答：

- 采哪些字段？只要标题，还是也要评论数？
- 存在哪里？本地 JSON、数据库、还是推送到飞书？
- 多久跑一次？实时、每小时、还是每天一次？
- 出错怎么办？网站改版了呢？网络断了呢？
- 用什么技术方案？API、爬页面、还是第三方库？

这些问题，不是你不知道答案，而是你没想到要问。

Brainstorming Skill 就是干这个的。在 Claude Code 里触发它：

```
/brainstorming 我想采集 Hacker News 每日 Top10 的标题、链接和得分，存成 JSON 文件
```

它不会直接给你方案。它会先**逐个追问**，一次只问一个问题，而且偏好选择题——降低你的决策负担：

> "这个采集工具的运行方式是什么？
> A) 手动运行的命令行脚本
> B) 定时自动运行（cron）
> C) 作为 Web 服务持续运行"

你选 A，它接着问：

> "JSON 文件的存储策略？
> A) 每天一个文件（hn-2026-02-20.json）
> B) 单个文件持续追加
> C) 按周/月归档"

两三轮之后，需求就清晰了。然后它会给出 2-3 个技术方案的对比：

> **方案 A（推荐）**：直接调用 HN 官方 API（`hacker-news.firebaseio.com`），轻量稳定
> **方案 B**：用 Playwright 爬取页面，适合 API 不可用的场景
> **方案 C**：使用第三方库 hackernews-api，封装更简洁但有依赖风险

**关键在于：它会主动砍需求。** Brainstorming 内置了 YAGNI 原则（You Aren't Gonna Need It）——如果你说"顺便也采一下评论内容吧"，它会追问"你真的需要评论内容吗？这会让复杂度翻倍"。

最后，所有设计会自动写入 `docs/plans/` 目录，提交 git。下次打开项目，设计文档就在那里。

**对比一下：没有这步，你可能跑了半天才发现——原来 HN 有官方 API，根本不需要爬页面。**

### Step 2. dev browser——真实 Chrome 上场

需求想清楚了。假设我们选方案 B——用真实浏览器采集（毕竟这篇文章要展示反爬能力）。

dev browser 有两种模式：

| 模式 | 原理 | 适合场景 |
|------|------|---------|
| **Standalone** | 启动独立 Chromium 实例 | Web 测试、不需要登录态 |
| **Extension** | 连接你已有的 Chrome 浏览器 | 需要登录态、反爬严格的网站 |

**Extension 模式是杀手锏。** 它连接的是你日常使用的 Chrome——你的登录态、Cookie、浏览器指纹、安装的插件，全部保留。从网站的角度看，这就是一个真人在操作浏览器，和你自己点击完全没有区别。

来看实际执行。在 Claude Code 里触发：

```
/dev-browser 打开 https://news.ycombinator.com ，提取 Top5 标题和链接
```

Claude 会自动启动浏览器服务器，然后写一个 TypeScript 脚本来执行任务：

```typescript
import { connect, waitForPageLoad } from "@/client.js";

const client = await connect();
const page = await client.page("hackernews", {
  viewport: { width: 1280, height: 900 }
});

await page.goto("https://news.ycombinator.com");
await waitForPageLoad(page);

// 截图保存当前页面状态
await page.screenshot({ path: "tmp/hn-homepage.png" });

// 提取 Top5
const top5 = await page.evaluate(() => {
  var items = [];
  var rows = document.querySelectorAll(".athing");
  for (var i = 0; i < Math.min(5, rows.length); i++) {
    var row = rows[i];
    var titleLink = row.querySelector(".titleline > a");
    var scoreEl = row.nextElementSibling
      ? row.nextElementSibling.querySelector(".score") : null;
    items.push({
      rank: i + 1,
      title: titleLink ? titleLink.textContent : "",
      url: titleLink ? titleLink.href : "",
      score: scoreEl ? scoreEl.textContent : "N/A"
    });
  }
  return items;
});
```

实际提取结果（2026-02-20 实测）：

```
=== Hacker News Top 5 ===
#1 [82 points]  America vs. Singapore: You Can't Save Your Way Out of Economic Shocks
#2 [154 points] Pebble Production: February Update
#3 [77 points]  Gemini 3.1
#4 [131 points] Paged Out Issue #8 [pdf]
#5 [20 points]  Dinosaur Food: 100M year old foods we still eat today
```

![AI 操控真实 Chrome 提取 Hacker News 数据](/blog/claude-code-skill-toolchain/dev-browser-result.png)

*AI 操控真实 Chrome 渲染 Hacker News 页面并提取数据*

**过程中遇到了一个小插曲**：端口 9222 被之前的 Extension 模式服务占用，连接失败报 `Extension not connected`。Claude 没有卡住——它自动识别了问题原因，杀掉旧进程，切换到 Standalone 模式重新启动。**整个过程 AI 在实时判断和调整，不是在执行死板的脚本。**

几个值得注意的能力：

- **持久化页面状态**：页面在脚本之间保持状态。你可以先登录，再采数据，分步操作
- **ARIA Snapshot**：通过无障碍树理解页面结构，比 CSS 选择器更语义化、更健壮
- **网络请求拦截**：如果要采大量数据，可以拦截 API 请求而非滚动 DOM，效率高得多

再看一下真实浏览器和传统爬虫的对比：

| 维度 | 传统爬虫 (requests/scrapy) | dev browser (Extension 模式) |
|------|--------------------------|-------------------------------|
| JS 渲染 | 不支持 | 完整支持 |
| 浏览器指纹 | 缺失或伪造，易检测 | 真实指纹，与真人无异 |
| 登录态 | 需手动管理 Cookie | 直接复用已有登录 |
| 反爬检测 | 被 Cloudflare 等拦截 | 通过率极高 |
| 执行速度 | 快，可大规模并发 | 较慢，并发有限 |

**结论：小批量、需要反爬的场景，dev browser 碾压传统爬虫。大规模并发采集，传统爬虫仍有优势。**

> **踩坑提示**：Extension 模式需要你的 Chrome 开启远程调试端口（默认 9222）。如果之前有进程占用这个端口，连接会报 `Extension not connected`——先杀掉旧进程再试。另外，Extension 模式用的是你的真实浏览器环境，采集时别同时手动操作同一个页面，会互相干扰。

### Step 3. Skill Creator——固化下来，下次直接用

跑通了一次。但问题来了：下次还要重新描述一遍需求，重新等 Claude 写脚本，重新调试？

这就像你每次做饭都要从"搜索菜谱"开始——效率太低了。

**Skill Creator 就是把菜谱写下来的工具。** 它能把你刚才跑通的整个流程，固化成一个可复用的 Skill。下次只需要说一句话就能跑。

Claude Code 有两个 Skill 创建工具：

**官方 skill-creator 插件**——偏工程化，自带测试和迭代能力：

1. **意图捕捉**：理解你想让 Skill 做什么、何时触发、输出什么格式
2. **初始化模板**：自动生成 Skill 文件结构
3. **编写 SKILL.md**：这是 Skill 的"灵魂"——定义触发条件、执行步骤、输出格式
4. **自动测试**：创建 2-3 个测试用例，立即运行验证
5. **迭代优化**：基于测试结果自动重写

它还有个高级功能：**盲测 A/B 对比**。4 个子 Agent 协作——Executor 执行、Grader 评分、Comparator 盲比、Analyzer 分析。两个版本的 Skill 随机分配给评审者，评审者不知道哪个是新版。这是工程化的评估流程，不是走个过场。

**plugin-dev:skill-development Skill**——偏规范化，更像一份最佳实践指南：

- 6 步流程：理解 → 规划 → 创建结构 → 编辑 → 验证 → 迭代
- 渐进式披露：元数据 → SKILL.md 主体 → 引用资源
- 严格的写作规范：祈使句、具体触发短语、控制在 1500-2000 词

固化后的 Skill 长什么样？它本质上是一个 SKILL.md 文件，定义了：

- **触发条件**：用户说"采集 HN 数据"、"抓取 Hacker News"时自动触发
- **输入参数**：采集数量（默认 Top10）、输出路径、日期范围
- **执行步骤**：启动 dev browser → 打开 HN → 提取数据 → 保存 JSON
- **输出格式**：`hn-YYYY-MM-DD.json`，包含 rank、title、url、score 字段

**从"每次都要想"变成"说一句话就跑"。** 这才是 Skill 的核心价值——把一次性操作变成永久资产。

---

## 三、另一条路：skill find 直接找现成的

并不是所有事都要从零搭。

在你决定自己造轮子之前，先问一句：**有没有人已经造好了？**

在 Claude Code 里触发 find skills：

```
/find-skills Excel 处理
```

几秒后返回 6 个结果：

```
sbroenne/mcp-server-excel@excel-mcp               145 installs
skillcreatorai/ai-agent-skills@xlsx                94 installs
bobmatnyc/claude-mpm-skills@xlsx                   54 installs
sbroenne/mcp-server-excel@excel-cli                38 installs
belumume/claude-skills@document-quality-standards   14 installs
mjunaidca/mjs-agent-skills@working-with-spreadsheets  13 installs
```

最热门的 `excel-mcp` 有 145 次安装。一行命令装上：

```bash
npx skills add sbroenne/mcp-server-excel@excel-mcp -g -y
```

装完就能用。不用写代码，不用调试，不用测试。

除了 Excel 处理，skills.sh 上还有大量社区贡献的 Skill：前端页面设计、数据可视化、SEO 审计、API 测试、文档生成……**覆盖面比你想象的广。**

我的建议：**先 find，再考虑 build。** 找到现成的直接用，找不到再走主线从零搭。即使找到的 Skill 不完全满足需求，也可以安装后二次定制，比从头写快得多。

---

## 四、工具链思维

回顾整条链路，核心公式就一行：

**探索（Brainstorming）→ 执行（dev browser）→ 固化（Skill Creator）→ 复用（skill find）**

这四步的本质不是四个工具的堆叠，而是一种思维方式：**把一次性操作变成永久资产。**

每次你手动完成一个任务，问自己：这事以后还会干吗？如果会，就花 5 分钟把它固化成 Skill。下次不用重新想，不用重新调，说一句话就跑。

适用边界也要清楚：

| 适合 | 不适合 |
|------|--------|
| 需要真实浏览器的数据采集 | 大规模高频并发采集 |
| 重复性浏览器操作自动化 | 简单 API 调用（requests 更快） |
| 流程固定、参数可变的任务 | 每次逻辑都不同的探索性任务 |
| 有现成 Skill 可复用的场景 | 需要精确 HTML 解析的复杂场景 |

最后说一句：**这套工具链本身也可以被固化。** 你完全可以把"Brainstorming → dev browser → Skill Creator"这个流程做成一个工作流 Skill——下次有新的自动化需求，连思考"用什么工具"这一步都省了。

工具造工具，自动化造自动化——到这一步，你就不只是在用 AI，而是在给 AI 造装备了。

---

## 相关阅读

- [我如何使用 Claude Code：先计划，再编码](/posts/claude-code-plan-before-code/) — 同样是"想清楚再动手"的方法论，Brainstorming Skill 的理念延伸
- [同样的话跟 Claude Code 说了八遍，是时候让它自己记住了](/posts/claude-code-memory-rules/) — Skill 固化之外，规则固化同样重要
- [Claude Code + Agent Team：让多个 AI 协作完成复杂任务](/posts/claude-code-agent-team/) — Skill Creator 背后的多 Agent 协作机制
