Claude Code 从 0 到 1 实战:三种模式、一张认知地图,和一套工程化心法

在这里插入图片描述

Claude Code 的本质是一个跑在终端里的 Agent——它拿到的不只是对话窗口,还有你本机的文件读写权和 Shell 执行权。这意味着它的不确定性远高于网页版聊天框,也意味着你的收益上限高得多。下面这张认知地图,是我踩了一个月坑之后画出来的,也是这篇文章的主线。

Claude Code 能力地图

权限控制层

基础能力层

记忆与上下文层

扩展生态层

三种模式: 默认/Accept Edits/Plan

危险旁路: --dangerously-skip-permissions

Shell 交互: ! 前缀

后台任务: Ctrl+B / tasks

多模态: 拖图/Ctrl+V 粘贴

会话级: compact / clear / resume

项目级: CLAUDE.md + init/memory

MCP: 连接外部工具如 Figma

Hook: 工具调用前后注入脚本

Skill vs SubAgent: 共享上下文 vs 独立上下文

一、权限三档:别只用默认模式

Shift + Tab 循环切三档,这是新手最先该记住的快捷键。三档的语义差异比字面看起来更大:

  • 默认模式:每次写文件、跑命令前都弹确认。看似低效,但适合陌生项目或生产代码库——你会惊讶于 AI 有多爱"顺手"做点你没要求的事。
  • Accept Edits 模式(终端提示 Accept edits on):写/改文件自动通过,但 Bash 命令仍会询问。这是官方刻意的安全设计,也是我日常用得最多的一档——文件层面的误操作可以靠 Git 撤回,但 rm -rf 之类的命令一旦放行就没有后悔药。
  • Plan 模式:只讨论不执行。重构、方案评审前置必备。
    关于 --dangerously-skip-permissions 这个参数,源码泄露分析显示它会直接绕过所有 PreToolUse 校验进入 bypass permissions on 状态。我的用法是:只在一次性沙箱目录或 Docker 容器里开,让它全自动跑完一个小需求,跑完删容器。千万别在日常主力项目上裸奔。

二、终端控制:被阻塞主进程怎么办

Agent 编码绕不开一个坑:让 Claude 起 npm run dev,主进程就被挂住,对话卡死。解法是 Ctrl + B 把长驻服务推到后台,/tasks 查看列表,选中后按 K 杀进程。
另一个高频操作是 ! 前缀——直接在输入框执行本地 Shell 命令,比如 !ls -s 或 !open dist/index.html,省得切窗口。
编辑长 Prompt 时,Ctrl + G 会唤起 VS Code 的临时编辑页,写完保存后自动回填到终端,避免误触回车把半成品提交出去。多行换行用 Shift + Enter。

三、上下文与记忆:CLAUDE.md 才是主力

会话内的 /compact 压缩、/clear 清空,都救不了"Claude 每次开会都失忆"这个根本问题——跨会话的记忆载体只有 CLAUDE.md。

会话级:compact、clear、resume

/compact 会把冗长的执行日志折叠,保留核心逻辑,直接降 Token 消耗和响应延迟。Ctrl + O 可以看当前上下文里到底塞了什么。/clear 用于切换到完全不相关的新任务。/resume 或 claude -c 恢复上一次会话。

项目级:CLAUDE.md 与 /init

在新项目第一次启动 Claude Code 时,先跑 /init,它会扫描 package.json、README、目录结构,生成一份 CLAUDE.md 初稿。如果项目里已经有 CLAUDE.md,/init 只会给改进建议,不会粗暴覆盖。

# 项目规范
- 使用 TypeScript 严格模式,禁止 any
- 组件统一函数式写法,样式走 Tailwind
- 提交前必须跑 `npm run lint`,失败即阻断
## 特殊依赖
- 图表库用 ECharts 5.x,不要引入 antd charts
- 状态管理已有 zustand,不要新加 redux
## 约定
- 每次输出末尾追加:Done.

/memory 命令可以快速打开项目级(随 Git 共享)或用户级(~/.claude/CLAUDE.md)的配置文件编辑。CLAUDE.md 是给 Claude 看的"行为指南",不是给人看的 README——别把项目介绍塞进去,写它不能从代码里推断出来的东西,行数控制在 60 行以内效果最好。

四、多模态与设计稿还原:MCP 是正确姿势

