一、背景:为什么我决定认真折腾这套 workflow
我一直对「让AI直接接管整个开发」持谨慎态度。部门最近做AI辅助编程POC,我成了首批用户,尝到了用上高级模型的甜头(Go和React场景下表现不错)。但我骨子里还是个喜欢白盒掌控的Java后端开发者——代码最终要体现我的审美和判断,AI只能当助手,不能背锅。
新的开发范式需要新的环境和习惯。这就像当年从Eclipse切到IDEA的阵痛期,磨刀不误砍柴工。既然要用,就要把它真正嵌入我的日常,而不是停留在聊天窗口。于是我花时间沉淀了一套「IDE为主、Terminal为辅、多Agent协作」的方案,目前在真实项目里跑得还算顺手,拿出来分享。
二、工具选型:脑和手要分开看
AI辅助编程工具本质上由两部分组成:脑(大模型API)和手(提示词+内部工作流)。脑决定上限,手决定下限。目前工具迭代极快,杀手级特性很快就会被跟进,所以我只看两个硬指标:
- 必须能便捷插拔模型——根据任务成本、速度、质量随时切换。
- 必须有持续迭代的维护者——最好是商业化产品,能持续优化提示词和内置流程。
Claude Code CLI(后文简称CC)同时满足这两点:它是商业化产品,有团队在持续更新;同时支持通过环境变量极简切换模型。我目前在用的模型包括智谱GLM、Kimi、七牛Minimax等,按场景灵活调用。
落地配置(直接复制到 ~/.zshrc 即可):
Bash
# 默认走智谱GLM(性价比高)
alias claude='zcc'
function zcc(){
echo "GLM Claude Code..."
ANTHROPIC_BASE_URL="https://open.bigmodel.cn/api/anthropic" \
ANTHROPIC_AUTH_TOKEN="sk-xxxxxxxxx" \
launch_claude_code $@
}
function kcc(){
echo "Kimi Claude Code..."
local model="kimi-k2.5"
ANTHROPIC_BASE_URL="https://api.moonshot.cn/anthropic" \
ANTHROPIC_AUTH_TOKEN="sk-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 qcc(){
echo "QiNiu Claude Code..."
local model="minimax/minimax-m2.1"
ANTHROPIC_BASE_URL="https://api.qnaigc.com" \
ANTHROPIC_AUTH_TOKEN="sk-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_TRAFFIC=1 \
command claude $@
}
这样输入 claude 默认用GLM,输入 kcc 就切Kimi,输入 qcc 就切七牛。切换成本几乎为零。
三、开发环境:IDE仍是主战场,Terminal做精准辅助
我做不到全程黑盒自然语言开发,还是习惯JetBrains的双栏diff和代码审查。因此我的起点永远是IDE,CC只是助手。
硬件布局(3屏方案):
- MacBook内置屏:浏览器 + 飞书(沟通与临时操作)
- 中间主屏:IDE(专注编码)+ 输出类浏览器
- 左侧竖屏:文档/资料浏览器 + TUI(CC三面板)
核心痛点:IDE和Terminal是两个独立进程,切换项目时要手动同步目录,割裂感很强。
解决方案:用AppleScript + JetBrains External Tools实现「一键同步」。
我把需求完整喂给CC,让它帮我写了一个自动化脚本(经过几轮调试稳定)。脚本核心逻辑:
- 检查iTerm2是否运行,否则启动。
- 在当前窗口查找是否已有该项目目录的标签,存在则直接激活。
- 不存在则新建三面板布局:上方全宽(架构师角色)、下方左右分屏(两个开发者角色)。
- 每个面板自动 cd 到项目目录、clear、执行对应模型命令。
落地步骤:
- 把脚本保存为 ~/bin/launch-claude-project.sh,chmod +x。
- IDEA → Settings → Tools → External Tools → 新建:
- Program: zsh
- Arguments: ~/bin/launch-claude-project.sh $ProjectFileDir$
- Working directory: $ProjectFileDir$
- 把这个External Tool拖到工具栏,起个名字叫「启动CC助手」。
点击按钮后,左侧竖屏会自动弹出或激活对应项目的三面板CC会话,完全不需要手动操作。
四、多Agent协作:一个人就是一支小团队
一个CC会话很快就不够用了。我给每个项目自动打开3个常驻会话:
- 上方大屏(架构师):用贵一点的模型(Claude Opus或同级),专门聊需求、做方案、输出任务列表。
- 下方左右小屏(开发者):用领域模型(GLM/Minimax等),专门执行架构师拆出来的任务。
这很像现实中的「架构师 + 中高级开发」协作模式。
规范驱动开发(SDD)落地流程: 我把开发生命周期拆成三阶段,通过格式良好的文档在Agent之间交接:
- Proposal阶段(架构师窗口):对齐需求、方案设计、任务细化,输出 proposal.md + tasks.md。
- Apply阶段(开发者窗口):读取上述文档,逐项实施。
- Archive阶段:功能验收、文档沉淀。
实际操作中,我经常是:
- 先跟架构师聊到方案确认,让它生成结构化任务清单。
- 把任务清单丢给开发者窗口,让它开始写代码。
- 代码出来后我用IDE双栏diff审查,再让开发者修bug或加测试。
- 完成一个任务就 /clear 清上下文,避免污染下一个任务。
这样一个人能同时推进多个子任务,上下文也相对干净。
五、CC的拓展点:让它真正变成我的工具
CC本质是ReAct智能体,但它留了很多个性化接口,我目前用得比较多的有:
- Command(斜杠命令):把重复提示词固化。比如 /commit 直接生成符合规范的提交信息。
- Skill:Agent自己决定什么时候用的能力包(带工具+提示词)。我装了html转pdf、接口文档生成等技能。
- SubAgent:独立上下文的子代理。适合做代码审查、写测试、找接口实现类等「搜索型」任务,不会污染主上下文。
- MCP:远程能力调用。我主要用飞书官方MCP自动创建每周系统巡检文档,省去了手动建3个文档的重复劳动。
- Hook:特定事件触发脚本。比如危险操作拦截、自动格式化。
- Plugin:把以上打包分发的格式,方便团队内共享。
这些拓展让我从「让AI写代码」进化到「让AI按我的组织方式工作」。
六、实用技巧(避坑+提效)
- WebFetch风控绕过(国内用户必备):在 ~/.claude/settings.json 加 “skipWebFetchPreflight”: true。
- WebSearch替代:官方WebSearch在国内受限,建议接Brave或智谱的MCP搜索服务,同时在settings.json里 deny 掉原生WebSearch,省token。
- iTerm2通知:任务需要确认时让终端响铃+系统通知,避免卡住流程。
- /clear后的上下文恢复:我维护了一个自定义命令,清空后让模型先读 git status + git diff,快速找回当前任务状态。
- 注意力哨兵:在项目记忆文件里写一段角色定义——“你现在是我的后端架构师,专注于可维护性和性能。如果发现自己偏离角色,请立即提醒我。” 聊着聊着跑偏了就clear重开。
- 状态行个性化:用开源项目 claude-code-statusline-pro-aicodeditor 显示git分支、模型名、当前任务等信息,一目了然。
七、总结
这套方案我从选型、脚本调试、Agent角色划分、文档交接流程,一步步折腾到现在。虽然还没用它产出什么惊艳成果,但日常编码的割裂感明显降低了,上下文管理也更可控了。
它不是银弹,只是我目前摸索出来、比较适合「喜欢白盒、喜欢JetBrains、后端思维重」这类开发者的一个路径。欢迎有类似痛点的同学一起交流,互相补坑。