1. 项目概述为什么要在 Claude Code 里“手搓”工作流最近在开发者圈子里Claude Code 的热度居高不下。作为一个深度集成在 IDE 中的 AI 编程助手它最吸引我的地方不是它能帮我写几行代码而是它那种“对话式”的编程体验。但用久了你会发现很多重复性的、有固定模式的开发任务比如初始化项目、运行测试套件、格式化代码并提交每次都要手动输入一连串指令效率并不高。这就引出了我的核心想法能不能在 Claude Code 里把这些固定的、多步骤的任务封装成一个可复用的“工作流”简单来说这个项目就是利用 Claude Code 的对话上下文、代码理解和执行能力结合一些巧妙的工程化思路打造一个轻量级、无需额外依赖的自动化任务流。它不像 n8n、Flowable 那样是重型的工作流引擎也不像 Dify、Coze 那样需要复杂的可视化编排。它的精髓在于“手搓”——用最直接的方式在现有的对话环境中构建出能理解你意图、并自动执行一系列操作的智能体。这对于日常开发中那些琐碎但必要的“脏活累活”来说提升效率是立竿见影的。无论你是前端开发者需要构建部署还是数据科学家要跑一整套数据预处理和模型训练脚本都可以通过定制自己的工作流来解放双手。2. 核心思路拆解Claude Code 工作流的四大基石要在 Claude Code 里实现工作流我们不能把它想象成一个需要安装的插件或外部系统。它的实现完全依赖于我们对 Claude Code 交互模式的理解和创造性运用。我将其核心思路总结为四大基石这构成了我们“手搓”工作流的基础。2.1 基石一上下文即配置Claude Code 的强大之处在于它拥有出色的上下文理解能力。我们不需要一个独立的config.yaml或workflow.json文件。工作流的“配置”就存在于对话历史中。你可以通过一段清晰的、结构化的自然语言描述向 Claude Code 定义一个工作流。例如你可以这样开始 “我将定义一个名为‘前端发布准备’的工作流。它包含以下步骤1. 运行npm run lint检查代码规范。2. 运行npm run build进行生产构建。3. 运行npm test执行单元测试。4. 如果所有步骤都成功将构建好的dist目录压缩为release.zip。请记住这个工作流当我下次说‘执行前端发布准备流程’时请按顺序执行上述步骤并告诉我每个步骤的结果。”在这里你的自然语言描述就是工作流的蓝图。Claude Code 会记住这个上下文并在你触发关键词时尝试解析并执行它。这要求我们的描述必须精确、无歧义并且步骤之间逻辑清晰。2.2 基石二指令链与条件判断一个复杂的工作流离不开条件判断。Claude Code 本身不支持if-else语法但我们可以通过设计指令链来模拟。核心技巧在于利用 Claude Code 执行命令和读取文件的能力。例如在一个构建流程中我们需要根据测试结果决定是否继续。我们可以这样设计指令“请运行npm test并捕获输出。”Claude Code 执行后会返回测试结果。你可以接着问“检查上一条命令的输出中是否包含 ‘Tests passed’ 或 ‘0 failures’ 字样”根据 Claude Code 对输出的分析回答是/否你可以手动或通过后续指令决定是执行“构建”步骤还是执行“修复测试”步骤。虽然这看起来需要人工介入判断但实际上你可以将整个对话包括你的判断逻辑保存为一个“范例”。下次启动类似流程时你可以直接引用这个范例Claude Code 会基于相似的上下文进行推理从而自动化整个判断过程。这需要一些“训练”但一旦模式建立就会非常高效。2.3 基石三外部脚本驱动对于更复杂、步骤繁多的工作流完全依赖对话可能显得冗长。这时最佳实践是“内外结合”。我们可以让 Claude Code 充当一个智能调度器去调用外部脚本。具体做法是将工作流的具体步骤写在一个本地脚本文件中如 Shell 脚本deploy.sh或 Python 脚本pipeline.py。然后你的工作流在 Claude Code 中就简化为一两条指令 “请运行项目根目录下的scripts/deploy.sh脚本。” 或者更精细一些 “首先请检查scripts/deploy.sh脚本是否有可执行权限。如果没有请运行chmod x scripts/deploy.sh。然后在终端中执行该脚本并将实时输出显示给我。”这样做的好处是复杂性封装脚本可以处理非常复杂的逻辑、循环和错误处理这些是纯对话难以实现的。可维护性脚本文件可以用版本控制管理修改和迭代非常方便。Claude Code 的角色转变Claude Code 从“执行者”变成了“监督者”和“触发器”。它可以帮助你理解脚本在做什么甚至在脚本运行出错时帮你分析日志并提出修复建议。2.4 基石四模版化与参数化真正的工作流不能是硬编码的它需要适应不同的项目或不同的输入。在 Claude Code 中我们可以通过“模版对话”和“参数替换”来实现。模版对话你可以创建一个专门用于定义工作流的对话会话。在这个会话里你精心设计好工作流的每一步提问和指令形成一个完美的模版。将这个会话保存或记录下对话的初始提示。当需要为新项目创建工作时复制这个模版会话只修改其中项目特定的部分如项目路径、命令参数。参数化在指令中明确使用占位符。例如“请进入project_path目录运行build_command。” 在实际执行时你首先提供这两个参数的值。Claude Code 能够很好地理解这种模式并在后续的上下文中将占位符替换为实际值。你甚至可以让 Claude Code 帮你生成一个参数填充的清单确保没有遗漏。注意Claude Code 的上下文长度有限。过于冗长的工作流定义可能会耗尽上下文导致它忘记早期的步骤。因此对于长工作流优先考虑“外部脚本驱动”模式或者将工作流拆分成几个独立的、可链式调用的子工作流。3. 实战演练手搓一个“Markdown 文档发布”工作流光说不练假把式。我们以一个实际且常见的场景为例一步步“手搓”一个工作流将项目中的 Markdown 文档转换为格式优美的 Word 文件并备份到指定目录。这个需求结合了文件操作、格式转换和归档非常适合展示工作流的威力。3.1 步骤一定义工作流范围与步骤首先我们需要明确这个工作流要做什么。假设我们的需求是定位到项目文档目录docs/。找到所有.md文件。使用pandoc工具将每个.md文件转换为.docx文件。将生成的.docx文件移动到一个以当前日期命名的备份文件夹中如backups/2024-05-27/。最后生成一个简单的转换报告。我们在 Claude Code 中新建一个对话开始定义工作流。初始提示至关重要 “我将创建一个名为‘MD文档归档工作流’的自动化流程。请你作为我的助手记住以下步骤逻辑。当我发出指令‘开始文档归档’时请按顺序执行以下操作...”3.2 步骤二利用 Claude Code 进行环境检查与准备工作流不能假设运行环境是完美的。因此第一步应该是检查和准备。 “在开始之前请先帮我做几件事检查当前工作目录是否在项目根目录下。如果不是请导航到/Users/MyProject。检查系统是否安装了pandoc。请运行命令which pandoc或pandoc --version来确认。检查docs/目录是否存在。请列出该目录下的所有.md文件。”通过这几条指令我们完成了环境预检。如果pandoc未安装Claude Code 会告诉我们我们可以即时中断工作流或让它给出安装建议如brew install pandoc或apt-get install pandoc。这体现了工作流的健壮性。3.3 步骤三实现核心转换与文件操作环境就绪后开始核心操作。我们不会笨拙地让 Claude Code 一条条执行而是利用它的代码生成能力创建一个临时脚本。 “现在请生成一个 Bash 脚本内容如下获取当前日期格式为 YYYY-MM-DD存入变量BACKUP_DIR。在项目根目录下创建backups/$BACKUP_DIR目录。遍历docs/目录下的所有.md文件。对每个文件使用pandoc input.md -o output.docx命令进行转换输出文件暂时放在temp/下。将temp/下生成的.docx文件移动到backups/$BACKUP_DIR/中。清理temp/目录。最后在终端输出本次转换的文件列表和备份路径。”生成脚本后立即让 Claude Code 执行它 “请将上述脚本保存为scripts/convert_md.sh并赋予执行权限chmod x scripts/convert_md.sh。然后运行这个脚本。”这个过程中Claude Code 扮演了“编剧”和“导演”的角色。它编写了具体的“剧本”脚本然后指挥系统去执行。如果脚本运行出错你可以立刻要求 Claude Code 分析错误日志并修正脚本这本身也成为了工作流调试的一部分。3.4 步骤四生成报告与总结脚本执行成功后工作流并未结束。我们需要一个清晰的反馈。 “脚本已执行完毕。请做最后三件事检查backups/目录下最新创建的文件夹确认其中的.docx文件数量与最初docs/中的.md文件数量是否一致。生成一个简短的报告内容模板为‘文档归档完成于 [时间]。共处理 [数量] 个 Markdown 文件已备份至 [路径]。’将这份报告追加到项目根目录的workflow_log.txt文件中。”至此一个完整的、包含检查、执行、验证和日志记录的工作流就完成了。整个对话过程本身就是这个工作流的“源代码”和“配置”。你可以将整个对话复制保存下次在类似的项目中只需稍作修改如更改项目路径即可快速复用。4. 进阶技巧让工作流更智能、更强大基础的工作流能处理固定任务但一个“智能”的工作流应该能应对一些变化和不确定性。下面分享几个我实践中总结的进阶技巧。4.1 动态路径与用户输入工作流不应硬编码死路径。我们可以让 Claude Code 在运行时询问用户。 例如在定义工作流时我们可以这样设计 “当我触发‘处理文档’时请先询问我‘请输入需要处理的文档目录的绝对路径。’ 等待我的输入然后将我的输入值作为变量DOC_PATH用于后续所有步骤。”这样每次运行工作流时你都可以指定不同的目录极大地提高了灵活性。Claude Code 能够很好地理解这种交互模式并在上下文中记住你的输入。4.2 错误处理与重试机制在“外部脚本驱动”的模式下错误处理可以在脚本内完成。但在纯对话模式中我们需要设计容错。 一种方法是“检查-询问”循环。例如在运行构建命令后指令不应该是简单的“运行npm run build”而应该是 “请运行npm run build并仔细观察输出。如果命令成功退出返回码为0请告诉我‘构建成功’并继续下一步。如果失败请将错误输出的最后10行展示给我并询问我‘构建失败是否尝试修复依赖后重试(yes/no)’” 根据你的回答工作流可以分支到“运行npm install后重试构建”或“终止流程”的路径。这模拟了简单的异常处理逻辑。4.3 工作流组合与模块化复杂的项目可能需要多个工作流。我们可以采用“主工作流”调用“子工作流”的方式。 例如你可以定义三个独立的工作流对话对话A代码质量检查包含 lint, format, 复杂度分析。对话B构建与打包。对话C部署发布。然后创建一个主协调工作流其步骤就是“现在执行代码质量检查流程。” 此时你可以切换到对话A的上下文或直接引用其定义。“如果上一步报告所有检查通过现在执行构建与打包流程。”“构建成功后最后执行部署发布流程。”你可以通过一个总控的脚本或一个精心设计的主对话来串联它们。这实际上是在用对话和上下文管理实现了一种轻量的“工作流编排”。4.4 利用 Claude Code Skill 的潜力虽然目前 Claude Code 的 Skill 功能可能还不支持用户自定义复杂工作流但我们可以关注其设计模式。通常一个 Skill 需要定义触发器、输入参数和执行逻辑。我们可以模仿这种模式来规范我们“手搓”的工作流触发器一个固定的短语如“开始每日站会纪要生成”。输入明确在开始时通过对话收集所有必要参数。执行逻辑一套清晰的、保存在对话中的步骤序列。 这样做的好处是即使没有官方框架你的工作流也会更规范、更易于理解和交接给其他团队成员。5. 避坑指南与常见问题实录在实际“手搓”工作流的过程中我踩过不少坑也总结了一些常见问题的解法。这里分享给你希望能帮你节省时间。5.1 上下文丢失与记忆管理这是最大的挑战。Claude Code 的上下文窗口有限长对话后期它可能会忘记开头定义的工作流步骤。解决方案关键信息复述在触发工作流执行的关键节点简要复述核心步骤。例如“现在开始执行‘前端发布准备’工作流请依次完成1.代码检查2.构建3.测试。”使用系统指令如果支持有些版本的 Claude 允许你设置系统级指令。你可以将工作流的精简版定义放在系统指令中这样能更持久地影响模型行为。分阶段会话不要试图在一个对话中完成所有事。将工作流拆分成“定义阶段”、“配置阶段”、“执行阶段”。每个阶段都是相对独立、简短的对话。用文档或笔记软件记录各阶段的“对话种子”或关键提示词。5.2 命令执行的安全性与权限让 AI 助手直接运行系统命令存在风险尤其是涉及文件删除、系统设置等操作时。黄金法则永远不要让 Claude Code 执行你不理解或未经过你明确确认的危险命令。对于rm -rf、chmod 777、curl | bash这类命令必须格外小心。安全实践预览而非直接执行对于不确定的命令先让 Claude Code “输出这个命令但不要执行”你确认无误后再手动执行或告诉它去执行。使用干运行模式很多命令支持--dry-run或-n参数可以模拟执行而不产生实际影响。在关键操作前先做干运行。限制路径在指令中明确限定操作范围如“仅在build/目录内删除.tmp文件”避免误操作其他区域。5.3 跨平台兼容性问题你在 Mac 上开发的工作流可能到了 Windows 或 Linux 上就无法运行因为命令和路径语法不同。解决方案抽象命令在定义工作流时尽量使用跨平台的工具或描述逻辑。例如不说“运行ls -la”而说“列出当前目录下所有文件的详细信息”。Claude Code 通常会根据你的系统生成合适的命令在 Windows 上可能是dir。环境检测在工作流开头增加一个环境检测步骤。“请检测当前操作系统是 Windows、macOS 还是 Linux并告诉我。” 然后你可以根据它的回答在后续步骤中提供不同的指令分支虽然这需要手动介入但保证了正确性。优先使用脚本对于复杂工作流强烈推荐使用 Python、Node.js 等跨平台语言编写驱动脚本。这样工作流的核心逻辑被封装在脚本里Claude Code 只需调用python script.py兼容性问题由脚本内部解决。5.4 处理交互式命令有些命令需要交互式输入如git commit会打开编辑器某些 CLI 工具会提示选择。Claude Code 无法直接处理这些。解决方案使用非交互式参数尽可能使用命令的非交互模式。例如git commit -m “Your message”代替直接git commitnpm install -y自动确认。提前准备输入如果必须交互尝试通过管道或输入重定向提前提供输入。例如echo “y\n” | some_command。拆分步骤将交互式步骤拆出来手动完成。例如工作流执行到git add .后暂停提示你手动完成git commit和git push然后再继续后续的自动化步骤。承认自动化有边界有时手动介入是更优解。5.5 性能与耗时任务如果工作流中某个步骤如大型项目编译耗时很长Claude Code 对话可能会因超时而中断。解决方案异步执行与后台任务对于耗时命令让其后台运行并将输出重定向到日志文件。例如npm run build build.log 21 。然后工作流可以定期去“检查”这个日志文件来判断任务是否完成。设置检查点在长时间任务开始前告诉 Claude Code“接下来我将运行一个耗时较长的构建命令。在此期间你可以等待。我会在命令结束后告诉你‘构建完成’然后我们继续下一步。” 这有助于模型保持正确的对话状态。分而治之将超长工作流拆分成几个独立的部分分别在不同的对话中完成并通过文件或状态码来传递“接力棒”。6. 总结与个人心得在 Claude Code 里“手搓”工作流本质上是一种思维模式的转变。我们不再仅仅把它看作一个问答机器人而是将其视为一个可以编程的、具备上下文记忆和命令执行能力的智能体接口。这个过程没有复杂的图形界面没有繁琐的 YAML 配置有的只是清晰的逻辑、结构化的对话和对工具特性的深度挖掘。我个人最大的体会是这种方法最适合那些“半自动化”场景——流程大体固定但偶尔需要一点人工判断或微调。它填补了纯手动操作和搭建全套 CI/CD 流水线之间的空白。启动成本极低灵活性极高特别适合个人开发者、小团队或者探索新项目时快速搭建自动化脚本。开始尝试时可以从最小的、最让你感到重复痛苦的任务开始。比如一个自动格式化代码并创建 Git 提交的工作流。成功一次后你会立刻感受到效率的提升然后就会自然而然地想去优化它、扩展它。记住核心不是追求全无人值守的完美自动化而是让你从重复劳动中解放出来把精力集中在真正需要创造力和思考的事情上。Claude Code 工作流就是达成这个目标的一把顺手又聪明的“瑞士军刀”。