生命不息,折腾不止。DeepSeek Harness 系列收工了,今天开新坑——Claude Code。这一篇不讲花活,就干一件事:把它装好,再把它塞进管道和脚本,变成一个能替你干活的命令行搭子。

一、Claude Code 到底是个啥(一句话版)

Claude Code 是 Anthropic 官方的终端 AI 编程工具。它不像网页版那样只能聊天,而是直接住在你的终端里:能读你的代码库、改文件、跑命令、执行 git 操作,全程你可以盯着它每一步、随时叫停。

把它理解成一个「住进 shell 的 AI 搭子」就够了。你要做的不是学会它,而是学会指挥它——这正是这个系列要折腾的事。

二、安装与登录:三分钟开跑

前提:装好 Node.js(18 以上)。然后一条命令:

1
npm install -g @anthropic-ai/claude-code

进到你的项目目录,直接敲:

1
2
cd your-project
claude

首次运行会提示登录。这里插一句:国内直连和绑卡的门槛,之前那篇《Claude Code 国内配置教程》已经讲透了,用中转站一步到位(国内直连、免绑卡、人民币按量付费);这篇默认你已经配好,直接开搞实战。

登录后你会进到一个交互界面,可以像聊天一样下指令:帮我看看这个项目是干嘛的。它读文件、给结论,每一步操作前会问你允不允许。不放心的话,先用只读指令(”解释一下 xxx”)熟悉它的节奏。

三、CLAUDE.md:给它写一份「项目说明书」

Claude Code 每次启动,都会自动读项目根目录的 CLAUDE.md。这文件就是它的「记忆卡」——把你希望它每次都记住的东西写进去,它就不用每次重新摸索。

一个真实能用的 CLAUDE.md 长这样:

1
2
3
4
5
6
7
8
9
10
11
# Build & test
- Dev server: `npm run dev`
- 提交前必须过 `npm run lint`

# Code style
- TypeScript,strict mode
- API 错误统一返回 `{ error: string, code: string }`

# Architecture
- 路由在 `src/api/routes/`
- 业务逻辑在 `src/logic/`

它支持多层:项目根目录一份,子目录里还能放各自的 CLAUDE.md(读哪个目录的文件,就自动带上哪个目录的说明);全局的放 ~/.claude/CLAUDE.md,所有项目通用。

两个硬规矩要记住:

  1. 越短越好,控制在 200 行以内。超过的会被静默忽略,而且每多一条「常年指令」都会在每一轮消耗注意力,臃肿的说明书反而让它不听话。
  2. 写「事实和规矩」,不写废话。构建命令、目录结构、必须遵守的约定——这些是它的价值所在。

四、headless 模式:把它塞进管道和脚本

交互界面适合人盯着用,但「自动化搭子」的关键是 headless 模式——给个任务、输出结果、直接退出,全程不需要你坐在那按回车。

核心就一个 -p 参数(print mode):

1
claude -p "用一句话解释这个项目是干嘛的"

它跑完就把结果打到 stdout,然后退出。这一下,它就能进管道了:

1
2
3
4
5
# 把构建错误日志丢给它分析
cat build-error.txt | claude -p "精炼解释这个构建错误的根本原因" > result.txt

# 分析代码并输出结构化 JSON,方便脚本接着处理
cat code.py | claude -p "分析这段代码的潜在 bug" --output-format json > analysis.json

配合 shell 定时任务,就是最简单的自动化:每天早上把昨天的日志交给它总结,或者让它在 CI 里自动 review 一次提交。这是 Claude Code 区别于「聊天工具」的分水岭——它能被程序调用

想验一下链路通不通,跑这条(能验证登录态、模型权限、工具权限):

1
claude -p 'echo ok' --output-format json

五、Hooks:让它自己管住自己

自动化最怕「它自作主张改坏东西」。Claude Code 的 **Hooks(钩子)**就是给自动化上的保险:在工具调用前/后、会话开始/结束这些时刻,自动执行你指定的命令或检查。

配置写在 ~/.claude/settings.json(全局)或 .claude/settings.json(项目级)。举两个最实用的例子。

例 1:禁止改敏感文件。在工具调用前拦截,碰到 .envpackage-lock.json 直接拒绝:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "python3 -c \"import json,sys; d=json.load(sys.stdin); p=d.get('tool_input',{}).get('file_path',''); sys.exit(2 if any(x in p for x in ['.env','package-lock.json','.git/']) else 0)\""
}
]
}
]
}
}

脚本返回状态码 2,Claude Code 就会拦截这次调用。规则说得很明白:敏感文件,碰都别碰

例 2:改完 .ts 文件自动格式化。工具调用成功后跑 prettier:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "jq -r '.tool_input.file_path' | { read f; echo \"$f\" | grep -q '\\.ts$' && npx prettier --write \"$f\"; }"
}
]
}
]
}
}

钩子事件就三类记牢:PreToolUse(调用前)、PostToolUse(成功后)、Stop(回复结束时),另外还有 SessionStartSessionEndNotification 等会话级事件。命令型钩子靠退出码判定(0 放行、2 拒绝),提示词型钩子(type: "prompt")则让模型帮你做语义判断。

六、先把地图铺开:后面几篇要打的地形

这一篇只搭了骨架,Claude Code 真正好玩的东西在后面,先给你画个地图:

  • Subagents(子代理).claude/agents/<name>.md 里定义,每个子代理有独立的上下文窗口,能并行帮你搜代码、跑调研,干完只把结论送回主对话——主上下文永远清爽。
  • Slash Commands(斜杠命令).claude/commands/<name>.md 里存一段提示词,敲 /命令名 就触发,相当于给你的工作流做快捷键。
  • Skills.claude/skills/<name>/SKILL.md,多步骤的可复用流程,平时零成本,用到时才加载。

这些就是 Claude Code 从「工具」升级成「搭子」的关键零件,咱们一篇一篇拆。

生命不息,折腾不止。下一篇上硬菜:Subagents 实战——把一个「改完三个模块还要统一测试」的大任务,拆给几个子代理并行干,看看主对话怎么坐收渔利。你先把 claude -p 和 CLAUDE.md 用顺手,下一篇见。