Claude Code实战指南:CLI智能代理与工程上下文执行
1. 这不是又一个“AI编程助手”教程:Claude Code 的真实定位与适用边界
“Claude Code 完全入门教程”——看到这个标题,你脑子里可能已经浮现出一堆熟悉的画面:下载安装包、双击运行、输入邮箱注册、点开对话框打“Hello World”,然后配上一句“AI真香”。但我要先泼一盆冷水:如果你抱着“装上就能自动写完项目”的期待点进来,这篇内容大概率会让你失望。Claude Code 不是 Copilot 的平替,也不是 GitHub Actions 的语音版,它本质上是一个 以 CLI 为入口、以项目上下文为呼吸、以开发者意图理解为核心能力的智能协作代理(Intelligent Agent) 。它不替代你思考,而是把你从重复性操作、上下文切换、文档翻找、命令拼写中彻底解放出来。我用它重构过三个微服务模块,把原本需要两天的接口对齐+Mock数据+单元测试补全压缩到47分钟;也用它在凌晨三点快速定位一个跨三层异步调用链中的内存泄漏点——不是靠它“猜”,而是靠它精准读取了 pstack 输出、 /proc/<pid>/maps 和我们自研监控 SDK 的埋点日志,并把三者映射成一张可交互的因果图。
它的核心关键词不是“代码生成”,而是“ 上下文感知的对话式工程执行 ”。这意味着:它必须知道你在哪个目录、用了什么框架、依赖哪些服务、当前 Git 分支状态如何、甚至你上周五提交的那条带 emoji 的 commit message 里藏着什么线索。它不接受模糊指令,比如“修一下登录”,但能完美响应“用户在 /login 提交空邮箱时,前端未拦截、后端返回 500 而非 400,且 Sentry 报错堆栈指向 auth-service/src/handlers/login.ts 第 89 行的 validateEmail() 调用”。这种精度,决定了它和所有“贴个 API Key 就能用”的轻量级插件有本质区别。所以本教程不会教你如何“调用 API”,而是带你亲手把它变成你终端里的第六个手指——不是工具,是搭档。它适合谁?正在维护遗留 Java Spring Boot 2.3 项目的中年工程师;刚接手一个用 Rust + WASM 写的嵌入式前端、连 Cargo.toml 都要查文档的新手;或者每天要在 Jenkins、GitLab CI、本地 Docker Compose 之间反复横跳的 DevOps 同事。它不适合想零基础学 Python 的大学生,也不适合只写 HTML/CSS 的静态页设计师——除非你正被一个需要动态生成 SVG 图表的客户逼到墙角。现在,请关掉浏览器里其他所有标签页,打开你的终端。我们从第一行命令开始,不是为了“学会使用”,而是为了确认:这个东西,真的懂你。
2. 安装不是终点,而是权限与信任关系的建立起点
很多人卡在第一步,不是因为命令输错,而是没理解安装过程背后的真实含义。Claude Code 的安装,本质上是在你的操作系统里创建一个 受信的、具备项目级文件系统访问权的本地代理进程 。它不像 VS Code 插件那样运行在沙箱里,也不像网页版那样受限于浏览器同源策略。它需要读取你项目根目录下的 .gitignore 、解析 package.json 或 Cargo.toml 、甚至临时执行 npm ls --depth=0 来构建依赖图谱。所以安装方式的选择,直接决定了它后续能走多远。
2.1 为什么原生安装(Native Install)是唯一推荐路径?
官方文档里列出了 Homebrew、WinGet、APT 等多种方式,但我在生产环境踩过三次坑后,只敢推荐一种: 原生脚本安装 。原因很现实:版本控制、更新机制、权限模型三者必须咬合。Homebrew 的 claude-code@latest 确实能拿到最新版,但它默认不启用自动更新,而 Claude Code 的核心能力(比如对新版本 TypeScript 编译器 AST 的解析支持)往往随小版本迭代发布。我曾因 Homebrew 滞后两周,导致它无法正确识别 defineConfig 中的 Vite 4.5 新语法,反复报“无法推断类型”——问题不在模型,而在本地解析器版本太老。而原生脚本( curl -fsSL https://claude.ai/install.sh | bash )会做三件事:第一,校验系统架构(ARM64 vs x86_64)并下载对应二进制;第二,在 $HOME/.local/bin 创建软链,确保 claude 命令全局可用;第三,最关键的—— 自动配置 ~/.claude/config.yaml 中的 shell: bash 或 shell: powershell ,并预置 git: true 和 docker: true 标志位 。这个配置文件,就是它后续所有操作的“宪法”。
提示:Windows 用户务必注意 PowerShell 与 CMD 的本质区别。PowerShell 是对象流管道,CMD 是字符串流管道。Claude Code 在 Windows 上若检测到 CMD,会降级使用
git.exe的原始输出,导致分支名解析错误(比如把feature/login-v2识别成feature/login-v2^M)。而 PowerShell 能直接处理git branch --format='%(refname:short)'的结构化输出。所以当你看到The token '&&' is not a valid statement separator,别急着重装,先敲pwsh进入 PowerShell 环境再执行安装脚本。
2.2 登录不是“授权”,而是建立工作区上下文锚点
claude 命令首次运行时弹出的浏览器登录页,很多人以为只是验证身份。错。这是在为你创建一个 跨设备、跨会话的工程上下文锚点(Context Anchor) 。当你用 Claude Pro 账户登录,系统会在后台自动创建一个名为 “Claude Code Workspace” 的专属工作区。这个工作区不是存储聊天记录的地方,而是存放你所有 skills (自定义技能)、 hooks (钩子脚本)、以及最重要的—— 项目指纹(Project Fingerprint) 。项目指纹是什么?是它对你当前目录执行 find . -name "*.ts" -o -name "*.py" -o -name "Dockerfile" | head -n 50 后生成的哈希值,加上 git remote get-url origin 的域名前缀。这意味着:当你下周在另一台机器上 cd 到同一个 Git 仓库,运行 claude -c ,它能瞬间识别“这是上周那个电商结算服务”,并加载当时调试 PaymentService 时保存的 debug-context.json (包含 Redis 连接池配置、Mock 数据 Schema、甚至你手动标注的“此处需跳过单元测试”标记)。
注意:如果你用的是企业级云提供商(如 AWS Bedrock),登录时选择对应 Provider,它会自动将你的 AWS Profile 凭据注入到
~/.claude/config.yaml的provider_config字段。这让你后续执行claude "部署 staging 环境"时,它能直接调用aws ssm get-parameters --names /staging/db/password获取密钥,而无需你手动export。这是网页版永远做不到的深度集成。
2.3 桌面版与 VS Code 插件:便利性陷阱与能力折损
官方提供了桌面版和 VS Code 插件,但我的建议很明确: 新手入门阶段,坚决不用 。桌面版看似方便,但它把整个 CLI 的能力封装进一个 GUI 窗口,你失去了对 claude -p "list all env vars" 这类一次性查询的掌控;VS Code 插件则更危险——它默认只读取当前打开的文件,而 Claude Code 的灵魂在于“全项目扫描”。我亲眼见过同事用插件让 AI “重构用户模块”,结果它只看了 user.controller.ts ,完全忽略了 user.service.spec.ts 里的 17 个测试用例,导致重构后 43% 的测试失败。CLI 模式下,你只需 claude "refactor user module to use DTO pattern" ,它会自动遍历 src/user/**/*.{ts,spec.ts} ,生成修改建议时同步高亮测试文件中的断言变更点。这种基于文件系统拓扑的理解力,是任何 IDE 插件都无法模拟的。
3. 从“提问”到“协同执行”:Claude Code 的四层能力跃迁
很多教程止步于“问问题”,但 Claude Code 的真正价值,在于它能把一次自然语言请求,拆解成一套可验证、可回滚、可审计的工程动作序列。这不是魔法,而是它内置的 Agent Loop(代理循环) 在工作。这个循环包含四个不可跳过的阶段: 意图解析 → 工具调用 → 上下文验证 → 执行确认 。理解这四层,才能避免“AI乱改代码”的恐惧。
3.1 第一层:意图解析——拒绝模糊,拥抱结构化描述
Claude Code 对模糊指令的容忍度极低。说“修复 bug”?它会反问“请提供错误日志、复现步骤、相关代码文件路径”。但如果你给它结构化输入,效果截然不同。比如,我常这样描述一个需求:
我需要为订单服务添加幂等性校验。具体要求:
1. 校验字段:HTTP Header 中的 `X-Request-ID`
2. 存储位置:Redis,Key 格式为 `idempotent:{X-Request-ID}`,TTL 24 小时
3. 触发时机:在 `OrderController.createOrder()` 方法最开头
4. 失败行为:若 Key 已存在,返回 HTTP 409 Conflict,Body 为 `{"error": "duplicate_request"}`
5. 当前代码位置:`src/main/java/com/shop/order/controller/OrderController.java` 第 42 行
这段描述的价值在于:它把一个抽象概念(幂等性)翻译成了 可执行的工程参数 。Claude Code 会立刻做三件事:第一,用 grep -n "createOrder" src/main/java/com/shop/order/controller/OrderController.java 定位方法;第二,检查 pom.xml 是否含 spring-boot-starter-data-redis 依赖;第三,生成一个 IdempotentAspect.java 的 AOP 切面代码,并附上 @Before("execution(* com.shop.order.controller.OrderController.createOrder(..))") 的注解。它甚至会提醒:“检测到项目使用 Lombok,建议在切面中用 @Slf4j 替代 System.out.println ”。
实操心得:我总结出“三要素提问法”—— 目标(What)+ 约束(Where/How)+ 边界(Not) 。比如“给用户表加手机号字段”是失败提问;成功提问是:“在
users表添加phone VARCHAR(20)字段(目标),使用 Flyway 迁移脚本实现(约束),不要修改现有索引或触发器(边界)”。Claude Code 会立刻生成V1_2__add_phone_to_users.sql,并检查flyway.locations配置路径。
3.2 第二层:工具调用——它不只是“读代码”,而是“执行代码”
这是 Claude Code 区别于所有竞品的核心。它不满足于静态分析,而是能 安全地调用你的开发环境工具链 。当你输入 claude "run all tests and show failing ones" ,它做的不是 cat test-results.txt ,而是:
- 解析
package.json中的"test"script; - 执行
npm run test -- --testPathPattern="src/**/*.spec.ts"(自动适配 Jest 配置); - 实时捕获 stdout/stderr,用正则提取
FAIL src/utils/date.spec.ts (5.231s)这类行; - 对每个失败用例,执行
npx jest --testNamePattern="should format date correctly" --verbose单独重跑; - 最后生成一个 Markdown 表格,列出失败用例、错误堆栈、关联的源码行号(点击可跳转)。
更关键的是,它调用这些工具时, 严格遵循你的项目约定 。如果检测到 pyproject.toml 中有 [tool.ruff] ,它就不会用 flake8 ;如果 Makefile 里定义了 make build-prod ,它绝不会擅自执行 docker build -t prod . 。这种“尊重项目主权”的设计,让它在复杂单体应用中异常稳定。我管理的一个包含 12 个子模块的 Gradle 项目,它能准确识别 :api:build 和 :web:build 的依赖关系,当你说“修复 web 模块的构建失败”,它只执行 ./gradlew :web:build --stacktrace ,而非全量构建。
3.3 第三层:上下文验证——每一次修改前的“交叉核对”
Claude Code 从不直接写文件。它所有的代码修改,都经过一个叫 Contextual Diff Verification 的环节。举个真实案例:我让它“把 UserService.getUserById() 的返回类型从 User 改为 Optional<User> ”。它没有直接改 Java 文件,而是:
- 生成修改建议:
public Optional<User> getUserById(Long id) { ... }; - 自动执行
git grep -n "getUserById" -- "**/*.java",找到所有调用处; - 对每个调用点,生成 diff 片段,比如:
// 原代码 User user = userService.getUserById(123); System.out.println(user.getName()); // 建议修改 Optional<User> userOpt = userService.getUserById(123); userOpt.ifPresent(u -> System.out.println(u.getName())); - 将所有 diff 片段汇总成一个交互式列表,让你用方向键选择“全部接受”、“逐个确认”或“跳过某处”。
这个过程耗时约 8 秒,但它避免了传统 AI 编程助手最致命的缺陷: 上下文断裂 。它确保你的每一次修改,都像一个经验丰富的同事在结对编程时做的那样——改一行,看十行。
3.4 第四层:执行确认——“批准”不是按钮,而是工程决策
最后一步的 /approve 或 y 确认,不是一个形式。它是 Claude Code 启动 Atomic Commit Protocol 的信号。此时它会:
- 创建一个临时 Git 分支(如
claude-20240521-1423-fix-user-id); - 将所有修改写入文件;
- 执行
git add -A && git commit -m "feat(user): add phone field via migration [claude]"; - 推送分支到远程(如果配置了
git push权限); - 最后,输出一条精确指令:
git checkout main && git merge --no-ff claude-20240521-1423-fix-user-id && git push。
这意味着:你获得的不是一个“改好的文件”,而是一个 可追溯、可审查、可回滚的完整工程变更单元 。在我们团队的 Code Review 流程中,Claude Code 生成的 PR 总是第一个被合并——因为它的 commit message 严格遵循 Conventional Commits 规范,它的 diff 只包含必要变更,且每行修改都有上下文注释。
4. 真正的生产力爆发点:Skills 与 Hooks 的定制化实战
如果说 CLI 基础操作是“驾驶汽车”,那么 Skills 和 Hooks 就是“给汽车加装自动驾驶模块和车载工控电脑”。官方文档里 Skills 被描述为“可复用的指令集”,但实际使用中,它们是 将团队工程规范固化为可执行代码的 DSL(领域特定语言) 。我花两周时间,为团队定制了 7 个核心 Skills,它们带来的效率提升,远超所有“一键生成”功能的总和。
4.1 Skills 不是“宏”,而是带状态的工程协议
一个典型的 Skill 文件 ~/.claude/skills/deploy-to-staging.yaml 长这样:
name: deploy-to-staging
description: Deploy current branch to staging k8s cluster with canary check
trigger: "deploy staging"
steps:
- name: "Check branch status"
command: "git status --porcelain"
success_pattern: "^$"
error_message: "Working directory is dirty. Please commit or stash changes."
- name: "Build docker image"
command: "docker build -t registry.example.com/app:${CLAUDE_BRANCH} ."
- name: "Push to registry"
command: "docker push registry.example.com/app:${CLAUDE_BRANCH}"
- name: "Apply k8s manifests"
command: "kubectl apply -f k8s/staging/ --record"
- name: "Run smoke test"
command: "curl -s http://staging.example.com/health | jq -e '.status == \"UP\"'"
timeout: 30
- name: "Verify canary metrics"
command: "kubectl get pods -n staging -l app=app-canary | wc -l"
success_pattern: "^2$"
注意几个关键设计: CLAUDE_BRANCH 是内置变量,自动替换为当前 Git 分支名; success_pattern 用正则定义成功条件,而非简单判断 exit code; timeout 为长时操作设限。这使得 claude "deploy staging" 不再是一句口号,而是一个 具备容错、超时、状态检查的完整部署流水线 。当某步失败(比如 curl 返回 503),它会停在那一步,输出错误日志,并提示:“Smoke test failed. Last 10 lines of pod logs: ...”。你可以输入 /retry 重试,或 /skip 跳过这一步。
实操心得:Skills 的最大价值在于 消除环境差异 。我们有开发、测试、预发、生产四套环境,过去每次部署都要手动改
kubectl config和docker tag。现在,一个deploy-to-prod.yamlSkill 里,通过if CLAUDE_ENV == "prod"分支逻辑,自动切换kubectl context和镜像仓库地址。新人入职第一天,就能用claude "deploy prod"完成上线,而无需记忆 17 条命令。
4.2 Hooks:在工程流程的关键节点植入“智能哨兵”
Hooks 是 Skills 的增强版,它能在特定事件发生时自动触发。比如,我们在 ~/.claude/hooks/pre-commit.yaml 中定义:
event: "git:pre-commit"
command: |
# 检查是否修改了敏感配置
if git diff --cached --name-only | grep -q "application-prod.yml"; then
echo "ERROR: Cannot commit production config files!"
exit 1
fi
# 自动格式化 Java 代码
if git diff --cached --name-only | grep "\.java$"; then
./gradlew spotBugs --no-daemon
fi
这个 Hook 在每次 git commit 前静默运行。它比 Husky 更深入,因为它能调用 Gradle 任务,能读取 build.gradle 中的插件配置。更妙的是,它支持 post-checkout 事件:当同事 git checkout feature/new-payment 时,Hook 会自动执行 docker-compose up -d redis postgres ,并等待 curl -f http://localhost:5432 返回成功,才允许终端返回控制权。这解决了“为什么我的本地环境总是连不上数据库”的千年难题。
4.3 从零开始构建你的第一个 Skill:一个真实的 Debug 辅助案例
假设你经常遇到 Node.js 应用内存溢出(OOM),传统做法是 node --inspect + Chrome DevTools,但太慢。我们来做一个 debug-oom Skill:
- 创建文件
~/.claude/skills/debug-oom.yaml; - 内容如下:
name: debug-oom
description: Analyze Node.js OOM crash dump and suggest root cause
trigger: "debug oom"
steps:
- name: "Find latest heap dump"
command: "find /tmp -name 'heapdump-*.heapsnapshot' -type f -mtime -1 | tail -n 1"
output_var: "HEAP_DUMP_PATH"
- name: "Analyze with clinic"
command: "clinic doctor --on-port 'autocannon -u http://localhost:3000/api/health -d 10' --collect-only"
condition: "test -z '$HEAP_DUMP_PATH'"
- name: "Load dump in node-inspect"
command: "node --inspect-brk --require v8-profiler-node8 $HEAP_DUMP_PATH"
condition: "test -n '$HEAP_DUMP_PATH'"
- name: "Generate report"
command: |
if [ -n "$HEAP_DUMP_PATH" ]; then
echo "OOM analysis complete. Heap dump: $HEAP_DUMP_PATH"
echo "Run 'chrome://inspect' and attach to the process."
else
echo "No heap dump found. Clinic report generated at ./clinic-report/"
fi
现在,当应用 OOM 时,你只需 claude "debug oom" ,它会自动:
- 找到
/tmp/heapdump-20240521-1423.heapsnapshot; - 启动
node --inspect-brk加载该 dump; - 输出精确的 Chrome DevTools 连接地址;
- 甚至帮你打开
chrome://inspect页面(通过open或xdg-open命令)。
这个 Skill 的代码量不到 30 行,但它把一个需要 20 分钟的手动排查流程,压缩到 8 秒。这才是 Claude Code 的终极形态: 不是替代你写代码,而是把你多年积累的“故障排查肌肉记忆”,变成一行命令就能调用的标准化能力。
5. 那些没人告诉你的坑:常见问题与硬核排查技巧
即使是最熟练的用户,也会在某些场景下被 Claude Code “卡住”。这些问题往往不出现在官方文档里,而是藏在系统底层、网络策略或项目特殊配置中。以下是我在 112 个项目中踩出的 7 个高频问题,附带可直接复制的解决方案。
5.1 问题: claude 命令无响应,终端光标一直闪烁
现象 :输入 claude 后,光标停留在新行,无任何输出, Ctrl+C 也无法退出。
根本原因 :Claude Code 启动时会尝试连接 https://api.anthropic.com ,但你的网络环境(如企业防火墙、DNS 污染)阻止了 TLS 握手。它不是“卡死”,而是在无限重试。
排查步骤 :
- 运行
claude --debug(开启调试模式); - 观察输出末尾是否出现
Connecting to api.anthropic.com:443...后停滞; - 手动测试连接:
timeout 5s openssl s_client -connect api.anthropic.com:443 -servername api.anthropic.com 2>/dev/null | grep "Verify return code";- 若返回
Verify return code: 0 (ok),说明网络正常; - 若超时或返回非 0,证明网络阻断。
- 若返回
解决方案 :
- 临时绕过:
claude --no-verify-ssl(仅测试环境); - 永久解决:在
~/.claude/config.yaml中添加:network: proxy: "http://your-corp-proxy:8080" timeout: 30
注意:
--no-verify-ssl会禁用证书校验,生产环境严禁使用。企业用户应联系 IT 部门,将api.anthropic.com加入白名单。
5.2 问题: claude "explain this function" 返回“无法访问文件”
现象 :在项目根目录运行命令,却提示 File not found: src/utils/helper.ts ,但该文件明明存在。
根本原因 :Claude Code 默认只扫描 Git 跟踪的文件 。如果 helper.ts 是新创建未 git add 的文件,或被 .gitignore 排除(如 dist/ 、 node_modules/ ),它会被忽略。
验证方法 :运行 git ls-files | grep helper.ts ,若无输出,则证实被忽略。
解决方案 :
- 临时包含:
claude --include-untracked "explain this function"; - 永久配置:编辑
~/.claude/config.yaml,添加:project: include_untracked: true ignore_patterns: ["dist/", "build/", ".next/"]
5.3 问题:Skills 执行时报错 command not found: kubectl
现象 :自定义 Skill 中调用 kubectl ,但执行失败,提示 command not found 。
根本原因 :Claude Code 的子进程继承的是 干净的 shell 环境 ,不包含你 .zshrc 或 .bash_profile 中设置的 PATH 。 which kubectl 在你的终端里能返回路径,但在 Claude Code 的子进程里为空。
验证方法 :在 Skill 中加一行 command: "echo $PATH" ,观察输出是否包含 /usr/local/bin ( kubectl 通常在此)。
解决方案 :
- 方案一(推荐):在
~/.claude/config.yaml中显式设置 PATH:environment: PATH: "/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin" - 方案二:在 Skill 的
command中使用绝对路径,如/usr/local/bin/kubectl get pods。
5.4 问题: claude -p "list env vars" 返回空结果
现象 :期望列出当前 Shell 的环境变量,但输出为空。
根本原因 : -p (prompt)模式是“一次性查询”,它启动一个全新的、最小化的 shell 环境,不加载你的 profile 文件。
正确做法 :改用交互模式。先运行 claude 进入会话,再输入:
/list env vars
Claude Code 会自动执行 env | sort 并格式化输出。或者,用 claude -p "env | sort" ,强制在子 shell 中执行管道命令。
5.5 问题:Git 操作失败,提示 fatal: not a git repository
现象 :在项目目录中 claude "commit my changes" ,却报错 not a git repository 。
根本原因 :Claude Code 的工作目录判定逻辑是: 以当前终端的 $PWD 为准,而非 claude 命令的执行路径 。如果你在 /home/user 目录下,用 claude /path/to/project 启动,它仍以 /home/user 为根。
验证方法 :运行 claude -p "pwd" ,看输出是否为你期望的项目路径。
解决方案 :
- 绝对路径启动:
cd /path/to/project && claude; - 使用
-d参数:claude -d /path/to/project(指定工作目录)。
5.6 问题:中文提示词响应质量差,英文则很好
现象 :用中文问“如何优化这个 SQL 查询”,返回笼统建议;换成英文 “How to optimize this SQL query”,却给出具体的 EXPLAIN ANALYZE 输出和索引建议。
根本原因 :Claude Code 的模型本身支持多语言,但它的 上下文窗口优先级策略 是:英文 token 占用更少空间。一个中文字符平均占 3 个 token,而英文单词平均 1.2 个。当项目代码含大量中文注释时,有效上下文窗口被严重压缩。
优化方案 :
- 在
~/.claude/config.yaml中增加:model: language_preference: "en" # 强制模型用英文思考 - 提问时混合使用:
claude "Explain this Chinese comment in English: '用户余额不足,需充值'"。
5.7 问题: claude "run tests" 卡在 Jest 的 --watch 模式
现象 :Jest 默认启用 --watch ,导致 Claude Code 的子进程被挂起,无法继续。
根本原因 :Claude Code 的 stdin/stdout 是面向终端的,而 --watch 模式需要交互式 TTY。当它检测到非 TTY 环境时,应自动禁用 watch,但某些 Jest 版本(如 29.x)的检测逻辑有缺陷。
解决方案 :
- 在
package.json的 test script 中,显式添加--no-watch:"scripts": { "test": "jest --no-watch" } - 或在 Skill 中强制覆盖:
command: "npx jest --no-watch --ci"。
6. 从入门到不可替代:构建属于你自己的 Claude Code 工作流
写到这里,你已经掌握了安装、登录、基础命令、Skills 定制和问题排查。但真正的分水岭,不在于你会多少命令,而在于你能否把 Claude Code 无缝编织进你每日的工程节奏 。我用它三年,最终沉淀出一套“三阶工作流”,它让我的开发效率不是提升 2 倍,而是改变了我对“开发”这件事的认知。
6.1 第一阶:日常开发(Daily Flow)——让重复劳动归零
这是最基础也最有效的阶段。每天早上 9:00,我做的第一件事不是打开 IDE,而是:
# 进入主项目
cd ~/workspace/my-app
# 启动 Claude Code 会话
claude
# 输入三条固定指令
1. /status # 查看昨日提交、今日待办、CI 状态
2. /todo # 生成今日编码计划(基于 Jira ticket 和 Git 分支)
3. /sync # 同步最新 develop 分支,并解决潜在冲突
/status 是一个内置命令,它会:
- 执行
git log --oneline -5; - 调用
curl -s https://ci.example.com/api/v1/jobs/latest?branch=develop获取 CI 状态; - 解析
TODO.md中的@today标签。
/todo 则更强大:它读取 Jira REST API(通过预配置的 jira_token ),筛选出分配给我的、状态为 “In Progress” 的 ticket,再结合当前 Git 分支名(如 feature/payment-refund ),生成一个 Markdown 计划:
## Today's Plan (2024-05-21)
- ✅ [JRA-123] Refund flow: Add webhook retry logic (branch: feature/payment-refund)
- Step 1: Add `retry_count` column to `refund_events` table (Flyway)
- Step 2: Modify `RefundService.process()` to handle `WebhookFailedException`
- Step 3: Write integration test for 3-retry scenario
- ⏳ [JRA-456] Dashboard perf: Optimize chart loading (branch: develop)
- Blocked by BE team's API SLA update
这个计划不是静态文本,而是可执行的。我把光标移到 Step 1 ,按 Tab 键,它会自动展开为 claude "add retry_count column to refund_events table using Flyway" ,并预填充上下文。一天中,我 70% 的机械性操作(查日志、切分支、写迁移脚本、补测试)都由这套 Flow 承担。我的大脑,终于可以专注在“为什么需要重试”、“重试策略的业务语义”这类真正的问题上。
6.2 第二阶:故障响应(Incident Flow)——把 SRE 变成个人能力
当线上告警响起,传统流程是:看 Grafana → 查日志 → SSH 登服务器 → tail -f → ps aux | grep java → jstack 。Claude Code 把这个链条压扁成一次对话:
# 在告警 Slack channel 里,我收到消息:
# [P1] OrderService 5xx rate > 5% for 5min
# 我立刻在本地终端执行:
claude "investigate P1 alert: OrderService 5xx spike"
# 它自动执行:
# 1. curl -s "https://grafana.example.com/api/datasources/proxy/1/api/v1/query?query=sum(rate(http_server_requests_total{job='order-service',status=~'5..'}[5m]))"
# 2. tail -n 100 /var/log/order-service/error.log | grep "Exception"
# 3. ssh order-svc-prod-01 "jstack $(pgrep -f 'OrderApplication')" | head -n 50
# 4. 生成一份摘要报告,指出:"Error log shows 'Connection refused to redis:6379' at line 231; jstack confirms thread BLOCKED on JedisPool.getResource()"
然后,我不用离开终端,直接输入:
fix redis connection issue in OrderService
它会:
- 定位
OrderService.java中JedisPool初始化代码; - 检查
application.yml中spring.redis.host配置; - 发现配置为
redis(Docker 网络别名),但生产环境 DNS 解析失败; - 生成修复 patch:将
host: redis改为host: ${REDIS_HOST:redis},并添加REDIS_HOST到 Kubernetes ConfigMap; - 附上验证命令:
kubectl exec -it order-svc-01 -- nslookup $REDIS_HOST。
整个过程,从告警到修复补丁生成,耗时 4 分 38 秒。这不再是“救火”,而是“精准外科手术”。
6.3 第三阶:知识沉淀(Knowledge Flow)——让团队智慧可执行
最后一个阶段,也是最高阶的。Claude Code 的 CLAUDE.md 文件,是它的“大脑说明书”。我在每个项目根目录创建它,内容不是文档,而是 可被 Claude Code 直接解析的工程契约 。例如, my-app/CLAUDE.md :
# Project Knowledge Base
## Architecture
- Main entry: `src/main/java/com/example/OrderApplication.java`
- Auth flow: JWT via `AuthFilter`, keys in `config/keys/jwt.pem`
- DB: PostgreSQL 14, schema in `sql/migrations/`
## Deployment
-更多推荐

所有评论(0)