Claude Code 使用教程

定位、CLAUDE.md 与 .claude 配置体系、终端与 VS Code 工作流、常见命令、权限控制与工程化使用建议

Posted by Ekko on July 7, 2026

这篇笔记的目标是把 Claude Code 放回一个准确的位置里理解清楚,再给出一套可以直接上手的使用路径。重点不只是“命令怎么敲”,而是它到底解决什么问题、适合放在什么开发环节、与补全型 AI 工具的边界在哪里。

正文会先解释 Claude Code 的产品定位和能力模型,再解释它真正依赖的配置体系,包括 CLAUDE.md.claude/ 目录、规则、技能、hooks、agents 的职责分工,然后再展开终端与 VS Code 两条使用路径,最后补充高频工作流、权限控制、常见误区与工程化实践建议。这样读完之后,不只是会敲几个命令,还能真正理解 Claude Code 在项目里是怎么长期工作的。

官方文档:Claude Code OverviewClaude Code QuickstartClaude Code Common Workflows

配置与记忆:How Claude remembers your projectExplore the .claude directoryClaude Code settings

IDE 集成:Use Claude Code in VS Code

扩展机制:Extend Claude CodeAutomate actions with hooksCreate custom subagents

社区实践:multica-ai/andrej-karpathy-skillsGitHub 10万星 CLAUDE.md 解析

常见问题:Claude Code user FAQ

[TOC]


一、Claude Code 是什么

Claude Code 可以概括为一类 agentic coding tool,也就是“代理式编码工具”。

它和传统聊天框最大的区别,不在于模型本身,而在于它拥有对开发环境的直接操作能力:

  • 读取代码仓库
  • 搜索和理解跨文件上下文
  • 编辑多个文件
  • 运行命令
  • 调用开发工具链
  • 在终端、IDE、桌面应用和浏览器中持续工作

这意味着 Claude Code 不是只负责“回答问题”,而是可以沿着“理解任务 -> 制定方案 -> 修改代码 -> 执行验证 -> 继续修正”这条链路完成真实开发动作。

它更像代理,而不是补全器

很多人第一次接触 Claude Code 时,容易把它和 GitHub CopilotCursor Tab 这类补全能力放在同一层比较,但二者的工作单位并不一样。

工具形态 典型输入 典型输出 工作单位 更适合的任务
行级补全工具 当前光标附近的上下文 下一行或下一段代码 局部代码片段 快速补代码、补样板、补语法
聊天式问答工具 一段问题描述 一段解释或示例 单次回答 概念解释、方案讨论、查资料
Claude Code 这类代理工具 一个完整开发任务 多文件修改、命令执行、验证结果 端到端任务 修 Bug、做重构、补测试、理解项目、推进中型需求

如果只用一句话概括:

补全型工具更像“续写当前代码”,Claude Code 更像“接手一个开发任务并在仓库里推进它”。

它解决的核心问题

在真实项目里,很多低效并不是“不会写某一行代码”,而是:

  • 代码分散在多个文件,定位成本很高
  • 修改点涉及配置、实现、测试、文档多个层面
  • 排错时需要一边看代码,一边跑命令,一边验证输出
  • 开发任务往往不是“写一个函数”,而是“把一个功能真正落地”

Claude Code 的价值正好落在这类跨文件、跨步骤、带验证的任务上。

例如下面这些任务,通常都比较适合交给它:

  • “解释这个仓库的结构和主链路”
  • “定位登录失败的原因,并跑测试验证修复”
  • “为某个模块补测试,并修复测试暴露出的失败点”
  • “把旧写法重构成新 API,同时保证行为不变”
  • “根据当前变更生成提交说明或 PR 描述”

它不是什么

理解边界比理解能力更重要。Claude Code 并不是下面这些东西:

  • 不是无条件可靠的自动程序员,输出仍然需要审查
  • 不是架构责任的替代者,需求边界和技术决策仍要人工把关
  • 不是对所有命令都能盲目执行的脚本机器人,权限和环境限制始终存在
  • 不是“描述一句话就一定能一次成功”的黑箱系统,复杂任务仍然需要分阶段推进

因此,把 Claude Code 当成“有执行能力的开发代理”,通常比把它当成“全自动写代码工具”更符合实际。


二、Claude Code 适合放在开发流程的哪一层

如果把开发过程拆成几个层次,Claude Code 主要覆盖的是“执行层”和“验证层”。

graph TB
    A[需求与边界] --> B[方案与拆解]
    B --> C[代码实现]
    C --> D[命令执行]
    D --> E[测试与验证]
    E --> F[提交与整理]

    U[人工主导] --> A
    U --> B
    CC[Claude Code 协助或接手] --> C
    CC --> D
    CC --> E
    CC --> F

在这个分层里:

  • 需求是否正确,仍然主要由人来定义
  • 方案是否合理,通常由人主导、工具辅助
  • 实现、修改、执行、验证、整理,是 Claude Code 最容易产生价值的环节

这也是为什么它在“修 Bug、补测试、读仓库、做重构”上表现通常比“凭空设计一个完整系统”更稳定。

最适合 Claude Code 的任务特征

下面这几类任务,命中率通常比较高:

任务特征 说明 是否适合
有明确目标 例如“修复某个报错”“补全某个测试”“解释某个模块” 很适合
可以验证 能通过测试、命令、页面行为、构建结果验证 很适合
上下文在仓库中 关键事实主要存在于代码和配置中 很适合
影响面中等 涉及多个文件,但不需要全局重构整个系统 较适合
需求高度模糊 业务目标、边界、约束都没有收敛 不太适合
决策成本极高 例如核心架构迁移、长期技术路线选择 需要人工主导

一个常见误区

很多失败体验,并不是工具能力不足,而是任务表达方式本身就不适合代理执行。

