跑到终端里敲几行命令,Claude Code 就把一个丑萌丑萌的牛头雏形建出来了,再切到 Codex 里把游泳男孩女孩的动作参数调了一轮——这个画面放在一年前,我是不信的。但用 WorkBuddy 把 Claude Code 和 Codex 收进同一个工作台,再配上一套我们自己写的 Craftsman Agent Skill,现在这就是我的日常。这篇我就把整套玩法的思路、Skill 怎么写的、以及两个 IP(牛来、游泳男孩女孩)从 0 到 1 的实操过程完整拆出来。如果你也在做潮玩、3D 设计或者独立开发,想用 AI 把建模和批量化生产跑通,这篇应该能帮你省掉不少摸索时间。
1. 为什么是 WorkBuddy + Skill,而不是直接问 Claude Code
1.1 “能聊”和“能干”之间差了一套工作流
我在刚开始拿 Claude Code 做 3D 设计时,最大的感受是:它很聪明,但很散。你让它“设计一个牛头潮玩”,它真的会给你写一版 Three.js 或者 OpenSCAD 代码,乍一看像模像样;可一旦你追问“比例是多少”“壁厚多少”“导出格式是什么”,它就开始自由发挥了。同一个问题换一天问,出来的东西完全是两个风格。原因很简单——Claude Code、Codex 这类编码智能体,本质上是通用代码生成器,它的默认知识里并没有“潮玩 IP 设计”的行业规范。你每次都要把需求、约束、参数重新描述一遍,而人又最容易在这种重复描述里漏掉关键信息,最后模型就跑偏。
所以真正的问题不是“AI 能不能做 3D 设计”,而是“怎么让 AI 稳定地按你的标准做 3D 设计”。这就是 Skill 存在的意义。Skill 相当于给智能体配备了一本操作手册:它告诉 AI“你是谁、按什么流程干活、输出什么格式、避开什么坑”,而不是让 AI 每次都在脑子里临时凑一个方案。用 WorkBuddy 来管这件事,比单纯在 Claude Code 里写指令更顺手,因为你可以把技能、会话、项目文件统一管理,不用每次都在命令行里翻历史记录。
1.2 Skill 的本质:给智能体一本操作手册
很多第一次接触 Skill 的朋友会把它理解成“一段更长的提示词”。对,也不对。提示词是每次对话都要重复的临时指令,而 Skill 是一个持久化、结构化的知识包。在 WorkBuddy 里,一个标准的 Skill 就是一个 SKILL.md 文件,放在项目的 .workbuddy/skills/<技能名>/ 目录下。文件头部有一段 YAML 元信息,标记技能名称和适用场景;正文部分则写具体的执行流程、设计规范、代码要求和示例。当对话内容命中这个 Skill 的描述时,智能体会自动把整个 Skill 内容读进去,再开始干活。
这个机制带来的好处非常明显:你可以把一次次调教 AI 的“经验”沉淀下来。第一次做牛来 IP 时,我花了几个小时才让模型生成出我想要的比例;后来我把这些约束写成 Skill,第二次、第三次生成几乎不用再重复沟通。说白了,Skill 是把“我口头教 AI 怎么干活”变成“AI 自带一套行业规范”。对于要做系列化 IP 的人来说,这个差异是决定性的。你不再是每次面对一个“失忆的实习生”,而是面对一个“读完员工手册的老师傅”。
1.3 把 Claude Code 和 Codex 放在同一个工作台
另一个容易踩的坑是:Claude Code 和 Codex 是两套独立工具,各有各的启动方式,各有各的上下文。你刚在 Claude Code 里把模型调出一个方向,切到 Codex 里又得从头讲一遍需求。这种碎片化的体验在做小脚本时还好,一旦涉及建模这种长流程,就是灾难。我的做法是用 WorkBuddy 把两者统一管理。WorkBuddy 本身是个桌面应用,它在本地把 Claude Code、Codex、Gemini CLI 之类的编码智能体都接进来,你在同一个界面里开多个会话,项目文件、Skill 目录、对话上下文都能共用。理论上你完全可以只用一个工具,但双引擎的好处是:Claude Code 在理解自然语言和写作代码注释方面更细腻,Codex 在批量执行和代码稳定性方面更扎实,把同一个 Skill 喂给两个引擎,相当于多一个视角给你做交叉检查。
2. 环境搭建:从零装出你的 3D 设计工作台
2.1 安装 Claude Code 与 Codex
先说 Claude Code。它本质是一个 Node.js 命令行工具,装好 Node.js(建议 18 以上版本)之后,终端执行 npm install -g @anthropic-ai/claude-code。装完在终端输入 claude 就能进交互界面。首次使用会要求登录 Anthropic 账号,或者在 Claude 相关服务里配置 API Key。这里提醒一句:不同版本的 Node 可能会有兼容性提醒,遇到权限报错就检查一下 npm 的全局安装目录是不是在 PATH 里。
Codex 的安装方式类似,npm install -g @openai/codex,或者你用 Homebrew 的话 brew install codex 也可以。装完需要配置 OPENAI_API_KEY 环境变量,Windows 下在系统设置里加环境变量,macOS/Linux 下直接写进 ~/.zshrc 或 ~/.bashrc。两个工具装好后,先在终端分别跑一句最简单的指令,比如让 claude 写一个 hello world、让 codex 写一个 hello world,确认两个引擎都能正常返回,再进入下一步。我见过不少人直接装 WorkBuddy 再配引擎,结果出问题时分不清是引擎没装好还是 WorkBuddy 配置错,调试成本直接翻倍。
2.2 安装 WorkBuddy 并接入两个助手
WorkBuddy 提供桌面客户端,去官网下载对应系统的安装包即可,安装过程没什么特殊选项。首次启动会让你选择要接入的 AI 引擎,勾选 Claude Code 和 Codex,它会去读取你本机已有的登录态和 Key。如果你的引擎已经能在终端跑起来,这里基本就是一路下一步的事。需要注意:WorkBuddy 是把本机的编码智能体包了一层管理壳,它不是云端服务,所以引擎的登录、API Key 这些仍然归引擎自己管。换句话说,Claude Code 登录过期了,你在 WorkBuddy 里也会跟着掉线,得回终端重新认证。
接到工作台之后,我建议你先建一个测试项目,随便写点代码,让 WorkBuddy 同时调用两个引擎各生成一版,确认工具链通了再上真正的 3D 项目。这个过程很土,但能帮你避免后面建模建到一半才发现某个引擎根本没连上。我当时就吃过这个亏,在 WorkBuddy 里折腾半天,最后发现终端里 Codex 的 Key 根本没配好,白费了一个晚上。
2.3 建立项目目录与技能挂载点
WorkBuddy 默认会在项目目录下寻找 .workbuddy 文件夹,里面可以放 skills、agents、memories 这些子目录。我的个人习惯是给 3D 设计单独建一个仓库,比如 ip-design-studio/,然后按 IP 名称分子目录:
ip-design-studio/ ├── .workbuddy/ │ └── skills/ │ └── craftsman-3d-ip-designer/ │ └── SKILL.md ├── cow-lai/ # 牛来项目 ├── swim-kids/ # 游泳男孩女孩项目 └── shared-assets/ # 公用模型、材质库这种结构的好处是:每个 IP 自己的对话记录、生成文件都隔离,但 Skill 又是全局共享的。做新 IP 时,不用重新写一遍设计规范,直接在 skill 里追加新角色的约束就好。我强烈建议把模型源文件、导出文件、参考图分开,别让 AI 生成的临时文件糊在一堆,不然后期排查问题你会想哭。
3. Craftsman Agent Skill 实战:把 3D 设计经验写进技能里
3.1 Skill 文件的基本结构与角色设定
Craftsman Agent 这个名字,听起来唬人,其实本质是给智能体设定一个“工匠”人格和工作流。我用的 Skill 文件结构大概是这样的:
--- name: craftsman-3d-ip-designer description: 当用户需要设计 3D 潮玩 IP 角色、输出可 3D 打印或可渲染的模型时使用 --- # 角色 你是资深潮玩 IP 建模师,熟悉…… # 工作流 ## 阶段一:概念澄清 ## 阶段二:参数化建模 ## 阶段三:模型检查 ## 阶段四:导出交付YAML 里那个 description 非常关键,它决定了 WorkBuddy 什么时候把这个 Skill 自动加载进来。写 description 要用“当……时使用”这种触发句式,越具体越好。如果你写“3D 设计工具”,那智能体可能在聊别的时也乱触发;如果你写“当用户提到牛、游泳、潮玩、IP 角色、3D 打印时使用”,命中率就会高很多。我发现很多人写的 Skill 不生效,八成就是 description 写得太宽泛,导致该触发的时候没触发,不该触发的时候瞎触发。
3.2 工作流阶段的拆解:从概念到可打印模型
我的 Skill 正文核心是把 3D 建模拆成四个阶段。概念澄清阶段,AI 要先用文字和草图参数把角色定义清楚,包括角色背景、风格倾向、姿态、颜色、比例;这一步不通过,不允许进入建模。参数化建模阶段,我要求 AI 优先使用 OpenSCAD 这类参数化建模工具写代码,因为参数化意味着所有尺寸都能改,后期微调特别方便;如果是复杂有机形态,再用 Three.js 或者 Blender Python API 生成网格。模型检查阶段,AI 必须检查模型是不是封闭网格、有没有破面、壁厚够不够;这是 3D 打印最关键的环节,很多新手直接跳过,最后打印出来全是废件。导出交付阶段,统一导出 STL、GLTF、OBJ 三种格式,并附上尺寸说明和生产建议。
这套流程看起来是常识,但如果你不写进 Skill,AI 根本不会主动按这个顺序走。我见过最典型的问题就是:让 AI 做个牛头,它直接画了一堆圆球方块堆在一起,尺寸没有、壁厚没有,能看不能用。把流程固化进 Skill 之后,AI 至少会按顺序推进,不会跳过概念阶段直接出模型。
3.3 一个最小可用的 3D 设计 Skill 示例
下面是我早期版本的简化示例,你可以直接抄去改:
--- name: craftsman-3d-ip-designer description: 当用户需要设计 3D 潮玩 IP 角色、输出可 3D 打印或可渲染的模型时使用 --- # 角色定位 你是具备 10 年玩具行业经验的潮玩 IP 建模师。擅长把文字描述转化为参数化 3D 模型。 # 设计规范 - 风格:圆润、卡通、可爱,头身比建议 1:1 到 1:2(潮玩手办常用) - 主要几何体优先用 OpenSCAD 的 union/difference 组合 - 壁厚不少于 2mm,防止 3D 打印时断裂 - 所有尺寸使用毫米 - 输出格式:STL、GLTF、OBJ # 工作流程 1. 概念澄清:先输出角色设定表,包含角色名、主题、配色、姿态、参考关键词 2. 建模:生成完整可运行的建模代码 3. 检查:用 meshlab 或 blender 命令行检查模型是否封闭 4. 导出:在导出目录生成 STL/GLTF/OBJ # 已知禁忌 - 不要用 0 壁厚 - 不要在未确认概念前直接建模 - 不要让模型超高超重大这个 Skill 放在 .workbuddy/skills/craftsman-3d-ip-designer/SKILL.md 之后,新开一个 WorkBuddy 会话,你说“帮我设计一个招财风格的牛来 IP”,它会自动加载这套规范,按四阶段流程走。Skill 的价值不在于让 AI 多聪明,而在于让 AI 稳定、不跑偏、每次都能交出符合你预期的结果。
4. 案例拆解:牛来 IP 从想法到模型
4.1 需求描述与技能调用的全过程
牛来这个名字,取自“牛气冲天”“牛转乾坤”“好运牛来”这类吉祥话,天生适合做招财属性的潮玩。我的原始需求就一句话:“一个以牛为基础的潮玩 IP,名叫牛来,丑萌、招财、圆润,单手可握。”在 WorkBuddy 新会话里输入这句话,Skill 自动触发后,Claude Code 很快给了角色设定表:名字牛来,身份是财神坐骑转世的现代打工人牛,主体色调中国红加金色,姿态是双手叉腰站立,有点像那种台式机旁边的小摆件。
这个阶段不要急着让 AI 出模型,先把设定表审一遍。我当时改了两处:一是把“现代打工人”改成了“憨厚但会赚钱的小掌柜”,更贴合招财主题;二是把姿态从站立改成半蹲抱金元宝,这样整个造型更有记忆点。改完之后,才让 AI 进入建模阶段。整个过程其实就是在和 AI 对齐概念,这一步省了,后面模型返工的成本要高得多。你会发现,概念阶段花掉的十几分钟,能帮你省下建模阶段的好几个小时。
4.2 建模细节:让 AI 生成的模型能真正落地
建模阶段,Claude Code 按 Skill 的要求用 OpenSCAD 写了一个牛头加身体的组合。简单示意一下核心思路:
module body() { scale([1, 1.2, 1]) sphere(r = 20); } module head() { translate([0, 0, 32]) scale([1.2, 1, 1.1]) sphere(r = 14); } module ears() { translate([-10, 0, 38]) scale([1, 0.8, 0.5]) sphere(r = 4); translate([10, 0, 38]) scale([1, 0.8, 0.5]) sphere(r = 4); } module horn() { translate([-12, 2, 44]) rotate([0, -20, 0]) cylinder(h = 8, r1 = 2, r2 = 1); translate([12, 2, 44]) rotate([0, 20, 0]) cylinder(h = 8, r1 = 2, r2 = 1); } // 金元宝、眼睛等省略 union() { body(); head(); ears(); horn(); }这段代码本身很简单,重点是 AI 会把尺寸、位置统一用毫米算好,并且用 union 把各部分拼起来,保证模型是封闭的。我让 Claude Code 生成了这个版本后,又切到 Codex 里用同一个 Skill 再生成一版,两个引擎给出了略有差异的耳朵角度和元宝大小。我不以任何一版为最终答案,而是取两者更符合“憨厚”气质的参数,比如耳朵下垂角度大一点,让整体更萌。这种双引擎交叉验证的方式,是我后来用得越来越顺手的原因。
4.3 效果检查与迭代
模型代码生成之后,WorkBuddy 里可以直接看到文件结构,我把生成的 .scad 文件丢到 OpenSCAD 里渲染预览。第一次预览发现牛角位置偏内侧,看起来像两根朝天椒而不是牛角;我在会话里让 AI 调整牛角的角度和位置参数,它一下子给出了好几组方案。像这种参数化模型的好处就是,你只需要告诉它“角度往两边张开 15 度”“整体拉高 2mm”,它重新生成代码,你重新渲染,两分钟就能看到效果。
这个案例最终导出的是 STL,用 Blender 打开做了简单上色预览,确认造型没问题后,我用 3D 打印机打了个素模。放在桌上那一刻,说句实话,成就感很强。但更让我高兴的是,整个过程从概念到打印只花了半天,而以前我做一个类似的泥稿要一周。对这个项目来说,AI 并没有“替我做设计”,它更像一个执行力极强的建模助理,把我想象中的东西快速变成了能触摸的实体。
5. 案例拆解:游泳男孩女孩系列 IP 的批量生产
5.1 系列化 IP 的难点:风格统一
做单个 IP 和做系列 IP 完全是两回事。单个 IP 你只需要让 AI 把一个角色做好;系列 IP 的难点在于——游泳男孩、游泳女孩、可能还有不同的泳姿、泳帽、泳镜——它们必须看起来是“同一个世界观里的角色”,而不是各玩各的。如果每次都用自然语言临时描述,AI 就会给你生成风格漂移的角色,男孩是圆脸,女孩可能变成长脸;男孩是 2 头身,女孩可能变成 3 头身。观众一眼就看得出不是一套。
解决办法就是把统一规范写进 Skill。我在 craftsman-3d-ip-designer 的 SKILL.md 里新增了一段“系列角色规范”:同一系列共享同一个头身比,比如都是 1.5 头身;脸型统一为圆脸,眼睛统一为两点式萌系眼;身体姿态允许不同,但材质和倒角半径要一致。这样无论切换哪个引擎、哪个会话,AI 生成出来的角色基础造型都是一套基因。
5.2 用 Skill 锁定设计规范
具体到游泳男孩女孩,我在 Skill 的角色设定表里给每个成员建了参数卡片:
| 角色 | 头身比 | 泳姿 | 头饰 | 主体色 |
|---|---|---|---|---|
| 游泳男孩 | 1.5:1 | 自由泳 | 蓝色泳帽 | 海蓝色 |
| 游泳女孩 | 1.5:1 | 蛙泳 | 粉色泳帽 | 珊瑚粉 |
有了这个表格,我让 WorkBuddy 用同一个会话生成两个角色。Claude Code 先生成了男孩,Codex 接着生成女孩。两部分模型文件放在 swim-kids/ 目录下,每个角色一个子目录。最后渲染时我把两个模型放进同一个 Blender 场景,调整了各自的朝向,做了一张“戏水”主题的概念图,整套 IP 的视觉统一性一下子就出来了。表格写进 Skill 之后,两个引擎生成的角色比例、脸型、泳帽颜色几乎完全一致,这是我手动调教做不到的。
5.3 批量生成与个性化调整
系列 IP 真正让人觉得爽的是可复制。因为 Skill 已经把设计规范固化,我之后想加一个“游泳小狗”角色,只需要在参数卡片里加一行,然后让 AI 按同样的流程走一遍。所有尺寸、导出格式、检查步骤都是现成的,工作量从一个新 IP 的好几天压缩到一个下午。当然,批量生产不意味着完全放养。每一版模型生成后我都会用 Blender 打开快速过一遍眼睛位置、手脚比例这些东西;AI 有时候会在细节上犯“低级错误”,比如两只手一长一短、泳镜位置歪了。这种检查不能省,但也不再需要从零开始建模了。
6. 踩坑实录:常见问题与排查技巧
6.1 Skill 不生效的排查
这是新手最容易遇到的情况。你明明写好了 SKILL.md,结果在会话里输入需求,AI 完全无视那套规范,该怎么自由发挥还怎么自由发挥。我踩过几次之后总结出三个检查点:第一,目录位置对不对。WorkBuddy 只扫描项目根目录下的 .workbuddy/skills/,你放到别的地方它根本看不见。第二,文件名必须是 SKILL.md,大小写也要对。第三,description 写没写清楚。如果描述太宽泛,触发器可能不认为当前任务命中了技能;如果描述太窄,可能永远不触发。改完这些之后,一定要新开会话再试。
提示:改完 SKILL.md 后,一定要新开会话再测试。WorkBuddy 对 Skill 的读取通常发生在会话创建阶段,旧会话不会自动加载新技能——这一点特别坑,我一度以为是我文件写错了,结果只是没开新会话。
6.2 模型文件打不开、渲染出错的处理
生成好的模型打不开,大概率是文件本身有问题。最常见的是 STL 文件破面,也就是网格不是封闭流形,Blender、切片软件打开时要么报错要么显示异常。建议在 Skill 里就要求 AI 生成代码后先做一次封闭性检查,或者用 meshlab 的命令行工具自动检测。我一般在本地装一个 Blender,用它的 3D 打印工具箱插件检查:选中模型,点击“检查”就能看到哪些面反转、哪些边非流形。如果 AI 生成的 OpenSCAD 代码本身有问题,比如两个组件只是表面重叠而没有真正合并,导出时也会出问题。这时候让 AI 改用 union 包一层就解决了。
6.3 跨工具切换时的配置问题
用 WorkBuddy 同时管 Claude Code 和 Codex,最常出现的怪问题是:同一个 Skill,Claude Code 执行得很好,Codex 却像没读到一样。我查下来发现主要原因是 Codex 对 Markdown 指令的解析风格不同,它更容易被非常明确的“命令式”段落带动。解决办法是在 Skill 里额外写一个“执行清单”区块,用 1、2、3 这种硬编号把必须完成的动作列清楚,两个引擎都能稳定执行。另一个配置问题是环境变量。Codex 如果找不到 Key,在 WorkBuddy 里会直接报错,你需要回终端用 codex --version 之类的命令确认 CLI 本身能跑,再回来重启 WorkBuddy。顺序搞反的话,你会误以为是 WorkBuddy 的问题,实际上引擎早就离线了。
7. 我的真实体会与后续扩展
这个玩法真正改变我工作方式的,是把“我能和 AI 聊出什么”变成了“我手上有多少套可复用的 Skill”。我第一次做牛来时,很多规则是现场琢磨出来的;第二次做游泳男孩女孩时,我只需要把规则写进 Skill,剩下的事情 AI 帮我干。所以如果你也想尝试这个方向,我的建议是:第一个 Skill 不要追求大而全,先把最简单的流程跑通——一个角色、四个阶段、三个导出格式。跑通之后再往里面加规范、加案例、加禁忌,慢慢它就会变成你的“数字老师傅”。
最后分享一个小技巧:写 Skill 的时候,把失败经验也写进去。比如“不要用 0 壁厚”“不要直接生成 40cm 的大尺寸模型”“导出前先检查模型是否封闭”这些看起来不起眼的句子,恰恰是 AI 最容易踩的坑。把这些写进去之后,模型的成功率会肉眼可见地提升。下一步我打算把颜色材质、UV 贴图也纳入 Skill 流程,让 AI 直接从概念生成带渲染材质的最终效果图。这条路还很长,但走起来确实有意思。