超越 Prompt:Claude Code 作为日常主力

原文:Alexander R. P. S. · Claude Code Mastery
中文翻译:xiaomimi · 部署于 2026-06-02

引言

我花了四十分钟做一次重构,Claude 四分钟就能搞定。差距不在模型,在围绕模型的一切。

普通用户是:敲 prompt,取第一条建议,把 Claude 当加强版自动补全用。我把它当作可编程的 agent 来跑:持久化记忆、自定义命令、并行 session 在多个 worktree 里同时工作、一个每周都更锐利的项目骨架。

这份指南假设你已经敲过 claude 进了终端、知道它能干嘛。我们来走得更远。

1. Claude Code:不只是聊天框

别再把它当成人机对话的 chatbot 了。把它当成一个需要护栏的自主 agent,你的整个工作流都会随之改变。

Anthropic 团队的 Boris Cherny 给出的核心原则简单到一句话:给 Claude 一个验证自己产出是否正确的办法。 没有这个闭环,你是唯一的反馈信号;有了它,Claude 会一直迭代直到代码真正能跑。Boris 估算仅这一步就能带来 2-3 倍的质量提升。

日常操作模式

Ctrl+G 可以在 Claude 执行前打开规划在编辑器里修改。规划只是文字,在它变成代码之前塑形。
当 Claude 犯错,在 prompt 末尾加一句 "Update CLAUDE.md so you don't repeat this." Boris 说 Claude "写自我约束规则的能力出奇的好"。这一条习惯的复利效应超过本指南里所有其他技巧。

2. .claude 目录,正确理解

大多数人打开 .claude/ 只看到 CLAUDE.md,然后走了。它底层是一个分层配置系统。

两种作用域:项目级(.claude/)在仓库里,提交到 git,团队共享。全局级(~/.claude/)在本地,跟着你在所有项目里生效。

心智模型:项目文件描述项目,全局文件描述你。

