写在前面
Claude Code 自带的能力已经很强,但总有些重复性的工作让人想偷懒。比如我经常需要把技术文档、博客文章抓下来喂给它做上下文——每次都手动复制粘贴,或者让它现场写爬虫,效率太低。
Slash Command 就是用来解决这类问题的。你可以把常用的工作流封装成一个命令,在 Claude Code 里敲 /xxx 就能执行。本文用「网页剪藏」做例子,手把手带你写一个实用的 Slash Command。
什么是 Slash Command
简单说,Slash Command 是你给 Claude Code 写的「快捷指令」。
它本质上是一个 Markdown 文件,放在项目的 .claude/commands/ 目录下。文件里写清楚这个命令要干什么、能用哪些工具、怎么执行。之后在 Claude Code 里输入 /文件名,它就会按你写的逻辑来。
举个例子:
/commit- 自动生成 commit message 并提交/test- 跑测试并分析失败原因/firecrawl- 把网页抓成 Markdown(今天要写的)
官方文档在这:Claude Code Slash Commands
解剖一个 Slash Command
一个 Slash Command 文件长这样:
---
allowed-tools: Bash, Write
description: 用 Firecrawl 抓取网页为 Markdown
argument-hint: <url> [output-dir]
---
# 命令标题
这里写命令的具体指令和执行逻辑...
Frontmatter 三要素
allowed-tools - 允许使用的工具列表
Claude Code 有很多内置工具(Bash、Read、Write、Edit、Grep 等)。这里指定这个命令能用哪些,相当于权限控制。
description - 命令描述
输入 / 时会显示的提示文字,帮你快速识别命令用途。
argument-hint - 参数提示
告诉用户这个命令需要什么参数。<> 表示必填,[] 表示可选。
正文部分
Frontmatter 下面就是正文,用 Markdown 写。这部分是给 Claude 看的指令,告诉它:
- 这个命令要完成什么目标
- 具体的执行步骤是什么
- 输出格式有什么要求
写得越清晰,Claude 越听话。
实战:做个网页剪藏工具
目标很简单:输入一个 URL,把网页内容抓下来存成 Markdown 文件。
为什么用 Firecrawl
直接 curl 一个网页,拿到的是一堆 HTML——CSS、JS、导航栏、广告全混在一起,没法直接用。写个 Playwright 脚本当然可以,但杀鸡用牛刀。
Firecrawl 专门干这个:你给它 URL,它还你干净的 Markdown。JS 渲染、反爬绕过、广告过滤、正文提取这些它都包了。
去 firecrawl.dev 注册,Dashboard 里拿 API Key。免费版每月 500 积分,1 积分抓 1 页,个人用够了。
拿到 Key 后配环境变量:
echo 'export FIRECRAWL_API_KEY="fc-xxx"' >> ~/.zshrc
source ~/.zshrc
配完之后记得重启 Claude Code,不然它读不到新的环境变量。
写 Slash Command
在项目根目录创建 .claude/commands/firecrawl.md:
---
allowed-tools: Bash, Write
description: 用 Firecrawl 抓取网页为 Markdown
argument-hint: <url> [output-dir]
---
# Firecrawl 网页抓取
将网页内容抓取为 Markdown 并保存。
## 参数
- `url`: 要抓取的网页地址(必填)
- `output-dir`: 保存目录(可选,默认当前目录)
## 执行步骤
1. 从 $ARGUMENTS 解析 URL 和输出目录
2. 调用 Firecrawl API 抓取网页
3. 从返回的 JSON 中提取标题和 Markdown 内容
4. 生成文件名:`日期-标题.md`
5. 保存文件并输出路径
## 执行
用 Bash 执行以下逻辑:
- URL 是第一个参数
- OUTPUT_DIR 是第二个参数,默认为 `.`
- 调用 `curl` 请求 Firecrawl API:
- 端点:`https://api.firecrawl.dev/v1/scrape`
- Header:`Authorization: Bearer $FIRECRAWL_API_KEY`
- Body:`{"url": "<URL>", "formats": ["markdown"]}`
- 用 `jq` 提取 `.data.metadata.title` 和 `.data.markdown`
- 文件名格式:`$(date +%Y-%m-%d)-<标题>.md`
- 标题处理:空格转 `-`,只保留字母数字和连字符
## 输出
保存成功后输出:`✓ 已保存: <文件路径>`
代码拆解
这个命令做的事情很直接:
- 解析参数 -
$ARGUMENTS是 Claude Code 传进来的用户输入 - 调 API - Firecrawl 的
/scrape接口,POST 一个 JSON - 提取内容 - 返回的
data.markdown就是正文 - 存文件 - 按日期+标题命名,方便管理
跑起来
保存文件后,在 Claude Code 里试试:
# 抓取单个页面
/firecrawl https://java.agentscope.io/
# 指定输出目录
/firecrawl https://java.agentscope.io/ ./docs
第一次用可能会弹出权限确认,允许就行。
效果对比
拿 AgentScope Java 文档页对比:
直接 curl:
<!doctype html>
<html class="no-js" lang="en" data-content_root="../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link
rel="stylesheet"
type="text/css"
href="../_static/styles/furo.css?v=7bdb33bb"
/>
<link
rel="stylesheet"
type="text/css"
href="../_static/togglebutton.css?v=9c3e77be"
/>
<!-- 还有十几个 CSS/JS 链接... -->
</head>
</html>
用 Firecrawl:
# AgentScope Java
**Build Production-Ready AI Agents in Java**
## What is AgentScope Java?
AgentScope Java is an agent-oriented programming framework for building
LLM-powered applications. It provides everything you need to create
intelligent agents: ReAct reasoning, tool calling, memory management,
multi-agent collaboration, and more.
## Highlights
### Smart Agents, Full Control
AgentScope adopts the ReAct (Reasoning-Acting) paradigm, enabling agents
to autonomously plan and execute complex tasks...
一个是噪音,一个是信号。
踩坑记录
如果你调用 /scrape 返回空内容,多半是目标站反爬比较凶。试试在请求里加 "timeout": 30000 把超时调大。
积分消耗特别快?多半是用了 /crawl 抓整站。建议先用 /map(不消耗积分)探路,看看哪些页面值得抓,再针对性 /scrape。
如果你拿到的 Markdown 格式很乱,多半是原站 HTML 结构太奇葩。这种情况只能自己后处理,写点正则清理一下。
最后
Slash Command 的核心思路就是把重复的工作流封装起来。网页剪藏只是个例子,你可以用同样的方式封装任何常用操作:代码生成、文档格式转换、API 调用等等。
这个版本只处理普通网页。微信公众号这类反爬比较凶的站,得上 Playwright 做降级,后面可能单独写一篇。
相关链接