例如下面两种输入,效果通常会差很多:

1
帮我把这个项目优化一下
1
先分析订单模块的慢查询来源,给出 2 到 3 种修复方案;确认后只修改 SQL 和索引相关代码,并执行现有测试验证没有回归

第二种表达之所以更有效,不是因为“提示词更花哨”,而是因为它补齐了代理最需要的信息:

  • 分析对象
  • 任务目标
  • 输出形式
  • 变更边界
  • 验证要求

三、真正开始使用前,先理解它会读哪些文件

如果只会 claude/plan/compact 这些命令,其实还没有真正学会 Claude Code

Claude Code 真正和普通聊天工具拉开差距的地方,不只是它能读代码、改文件、跑命令,而是它有一整套 跨会话、跨项目、可沉淀的配置与记忆体系。这一层如果不理解,后面几乎所有“为什么它这次记得、下次又忘了”“为什么这个规则总不生效”“为什么还要建 .claude/ 目录”的问题,都会解释不通。

Claude Code 不是只靠当前对话工作

每次会话开始时,Claude Code 的上下文窗口是新的,但它并不是从完全空白开始。官方文档里,长期知识主要来自两类来源:

机制 谁写入 作用 适合存什么
CLAUDE.md 人工维护 在每次会话开始时给 Claude 固定上下文 构建命令、测试命令、项目结构、团队规范、总是要遵守的规则
Auto memory Claude 自动积累 记录被反复纠正后的经验 调试经验、项目偏好、Claude 从多次会话里归纳出的模式

有一个很重要的边界必须先说清楚:

CLAUDE.md 和 auto memory 都是“注入上下文”,不是强制执行器。

这意味着:

  • 它们负责提高 Claude 的一致性
  • 它们不能替代权限控制
  • 如果要“无论如何都不允许做某事”,应该考虑 hooks 或权限规则,而不是只写一句自然语言提醒

CLAUDE.md 到底是干什么的

可以把 CLAUDE.md 理解成“项目给 Claude 的长期工作说明书”。

它最适合放的是那些本来每次开新会话都要重新解释一遍的东西,例如:

  • 项目使用什么构建、测试、格式化命令
  • 代码组织方式和目录约束
  • 常见工程约定,例如导出方式、测试位置、接口返回结构
  • 某些总是需要遵守的工作流,例如“提交前必须跑测试”

官方文档对 CLAUDE.md 的建议很明确:

  • 尽量控制在 200 行以内
  • 只放“每次会话都应该知道”的事实
  • 太大的内容不要继续堆在里面,应拆到 rules 或 skills

一个最小可用的 CLAUDE.md,通常长这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Project conventions

## Commands
- Build: `npm run build`
- Test: `npm test`
- Lint: `npm run lint`

## Stack
- TypeScript with strict mode
- React 19, functional components only

## Rules
- Named exports, never default exports
- Tests live next to source: `foo.ts` -> `foo.test.ts`
- All API routes return `{ data, error }` shape

这段示例的价值不在于语法,而在于它说明了 CLAUDE.md 的写法原则:

  • 写命令,不写口号
  • 写结构事实,不写抽象愿景
  • 写可验证规则,不写模糊建议

社区里使用度较高的一类约定:Karpathy 风格 CLAUDE.md

除了官方文档给出的 CLAUDE.md 机制之外,社区里传播度很高的一类实践,是把一组 行为约束 直接写进 CLAUDE.md,用来抑制 AI 编码里最常见的四类失控行为。

multica-ai/andrej-karpathy-skills 这类仓库,本质上就在做这件事:不是再加一堆工具,而是把“Claude 应该如何行动”的约定前置到提示层。wikimind 的解读文章则把这套思路总结成一句更直白的话:核心不是教 AI 更多技巧,而是让它先学会守规矩。

这类约定之所以传播快,是因为它击中的不是某个语言或框架问题,而是代理式编码里非常普遍的四个失控点:

社区规则 它在约束什么 对应的常见问题
Think Before Coding 先暴露假设,再动手 不澄清需求,直接按自己的理解开干
Simplicity First 只写最小必要代码 过度设计、凭空抽象、额外加功能
Surgical Changes 只动必须改的部分 顺手改周边代码、误删注释、无关重构
Goal-Driven Execution 用可验证目标驱动实现 只说“已经做好了”,但没有验证闭环

如果拆开看,这四条规则分别在解决不同层的问题。

Think Before Coding 的重点,不是“多想一会儿”,而是要求代理把假设显式说出来。在需求模糊、接口语义不清、边界条件未定义时,先提出多种解释,再请求确认,而不是静默选择一种理解并一路做下去。

Simplicity First 在工程上非常重要,因为很多 AI 编码失败,并不是代码写不出来,而是写得过头。需求只要求局部改动,却顺手补了一层配置抽象、可扩展接口、通用框架和未来场景,这一类“看起来高级、实际上增加维护成本”的产物,正是这条规则要压制的对象。

Surgical Changes 更像对 diff 的纪律要求。它要求每一行改动都能追溯到当前任务,而不是把“顺手优化”混进同一轮提交。这一点和前文提到的“只看 diff,不看总结”是直接一致的。

Goal-Driven Execution 则非常适合 Claude Code 这类代理工具。因为这类工具真正擅长的不是照着口头命令机械执行,而是围绕一个可验证目标迭代闭环。例如把“修 bug”改写成“先写一个能复现 bug 的测试,再让它通过”,就能明显提升代理的自主闭环能力。

这类约定为什么适合写进 CLAUDE.md

这组规则的特点是:它们不是某次任务临时才会用到,而是几乎每次编码都值得默认生效。

