# Cookbook — 把概念变成真的成果
> [繁體中文](./cookbook.md) | **简体中文** | [English](./cookbook.en.md)
这份 Cookbook 不要求你一次读完。先选一个想做的成果,复制它的第一个动作;需要更多步骤时,再打开选单。
如果名词还不熟,先回 [Stage 5:Claude Code 生态系统](../stages/05-claude-code-ecosystem.zh-Hans.md)。想比较 OpenRouter、Pi、OpenCode 与 Ollama,直接看[完整 CLI Agent 指南](cli-agents-guide.zh-Hans.md)。
## 📌 这份 Cookbook 帮你做什么
**Recipe(实践配方)**是一条从“我想做什么”走到“我怎么知道完成了”的短路线。完成任一份 Recipe,你都会得到一个可以检查的成果,而不是只看懂一段说明:
- 一张可重复使用的操作卡。
- 一个能被 Agent 调用的小工具。
- 一份文件、研究笔记或文献流程。
- 一个在自己电脑上运行的 CLI Agent。
你还会看到 **Skill(操作卡)**、**MCP Server(工具转接站)**和 **Coding Agent(程序代理)**。它们分别告诉 Agent 怎么做、替 Agent 接上工具,以及代替你读档、改档和检查结果。
## 🎯 先选一份 recipe
| 你想完成什么 | 从哪里开始 | 主要风险 |
|---|---|---|
| 让 Claude 记住固定做法 | [1. 第一个 Skill](#1-写你的第一个-skill) | 规则写得太模糊 |
| 让 Agent 调用自己的 Python 工具 | [2. 第一个 MCP server](#2-写你的第一个-mcp-server) | 把不该开放的权限交出去 |
| 生成 Word/Excel/PowerPoint/PDF | [3. Office Docs Workflow](#3-office-docs-workflow) | 没有打开成品进行人工检查 |
| 从自己的资料得到有引用的答案 | [4. Gemini Notebook Workflow](#4-gemini-notebook-workflow) | 社区集成可能突然失效 |
| 从 Zotero 搜索或整理文献 | [5. Zotero Workflow](#5-zotero-workflow) | 写入前没有预览变更 |
| 用本地模型协助修改程序 | [6. 本地 LLM+CLI Agent](#6-本地-llm--cli-agent-快速-walkthrough) | 模型能力或电脑内存不足 |
## 🧩 六个核心词
- **Recipe(实践配方)**:一条从“我想做什么”走到“我怎么知道完成了”的短路线。
- **Skill(操作卡)**:放在 `SKILL.md` 里的可重复指令。Agent 需要时才读它。
- **MCP Server(工具转接站)**:把程序、资料或服务包装成 Agent 能看懂的 tool、resource 或 prompt。
- **Community Integration(社区集成)**:不是产品官方提供的桥接工具。可以很好用,但上游一改就可能坏。
- **Model Runtime(模型运行环境)**:真正加载并运行模型的程序,例如 Ollama;它不是 Coding Agent。
- **Coding Agent(程序代理)**:读档、改档、跑指令并反复检查结果的助手,例如 Claude Code、OpenCode、Pi 或 Aider。
⏱️ 展开:时间、环境与安全底线
- 每份 recipe 约 20–50 分钟;先完成最短路径,再做进阶选项。
- 建议准备 Git、Python 3.11+、Node.js 20+;只有用到对应 recipe 才安装。
- 练习只用测试资料。不要把密码、API key、未公开论文或私人文件贴进不信任的工具。
- 任何会删除、寄送、发布或大量改档的动作,都要先看 diff 或 preview。
展开完整步骤、测试与常见问题
创建 `.claude/skills/summarize-changes/SKILL.md`:
```markdown
---
description: Summarize uncommitted changes and flag risks. Use when the user asks what changed or requests a diff review.
---
## Instructions
1. Read the current git diff.
2. Explain the change in three short bullets.
3. List risks, missing tests, and files that should not be committed.
4. If there is no diff, say so. Do not invent changes.
```
启动 Claude Code 后输入:
```text
/summarize-changes
```
也可以问“我刚刚改了什么?”来测试自动触发。Claude Code 会立即检测现有 skill 目录里的 `SKILL.md` 变更,通常不用重启;只有 session 开始时整个 `.claude/skills/` 还不存在,才需要重启一次。
成功标准:回答真的根据当前 diff,而且说明了“哪里可能出错”。
常见问题:
| 症状 | 先检查什么 |
|---|---|
| `/summarize-changes` 不存在 | 路径是否正好是 `.claude/skills/summarize-changes/SKILL.md` |
| 经常误触发 | `description` 是否清楚写出“何时使用” |
| 指令太长 | 把背景资料移到同一文件夹的参考文件,需要时再读 |
先使用 project Skill 最安全:它只跟随这个 repo。确认多个项目都需要同一套做法后,才放到 personal path `~/.claude/skills/展开 server 程序、连接方式与错误排查
创建 `server.py`:
```python
from mcp.server import MCPServer
mcp = MCPServer("hello-mcp")
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two integers."""
return a + b
if __name__ == "__main__":
mcp.run()
```
这段程序很短,是因为 MCP v2 会从 **type hint** 生成 input schema、把 **docstring** 当作 tool description,并把返回值包装成 MCP content。参数名称、类型或 docstring 写错,Agent 就可能选错工具或传错数据。
把这个本地 stdio server 加进 Claude Code:
```bash
claude mcp add --transport stdio hello-mcp -- python server.py
claude mcp get hello-mcp
```
进入 Claude Code 后问:“用 `add` 计算 27 + 15。”成功时应得到 `42`,而且你能在 tool call 记录中看见参数。
MCP v2 的高层 class 是 `MCPServer`,正确 import 是 `from mcp.server import MCPServer`。旧的 `FastMCP` 教程与旧 import 路径不要混用。
安全底线:
- tool 只收完成任务需要的参数。
- 文件工具要限制可读写目录。
- 写入、付款、寄信或删除动作先要求人工核准。
- 第三方 MCP server 会接触你的资料;安装前先看来源与权限。
| Transport | 适合哪里 | 验证提醒 |
|---|---|---|
| **stdio** | 同一台电脑上的 Claude Code/desktop host | 第一个 server 用这条;通常不在 transport 内做 OAuth |
| **Streamable HTTP** | 远端、多人或服务化部署 | 按现行 MCP authorization 规范设计身份验证;不要照抄旧 HTTP+SSE 教程 |
需要 API key 时,从环境变量读取;不要把 secret 写进 `server.py`、配置文件示例或 Git。
若 `claude mcp get` 显示失败,先直接跑 `python server.py` 看 import error,再确认 `--` 后面的启动指令与 Python 环境一致。
展开 skill 安装、示例 prompt 与质量检查
`anthropics/skills` 里的 `docx`、`xlsx`、`pptx`、`pdf` 是 Anthropic 生产环境使用的复杂 skill 参考。这四个文件夹是 **source-available**,不是 Apache-2.0 开源示例;先读各自授权与 `SKILL.md`。
要在项目内试一个 skill,请把那个 skill 本身放到正确层级,不要把整个 repo 多包一层:
```bash
mkdir -p .claude/skills
cp -R anthropic-skills-reference/skills/docx .claude/skills/docx
```
PowerShell 可改用:
```powershell
New-Item -ItemType Directory -Force .claude/skills
Copy-Item -Recurse anthropic-skills-reference/skills/docx .claude/skills/docx
```
四个文件夹不是同一件事。先只安装你要练习的那一个:
| Skill | 第一个小任务 | 完成时要检查 |
|---|---|---|
| `docx` | 把测试数据做成一页摘要 | 标题、段落、表格与分页 |
| `xlsx` | 算出一小张表的合计并保留公式 | 公式、单元格类型与数值 |
| `pptx` | 按 3 点大纲做 3 张幻灯片 | 文字不溢出,图片与来源正确 |
| `pdf` | 从公开 PDF 摘出 3 个主张 | 页码、引用与原文能对上 |
可直接复制的 DOCX 任务:
```text
用我提供的测试数据做一份一页 DOCX 摘要。
保留标题、三个重点与来源栏;没有资料就标“待补”,不要猜。
完成后重新打开文件,确认没有截字、空白页或坏掉的表格。
```
检查顺序:内容正确 → 公式/数字正确 → 版面没有溢出 → 文件能重新打开。只看到“文件已创建”不算完成。
如果 skill 没出现,确认路径是 `.claude/skills/docx/SKILL.md`。Claude 产品内置的文件能力与你 clone 下来的参考版本可能不同,所以不要声称两者一定生成完全相同的结果。
展开社区 CLI 自动化路径:notebooklm-py
Google 目前没有提供这套自动化的公开官方 API。`notebooklm-py` 是社区项目,使用未公开接口,适合个人研究与 prototype;正式流程要准备它突然失效时的替代路径。
```bash
uv tool install "notebooklm-py[browser]"
notebooklm login
notebooklm auth check --test --json
notebooklm create "My Research"
notebooklm use NOTEBOOK_ID
notebooklm source add ./paper.pdf
notebooklm ask "列出三个主要主张,每点附来源。"
```
要让 Claude Code 或其他支持 Agent Skills 的工具使用它:
```bash
notebooklm skill install
```
登录会打开浏览器并保存验证状态。不要把 cookie、token 或个人浏览器资料提交进 Git。
展开另一个浏览器 skill 与排错提醒
[`PleasePrompto/notebooklm-skill`](https://github.com/PleasePrompto/notebooklm-skill) 通过浏览器自动查询 notebook。它同样不是 Google 官方集成,而且必须在浏览器完成登录。
选择方式:
| 需求 | 较适合的入口 |
|---|---|
| 只想可靠阅读与人工核对 | Gemini Notebook 官方网页 |
| 想批量新增来源、问答或导出 | `notebooklm-py` CLI |
| 已使用 Claude Code,想用 skill 调用浏览器 | `notebooklm-skill` |
遇到登录失效,先回官方网页确认账号能正常使用,再按社区项目自己的 auth 指令重新登录。不要用大量重试绕过 Google 的限制。
展开搜索、Zotero 10+ 写入授权与安全做法
本地 API 在 `http://localhost:23119/api/`,离线可用且没有 Web API rate limit。Zotero 10+ 的本地 API 支持 `POST`、`PUT`、`PATCH`、`DELETE`;过去把它当成只读接口的教程已不适用。
写入权限不会被偷偷打开。应用程序必须先向 `/api/local/authorize` 获取 **local API key**,Zotero 会显示批准窗口。这个 key 和 zotero.org Web API key 不同,而且能写入你有权编辑的 library,所以:
1. 第一次只做读取与搜索。
2. 写入前列出预计新增、移动或删除的项目。
3. 让用户在 Zotero 窗口批准。
4. 练习后到 Settings → Advanced 按 **Clear Write Authorizations** 撤销 remembered key。
配合 [`WenyuChiou/zotero-skills`](https://github.com/WenyuChiou/zotero-skills) 时,可先复制这句:
```text
只搜索,不要修改:找出我 Zotero 里 2024 年后与 multi-agent evaluation 有关的文献。
列出 title、year、DOI 和 Zotero item key;找不到的字段标“未提供”。
```
第二次才试写入,而且先要求 preview:
```text
准备把刚才的结果加入“agent-evals”collection。
先列出会移动的 item key,不要执行;等我批准后再写入。
```
`403` 通常是本地 API 未启用;`401` 是写入 key 不存在或失效;`428` 代表写入缺少正确的 `Zotero-Server-ID`。
展开主要路径:OpenCode+Ollama
OpenCode 是会读文件、改文件和跑指令的 Coding Agent;Ollama 是在本地运行模型的 runtime。先安装 OpenCode,再用 `opencode` 启动:
```bash
curl -fsSL https://opencode.ai/install | bash
opencode
```
OpenCode 会自动寻找 `http://127.0.0.1:11434` 的 Ollama。进入 TUI 后选 `ollama/gemma4:e4b`,再到一个已经用 Git 管理的练习 repo,贴上:
```text
只修改 README.md:新增一行“Local agent test”。
先说你要改哪里;修改后显示 diff,不要 commit。
```
成功标准:只有 README 被改、diff 符合要求、`git status` 没有陌生文件。模型小时,任务也要小;一次只改一件事。
展开 Aider 替代路径、Pi/OpenRouter入口与排错
Aider 官方建议使用 `aider-install`,Ollama model prefix 使用 `ollama_chat/`:
```bash
python -m pip install aider-install
aider-install
aider --model ollama_chat/gemma4:e4b
```
其他入口:
- [Pi](https://github.com/earendil-works/pi) 是可扩展的 Agent harness 与 Coding Agent;它默认继承启动者权限,敏感项目要另外使用 sandbox 或 container。
- [OpenRouter](https://openrouter.ai/docs/quickstart) 提供多模型统一 API 与 provider routing;它会产生云端费用,资料政策也取决于所选 provider。
- [完整 CLI Agent 指南](cli-agents-guide.zh-Hans.md) 说明何时选 Claude Code、OpenCode、Pi、Aider、OpenRouter 或本地 runtime。
常见问题:
| 症状 | 先做什么 |
|---|---|
| 找不到 Ollama model | 跑 `ollama list`,确认 tag 正好是 `gemma4:e4b` |
| 回答很慢或内存不足 | 改用 `gemma4:e2b`,并缩小任务与 context |
| Agent 改太多文件 | 立即停止,查看 `git diff`;把任务缩成一个文件的一处改动 |
| tool calling 不稳 | 改用 Stage 3 建议、且确认支持 tool calling 的模型 |
| 分类 | Project/资源 | 适合做什么 | 限制 | 评分 |
|---|---|---|---|---|
| Skills | Agent Skills standard | 理解跨工具共用的 skill 格式 | 各产品仍有自己的扩展字段 | ⭐⭐⭐⭐⭐ |
| anthropics/skills | 阅读成熟 skill 示例 | 文件 skills 是 source-available | ⭐⭐⭐⭐⭐ | |
| MCP | MCP specification | 查 protocol 的正式定义 | 入门不用从头读完 | ⭐⭐⭐⭐⭐ |
| MCP Python SDK | 用 Python 写 server/client | 注意 v1 与 v2 教程不可混用 | ⭐⭐⭐⭐⭐ | |
| 文件 | Anthropic DOCX skill | 学复杂文件 skill 的结构 | 使用前确认授权与 runtime | ⭐⭐⭐⭐ |
| Anthropic XLSX skill | 学习电子表格分析与输出流程 | 成品仍要用电子表格软件检查 | ⭐⭐⭐⭐ | |
| Gemini Notebook | notebooklm-py | 批量来源、问答与 artifact 导出 | 非官方、未公开 API 可能改变 | ⭐⭐⭐⭐ |
| notebooklm-skill | 从 Claude Code 用浏览器查询 notebook | 非官方且依赖浏览器登录 | ⭐⭐⭐ | |
| Zotero | zotero-skills | 从 Agent 搜索与整理 Zotero | 写入前一定先 preview | ⭐⭐⭐⭐ |
| research-hub | 串接 Zotero、Obsidian 与研究流程 | 比单一 recipe 更进阶 | ⭐⭐⭐⭐ | |
| zotero-gpt | 在 Zotero 内阅读时对话 | plugin 路径和外部 Agent 不同 | ⭐⭐⭐ | |
| 本地/CLI | OpenCode | 连接本地或云端模型修改程序 | 先检查 provider 和 permission 设置 | ⭐⭐⭐⭐ |
| Pi | 可扩展的 coding harness/CLI | 默认没有内置权限隔离 | ⭐⭐⭐⭐ | |
| Aider | 以 Git 为中心结对编程 | 小模型的编码质量可能不足 | ⭐⭐⭐⭐ |