传图有两种方式:拖拽进终端,或者复制后按 Ctrl + V(Mac 上也是 Ctrl,不是 Cmd)。
但直接传截图还原 UI 是低效路径。装 Figma 的 MCP Server 之后,流程完全不一样:

Figma MCP ServerClaude Code我Figma MCP ServerClaude Code我/mcp 授权 Figma粘贴 Copy link to selection 链接get design context返回间距/字体/颜色参数get screenshot返回高清截图结合参数生成像素级 UI 代码输出还原后的组件

MCP(Model Context Protocol)的本质是让大模型连接外部工具的标准化协议。Copy link to selection 给到的链接,能让 Claude 调用 get design context 拿到精确的间距、字号、色值,再配 get screenshot 做视觉参照,还原精度远胜于只看一张位图。

五、Hook:把工程规范硬编码进 Agent

Hook 是在工具调用前后自动执行的脚本钩子,事件包括 PreToolUse、PostToolUse、Notification 等。这是把团队规范从"口头约定"变成"强制约束"的唯一手段。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '.tool_input.file_path' | { read f; if [[ \"$f\" == *.ts ]]; then npx prettier --write \"$f\"; fi; }"
          }
        ]
      }
    ]
  }
}

配置文件有三个作用域:.claude/settings.local.json(本机,不提交 Git)、.claude/settings.json(项目共享)、用户目录(全局生效)。
进阶玩法是 PreToolUse 做安全防护——检测到工具要写 .env 或 package-lock.json 时返回非零退出码,直接阻断操作。记住 Hook 是同步阻塞 Agent 循环的,脚本要写得轻,不然每次写文件都卡一下。

六、Skill vs SubAgent:这是最容易混淆的一对

这两个词长得像,但上下文模型完全不同,这是选型的唯一判据。

维度Agent SkillSubAgent
本质一份"动态加载的说明书"(Prompt 封装)一个独立运行的子智能体
上下文共享主对话,执行日志会撑大当前窗口完全隔离,只把最终结果汇报回主对话
触发方式自然语言或 /skill-name 显式调用/agent 创建后由主 Agent 委派
典型场景日报生成、固定格式输出大规模 Code Review、并行探索模块
成本便宜(就是 Prompt)贵(独立上下文 + 独立模型调用)
一个通俗类比:Skill 是你自己照着菜谱做饭,思考过程和厨房状态都留在你当前会话里;SubAgent 是把菜谱递给餐馆,后厨怎么折腾你不用管,最后只收到一份成品。
选型判断就一条:任务需不需要主对话的上下文? 写日报要依赖今天的对话历史,用 Skill;让 Claude 审查一个三万行的老模块,跟当前对话毫无关系,派 SubAgent 去独立跑,主对话保持干净。
Skill 的创建方式是在 ~/.claude/skills/<name>/skill.md 里写 Metadata + 指令:
---
name: daily-report
description: 当用户要求生成日报或每日总结时调用
---
日报格式要求
- 日期:YYYY-MM-DD
- 开发摘要:(一句话)
- 详细改动:(功能点列表)
- 遇到的问题:(如有)

SubAgent 通过 /agent -> Create new agent 创建,可以精细控制其工具权限(比如代码审查场景只给 Read/Grep/Glob 只读工具),甚至指定用 Haiku 这类便宜模型来省成本。

七、Rewind 与版本管理的边界

/rewind 或双击 Esc 能回滚到历史节点,可选"回滚代码和会话"或"仅回滚会话"。但这里有个反直觉的认知:

Claude 只能回滚它自己写入的文件,通过 Bash 命令产生的副作用(比如 npm install 装出来的 node_modules)它完全无法感知。
所以精准回滚和分支管理仍然交给 Git,Rewind 只是"撤销刚才那段对话影响"的快照机制,不能替代版本控制。我的习惯是让 Claude 每完成一个阶段就 git commit 一次,这样 Rewind 失效时也有兜底。

收尾:AI 负责执行,人负责决策

Claude Code 定位:它把"写代码"这个动作的边际成本压到了接近零,但"决定写什么、写到什么程度、按什么规范写"这三件事,依然全部在人手里。
CLAUDE.md 写得好不好,直接决定它的输出稳定度;Hook 配得全不全,决定它是否会突破你的工程底线;Skill 和 SubAgent 的边界划得清不清,决定上下文会不会在半小时内被塞爆。这些配置工作本身,就是工程化的一部分——把"AI 辅助编程"从手艺活变成可复现、可协作、可审计的流程。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