因此它们更适合作为 CLAUDE.md 里的长期行为约束,而不是零散地写在某次对话里。可以概括为:

  • 它不是单次 workflow,更像常驻行为边界
  • 它不是项目特有知识,而是代理执行纪律
  • 它和项目自己的构建命令、目录结构、测试约定可以并存

这也是为什么这类仓库通常提供两种集成方式:

  • 直接把这套规则合并进项目 CLAUDE.md
  • 通过插件或 skills 方式安装,再与项目自身规则叠加

社区版本中文译文:可直接贴进 CLAUDE.md

如果目标就是“找一段社区里已经被大量使用的行为约束,直接放进项目 CLAUDE.md”,那比起再造一份加工过的模板,更直接的做法确实是把那份高传播度内容直接贴进来。

下面这段是按社区流传版本整理后的中文译文,定位就是:

  • 可直接复制
  • 适合作为项目 CLAUDE.md 中的行为约束段落
  • 用来约束代理如何思考、如何改动、如何验证
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# CLAUDE.md

降低 AI 写代码常见错误的行为准则。可与项目专属规则合并使用。

**权衡:** 这些规则偏向“谨慎”而非“速度”。琐碎任务,请自行判断。

## 动手前先想清楚(Think Before Coding)

**不假设、不藏糊涂、把权衡摊开来说。**

实现之前:
- 把假设明确说出来,不确定就问。
- 有多种理解时,把所有可能列出来,不要擅自挑一个就直接开始做。
- 如果有更简单的方案,说出来;必要时明确指出当前方案过度复杂。
- 哪里不清楚,就停下来,指出困惑点,再继续。

## 最小化原则(Simplicity First)

**只写解决问题的最小代码,不要任何“以防万一”。**

- 不写需求里没要求的功能。
- 不为一次性代码引入抽象。
- 不增加未要求的“灵活性”或“可配置性”。
- 不为不可能发生的场景补无意义的错误处理。
- 如果写了 200 行而 50 行就够,应该重写。

判断标准:
- 如果资深工程师会认为这段实现过度复杂,那它通常就是过度复杂。

## 外科手术式改动(Surgical Changes)

**只动该动的,只清自己的改动产生的问题。**

修改现有代码时:
- 不顺手改周边代码、注释或格式。
- 不重构没有坏的东西。
- 尽量贴合现有风格,即使个人更偏好另一种写法。
- 发现无关死代码时,可以指出,但不要在当前任务里顺手删除。

如果当前改动制造了“孤儿代码”:
- 删除因为本次改动而失去用途的 import、变量、函数。
- 不删除改动前就已经存在的死代码,除非任务明确要求。

判断标准:
- 每一行改动都应能追溯到当前任务。

## 目标驱动执行(Goal-Driven Execution)

**先定义成功标准,再循环到验证通过为止。**

把任务改写成可验证目标:
- “加个校验” -> “先写无效输入的测试,再让它通过”
- “修这个 bug” -> “先写能复现 bug 的测试,再让它通过”
- “重构 X” -> “确保重构前后测试都通过”

多步任务先写简短计划:
1. [步骤] -> 验证:[检查项]
2. [步骤] -> 验证:[检查项]
3. [步骤] -> 验证:[检查项]

强的成功标准会让代理形成闭环;
弱的成功标准,例如“让它跑起来”,通常只会带来更多来回确认。

这段内容更适合被理解成 行为纪律基线,而不是项目完整模板。它最适合解决的是“代理应该怎么行动”,而不是“项目本身长什么样”。

怎样把这段译文和项目规则拼起来

更稳妥的做法通常不是只保留这一段,而是把它和项目自己的事实性规则并排放在同一个 CLAUDE.md 里。

可以概括为两层:

  • 上层是行为纪律:先澄清、少过度设计、只做必要改动、必须可验证
  • 下层是项目事实:构建命令、测试命令、目录结构、架构边界、接口约定

这样组合的好处是:

  • 社区通用纪律和项目专属事实不会混在一起
  • Claude Code 既知道“自己该怎么行动”,也知道“这个仓库到底怎么工作”
  • 后续继续维护时,能明确区分哪些是通用规则,哪些是本项目私有知识

使用这类约定时的边界

这类社区实践很有价值,但它仍然不是官方唯一标准,也不适合不加判断地原样照搬。

至少有三个边界需要单独说明:

  • 它偏向谨慎而不是速度,对极小任务可能显得偏重
  • 它解决的是代理行为纪律,不替代项目级事实配置
  • 它仍然属于上下文约束,不是权限系统;真正必须强制发生的动作,仍应考虑 hooks 或权限规则

因此,更准确的定位是:

Karpathy 风格 CLAUDE.md 不是 Claude Code 的官方默认模板,但它已经成为当前社区里使用度较高的一类行为约定,尤其适合用来约束“先澄清、少过度设计、只做必要改动、必须可验证”这几件事。

CLAUDE.md 的作用域不是只有一个

很多人会以为 CLAUDE.md 只有项目根目录那一个文件,但官方文档里它实际上有多个作用域。

作用域 位置 典型用途 是否共享
Managed 系统级路径 企业统一规范、安全政策、合规要求 组织共享
User ~/.claude/CLAUDE.md 个人偏好,跨项目生效 不共享
Project ./CLAUDE.md./.claude/CLAUDE.md 项目级规范、团队约定 团队共享
Local ./CLAUDE.local.md 个人在当前项目里的私有偏好 不共享

这里最容易忽略的两个点是:

  • CLAUDE.local.md 应该加入 .gitignore
  • Claude Code 会沿当前工作目录向上查找 CLAUDE.md,而不是只看当前文件夹

这也解释了为什么在 monorepo 或多层目录里,Claude 的规则有时会带着“父目录的习惯”。

.claude/ 目录结构到底装什么

