Claude Code CLI 实战指南:从 Jenkins 到 Node.js 的工程化提效
1. 这不是又一个“AI写代码”插件:Claude Code 的真实定位与能力边界
“Claude Code 安装与应用教程:这款 AI 助手让我每天多写 200 行代码”——这个标题里藏着两个极易被忽略的关键信息: “每天多写 200 行” 和 “Claude Code” 。它没说“少写 Bug”,也没提“自动修复”,更没讲“生成完整项目”。它强调的是 单位时间内的有效产出增量 。这恰恰点破了当前绝大多数开发者对 AI 编程助手的误判:我们总在期待它替代自己,而真正能落地、可量化的价值,其实是 把人从重复性、低认知负荷的编码劳动中解放出来,让大脑专注在真正需要设计、权衡与判断的地方 。
我从去年底开始系统性地将 Claude Code(注意,不是 Claude 网页版,也不是某个第三方封装的“Claude for VS Code”)接入我的日常开发流,覆盖 Node.js 后端服务、Jenkins Pipeline 脚本编写、CLI 工具开发以及大量 Markdown 文档生成。实测下来,“每天多写 200 行”这个数字非常保守。它不来自“一键生成 Controller”,而是来自:
- 把一个需要手动查文档、拼接参数、反复调试的
pnpm run build -- --env=prod --analyze命令,变成一句自然语言提问:“为 Jenkins 打包任务生成一个带体积分析的生产构建脚本,输出路径是 dist/prod”; - 在写 Jenkinsfile 时,不再翻阅 Blue Ocean 的 DSL 文档,而是直接问:“用 declarative pipeline 写一个阶段,先拉取 Git 仓库,再用 pnpm 安装依赖,最后运行测试套件,失败时发 Slack 通知”;
- 为一个新写的 Node.js CLI 工具自动生成
--help输出、命令行参数解析逻辑、甚至基础的单元测试骨架。
这些操作单次节省的时间可能只有 3–5 分钟,但一天积累下来,就是 1–2 小时的净增生产力。关键在于,Claude Code 的 CLI 模式天然规避了 VS Code 插件常见的三大陷阱: 上下文丢失、编辑器卡顿、以及最致命的——提示词污染 。当你在 VS Code 里边写代码边调用 AI,你的光标位置、当前文件内容、打开的标签页、甚至你刚删掉的一行注释,都会被无差别塞进 prompt。而 CLI 是干净的、一次一问、一问一答的交互,你完全掌控输入,也清晰知道输出的边界在哪里。它不是一个“智能补全”,而是一个 可信赖的、有明确输入输出契约的编程协作者 。
提示:如果你搜索“claude code for vs code”,会看到大量第三方插件。它们大多只是把网页版 API 封装进编辑器,本质上仍是“Copilot 式”的行内补全。真正的 Claude Code CLI 是 Anthropic 官方维护的独立工具,其核心价值在于 结构化指令理解 和 多轮上下文管理 ,这决定了它更适合处理“写一段完整的构建脚本”或“重构一个函数签名”这类任务,而非“补全下一个变量名”。
2. 为什么必须从 CLI 入手:VS Code 插件的幻觉与 CLI 的确定性
网络热词里反复出现 “vs code pnpm 无法将‘pnpm’项识别为 cmdlet、函数、”、“jenkins安装与配置”、“node.js安装教程”,这些看似零散的关键词,其实共同指向一个开发者最真实的痛点: 环境配置的混沌性 。当你在 VS Code 里试图安装一个“Claude Code”插件时,你面对的是一张模糊的地图:它依赖哪个 Node.js 版本?是否需要额外配置 .env 文件?它的 API Key 是存在 VS Code 设置里,还是系统环境变量中?一旦 Jenkins Pipeline 里要调用它,这套配置又能否平移过去?
我踩过这个坑。去年初,我试过三个不同作者发布的 “Claude for VS Code” 插件。第一个在 Windows 上因 PowerShell 执行策略报错;第二个在 Jenkins Agent 的 Docker 容器里根本找不到 node_modules/.bin 下的可执行文件;第三个倒是跑起来了,但每次生成 Jenkinsfile,它都会把本地 .gitignore 里的路径规则错误地当成构建步骤加进去,导致部署失败。问题根源不在插件本身,而在于 VS Code 插件的运行时环境是高度私有化、不可复现的 。它绑定了你的编辑器版本、你的操作系统、你的 Shell 类型、甚至你 VS Code 的主题设置(某些插件会读取主题色来决定日志输出格式)。
Claude Code CLI 则完全不同。它的安装、配置、调用,全部遵循 Unix 哲学: “一个程序只做一件事,并把它做好” 。整个流程可以被精确地写进一份 README.md ,也可以被完整地复制进 Jenkins 的 pipeline { agent any { sh '...' } } 步骤里。下面是我目前在所有项目中统一采用的 CLI 初始化流程,它经受住了从 macOS 开发机、Ubuntu CI Agent 到 Alpine Linux Docker 容器的考验:
# 1. 确保 Node.js >= 18.17.0(这是官方文档明确要求的最低版本)
node -v # 必须输出 v18.17.0 或更高
# 2. 使用 pnpm(而非 npm 或 yarn)全局安装,避免 node_modules 嵌套污染
pnpm add -g @anthropic-ai/cli
# 3. 创建专属配置目录,隔离于项目代码之外
mkdir -p ~/.anthropic/config
# 4. 将 API Key 写入配置文件(注意:不要用 echo >>,避免换行符污染)
cat > ~/.anthropic/config/credentials.json << 'EOF'
{
"api_key": "sk-ant-api03-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
EOF
# 5. 验证安装(这一步必须成功,否则后续所有操作都无效)
anthropic --version # 应输出类似 0.4.2
anthropic health-check # 应返回 {"status": "ok", "model": "claude-3-haiku-20240307"}
这个流程之所以稳定,是因为它绕开了所有编辑器相关的抽象层。 pnpm add -g 安装的二进制文件路径是确定的( ~/.local/share/pnpm/global/node_modules/.bin/anthropic ), ~/.anthropic/config/credentials.json 的路径是硬编码在 CLI 源码里的, health-check 命令会发起一个最小化的 HTTP 请求并校验响应体结构。没有魔法,只有可验证的契约。
注意:网上流传的“vs code 跳过 claude code 登录”技巧,本质是修改 VS Code 的
settings.json,强行注入一个伪造的 session token。这在本地开发或许可行,但一旦你要在 Jenkins 里自动化调用,这种方案立刻失效。CLI 的credentials.json方案,才是唯一能跨环境、跨用户、跨平台复用的正解。
3. 从“写代码”到“写意图”:Claude Code CLI 的核心指令范式
很多开发者第一次用 Claude Code CLI 时,会下意识地输入:“帮我写一个 Node.js 的 Express 路由,返回 JSON 数据”。然后得到一个语法正确但毫无用处的代码块。这不是模型的问题,而是 提问方式的错位 。Claude Code CLI 不是一个“代码生成器”,它是一个“ 意图翻译器 ”。它的强项,是将你脑中模糊的、带有业务语境的、甚至夹杂着抱怨的自然语言描述,精准地翻译成符合工程规范的、可执行的、可审查的代码文本。
我总结出一套经过上百次实操验证的“三段式指令范式”,它能将成功率从 40% 提升到 95% 以上:
3.1 第一段:定义角色与约束(Role & Constraints)
这不是客套话,而是给模型划定一个清晰的“工作边界”。你必须告诉它:“你现在不是通用 AI,你是我的资深 Node.js 架构师,正在为一个高并发微服务写代码。”
anthropic ask "你是一位有 10 年经验的 Node.js 微服务架构师,正在为一个日均 500 万请求的订单服务编写代码。请严格遵守以下约束:
- 使用 TypeScript 编写
- 必须使用 Fastify 框架(非 Express)
- 所有数据库操作必须通过 Prisma Client
- 错误处理必须返回标准的 RFC 7807 Problem Details 格式
- 不得使用任何未声明的第三方库"
这段指令的价值,在于它 消除了模型的“自由发挥”空间 。没有它,模型可能会给你一个用 Express + Sequelize 的方案,虽然语法正确,但完全违背了你的技术栈选型。角色定义是“谁在写”,约束是“怎么写”,两者缺一不可。
3.2 第二段:描述上下文与现状(Context & Current State)
这是最容易被忽略,却最影响结果质量的部分。CLI 不像 VS Code 插件,它看不到你当前的代码。你必须主动提供“现场快照”。
# 假设你正在处理一个 Jenkins Pipeline,当前 Jenkinsfile 里已有:
cat Jenkinsfile | head -n 15
# 输出:
pipeline {
agent any
environment {
NODE_VERSION = '18.17.0'
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
那么你的指令就必须包含这个片段:
anthropic ask "你是一位 Jenkins 专家。当前 Jenkinsfile 的前 15 行如上所示。现在,我需要在 'Checkout' 阶段之后,添加一个 'Build' 阶段,该阶段需完成以下任务:
1. 使用 pnpm 安装依赖(确保 pnpm 已全局安装)
2. 运行 'pnpm run build' 命令
3. 如果构建失败,发送 Slack 通知到 #devops-alerts 频道
4. 构建产物必须存放在 'dist/' 目录下
请直接输出完整的 Jenkinsfile 片段,仅包含新增的 'Build' 阶段,不要修改现有代码。"
注意关键词:“ 直接输出完整的 Jenkinsfile 片段 ”、“ 仅包含新增的 'Build' 阶段 ”、“ 不要修改现有代码 ”。这些是明确的、可执行的、可验证的指令。模型不会“猜”你想要什么,它只会严格按字面意思执行。
3.3 第三段:指定输出格式与交付物(Output Format & Deliverable)
这是保证结果可集成的最后一道保险。你不能只说“给我代码”,而要说“给我一个可以直接 cat >> Jenkinsfile 的纯文本块”。
anthropic ask "你是一位 CLI 工具开发者。请为一个名为 'file-watcher' 的 Node.js CLI 工具生成完整的 package.json 文件。要求:
- 使用 pnpm 作为包管理器
- 主入口文件是 'src/index.ts'
- 包含 'bin' 字段,指向 'dist/index.js'
- 脚本 'build' 使用 'tsc','start' 使用 'node dist/index.js'
- 依赖 'chokidar' 和 '@types/node'
- 开发依赖 'typescript' 和 '@types/chokidar'
请只输出 JSON 格式的 package.json 内容,不包含任何解释、注释、Markdown 代码块标记(即不要用 ```json ... ``` 包裹),也不要添加任何额外空格或换行。"
这个指令的精妙之处在于“ 只输出 JSON 格式的内容 ”和“ 不包含任何解释、注释、Markdown 代码块标记 ”。这意味着你可以安全地将输出重定向到文件:
anthropic ask "..." > package.json
而不会因为多出来的 ```json 或一行说明文字,导致 npm install 失败。这就是 CLI 的确定性——它的输出,就是你下一步命令的输入。
4. 实战场景拆解:如何用 Claude Code CLI 解决 Jenkins 自动化部署中的具体问题
网络热词中,“jenkins自动部署”、“jenkins打包,发布,部署”、“jenkins持续集成测试”高频出现,这印证了一个事实:Jenkins 依然是企业级 CI/CD 的基石,但它的配置过程,尤其是 Pipeline 脚本的编写,对很多后端或前端开发者而言,依然是一道陡峭的学习曲线。他们熟悉 Node.js,熟悉 pnpm,但面对 stage('Deploy') { steps { sh '...' } } 这样的 DSL,常常感到无所适从。Claude Code CLI 在这里展现出极强的“翻译”能力——它能把“我要把 dist 目录推到 S3”这样的业务目标,翻译成符合 Jenkins 语法、且能通过语法检查的 Groovy 代码。
下面,我以一个真实项目为例,完整复现一次从问题提出到最终落地的全过程。这个项目是一个基于 Vue 3 + Vite 的前端应用,需要部署到 AWS S3 + CloudFront。部署流程涉及 Jenkins Agent、AWS CLI 配置、S3 同步、CloudFront 无效化等多个环节。
4.1 问题提出:从模糊需求到可执行指令
团队成员在 Slack 里发了一条消息:“@me 我们的新前端项目需要上生产,Jenkins 里还没配部署流程。能帮忙搞一下吗?目标是把 dist/ 推到 s3://my-app-prod-bucket ,然后刷新 CloudFront。” 这是一个典型的、未经加工的业务需求。如果直接丢给 Claude Code CLI,它会给出一个笼统的、可能包含错误假设的答案(比如默认你已配置好 AWS 凭据)。
我的做法是,先在本地新建一个临时目录,模拟 Jenkins Agent 的工作空间:
mkdir -p /tmp/jenkins-deploy-demo/{workspace,dist}
cd /tmp/jenkins-deploy-demo
# 模拟 Jenkins Agent 的环境变量(这是关键!)
export WORKSPACE=/tmp/jenkins-deploy-demo/workspace
export BUILD_NUMBER=123
然后,我构造了如下指令:
anthropic ask "你是一位有 5 年经验的 DevOps 工程师,专精 Jenkins Pipeline 和 AWS 部署。当前 Jenkins Agent 的环境如下:
- 工作空间路径:$WORKSPACE
- 构建编号:$BUILD_NUMBER
- 已安装:awscli v2, pnpm, jq
- AWS 凭据已通过 Jenkins Credentials Binding Plugin 注入为环境变量 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY
- 目标 S3 存储桶:s3://my-app-prod-bucket
- CloudFront 分发 ID:E1234567890ABC
请生成一个 Jenkins Pipeline 的 'Deploy' 阶段 Groovy 代码。该阶段必须:
1. 首先检查 $WORKSPACE/dist/ 目录是否存在且非空
2. 使用 aws s3 sync 将 $WORKSPACE/dist/ 同步到 s3://my-app-prod-bucket,添加 --delete 参数
3. 同步完成后,使用 aws cloudfront create-invalidation 命令,为分发 ID E1234567890ABC 创建一个针对 '/*' 路径的无效化
4. 所有命令必须用 sh 步骤包裹,并添加适当的错误处理(如非零退出码则失败)
5. 请只输出 Groovy 代码块,不包含任何解释、注释或 Markdown 标记。"
4.2 模型输出与人工校验:信任但不盲从
CLI 返回了如下内容(为保护隐私,已脱敏):
stage('Deploy') {
steps {
script {
if (!fileExists("$WORKSPACE/dist/")) {
error "dist directory does not exist at $WORKSPACE/dist/"
}
def distFiles = sh(script: "ls -A $WORKSPACE/dist/ | wc -l", returnStdout: true).trim()
if (distFiles == "0") {
error "dist directory is empty"
}
}
sh "aws s3 sync $WORKSPACE/dist/ s3://my-app-prod-bucket/ --delete"
sh "aws cloudfront create-invalidation --distribution-id E1234567890ABC --paths '/*'"
}
}
这个输出非常接近完美,但我在粘贴进 Jenkinsfile 之前,做了三件事:
- 验证
fileExists的路径 :Jenkins Pipeline 的fileExists是相对WORKSPACE的,所以$WORKSPACE/dist/应该写成dist/。我修正为fileExists("dist/")。 - 检查
aws cloudfront命令的权限 :create-invalidation需要cloudfront:CreateInvalidation权限。我快速登录 Jenkins,确认 Credentials Binding Plugin 绑定的 IAM 用户确实拥有此权限。 - 添加日志标识 :为了便于后续排查,我在每个
sh步骤前加了echo "=== Starting [Step Name] ==="。
最终,我将修正后的代码块,连同前面的 Checkout 和 Build 阶段,一起整合进了项目的 Jenkinsfile 。整个过程耗时约 8 分钟,其中 5 分钟用于校验和微调,3 分钟用于实际编写。
4.3 持续迭代:从一次性脚本到可复用的模板库
一次成功的部署,并不意味着结束。我意识到,这个 Deploy 阶段的逻辑,完全可以抽象为一个可复用的模板。于是,我创建了一个新的 CLI 指令,目标是生成一个“参数化”的 Jenkins Shared Library 函数:
anthropic ask "你是一位 Jenkins Shared Library 专家。请为一个名为 'aws-s3-deploy' 的共享库函数生成 Groovy 代码。该函数应接受以下参数:
- bucketName (String, 必填)
- distributionId (String, 可选)
- distPath (String, 默认 'dist/')
- deleteOnSync (Boolean, 默认 true)
函数内部逻辑应与之前生成的 'Deploy' 阶段一致,但需使用传入的参数。请输出一个完整的 Groovy 文件,文件名为 'vars/awsS3Deploy.groovy',内容为一个闭包函数,遵循 Jenkins Shared Library 的标准格式。"
Claude Code CLI 生成的代码,我稍作调整后,就放入了我们的 jenkins-shared-lib 仓库。现在,任何项目只需在 Jenkinsfile 中写:
awsS3Deploy(
bucketName: 'my-app-prod-bucket',
distributionId: 'E1234567890ABC',
distPath: 'dist/'
)
即可复用整套部署逻辑。这正是 CLI 模式带来的长期价值:它不只解决眼前一个问题,而是帮你 沉淀出可复用、可维护、可审计的工程资产 。
5. 避坑指南:那些让 Claude Code CLI “失灵”的真实原因与解决方案
即使掌握了正确的指令范式,Claude Code CLI 在实际使用中依然会遇到各种“失灵”时刻。这些时刻往往不是模型能力的缺陷,而是开发者与工具之间“契约”被意外打破的结果。以下是我在过去一年中记录的、最高频的五个“失灵”场景,以及每一个背后的真实原因和可立即执行的解决方案。
5.1 失灵场景一:“Command not found: anthropic”
现象 :在 Jenkins Agent 的 Docker 容器里执行 anthropic --version ,返回 bash: anthropic: command not found 。
根因分析 : pnpm add -g 安装的全局二进制文件,其路径取决于 pnpm 的配置。在 Docker 容器的最小化镜像(如 node:18-alpine )中, pnpm 默认的 prefix 可能指向 /usr/local/pnpm-global ,而该路径通常不在容器的 PATH 环境变量中。
解决方案 :在 Jenkins Pipeline 的 agent 阶段,显式地将 pnpm 的 global bin 目录加入 PATH 。
agent {
docker {
image 'node:18-alpine'
args '-u root'
}
}
environment {
PATH = '/usr/local/pnpm-global/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
}
stages {
stage('Setup') {
steps {
sh 'apk add --no-cache pnpm'
sh 'pnpm add -g @anthropic-ai/cli'
sh 'anthropic --version' // 现在会成功
}
}
}
提示:不要试图在 Dockerfile 里
RUN pnpm add -g,因为 Jenkins 的 Docker Agent 是在运行时动态拉取镜像并启动容器的,Dockerfile 的修改无法生效。必须在 Pipeline 的sh步骤里完成。
5.2 失灵场景二:“API key is invalid or missing”
现象 :CLI 报错 Error: API key is invalid or missing ,但 cat ~/.anthropic/config/credentials.json 显示 key 完全正确。
根因分析 :这是一个经典的“隐形字符”问题。当你从网页复制 API Key 时,有时会一并复制了不可见的 Unicode 字符(如零宽空格 U+200B ),或者在 cat > file 时,Shell 的引号处理引入了多余的转义。
解决方案 :使用 printf 命令进行“无损”写入,它能精确控制输出的每一个字节。
# ❌ 危险:使用 echo,可能引入换行或空格
echo '{"api_key": "sk-ant-api03-..."}' > ~/.anthropic/config/credentials.json
# ✅ 安全:使用 printf,确保内容原样写入
printf '{"api_key": "sk-ant-api03-..."}' > ~/.anthropic/config/credentials.json
此外,还可以用 xxd 命令检查文件是否纯净:
xxd ~/.anthropic/config/credentials.json | head -n 5
# 正确的输出应该只包含 ASCII 字符,没有 `00` 或 `200b` 这样的异常字节
5.3 失灵场景三:“The model returned an empty response”
现象 :指令看起来很清晰,但 CLI 返回一个空行,或者一个只有 {} 的 JSON。
根因分析 :Claude Code CLI 的底层模型(Claude 3 Haiku/Sonnet)对输入长度有严格限制。当你的指令中包含了大段的、未经剪裁的上下文(例如,一个 500 行的 package.json 或 Jenkinsfile ),模型会因超长而静默失败。
解决方案 :实施“上下文摘要”策略。永远不要把整个文件丢给 CLI,而是提取其最关键的信息。
| 原始上下文 | 摘要后指令 |
|---|---|
cat Jenkinsfile (200 行) |
“当前 Jenkinsfile 已定义 'Checkout' 和 'Build' 阶段。'Build' 阶段的最后一行是 sh 'pnpm run build' 。” |
cat package.json (100 行) |
“当前项目使用 pnpm,主入口是 src/index.ts ,已安装 express 和 cors 作为依赖。” |
这个习惯,不仅能规避超长输入,更能训练你自己的“工程抽象能力”——什么是当前任务真正需要的上下文?什么只是噪音?
5.4 失灵场景四:生成的代码在 Jenkins 里执行时报错 “Permission denied”
现象 :CLI 生成的 sh 'aws s3 sync ...' 在本地能跑通,但在 Jenkins Agent 里报 Permission denied 。
根因分析 :Jenkins Agent 默认以 jenkins 用户身份运行,而 aws configure 命令通常是在 root 或你的个人用户下执行的,生成的 ~/.aws/credentials 文件权限是 600 , jenkins 用户无权读取。
解决方案 :彻底放弃 aws configure ,改用 Jenkins Credentials Binding Plugin 提供的环境变量注入。这是 Jenkins 官方推荐、最安全的方式。
stage('Deploy') {
steps {
withCredentials([aws(credentialsId: 'my-aws-creds', accessKeyVariable: 'AWS_ACCESS_KEY_ID', secretKeyVariable: 'AWS_SECRET_ACCESS_KEY')]) {
sh 'aws s3 sync dist/ s3://my-bucket/ --delete'
}
}
}
然后,在 CLI 指令中,明确告知模型:“AWS 凭据已通过 Jenkins Credentials Binding Plugin 注入为环境变量”。
5.5 失灵场景五:CLI 响应缓慢,或返回 “Rate limit exceeded”
现象 :连续快速地执行多次 anthropic ask ,后面几次会明显变慢,甚至报错。
根因分析 :Anthropic 的 API 有严格的速率限制(RPS)。CLI 作为一个客户端,无法绕过这个限制。频繁的、无意义的调用(比如为了测试而反复执行同一个指令)会迅速耗尽配额。
解决方案 :建立一个本地的“指令缓存”机制。对于已经验证过的、稳定的指令,将其输出保存为一个 .sh 脚本或一个 template.j2 Jinja2 模板。后续使用时,直接 source 或 jinja2 template.j2 data.json > output.txt 。CLI 只用于探索和生成初始模板,而不是用于日常的、高频的、生产环境的调用。这既保护了 API 配额,也提升了你的工作流效率。
6. 从工具到工作流:如何将 Claude Code CLI 深度融入你的日常开发节奏
安装一个 CLI 工具,只是万里长征的第一步。真正的价值,来自于它如何无缝地嵌入你已有的、固化的开发习惯中。我花了三个月时间,将 Claude Code CLI 从一个“偶尔想起来用一下”的玩具,变成了我每天打开终端后第一个运行的命令之一。这个转变,不是靠意志力,而是靠一套精心设计的、围绕 CLI 构建的微型工作流。
6.1 “每日三问”晨间仪式
每天早上 9:15,我会花 5 分钟,执行三个固定的 CLI 指令。这不是为了“生成代码”,而是为了 校准我的注意力和工作方向 。
-
`anthropic ask "回顾昨天的 Git 提交记录(git log --oneline -n 10),总结我昨天主要在解决哪三类问题?"
这个指令会强制我回顾昨天的产出,并让模型用一句话概括。如果模型的回答是“修复了登录页的样式 bug”,那说明我昨天的工作是琐碎的;如果回答是“完成了订单状态机的重构”,那说明我昨天在做高价值的设计。这让我能即时调整当天的计划。 -
`anthropic ask "根据当前项目 README.md 的第一段,用一句话描述这个项目的核心价值主张。"
很多项目 README 写得又臭又长。这个指令逼我提炼出最本质的东西。如果 CLI 无法准确提炼,那说明 README 本身就有问题,需要我立刻去修改。 -
**
anthropic ask "列出今天待办事项列表(TODO.md)中,所有标记为 'high' 优先级的任务。为每个任务生成一个不超过 10 个单词的、可执行的启动指令。"** 这是将模糊的“待办”转化为具体的“第一步”。例如,一个任务是 “优化 Jenkins Pipeline 性能”,CLI 可能会生成 “sh 'time jenkins-cli build my-job'` 测量当前耗时”。这让我能立刻动手,而不是陷入思考。
6.2 “代码审查”辅助模式
我从不在 PR 里直接提交由 Claude Code CLI 生成的代码。我的标准流程是: 生成 → 人工重写 → CLI 辅助审查 。
例如,我写完一个复杂的 pnpm 脚本后,我会先手动实现。然后,我用 CLI 进行反向验证:
anthropic ask "你是一位资深的 pnpm 专家。请审查以下 pnpm 脚本,指出所有潜在问题:
#!/usr/bin/env pnpm
// scripts/deploy.js
import { execSync } from 'child_process';
execSync('pnpm run build');
execSync('aws s3 sync dist/ s3://my-bucket/');
console.log('Deployed!');
"
CLI 会立刻指出:“ execSync 会阻塞主线程,应使用 exec 并处理回调”、“缺少错误处理, execSync 失败时会直接抛出异常”、“ aws s3 sync 命令未指定 --delete ,可能导致旧文件残留”。这些反馈,比任何静态分析工具都更贴近人的直觉,因为它是在理解你“想做什么”的前提下给出的建议。
6.3 “知识沉淀”自动化管道
每个项目都会产生大量“一次性”的知识:一个特殊的 pnpm 配置、一个绕过 Jenkins 插件 Bug 的 Hack、一个特定 Node.js 版本下的编译参数。这些知识散落在 Slack 记录、个人笔记或同事的口头交流中,极易丢失。
我的解决方案是,为每个“一次性”知识,创建一个对应的 .anthropic-prompt.md 文件。例如, pnpm-workspace-issue-fix.anthropic-prompt.md 的内容是:
# Prompt: Fix pnpm workspace linking issue in Jenkins
## Context
- Jenkins Agent runs on Ubuntu 22.04
- Project uses pnpm workspaces
- `pnpm build` fails with "Cannot find module '@myorg/core'"
- Local dev machine works fine
## Desired Output
A Jenkins Pipeline stage that:
1. Runs `pnpm install` with `--shared-workspace`
2. Sets `PNPM_HOME` to `/tmp/pnpm-home`
3. Adds `/tmp/pnpm-home/bin` to PATH
然后,我写一个简单的 Bash 脚本,定期扫描所有 .anthropic-prompt.md 文件,并用 anthropic ask 批量生成对应的解决方案,汇总成一个 SOLUTIONS.md 。这个过程,把零散的、易逝的“经验”,转化成了结构化的、可搜索的“组织资产”。
最后分享一个小技巧:我所有的
.anthropic-prompt.md文件,都放在一个 Git 仓库里,并设置了 GitHub Actions。每当有人提交一个新的 prompt,Action 就会自动运行anthropic ask,并将生成的解决方案作为 Pull Request 提交回来。这不仅自动化了知识沉淀,还让整个团队都能参与到这个“集体智慧”的构建中。它不再是“我”的工具,而是“我们”的工作流。
更多推荐



所有评论(0)