文件作用域提交 Git作用
CLAUDE.md项目+全局每次 session 加载的指令
CLAUDE.local.md仅项目你的私有项目笔记
settings.json项目+全局权限、hooks、环境变量、模型默认值
settings.local.json仅项目个人覆盖,自动 gitignore
.mcp.json仅项目团队共享 MCP 服务器
skills/<name>/SKILL.md项目+全局用 /name 调用的可复用 prompt
commands/*.md项目+全局单文件斜杠命令
agents/*.md项目+全局子 agent 定义
rules/*.md项目+全局主题限定指令,可选路径门控

典型项目骨架

my-repo/
├── .claude/
│   ├── settings.json
│   ├── agents/
│   │   ├── pr-review.md
│   │   └── test-writer.md
│   ├── skills/
│   │   └── api-conventions/SKILL.md
│   └── rules/
│       ├── frontend.md      # 路径门控到 src/frontend/
│       └── migrations.md    # 路径门控到 db/migrations/
├── CLAUDE.md                # 提交到 git,团队共享
├── CLAUDE.local.md          # gitignored,个人私有
└── .mcp.json                # 团队共享 MCP 服务器

容易忽略的点

运行 claude project purge ~/path/to/repo --dry-run 可以看到 Claude 为某个项目保留了哪些本地状态,转交笔记本前很有用。

3. CLAUDE.md:Boris 是怎么写的

CLAUDE.md 在每次 session 开头加载。写法不对,Claude 反复踩同一个坑。写法对了,同样的 prompt 突然就产出你真正能上线的代码。

Boris 只关心两件事,其余都是噪音:

Boris 团队自己用的 CLAUDE.md

# Development Workflow

**Always use `bun`, not `npm`.**

# 1. Make changes
# 2. Typecheck (fast)
bun run typecheck

# 3. Run tests
bun run test -- -t "test name"    # 单个测试套件
bun run test:file -- "glob"       # 指定文件

# 4. Lint before committing
bun run lint:file -- "file1.ts"
bun run lint

# 5. Before creating PR
bun run lint:claude && bun run test

再读一遍。 Claude 猜不到的构建命令、执行顺序、单测命令、PR 前检查清单。没有风格偏好,没有代码库导览,没有废话。

Boris 还在 PR review 中用 @claude 让 Claude 直接提交规则:

nit: use a string literal, not a ts enum
@claude add to CLAUDE.md to never use enums, always prefer literal unions

他管这叫 "复利工程"(Compounding Engineering):每次 PR review 都变成 CLAUDE.md 的一次升级。reviewer 指出一次错误,Claude 永远不再犯。

标准模板

# Code style
- Use ES modules (import/export), not CommonJS (require)

# Workflow
- Always use `bun`, not `npm`
- Run `bun run typecheck` before claiming done
- Never push to main directly. Always open a PR.

# Architecture
- All API routes go through src/api/middleware/auth.ts
- New database queries go in src/db/queries/. No inline raw SQL.

# Gotchas
- `User` and `UserRecord` are distinct types. UserRecord is the DB row, User is the runtime object.
- `formatCurrency` assumes USD. For international use `formatCurrencyByLocale`.

注意 Gotchas 那一栏。每一条都是从真实 PR 中 Claude 犯过的真实错误,在出错那一刻就被记录下来。当你看着模型把美元格式化发给法国用户的那个瞬间——记下来,一次就够了,再也不会发生。

不应该放在 CLAUDE.md 里的东西:标准语言规范、逐文件的代码库描述、长教程、API 文档、任何频繁变动的信息。

像 IMPORTANT 或 YOU MUST 这样的词会提升遵循率。少用,才有分量。

@path 语法引用外部文件,保持 CLAUDE.md 精简:

See @README.md for project overview and @package.json for scripts.
@~/.claude/my-preferences.md

值得研究的公开 CLAUDE.md

4. CLAUDE.local.md:你的私人驾驶舱

CLAUDE.local.mdCLAUDE.md 并列存放,自动 .gitignore,永远不会离开你的机器。

作者的用法:每次 PR 结束后,reviewer 的评论直接粘进 CLAUDE.local.md。几周后就变成了精确调教过的个人规则文件。

# Personal review notes (private)

# From PR feedback
- New SQS consumers need a DLQ and alarms in the same PR
- Use `Optional<T>` over null returns
- Tests for new endpoints must include the auth-failure case
- Prefer named tuples over plain dicts for return types with 3+ fields

# My own quirks to correct
- Stop using `console.log`; use the project logger instead
- Always update the OpenAPI spec when adding endpoints

每次 session 自动加载。Claude 从此自动包含 auth-failure 测试、自动更新 OpenAPI 规范。PR 上的 nitpick 评论两周内就消失了。

把项目反馈和个人习惯分成两栏——混在一起难维护。
每隔几周清理——已经变成肌肉记忆的东西删掉,只保留"还在波动中"的那些。
· · ·

5. Skills 深入

Skills 是把 Claude Code 从"什么都能做的 agent"变成"按照你团队的方式,做好项目真正需要的三四件事"的 agent。写过一两个之后,你会忍不住一直用它们。

5.1 Skills 是什么

某个周二,我需要 Claude 用同样的方式总结未提交的 diff,于是我往 ~/.claude/skills/ 丢了一个文件夹,完事。那个文件夹就是 skill。里面放一个 SKILL.md,带着 frontmatter 和指令,文件夹名本身就是你在 prompt 里敲的斜杠命令。项目级放在 .claude/skills/<name>/,全局级放在 ~/.claude/skills/<name>/

最小的有用版本:

---
description: 总结未提交的改动,标注风险。适用于用户问改了什么、要 commit message、要 review diff 的场景。
---

## Current changes

!`git diff HEAD`

## Instructions

用两到三个 bullet 总结改动,然后列出风险:缺少错误处理、硬编码值、需要更新的测试。

保存到 ~/.claude/skills/summarize-changes/SKILL.md,之后所有 session 里都能用 /summarize-changes

Skills 的三个核心能力:

Frontmatter 有很多可选开关:

---
name: my-skill
description: 什么时候用这个 skill
disable-model-invocation: true   # 只有用户明确敲 /my-skill 时才触发
allowed-tools: Read, Grep, Bash
agent: read-only
---
有副作用的 skill 加 disable-model-invocation: true。你希望 /ship 只在明确敲出来时部署,而不是 Claude 觉得"是时候了"就自己触发。

5.2 真实 Skill 示例:Go API 规范

这是一个给 Go 服务团队写的完整 skill。携带了规范、坑和新建 HTTP handler 的脚手架。

.claude/skills/go-handler/
├── SKILL.md
├── templates/
│   └── handler.go.tmpl
└── examples/
    └── healthz.go
---
description: 按照团队的路由、验证、错误处理和测试规范,为 Go 服务搭建新的 HTTP handler。适用于用户要加新端点、新 handler、或扩展已有路由组。
---

# Go HTTP Handler Skill

## Stack
- Go 1.22 with chi router
- sqlc for typed queries,绝不在 handler 里写裸 SQL
- zap for structured logging,绝不用 fmt.Println
- testify for assertions,优先 table-driven tests

## Gotchas
- `chi.URLParam` 对缺失参数返回 `""`,不返回 error。必须检查。
- 我们的 `httperr.Wrap` 不负责日志。返回前用 `h.log.Error` 单独记。
- Auth 中间件通过 `context.Value(authkey.User)` 注入。需要 type-assert 到 `*models.User`。
- sqlc nullable strings 用 `pgtype.Text`。调用 `.String` 之前检查 `.Valid`。
- 测试必须用 `httptest.NewRecorder` 和 `httptest.NewRequest`。不能启真实 server。

一个新开发者上手第一天就能交付完全符合规范的端点,不用先把代码库刨一遍。

5.3 值得安装的 Skills

mattpocock/skills 是最热门的 skills 仓库,约 10 万星。几个我常驻的:

npx skills@latest add mattpocock/skills 安装。

Jeffallan/claude-skills 提供 66 个语言专属 profile:go-pro、python-pro、java-architect、typescript-pro、rust-engineer、sql-pro 等。可以组合。一个 Next.js 任务同时拉 nextjs-developer 和 typescript-pro。

Anthropic 官方 skills:

如果一件事你一天做超过一次,把它变成 skill。任何你反复做的事都是一个待写的 skill。
Skill 一定要进 git。它们变成了组织知识,新工程师 clone 仓库就免费拿到团队积累的实践。
· · ·

6. 构建自定义 Subagent

开一个 subagent,它能啃完五十个文件而不撑爆你的主 session,然后交回一份干净的摘要。隔离的上下文。限定的工具权限。独立的爆炸半径。作者是在一次调试 session 里被耗光了 context 预算(在 monorepo 里追 import 追了半天)之后开始用 subagent 的,现在已是默认选择。

.claude/agents/ 放一个 markdown 文件(项目级),或者 ~/.claude/agents/(全局级)。Frontmatter 声明 name、description、tools、model。五行,完整契约。

6.1 /pr-review Agent 详解

上上周五作者差点把缺了 null check 的 PR 推上去,于是写了这个 agent。

---
name: pr-review
description: 审查当前分支对 main 的 diff,找出 bug、安全问题、遗漏的边缘情况、违反项目规范的地方。在开 PR 前主动使用。
tools: Read, Grep, Glob, Bash
model: opus
---

You are a senior staff engineer reviewing a pull request.
Thorough, direct, goal is to catch issues before human reviewers do.

## Process
1. Run `git diff main...HEAD`
2. Run `git log main..HEAD --oneline`
3. Read full files, not just diff context
4. Cross-check against CLAUDE.md, CLAUDE.local.md, and .claude/rules/

## Flag
- Correctness bugs: off-by-one, null handling, error paths, race conditions
- Security: injection risks, missing auth checks, secrets in code
- Missing tests for new logic
- N+1 queries
- Convention violations from CLAUDE.md or rules/

## Do NOT flag
- Style preferences not in project rules
- Refactoring suggestions for working code
- Anything outside this diff

## Output
Group by severity (Critical / High / Medium / Low). File + line + issue + suggested fix.
End with a verdict: **SHIP**, **FIX FIRST**, or **REWORK**.

触发方式是输入 "Have the pr-review agent look at my current branch." Subagent 在隔离上下文中完成工作,主 session 不会被 review 的噪声填满。

几个设计选择值得注意:工具列表刻意只读——能改代码的 reviewer 会合理化自己的修复而不是标记问题。选了 model: opus,因为抢在人类 reviewer 之前抓到安全漏洞值得这个成本。"Do NOT flag" 这一段才是让输出真正可用的关键,没有它会被变量命名风格的 nitpick 淹没。

十分钟搭完,已经救了两次。

6.2 值得借鉴的 Subagent

Claude Code 团队自己的工作流里每天在跑 build-validator、code-architect、code-simplifier、oncall-guide、verify-app。

Agent功能
security-reviewer注入、认证、密钥、不安全的反序列化
test-writer生成测试,和 code-reviewer 成对循环
debugger追踪失败测试到根因
performance-auditor性能剖析
migration-writer生成符合项目规范的数据库迁移
release-notes-writer从 commit 历史生成 changelog
· · ·

7. MCP 与插件:接驳外部世界

Claude Code 通过 MCP(Model Context Protocol)和插件系统接入外部工具和数据源。

团队共享 MCP:.mcp.json 定义团队共用的 MCP 服务器。一个典型配置:

{
  "mcpServers": {
    "linear": { "command": "npx", "args": ["-y", "@linear/mcp"] },
    "slack": { "command": "npx", "args": ["-y", "@slack/mcp"] },
    "postgres": {
      "command": "npx", "args": ["-y", "@anthropic/mcp-postgres"],
      "env": { "DATABASE_URL": "${DATABASE_URL}" }
    }
  }
}

个人 MCP:~/.claude/.mcp.json 放私人的外部工具。不会被提交。

插件系统:通过 ~/.claude/plugins/ 安装,扩展 Claude Code 的能力。社区插件覆盖了从 Jira 集成到自定义 UI 渲染的各种场景。

8. Cursor 集成:IDE 里的 Claude

Claude Code 可以在 Cursor 里作为终端工具使用,也可以直接通过 Cursor 的模型选择器调用 Claude Opus/Sonnet。两者的区别:

作者的推荐:重活给 Claude Code 终端,轻活给 Cursor 补全。 当你需要跨文件重构、写测试、审计代码时,在 Cursor 的终端里开 Claude Code。当你只是补一个函数、改一行 import 时,用 Cursor 原生补全。

9. 安全与最佳实践

当 Claude Code 从"偶尔问问"变成"日常主力",安全考虑必须前置。

结语

这篇文章的核心观点和 Opus 4.8 在同一天登上讨论榜前列,不是巧合。

新旗舰模型发布当天,一线开发者讨论最热的不是跑分——是 怎么把模型嵌进自己的工作流。工具链已经成熟到了这一步:你不需要每出一个新模型就重搭工作流。把规则写进 CLAUDE.md,把重复操作封进 Skill,把重活拆给 Subagent。换更强的模型,整条流水线直接提速。

心态也从 "问 AI 一个问题" 变成了 "给 AI 搭一套班子"

Boris 把这个过程叫做 复利工程:你今天往 CLAUDE.md 里加的一条规则,明天、后天、每个项目,它都在生效。Claude 在那边迭代改进自己的代码,你在这边迭代改进它运行的那套规则。两边都在变快。

这就是 Claude Code 作为日常主力的真正含义。


附录:资源速查

资源链接
mattpocock/skills(10万星)github.com/mattpocock/skills
Jeffallan/claude-skills(66个语言profile)github.com/Jeffallan/claude-skills
awesome-claude-codegithub.com/hesreallyhim/awesome-claude-code
claudelog.com(社区 CLAUDE.md 精选)claudelog.com
Anthropic claude-code-actiongithub.com/anthropics/claude-code-action
原文(英文)arps18.github.io/posts/claude-code-mastery/