如果 CLAUDE.md 是“总说明书”,那 .claude/ 目录就是“细分能力和项目配置的落点”。

根据官方目录文档,典型结构可以概括为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
your-project/
├── CLAUDE.md
├── CLAUDE.local.md
├── .mcp.json
└── .claude/
    ├── settings.json
    ├── settings.local.json
    ├── rules/
    │   ├── testing.md
    │   └── api-design.md
    ├── skills/
    │   └── deploy/
    │       └── SKILL.md
    ├── commands/
    │   └── fix-issue.md
    ├── agents/
    │   └── code-reviewer.md
    ├── workflows/
    │   └── batch-refactor.js
    └── agent-memory/
        └── reviewer/
            └── MEMORY.md

这棵树的意义,是把“什么应该一直加载”“什么只在需要时加载”“什么属于执行自动化”“什么属于并行代理”拆开。

这些文件各自负责什么

文件或目录 作用 什么时候应该用
CLAUDE.md 项目长期说明书 每次会话都需要知道的规则
.claude/settings.json 配置权限、hooks、环境变量、模型默认项 想控制 Claude 的运行方式
.claude/settings.local.json 当前项目的个人私有覆盖配置 不想提交到仓库的个人设置
.claude/rules/*.md 按主题或路径拆开的规则 CLAUDE.md 太大、规则只影响局部目录
.claude/skills/.../SKILL.md 可复用知识或工作流 某套步骤会反复用到,但不是每次都要加载
.claude/commands/*.md 单文件命令模板 希望通过 /name 触发固定指令
.claude/agents/*.md 自定义子代理 需要专门的 reviewer、debugger、researcher
.claude/workflows/*.js 多代理编排脚本 复杂并行任务、批量操作
.mcp.json 项目共享的 MCP 配置 团队都要连同一个外部系统

真正重要的不是记住所有文件名,而是记住分工边界:

  • 总是要知道的,放 CLAUDE.md
  • 局部目录或专题规则,放 rules
  • 只有某些任务才需要的知识或流程,放 skills
  • 一定要自动发生的动作,放 hooks
  • 需要隔离上下文或并行处理的角色,放 agents
  • 需要访问外部系统,放 MCP

settings.json、hooks、rules、skills、agents 之间怎么分工

这几个概念最容易混在一起。可以直接用下面这张表来区分:

能力 本质 是否每次都加载 更适合解决什么问题
CLAUDE.md 持久说明书 项目共识、通用命令、长期规则
rules 条件化或专题化说明书 按路径或条件加载 局部目录规范、语言或模块约束
skills 可调用的知识与工作流 部署、评审、某类专题操作
hooks 事件驱动自动化 不靠模型判断,事件触发 自动格式化、拦截危险操作、审计
agents 独立上下文的专用工作者 按需启用 reviewer、debugger、researcher
MCP 外部服务连接层 按配置可用 数据库、浏览器、Slack、监控平台

其中最容易误用的是 CLAUDE.mdskills

  • 如果内容是“Claude 每次都应该知道”,放 CLAUDE.md
  • 如果内容是“只有某种任务才需要”,放 skills

例如:

  • “本项目用 pnpm,提交前必须跑 pnpm test”适合放 CLAUDE.md
  • “发布到预发环境的完整流程”更适合做成 /deploy-staging 之类的 skill

Hooks 为什么重要

很多人会把所有规则都写进 CLAUDE.md,然后期待 Claude 每次都完全遵守。但官方文档明确区分了:

  • CLAUDE.md 是上下文
  • hooks 是确定性自动化

这意味着两者解决的问题不同:

  • “尽量按这个规范做”适合写进 CLAUDE.md
  • “每次编辑后都自动跑格式化”更适合用 hooks
  • “永远不允许改某些受保护文件”更适合用 hooks 或权限规则

如果一个动作必须稳定发生,而不是希望模型“最好记得”,那就应该优先考虑 hooks

学 Claude Code,真正应该学到什么

到这里为止,真正应该建立起来的不是“我会敲几个命令”,而是下面这套认识:

  1. Claude Code 不是一次性聊天工具,而是带持久配置的开发代理
  2. CLAUDE.md 负责长期上下文,auto memory 负责自动积累经验
  3. .claude/ 目录是项目级扩展能力的承载点
  4. rulesskillshooksagentsMCP 解决的是不同层的问题
  5. 命令只是入口,真正决定体验的是这套配置如何被组织

如果没有这一层,前面的命令就只是“会用一点终端交互”;有了这一层,才开始真正进入 Claude Code 的工程化使用。


四、安装与登录

官方文档当前把 Native Install 作为推荐安装方式,macOSLinuxWSL 可以直接使用安装脚本。

终端 CLI 安装

1
2
3
4
5
6
7
8
9
10
11
# macOS / Linux / WSL
curl -fsSL https://claude.ai/install.sh | bash

# Homebrew
brew install --cask claude-code

# Windows PowerShell
irm https://claude.ai/install.ps1 | iex

# Windows CMD
curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

几个安装层面的关键信息需要先看清楚:

  • 原生安装方式是官方推荐路径
  • 原生安装会自动后台更新
  • HomebrewWinGet 安装不会自动更新,需要手动升级
  • Homebrew 提供 claude-codeclaude-code@latest 两个渠道,前者更稳定,后者跟进更快

首次登录

安装完成后,在项目目录中启动:

1
2
cd your-project
claude

首次启动时会进入登录流程,浏览器授权完成后,本地会保存凭据,后续通常不需要重复登录。

如果需要重新登录或切换账号,可以在会话里执行:

1
/login

支持的账号来源

根据官方文档,Claude Code 可以通过多种账号体系使用:

  • Claude Pro / Max / Team / Enterprise
  • Claude Console
  • 受支持的第三方云提供方
  • 组织自建的 gateway

因此它并不只绑定一种使用方式,但首次上手时,最简单的路径仍然是直接使用官方账号登录。

常见安装问题

问题 常见原因 处理方式
claude: command not found 可执行文件目录未进入 PATH 检查安装结果并把对应目录加入 shell 配置
PowerShell 报 && 语法错误 把 CMD 命令放到了 PowerShell 里执行 改用 PowerShell 对应安装命令
irm 无法识别 把 PowerShell 命令放到了 CMD 里执行 切回 PowerShell 或使用 CMD 安装命令
登录后仍报认证异常 环境变量或账号来源冲突 检查认证方式,必要时重新 /login

五、第一次上手:从终端开始

终端是理解 Claude Code 工作方式最直接的入口,因为它把“读代码、改文件、跑命令、继续对话”放在同一条链路里。

一个最小上手路径

第一次进入一个项目时,可以按下面的顺序走:

  1. 进入仓库根目录后执行 claude
  2. 先问项目级问题,而不是立刻要求改代码
  3. 确认它对代码结构的理解是否可靠
  4. 再给一个可验证的小任务
  5. 最后让它运行测试或命令验证结果

例如可以从下面这些问题开始:

1
这个项目是干什么的?
1
它使用了哪些核心技术栈?
1
主入口在哪里?
1
解释一下目录结构和主要模块边界

这一步的目的不是“考模型”,而是先让它建立代码库上下文,同时让使用者判断它对仓库的理解是否准确。

第一次让它改代码

在确认它能读懂项目后,再给一个局部且可验证的任务,例如:

1
为 main 文件新增一个 hello world 函数,并解释改动点

根据官方 Quickstart,Claude Code 在要修改文件时会展示拟议变更,并请求授权。也就是说,它的默认工作方式不是“静默改代码”,而是“先提出修改,再等待确认”。

这套机制很关键,因为它直接决定了工具在真实仓库中的可控性。

一个更真实的使用顺序

比“写一个 hello world”更接近日常开发的链路通常是下面这样:

sequenceDiagram
    participant U as 开发者
    participant C as Claude Code
    participant R as 代码仓库
    participant T as 测试/命令环境

    U->>C: 描述问题或任务
    C->>R: 读取相关文件与结构
    C->>U: 说明理解与计划
    U->>C: 确认或修正边界
    C->>R: 提议修改多个文件
    U->>C: 审核并授权
    C->>T: 运行命令或测试
    T-->>C: 返回验证结果
    C-->>U: 汇总改动与剩余问题

真正高效的地方不在“让它一次写完”,而在“让它沿着可审查、可验证的链路推进任务”。

先分清两类命令

如果要把 Claude Code 真正用起来,第一件事不是背命令,而是先分清命令所在的层。

命令层级 输入位置 典型形式 作用
CLI 命令 终端 shell claude -p "..." 启动、恢复、脚本化调用、后台任务、认证、插件与 MCP 管理
会话内命令 claude 交互会话内部 /compact/resume/plan 切换模式、查看上下文、恢复会话、审查 diff、触发技能或工作流

如果这层不分清,后面最常见的问题就是:

  • /resume 当成 shell 命令去敲
  • claude -p 当成会话内命令输入
  • 不知道什么时候该用 /plan,什么时候该重新开一个终端会话

可以把它理解成:

claude ... 负责“怎么进入或管理会话”,/xxx 负责“进入会话之后怎么控制代理行为”。

CLI 命令合集

下面这一组命令属于终端层,应该在 shell 中执行。

启动与恢复

命令 说明 典型场景
claude 启动交互式会话 正常进入当前项目开始对话
claude "query" 启动交互式会话,并带一个初始问题 进入项目后直接让它解释代码库
claude -c 继续当前目录最近一次会话 今天继续昨天没做完的任务
claude -r "<session>" "query" 按会话 ID 或名称恢复指定会话 明确恢复某个重构或修 Bug 会话

示例:

1
2
cd your-project
claude
1
claude "给我一个这个仓库的整体概览"
1
claude -c
1
claude -r "auth-refactor" "继续昨天的登录重构任务"

一次性查询与脚本化调用

命令 说明 典型场景
claude -p "query" 非交互式执行一个任务,输出结果后退出 脚本、CI、一次性解释任务
cat file \| claude -p "query" 把管道输入交给 Claude 处理 分析日志、处理文本、解释构建输出
claude -c -p "query" 基于最近会话继续执行一次性查询 在已有上下文上做非交互式补充

示例:

1
claude -p "解释 src/auth/service.ts 的职责"
1
cat logs.txt | claude -p "概括错误类型,并按优先级排序"
1
claude -c -p "检查当前目录下是否还有类型错误风险"

安装、更新与认证

命令 说明 典型场景
claude update 更新到最新版本 原生安装后的手动更新
claude install stable 安装或重装指定渠道版本 重装稳定版、锁回稳定版
claude auth login 登录 Anthropic 账号 首次登录、切换认证方式
claude auth logout 退出当前认证 切换账号
claude auth status --text 查看当前认证状态 排查登录问题

示例:

1
2
3
claude auth login
claude auth status --text
claude update

后台会话与并行任务

命令 说明 典型场景
claude agents --json 查看后台会话列表 看有哪些并行代理在跑
claude attach <id> 把某个后台会话接回当前终端 继续查看某个长任务
claude logs <id> 查看后台会话最近输出 看进度、查错误
claude stop <id> 停止后台会话 中止错误方向的任务
claude rm <id> 从列表中移除后台会话 清理会话列表
claude respawn <id> 重启后台会话 更新版本后续跑某个后台任务

示例:

1
2
3
claude agents --json
claude logs 7c5dcf5d
claude attach 7c5dcf5d

MCP、插件与项目清理

命令 说明 典型场景
claude mcp 配置 MCP 服务器 连接外部工具、知识源、平台服务
claude mcp login <name> 为某个 MCP 服务完成 OAuth 登录 Sentry、GitHub 等服务授权
claude plugin ... 管理插件 安装官方或自定义插件
claude project purge --dry-run 预览项目本地 Claude 数据清理 清理会话缓存前先看影响范围

会话内 Slash 命令合集

下面这一组命令属于交互会话内部,只能在已经进入 claude 之后输入。

新手最常用的一组

命令 作用 什么时候用
/help 查看当前可用命令 想确认当前版本支持哪些命令
/init 初始化项目 CLAUDE.md 第一次把 Claude Code 引入仓库
/memory 调整项目记忆或规则 想把项目约束固定下来
/permissions 管理授权规则 想减少反复授权或收紧危险操作
/plan 切换到规划模式 大改动前先出计划
/model 选择模型 切换更强或更快的模型
/effort 调整推理强度 复杂分析时提高思考强度
/usage 查看使用情况 关注额度与当前消耗
/context 查看上下文占用 会话很长时分析上下文是谁占满了
/compact 压缩上下文 长对话后保留主线、继续推进
/clear 清空上下文,开始新任务 要换题但保留项目记忆
/resume 恢复历史会话 重新接上过去的任务
/diff 查看当前改动 修改后先看差异再决定下一步

与代码评审和交付最相关的一组

命令 作用 什么时候用
/code-review 审查当前 diff 的正确性与可优化点 改完代码后自查一轮
/code-review --fix 审查并直接应用可修复问题 中低风险清理项较多时
/review 对 GitHub PR 做只读评审 针对已有 PR 给反馈
/security-review 更偏安全视角的只读审查 发布前做安全扫描
/export 导出会话内容 保存分析记录、复盘结论
/rewind 回滚到某个检查点 Claude 改偏后回退

与并行代理最相关的一组

命令 作用 什么时候用
/tasks 查看当前会话里的后台子任务 已经委托子代理做研究时
/background 把当前会话转为后台运行 长任务不想占住当前终端
/batch <instruction> 把大任务拆成多个 worktree 并行执行 仓库范围较大的迁移或批量改造
/fork <directive> 在当前上下文上 fork 一个子代理 把旁支研究交给后台
/branch [name] 派生一条会话分支 尝试另一种方案又不想丢掉当前主线

几个非常容易用上的命令示例

1
/init
1
/plan
1
/compact 只保留当前 Bug 的复现条件、根因、改动文件和验证结论
1
/code-review
1
/background 继续排查这个 flaky test,定位根因后给出最小修复方案

CLI Flags 怎么看

除了命令本体,Claude Code 还有一层很重要的能力来自启动参数,也就是 flag。这部分如果完全不写,教程会停留在“能进入会话”,但无法覆盖自动化、受控权限和大仓库使用。

最常用的 flags

Flag 作用 典型用法
--continue / -c 继续当前目录最近会话 claude -c
--resume 恢复指定会话 claude --resume abc123
--permission-mode 指定启动时权限模式 claude --permission-mode plan
--dangerously-skip-permissions 跳过权限提示 只适合可信低风险环境
--add-dir 添加额外目录读写权限 单仓库协作多个目录
--model 指定模型 用特定模型跑某个任务
--effort high 提高推理强度 复杂分析、复杂审查
--debug 开启调试日志 排查 CLI 或 MCP 问题
--bg 后台运行会话 长时间任务
--chrome 打开 Chrome 集成 Web 自动化与测试
--ide 自动连接 IDE 在有 IDE 集成时启动

一些高频组合

1
claude --permission-mode plan
1
claude --add-dir ../shared ../infra
1
claude --effort high "先分析支付链路,再给修复方案"
1
claude --bg "调查这个 flaky test,修复后跑相关测试"

需要特别强调的是:

  • --dangerously-skip-permissions 很强,但不适合作为默认方式
  • --add-dir 解决的是额外目录访问,不等于自动继承这些目录的全部 .claude/ 配置
  • --bg 适合长任务,不适合需要频繁交互确认的任务

一条真正可执行的上手流程

如果现在要把本文当教程,而不是当概念笔记,第一次实践最建议直接照着下面这条链路走。

场景一:第一次进入陌生仓库

1
2
cd your-project
claude

进入会话后依次执行:

1
/init
1
给我一个这个仓库的整体概览,重点说明目录结构、主入口、核心模块和构建方式
1
找出认证相关的文件,并说明这些文件之间如何协作
1
/context

如果上下文变长但还想继续:

1
/compact 只保留当前项目结构、认证链路和后续要排查的关键文件

场景二:修一个可复现的 Bug

1
/plan
1
执行 npm test 时 auth 模块有一个稳定失败的用例。先定位根因,给出两种修复思路;确认后只修改服务层和测试,并重新运行相关测试验证。

改动产生后先检查:

1
/diff

准备交付前再做一轮自审:

1
/code-review

如果会话太长:

1
/compact 只保留这个 Bug 的复现命令、根因、修改点和验证结果

场景三:把长任务放到后台

1
/background 继续扫描整个仓库的 deprecated API,用列表输出问题点,并按风险排序

回到 shell 后可以查看:

1
2
3
claude agents --json
claude logs <session-id>
claude attach <session-id>

六、在 VS Code 中使用 Claude Code

如果日常主工作区在 VS Code,官方更推荐直接使用 Claude Code 扩展。

它和终端 CLI 的关系

VS Code 扩展并不是简单把终端包了一层 UI,而是提供了更适合编辑器场景的图形化交互能力:

  • 侧边栏或标签页中的会话面板
  • 行内或选区级别的上下文引用
  • 侧边对比的改动审阅
  • 多会话并行
  • 会话历史回看
  • 在计划模式下直接审阅 plan 文档

同时还要注意一个容易忽略的点:

扩展内置了用于聊天面板的 CLI,但如果要在 VS Code 的集成终端里直接运行 claude 命令,仍然需要单独安装独立 CLI。

安装扩展

VS Code 中打开扩展视图,搜索 Claude Code 并安装即可。官方文档要求 VS Code 1.98.0 及以上版本。

安装完成后,可以通过几种入口打开它:

  • 编辑器右上角的图标
  • 左侧 Activity Bar
  • 命令面板中的 Claude Code
  • 状态栏入口

VS Code 里的核心使用方式

VS Code 扩展最有价值的地方,在于它把“具体文件上下文”和“代理操作”连接得更紧。

例如:

  • 选中一段代码后直接发问
  • 通过 @ 引用文件和目录
  • Option + KAlt + K 插入带行号的引用
  • 在侧边 diff 里直接审改提议内容
  • 打开历史会话继续处理上一次没做完的问题

三种常见权限模式

官方文档里提到的权限模式,决定了它每一步能自动做到什么程度。

模式 行为特征 适合场景
Manual 每个动作都先询问授权 首次使用、核心仓库、风险较高任务
Plan mode 先展示计划,确认后再动手 需求边界较复杂、需要先对齐方案的任务
Edit automatically 自动直接编辑 低风险任务、个人实验仓库、已高度收敛的小改动

对于多数生产仓库,默认建议从 ManualPlan mode 开始,而不是直接切到全自动编辑。

@ 引用为什么重要

很多人习惯把问题直接写成自然语言,但在 IDE 场景里,@ 引用文件和目录往往更高效。

例如:

1
请解释 @src/auth/ 的核心职责,并说明登录流程从哪个入口开始
1
检查 @src/user/service.ts#20-80 这段逻辑是否有空指针风险

这样做的价值在于:

  • 明确把上下文锚定到具体对象
  • 减少代理在仓库里大范围猜测
  • 让分析范围与变更范围保持一致

七、Claude Code 的高频工作流

官方 Common Workflows 页面给出的建议非常实用,本质上是在告诉使用者:不要只把它当聊天框,而要把它当成“围绕开发动作组织上下文”的工具。

理解陌生仓库

刚接手一个项目时,不需要自己先把所有目录翻一遍,可以先让它做第一轮结构梳理:

1
给我一个这个代码库的整体概览
1
解释这里的主要架构模式
1
认证相关逻辑分布在哪些文件里?

这里的正确用法不是停留在“一句总结”,而是继续追问关键链路,例如:

  • 主入口在哪里
  • 核心模块如何协作
  • 数据模型怎么流转
  • 哪些目录是框架胶水层,哪些目录是业务层

定位 Bug

排错通常是 Claude Code 最容易体现价值的场景之一,因为它能把“错误信息、代码搜索、命令执行、修复验证”串起来。

更有效的表达通常包括:

  • 报错信息
  • 复现命令
  • 复现条件
  • 是否稳定复现
  • 期望结果是什么

例如:

1
执行 npm test 时 user 模块有一个稳定失败的用例。先定位根因,给出两种修复思路;确认后再改代码并重新跑测试。

这比“帮我修一下测试”更容易收敛。

做重构

重构类任务的关键不是“改成新写法”,而是“行为保持不变”。

因此比较稳妥的提法通常会显式包含两个约束:

  • 允许修改哪些层
  • 如何证明行为没有回归

例如:

1
把 utils.js 重构为现代 JavaScript 写法,但不要改变对外行为;改完后运行现有测试,并总结每一处重构带来的收益。

补测试

对很多项目来说,“没有人愿意补测试,但测试又必须补”正是代理工具最容易产生复利的点。

典型用法是:

1
先分析 auth 模块哪些核心分支没有覆盖,再为最关键的成功路径、失败路径和边界条件补测试,最后运行相关测试文件验证

这个表达比“给 auth 模块写测试”更有效,因为它把优先级和覆盖目标一起说清楚了。

文档与提交整理

除了代码本身,Claude Code 也适合承担一些工程配套工作,例如:

  • 根据变更生成提交说明
  • 总结本次 diff 的风险点
  • 起草 PR 描述
  • 整理模块说明文档

这些工作本身不是最难的工程问题,但非常消耗注意力,交给代理通常能节省大量时间。


八、怎样提需求,Claude Code 更容易成功

Claude Code 的效果,很大程度上取决于任务描述是否包含足够的结构信息。

一个高质量任务描述通常包含五部分

要素 说明 示例
对象 在分析哪个模块、文件或问题 订单模块、认证链路、某个测试失败
目标 最终要完成什么 修复、解释、重构、补测试
边界 哪些东西能改,哪些不能改 只改后端,不动数据库结构
验证 如何证明结果可接受 运行测试、构建通过、页面行为正确
输出 希望它先分析还是直接改 先给方案,再动手

一个更稳妥的提示词模板

1
2
3
4
先分析【对象】的现状和问题,给出【数量】种可选方案;
确认后只修改【允许变更范围】;
不要改动【禁止变更范围】;
完成后执行【验证动作】并总结风险点。

例如:

1
2
3
先分析支付回调处理链路的幂等问题,给出两种修复方案;
确认后只修改服务层和测试,不要改数据库表结构;
完成后运行支付模块测试并总结剩余风险。

为什么“先分析,再修改”通常更稳

这是因为代理类工具最容易出错的地方,不是局部代码能力,而是对问题边界的误判。

先让它分析,再让它提出计划,至少有三个好处:

  • 可以先验证它是否理解对了问题
  • 可以在变更前修正方向
  • 可以避免一上来就把仓库改乱

因此,在复杂任务上,Plan mode 往往比直接自动编辑更稳。


九、权限、验证与安全边界

代理工具最大的价值来自执行能力,但风险也恰好来自执行能力。

为什么权限模式很重要

如果一个工具只能回答问题,最大的风险通常只是回答不准;但如果一个工具可以编辑文件、执行命令、连接开发环境,那么风险维度就会明显增加。

主要风险通常集中在三类:

  • 改错文件
  • 跑错命令
  • 在未充分验证时给出“已经完成”的错觉

因此,实际使用时建议把下面这几个习惯固定下来:

  • 默认先用 ManualPlan mode
  • 高风险仓库不要直接启用自动编辑
  • 每轮修改后要求它执行验证动作
  • 自己审查 diff,而不是只看自然语言总结

验证不是可选项

Claude Code 改代码时,最容易忽略的一步是验证。

一个更好的习惯是把验证要求直接写进任务中,例如:

  • “改完后运行相关单测”
  • “修复后重新执行构建”
  • “输出复现命令和验证结果”
  • “如果无法验证,明确说明阻塞原因”

这样做的意义在于,代理的“完成”不再只是语言声明,而是绑定到具体证据。

敏感信息与环境边界

虽然 Claude Code 能直接操作开发环境,但这并不意味着任何敏感上下文都应该无条件暴露给它。

工程上通常仍然需要保留几条基本纪律:

  • 不要把密钥、令牌、生产数据库凭据直接放进提示里
  • 不要让代理在不清楚副作用的情况下执行高风险命令
  • 不要因为它“看起来懂了”就跳过代码审查
  • 对涉及真实外部资源的操作,优先先做只读分析

十、常见误区与问题

误区一:把它当作“会写代码的聊天机器人”

如果只是拿它来回答概念问题,它当然也能用,但这不是它最有价值的位置。

Claude Code 的强项是围绕仓库上下文推进任务,而不是脱离环境给出泛泛解释。

误区二:一上来就给一个特别大的任务

例如“把整个系统重构一下”“把性能全部优化一下”这种任务,通常边界不清,成功率也不会高。

更合适的做法是先切出可验证的子任务:

  • 先定位瓶颈
  • 再给修复方案
  • 再限定变更范围
  • 最后逐步验证

误区三:只看总结,不看 diff

代理输出的自然语言总结,本质上只是辅助说明;真正决定结果质量的仍然是:

  • 改了哪些文件
  • 改了什么逻辑
  • 是否引入副作用
  • 是否跑过验证

因此最终判断应基于 diff 和验证结果,而不是基于“它说得很像真的”。

误区四:认为提示词必须写得像咒语

真正重要的不是复杂术语,而是任务结构清楚。

比起堆很多修辞,更重要的是把下面几个问题说明白:

  • 问题在哪
  • 目标是什么
  • 允许改什么
  • 不能改什么
  • 怎么验证

一些常见故障点

现象 可能原因 建议处理
登录流程反复跳转 认证状态异常或账号来源冲突 重新 /login,检查当前认证方式
VS Code 中看不到预期环境变量 编辑器没有继承 shell 环境 从终端执行 code . 启动,或改用账号登录
会话越来越发散 上下文积累过长、问题不断切换 使用 /compact,并重新收敛任务目标
同一任务跨多次会话继续困难 上一次上下文没有延续 使用 /resume 恢复历史会话

十一、一套更实用的日常使用建议

如果目标不是“试一试”,而是把 Claude Code 真正纳入日常开发流,可以采用下面这套更稳妥的节奏。

推荐工作方式

  1. 先让它解释项目或模块,确认理解正确
  2. 再让它输出计划,而不是立刻修改
  3. 对复杂任务明确写出允许变更范围
  4. 修改后一定要求执行验证
  5. 最后自己审查 diff 和总结

推荐任务类型

优先从这些任务开始积累信任:

  • 理解陌生仓库
  • 查找某个功能相关文件
  • 修复一个可稳定复现的 Bug
  • 为已有模块补测试
  • 做局部重构
  • 整理文档、提交说明、PR 描述

等到对它的行为模式已经足够熟悉,再逐步把更复杂的需求交给它。

不建议一开始就交给它的任务

  • 业务边界完全模糊的需求
  • 缺乏验证手段的高风险改造
  • 涉及生产数据和外部副作用的敏感操作
  • 需要重大技术决策的架构迁移

这些任务不是绝对不能用 Claude Code,而是更适合先把它放在“分析与辅助”角色,而不是直接进入“自动执行”角色。


十二、总结

Claude Code 的核心价值,不是“会不会写几行代码”,而是它把 AI 从单次问答推到了真实开发流程里。

可以概括为三点:

  • 它适合承担跨文件、跨步骤、可验证的开发任务
  • 它的正确使用方式是“任务代理”,而不是“高级补全”
  • 它的真正上限,取决于任务边界是否清楚、权限是否受控、验证是否落实

如果只是把它当成一个更聪明的聊天框,价值会被明显低估;如果把它放进“理解代码库、推进小到中型任务、执行验证、整理工程配套产物”这条链路里,它通常会比单纯补全工具更接近真实开发助手。

从上手路径来看,比较稳妥的起点是:

  1. 先在终端里完成第一次项目理解和小修改
  2. 再在 VS Code 中体验带 diff 审阅的工作方式
  3. 接着用一个真实 Bug 或补测试任务建立信任
  4. 最后再逐步扩大到重构、文档整理和更长链路任务

这样使用,Claude Code 才更像一个真正可控、可审查、可验证的工程代理,而不是一个“偶尔能写点代码的聊天窗口”。