从IDE到Terminal:适合后端宝宝体质的Claude Code工作流|得物技术

从IDE到Terminal:适合后端宝宝体质的Claude Code工作流|得物技术 一、背景事情是这样的之前对 AI 编程一直是观望态度但是部门最近在做 AI 辅助编程 POC有幸成为 POC 用户用上了自己舍不得买的高级编程模型 感谢公司。尽管我自认为是一个在代码上很挑剔的人但是试了下感觉居然还可以 Go、React只能说还得是谷歌调整重心略微发力Gemini 3 表现确实很不错。既然尝到甜头了觉得自己是时候好好地琢磨琢磨研究研究沉淀一套自己的工作流、方法论解放自己的生产力顺应潮流努力成为 AI 时代的受益者而不是被淘汰的人新的开发范式需要搭建新的开发环境和匹配自己开发习惯的工作流这就像刚学编程那会需要挑一个自己喜欢的 IDE、熟悉 IDE 快捷键和优化 IDE 设置一样。过程中间肯定有阵痛Java 开发者们回忆一下多年之前从 Eclipse 转 IDEA 那会的阵痛吧但是磨刀不误砍柴工阵痛之后一定是生产力提升。借本文分享下我摸索后的方案供大家参考。二、工具选型目前 AI 辅助编程领域热火朝天各种 GUI 工具、TUI 工具如雨后春笋让人目不暇接这对于花心的强迫症选手比如我来说选型很困难。但是我觉得有两个基础认知可以帮助我们更好地做决定一AI 辅助编程工具由脑和手两部分组成。脑是外接的大模型 API手是各个产品调教的提示词和内部工作流。按我理解【脑】决定了工具的上限【手】决定了工具的下限。在这个场景里大模型就像是汽车里的发动机而且所有型号的汽车支持的【发动机】规格都是通用的、统一的、标准化的。有了这个基础我们可以随便选一个趁手的工具然后自行按场景选配【合适】的【发动机】。二AI 辅助编程当前是一个【千帆竞发】的热门领域而且单纯就【工具】来说这个领域【没有技术壁垒】。A 产品抛出的杀手级特性不出半个月一定会有 B 产品跟进。毕竟现在软件迭代的速度借助 AI 提升了很多A 产品验证过的想法B 产品可以很快地跟进和实现。Claude Code CLI 的开发者就使用 Claude Code CLI 迭代 Claude Code CLI有点绕口大概就是【工具自举】的意思吧。Claude Code CLI综上其实没啥纠结的我们照着这两点来选型就好1. 这个工具一定得便捷地支持模型插拔就是我随时可以根据场景换一个更适合的、更便宜的、表现更好的大模型。而且这种插拔一定要简单。 2. 这个工具一定要有积极的维护者不断地迭代、优化它的工作流、提示词。最好是一个商业化产品因为商业化产品出于其商业目标一定会投入资源积极进行迭代。当前满足这两个条件的我想也就是 Claude Code CLI 了 1. Claude Code CLI 是一个商业化产品有专门的技术团队在不停地更新、迭代。 2. Claude Code CLI 可以非常便捷地支持大模型插拔我可以随时根据成本、效率、体验来切换合适的大模型。因此这个环节我选 【Claude Code CLI】。后文以CC代指Claude Code CLI。快速切换模型我通过自定义 Shell 函数来实现便捷的模型切换不同的场景、不同的任务使用不同的模型。基本原理就是CC 支持环境变量注入 LLM 配置信息因此我只需要按场景注入【行内临时环境变量】即可。详见Bash - 行内环境变量Bash 是标准的 Shell 实现其他 Shell 如 Zsh 都兼容其行为。Shell配置我到处弄了一堆免费的、收费的模型用然后给他们取了我记得住的别名使用效果为了兼容设置了一个 claude 别名这样输入claude 时默认使用智谱 GLM 模型。脚本源码Shell 脚本大概这样可以修改后配置到自己的 ~/.zshrc 中。如果不熟悉 Shell嫌麻烦也可以试试这个开源工具farion1231/cc-switch。# claude 默认 alias claudezcc # Kimi function kcc(){ echo Kimi Claude Code... local modelkimi-k2.5 ANTHROPIC_BASE_URLhttps://api.moonshot.cn/anthropic \ ANTHROPIC_AUTH_TOKENsk-xxxxxxxxx \ ANTHROPIC_SMALL_FAST_MODEL$model \ ANTHROPIC_DEFAULT_OPUS_MODEL$model \ ANTHROPIC_DEFAULT_SONNET_MODEL$model \ ANTHROPIC_DEFAULT_HAIKU_MODEL$model \ CLAUDE_CODE_SUBAGENT_MODEL$model \ launch_claude_code $ } # 智谱GLM function zcc(){ echo GLM Claude Code... ANTHROPIC_BASE_URLhttps://open.bigmodel.cn/api/anthropic \ ANTHROPIC_AUTH_TOKENsk-xxxxxxxxx \ launch_claude_code $ } # 七牛 function qcc(){ echo QiNiu Claude Code... local modelminimax/minimax-m2.1 ANTHROPIC_BASE_URLhttps://api.qnaigc.com \ ANTHROPIC_AUTH_TOKENsk-xxxxxxxxx \ ANTHROPIC_SMALL_FAST_MODEL$model \ ANTHROPIC_DEFAULT_OPUS_MODEL$model \ ANTHROPIC_DEFAULT_SONNET_MODEL$model \ ANTHROPIC_DEFAULT_HAIKU_MODEL$model \ CLAUDE_CODE_SUBAGENT_MODEL$model \ launch_claude_code $ } function launch_claude_code(){ CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC1 \ # clear command claude $ }三、开发环境在当前的气氛下我想我算是一个【古板】的开发者我做不到【fire and forget】或者说完全靠黑盒的自然语言对话来完成代码开发。我还是只将 AI 当助手还是想要白盒的掌控 AI 写的代码还是希望最终交付的代码有我的风格、我的审美、我的品味。毕竟 AI 也只能帮我写代码并不能帮我背锅。尽管我选择了 TUI 工具 Claude Code CLI但是我还做不到全程只在终端操作我还是习惯 JetBrains 特色的双栏 diff。因此当前我开发流程的起点还是传统的 IDE比如我最喜欢的 JetBrains。每天上班第一件事是接水第二件事就是打开 IDE。所以我需要想办法来将 GUI 工具和 TUI 工具流畅的衔接起来减少代码开发时的频繁切换产生的割裂感多屏协作如上图我有 3 个显示器我的构想是这样的MacBook 内置显示器 —— 常驻两个空间一个用来打开浏览器还有 VPN、网易云音乐、Finder 软件用来承接各种临时的操作。一个用来打开飞书用来沟通、协作。中间主屏 —— 常驻两个空间一个用来打开浏览器用来做各种【输出】。一个用来打开 IDE专注于写代码、看代码用标签页打开多个 Project。左边竖屏 —— 常驻两个空间一个用来打开浏览器用于看文档、查资料等各种【输入】。一个用来打开 TUI 工具进行辅助编程GUI/TUI衔接现在问题来了我希望我的开发工作的【主轴】是 IDE流程的起点是 IDE。但是我的 IDE 在中间屏幕终端在左边屏幕它俩是独立软件没法协作、自动跟随切换 Project 的工作目录。我希望有个【自动化流程】当我在 IDE 里切换项目的时候CC 自动跟随切换衔接流程我期待的流程是这样的因为某个原因我在 IDE 里打开了一个项目 A →准备写代码了点击 IDE 里的某个【按钮】左边屏幕自动【新建】一个项目 A 的 CC 会话终端并激活到前台显示 → 我跟左边的 CC 对话让他干活 → 我在中间的 IDE 里评审、调试、诊断 → 因为某些原因我又要在 IDE 打开一个别的项目 B → 我再次点击那个【按钮】左边屏幕自动【新建】一个项目 B 的 CC 会话终端并激活到前台显示 → 我在 IDE 里又切回了项目 A我又点击了那个【按钮】左边屏幕自动【切换】到 A 的 CC 会话终端并激活到前台显示。好的想法已经有了AI 时代就怕你没有想法有想法就一定有办法实现代码实现macOS 上的原生软件大部分支持 AppleScript 自动化也就是说我们可以写脚本驱动软件的行为、模拟人机交互比如打开软件、新建 tab、点击按钮等。JetBrains IDE 支持集成外部命令也就是说可以在 IDE 里点击一个按钮自动执行一个 Shell 脚本或者别的可执行文件。产品需求清晰了接下来开始让 AI 干活一顿沟通和调试之后我们有了一个【自动化】创建 iTerm2 新标签的可执行脚本这是给大模型的需求提示词大家可以按需选用做个性化的调整## 工具功能说明 请帮我创建一个 macOS 上的 iTerm2 自动化工具,主要功能包括: ### 核心需求 1. **智能窗口管理**:自动使用或创建 iTerm2 窗口 2. **项目标签管理**:为每个项目目录维护独立的标签页,支持标签复用 3. **三面板布局**:自动创建固定的三面板布局(上方一个全宽面板,下方两个并排面板) 4. **命令自动执行**:在每个面板中自动切换到项目目录并执行预定义的命令 ### 使用场景 bash # 基本用法:在当前目录打开 ./open-claude-in-iterm.sh # 指定项目目录 ./open-claude-in-iterm.sh /path/to/project --- ## 技术架构要求 ### 技术栈 - **Shell 脚本** (open-claude-in-iterm.sh):参数处理、路径规范化、日志管理 - **AppleScript** (open-claude-in-iterm.applescript):iTerm2 自动化核心逻辑 - **依赖**:macOS、iTerm2、Bash --- ## 详细功能规格 ### 1. Shell 脚本 (open-claude-in-iterm.sh) #### 参数处理 - **参数1**:项目目录(可选,默认当前目录) - **自动处理**:相对路径转绝对路径 #### 面板命令配置 bash PAN1_CMDclaude # 上方面板命令 PAN2_CMDclaude # 左下面板命令 PAN3_CMDclaude # 右下面板命令 ### 2. AppleScript (open-claude-in-iterm.applescript) #### 主要流程 **步骤1:窗口管理** - 检查 iTerm2 是否运行(未运行则自动启动) - 使用当前激活的 iTerm2 窗口,如果没有则创建新窗口 **步骤2:标签管理(关键逻辑)** - 在找到的窗口中,查找 session.path 变量等于项目目录的标签 - **复用逻辑**:如果找到现有标签 且 窗口不是新创建的 → 直接切换标签并返回 - **创建逻辑**:如果未找到标签 或 窗口是新创建的 → 创建新标签和布局 **步骤3:三面板布局创建** 布局示意图: ┌─────────────────────────┐ │ 上方面板 (全宽) │ │ 执行: PAN1_CMD │ ├──────────────┬──────────┤ │ 左下面板 │ 右下面板 │ │ PAN2_CMD │ PAN3_CMD │ └──────────────┴──────────┘ **分割顺序(重要)**: 1. 初始状态:一个全屏 session(上方面板) 2. 第一次分割:对上方 session 执行**水平分割**,创建下方面板 3. 第二次分割:对下方 session 执行**垂直分割**,创建右下面板 **步骤4:命令执行** 在每个面板中依次执行: 1. 切换到项目目录:cd /path/to/project 2. 清屏:clear 3. 等待 0.3 秒(确保目录切换完成) 4. 执行命令:PAN_CMD 5. 等待 0.5 秒(确保命令启动) ## ⚠️ 常见错误 - ❌ 符号链接未处理,导致找不到 AppleScript 文件 - ❌ 分割顺序错误,导致布局不正确 - ❌ 缺少 delay,导致命令执行失败或在错误目录执行 - ❌ 新窗口处理错误,导致多余空白标签 - ❌ 标签复用逻辑错误,导致同一项目创建多个标签 - ❌ 路径未引用,导致包含空格的路径失败IDE配置创建外部工具添加到工具栏使用效果点击工具栏按钮后自动在全屏的 iTerm2 窗口新建或激活项目目录下的 CC 会话下图里就是 3 个项目。四、多Agent协作会的越多让你干的就越多。既然 AI 那么牛一个 CC 会话已经满足不了我膨胀的想法和需求了。我希望我可以同时支配多个 AI 开发工程师而我变成 PM所以参考酒米的思路我给每个项目的终端自动化的划分了 3 个子窗口每个子窗口都是一个 CC 会话。效果大概这样主从架构每个项目自动打开 3 个常驻的 AI 会话我设想的工作流是这样的【架构师】上面的大屏用贵的模型专门用来跟我聊需求、对方案、产出任务列表。【开发者】下面的两个小屏用领域特定的模型专门用来落地大屏架构师产出的方案和任务。比如前端需求用前端效果好的模型后端需求用后端效果好的模型。知人善用才是好 PM这个模式也很匹配现实中的组织架构和成本取舍现实中每个需求一般也都是由一个架构师和多个中高级开发者来协作完成感谢热心市民无声雨给我们小组共享了自己采购的纯血 Claude 模型所以目前我用 Claude 模型来对方案用 GLM 或者 MiniMax 来实施方案规范驱动开发(SDD)主从智能体的协作很重要我跟【架构师】聊了半天确定的方案和设计需要有一个清晰的、对大模型友好的方案和任务文档作为【开发者】的输入。这就很巧刚好最近在流行 SDD规范驱动开发。大致就是模拟现实中的软件开发流程将开发生命周期拆分为 3 个阶段【proposal】需求对齐、方案设计、【任务细化】【apply】开发任务实施【archive】功能验收、文档沉淀。围绕这个流程开源社区设计和研发了一系列对大模型非常友好的工具和提示词比如 OpenSpec【阶段 1】和【阶段 2】中间通过格式设计良好的【设计文档和任务文档】来进行上下文交接。也就是说我可以在上述的 3 窗口环境中按照 SDD 流程来【proposal】跟【架构师】交互对齐需求、设计和任务 A → 【apply】让【开发者 1】着手完成任务 A → 【proposal】继续跟【架构师】交互对齐需求、设计和任务 B → 【apply】让【开发者 2】着手完成任务 B → 【proposal】继续跟【架构师】交互对齐需求、设计和任务 C → 【apply】让【开发者 1】着手完成任务 C → ……五、CC拓展CC 当然很厉害但它本质上也就是一个朴素的 ReAct 模式智能体。ReAct 这么火大家肯定也都耳熟能详了我们也就不说太多。当然 CC 团队围绕编程这个课题做了很多细致的提示词调优和内置工作流设计这个我们黑盒的用就好了也没必要关注太多。我们最需要关注的是 CC 提供给我们使用者的【拓展点】那些允许我们个性化设置的东西。命令(command)命令的本质就是预定义的提示词模板。目的是为了省事不用每次都重复的输入类似的提示词。比如想让 CC 帮我提交代码每次我们可能都要交代一大堆字比如请调用 git diff --cached 获取当前暂存区的代码变动。 忽略所有的 node_modules 或二进制文件。 基于变动内容判断这是一个 feat (新功能), fix (修复) 还是 chore (杂务)。 生成一个不超过 50 字符的标题并在正文详细列出影响的文件。 由我确认后执行 git commit。”就像写代码的时候将重复代码提取为一个独立方法一样我们可以把这些可以复用的提示词固定成一个【命令】后续使用的时候直接输入命令名字就好。斜杠命令是一段提示词的快捷方式。技能(skill)技能和命令最大的差别就是命令是用户主动提交的提示词而技能是 Agent 自己决策后自动导入的提示词。当然技能包里除了提示词一般还会携带一些配套的工具、脚本、命令或者文档。比如我安装了一个【html 转 pdf 的技能包】这只能提示 CC 可以使用这个技能但是具体用不用、什么时候用、怎么用都是 CC 自己规划、决策的。子代理(subAgent)SubAgents 是可以并行处理任务的独立 AI 代理每个子代理拥有独立的上下文窗口可以分配不同任务以提高效率。【主代理】的上下文窗口中包含有【子代理】的【简短】描述信息可以基于这个描述信息规划、决策使用哪个子代理。{ agents:{ code-reviewer:{ description:专门负责代码审查的子代理, model:claude-opus-4-5, instructions:你是一个专业的代码审查专家,专注于检查代码质量、安全漏洞和性能问题。, tools:[read,search,git], permissions:{ allowWrite:false } }, test-writer:{ description:专门负责编写测试的子代理, model:claude-sonnet-4-5, instructions:你是一个测试工程师,专注于编写全面的单元测试和集成测试。, tools:[read,write,bash] }, doc-generator:{ description:专门负责生成文档的子代理, model:claude-sonnet-4-5, instructions:你是一个技术文档专家,专注于生成清晰、准确的技术文档。, tools:[read,write] } } }独立上下文窗口的好处是避免上下文污染和占用。比如我要在代码里找一个接口的所有实现类这个就很适合子代理来做。主代理只需要交代给子代理接口名然后就等子代理返回实现类列表。这样在主代理的上下文窗口里只会有子代理的输入和输出几个类文件路径而子代理在搜索过程中遍历文件、目录、读取文件内容产生的临时 token不会对主代理产生影响。我目前认为 SubAgent 和 Skill 差不太多。不过我不确认 Skill 是不是在独立的上下文中执行。MCPMCP 和技能一样都是由 CC 自主规划、决策使用的。差别有两个MCP 工具的说明信息占用的上下文太多了不管是否被使用每次都需要一口气提交所有工具的完整元信息使用说明 出入参 Schema供大模型规划、决策占用大量上下文。而【技能】选择了【渐进式披露】先向大模型提供少量关键信息只有在大模型选择了使用技能时才告诉大模型更多关于技能的补充说明信息让大模型进一步推理、决策。MCP 工具更多的偏向【远程 RPC】基于网络来实现原子化的远程能力调用。而【技能】更多的偏向【本地 IPC】具体能力更多通过【编排】本地脚本、本地命令来实现有点像 stdio 模式下的 MCP。钩子(hook)hook 是在特定事件触发时自动执行的脚本用于自定义工作流、拦截危险操作、自动格式化代码等。就类似 Linux NetFilterCC 在很多地方植入了流程执行的劫持点将流程上下文交给用户开发的脚本或者命令。插件(plugin)plugin 就是上述各种拓展打包、分发、安装的一种格式。你可以把它想象成 npm 包、pip 包、apk 包等我们比较熟悉的概念。然后我们可以按流程和格式建设插件市场类似 pip-index、npm-index 等。我没有细看流程和格式但是大概也就是一个特定文件布局的 zip 文件包里面有插件描述信息和各类拓展比如可以包含5 个 Skills10 个斜杠命令3 个 MCP 服务器配置2 个 SubAgent 定义若干 Hooks。六、CC技巧飞书MCP飞书官方提供了 MCP我主要用它来读写飞书文档蛮好用的大家可以试试。比如我每周都要在固定目录下创建固定标题格式的【系统巡检文档】所以我借助飞书 MCP 整了个自定义 Command 帮我自动创建这些文档去除重复劳动感觉真香之前每次都要手动建 3 个文档、选目录、改名字模糊搜索有时候我们需要精确的告诉 CC哪个文件需要读或者改其实不用从 IDE 里复制文件路径直接在终端里模糊搜索就好了。WebFetchCC 默认集成了 WebFetch 命令就是指定 URL 读取网页内容这个理论上就是一个本地执行的 curl 命令没有云端成本不需要云端协作。但是有个问题一CC 在访问地址之前会先调用 anthropic.com 的一个风控接口判断这个网络地址是否有安全风险。二政策原因anthropic.com 会拒绝所有来自中国大陆、香港的请求风控接口返回 404 或者其他。三风控不通过WebFetch 失败。在 ~/.claude/settings.json 中添加如下配置禁用 WebFetch 工具前置的风控检查就好了。{ skipWebFetchPreflight:true, }详见https://linux.do/t/topic/1148954WebSearchWebSearch 是需要云端协作的需要有个搜索引擎服务提供能力。因为我们没有用官方的付费订阅所以默认的 WebSearch 工具我们用不了调用 WebSearch 工具得到的结果都是 0。办法是去找一个免费或者收费的 MCP 服务。免费的我看大家都推荐 Bravebrave.com大家也可以找找别的。收费的也有很多我看智谱的套餐里限量提供了 联网搜索 MCP - 智谱 AI 开放文档。也有很多按量付费的大概几分钱一次有需要的可以找找。添加了 MCP 搜索工具后建议禁用 CC 自带的 WebSearch 工具不然每次跟大模型交互时工具信息还会带给大模型产生额外的 token 开销和推理误判。在 ~/.claude/settings.json 中添加如下配置{ permissions:{ deny:[ WebSearch ] } }iTerm2通知终端上的任务需要我们输入的时候可以配置下让 iTerm2 发出声音和通知。这样我们就不会因为忘记确认操作而阻塞进度。详见Optimize your terminal setup - Claude Code Docs清空上下文因为我们每个项目都复用一屏内的 3 个子窗口一般不会重开。为了避免上下文溢出或者之前对话对新任务产生干扰当我们完成一个任务时需要及时的执行 /clear 命令清空上下文从 0 开始新对话。如果任务没有完成但是又不得不 clear那么可以维护一个自定义命令在 clear 后提示大模型根据 git status 看到的文件变更快速找回上下文。把 git 状态当作 AI 的 “短期记忆快照”/clear 只清上下文不清工作进度。# Context Catch-up 当前对话已被 /clear请通过 git 状态恢复上下文。 使用方式 1. 阅读 git status必要时结合 git diff 2. 仅基于文件变更推断正在进行的任务 3. 延续现有实现思路不要假设额外背景 4. 在未收到明确指令前先给出你对当前上下文的判断 目标 - 快速找回任务状态 - 避免旧对话或错误假设干扰新任务注意力哨兵在记忆文件里要求大模型扮演一个特别的角色如果聊着聊着角色行为丢失了说明大模型注意力失焦了已经丢掉了你最开始的要求。这时候就该 clear 一下重开会话了。拓展市场为了便于相关个性化拓展物料的分发、便于大家搜索、安装市面上已经有了相关的分发平台和便捷安装命令了。https://skills.shhttps://www.aitmpl.com状态行个性化状态行显示在 Claude Code 会话界面底部可以自定义显示的内容比如git分支名、目录名、模型名等。推荐使github开源项目claude-code-statusline-pro-aicodeditor效果如下详见https://github.com/HorizonWing/claude-code-statusline-pro-aicodeditor七、总结差生文具多尽管我暂时还没有使用 CC 产出啥说得上来的东西但是确实花了很多时间琢磨怎么让它用起来更顺手。一些不成熟的想法希望可以给到大家启发。参考https://www.ginonotes.com/posts/how-i-use-every-claude-code-featurehttps://www.cnblogs.com/knqiufan/p/19449849往期回顾1.AI编程能力边界探索基于 Claude Code 的 Spec Coding 项目实战得物技术2.搜索 C 引擎回归能力建设从自测到工程化准出得物技术3.得物社区搜推公式融合调参框架-加乘树3.0实战4.深入剖析Spark UI界面参数与界面详解|得物技术5.Sentinel Java客户端限流原理解析得物技术文 /羊羽关注得物技术每周更新技术干货要是觉得文章对你有帮助的话欢迎评论转发点赞未经得物技术许可严禁转载否则依法追究法律责任。