Agent-almanac athanor
git clone https://github.com/pjt222/agent-almanac
T=$(mktemp -d) && git clone --depth=1 https://github.com/pjt222/agent-almanac "$T" && mkdir -p ~/.claude/skills && cp -r "$T/i18n/zh-CN/skills/athanor" ~/.claude/skills/pjt222-agent-almanac-athanor-e18d8f && rm -rf "$T"
i18n/zh-CN/skills/athanor/SKILL.md炼金炉
执行代码或数据的四阶段炼金术嬗变——分解原始材料、净化其精华、照亮其目标形态、合成精炼的输出。炼金炉(athanor)是在所有阶段维持稳定热量的熔炉。
适用场景
- 将遗留代码转化为现代、结构良好的等价物
- 重构渐进式修复不断失败的深度纠缠模块
- 将代码库从一种范式转换为另一种(过程式到函数式、单体到模块化)
- 将原始、混乱的数据处理成干净的分析数据集
- 当更简单的重构方法已停滞,需要全周期转化时
输入
- 必需:要转化的材料(文件路径、模块名称或数据源)
- 必需:期望的最终状态(目标架构、范式或格式)
- 可选:已知约束(必须保留 API、不能更改数据库模式等)
- 可选:先前失败的转化尝试及其停滞原因
步骤
第 1 步:黑化(Nigredo)——分解
将原始材料分解为其组成元素。没有什么是神圣的;一切都需要编目。
- 完整清点材料:
- 列出每个函数、类、模块或数据实体
- 映射所有依赖关系(导入、调用、数据流)
- 识别隐藏的耦合(共享全局变量、隐式状态、副作用)
- 浮现隐藏的假设:
- 代码依赖哪些未记录的行为?
- 哪些错误条件被静默吞噬?
- 存在哪些排序依赖?
- 编目反模式和技术债务:
- 上帝对象、循环依赖、复制粘贴重复
- 死代码路径、不可达分支、残余功能
- 硬编码值、魔术数字、嵌入式配置
- 产出黑化清单:每个元素、依赖关系、假设和反模式的结构化目录
预期结果: 一份完整、毫不留情的材料清单。清单应该令人不适——如果不是,分解就不够彻底。每个隐藏的假设现在都是显式的。
失败处理: 如果材料太大无法完全清点,按模块边界分解,将每个模块作为单独的炼金炉运行。如果依赖关系过于纠缠无法映射,使用
grep/Grep 追踪实际调用点,而不是依赖文档。
第 2 步:冥想(Meditate)——煅烧检查点
运行
meditate 技能以清除黑化阶段积累的假设。
- 放下黑化清单,清除心理上下文
- 锚定在输入中声明的转化目标
- 观察黑化引入了什么偏见——分解是否使某些方法看起来不可避免?
- 将任何过早的解决方案想法标记为"切线"并回到目标
预期结果: 一种清晰、无偏见的状态,准备在不被锚定到当前形态的情况下评估材料。目标感觉新鲜而非被发现所约束。
失败处理: 如果黑化的发现持续吸引注意力(一个特别糟糕的反模式、一个诱人想要保留的巧妙技巧),写下来并明确搁置。只有当目标比当前形态更清晰时才继续。
第 3 步:白化(Albedo)——净化
将本质的与偶然的分离。剥离一切不服务于目标形态的东西。
- 从黑化清单中,对每个元素分类:
- 本质的:核心业务逻辑、不可替代的算法、关键数据转换
- 偶然的:框架样板代码、旧错误的变通方案、兼容性垫片
- 有毒的:反模式、安全漏洞、死代码
- 将本质元素提取到隔离状态:
- 从框架包装器中提取核心逻辑
- 将数据转换与 I/O 分离
- 从实现中提取接口
- 完全移除有毒元素——记录什么被移除以及原因
- 对于偶然元素,确定目标形态中是否存在等价物
- 产出白化提取物:具有干净接口的净化本质逻辑
预期结果: 一组代表原始材料核心价值的纯净、隔离的函数/模块。每个部分都可以独立测试。提取物应明显小于原始材料。
失败处理: 如果本质与偶然过于交织无法分离,先引入接缝点(接口)。如果材料抗拒净化,可能需要先用
dissolve-form 处理后才能继续炼金炉流程。
第 4 步:修复(Heal)——净化评估
运行
heal 技能以评估净化是否彻底。
- 分诊白化提取物:是否还有任何东西携带有毒残留?
- 检查偏移:净化是否偏离了原始转化目标?
- 评估完整性:所有本质元素是否都已计入,还是有些被过早丢弃?
- 如需要则重新平衡:恢复被错误分类为偶然的本质元素
预期结果: 确信白化提取物是完整、干净的,且已准备好进入照明阶段。没有本质逻辑丢失;没有有毒模式残留。
失败处理: 如果评估揭示出重大缺口,带着具体缺口返回第 3 步。不要在材料不完整的情况下进入黄化阶段。
第 5 步:黄化(Citrinitas)——照明
看见目标形态。将净化的元素映射到其最优结构。
- 模式识别:识别哪些设计模式服务于净化的元素
- 数据流是否暗示管道/过滤器、事件溯源、CQRS?
- 接口是否暗示策略、适配器、外观模式?
- 模块结构是否暗示六角形、分层、微内核?
- 设计目标架构:
- 将每个本质元素映射到其新位置
- 定义组件间的接口
- 指定数据通过新结构的流动方式
- 识别必须新创建的内容(在原始材料中没有等价物):
- 统一重复逻辑的新抽象
- 替代隐式耦合的新接口
- 替代静默失败的新错误处理
- 产出黄化蓝图:从白化提取物到目标形态的完整映射
预期结果: 一份清晰、详细的蓝图,其中每个本质元素都有归属,每个接口都有定义。蓝图应该感觉不可避免——给定净化的元素,这个结构是自然的匹配。
失败处理: 如果多个有效架构相互竞争,根据输入中的约束评估每个。如果没有明确的赢家,优先选择最简单的方案并将替代方案记录为未来选项。
第 6 步:冥想(Meditate)——合成前检查点
运行
meditate 技能以准备最终合成。
- 清除黄化阶段的分析上下文
- 锚定在黄化蓝图作为合成指南
- 观察对转化的任何焦虑——有什么被赶着做吗?
- 确认准备就绪:蓝图清晰,材料已净化,约束已知
预期结果: 对需要构建什么的平静清晰。合成阶段应该是执行,而非设计。
失败处理: 如果对蓝图的疑虑持续存在,带着具体关切重访第 5 步。精炼蓝图好于在不确定中开始合成。
第 7 步:赤化(Rubedo)——合成
将净化的元素组合为其目标形态。贤者之石:运行的、优化的代码。
- 按黄化蓝图构建新结构:
- 按指定创建文件、模块和接口
- 将每个本质元素迁移到其新位置
- 实现新的抽象和接口
- 连接组件:
- 按设计连接数据流
- 通过新路径实现错误传播
- 配置依赖注入或模块加载
- 验证合成:
- 每个组件是否独立工作?(单元测试)
- 组件是否正确组合?(集成测试)
- 完整系统是否产生与原始相同的输出?(回归测试)
- 移除脚手架:
- 删除临时兼容性垫片
- 移除迁移辅助工具
- 清理对旧结构的任何剩余引用
- 产出赤化输出:嬗变后的代码,在新形态中完全运行
预期结果: 可衡量地优于原始代码的可工作代码:更少的行数、更清晰的结构、更好的测试覆盖率、更少的依赖。转化完成,旧形态可以退役。
失败处理: 如果合成揭示了蓝图中的缺口,不要打补丁——返回第 5 步(黄化)修改设计。如果个别组件失败,在尝试全面集成之前隔离并修复它们。赤化不能产出一个半转化的嵌合体。
验证清单
- 黑化清单完整(所有元素、依赖关系、假设已编目)
- 黑化/白化之间通过了冥想检查点(假设已清除)
- 白化提取物仅包含具有干净接口的本质元素
- 修复评估确认了净化的完整性
- 黄化蓝图将每个本质元素映射到目标形态
- 黄化/赤化之间通过了冥想检查点(已准备好合成)
- 赤化输出通过了与原始行为的回归测试
- 赤化输出可衡量地改进了(复杂度、耦合度、测试覆盖率)
- 没有有毒元素存活到最终输出
- 输入中的转化约束已满足
常见问题
- 跳过黑化深度:仓促的分解意味着隐藏的耦合会在合成期间浮现。要充分投入清点工作
- 保留偶然复杂性:对巧妙变通方案或"能用就别动"代码的依恋。如果不是本质的,就去掉
- 跳过冥想检查点:从一个阶段到下一个阶段的认知惯性会产生偏见。暂停是结构性的,不是可选的
- 无蓝图的合成:在黄化完成之前开始编码会产生拼凑物,而不是嬗变
- 不完整的回归测试:赤化必须重现原始行为。未测试的路径会静默中断
- 黄化期间的范围蔓延:照明阶段揭示了超出原始目标的改进机会。记下它们但不要追求——炼金炉服务于声明的转化,而不是假设的理想
相关技能
— 用于单个函数或小模块的更轻量级转化transmute
— 价值提取和优化(将基础代码变成黄金)chrysopoeia
— 作为阶段门检查点使用的元认知清理meditate
— 用于净化验证的子系统评估heal
— 当材料对炼金炉来说过于刚性时,先溶解dissolve-form
— 系统级迁移模式的互补方法adapt-architecture
— 合成后的架构审查review-software-architecture