9830次对话训练出的行为分类系统,在迁移到新平台时,被一个隐藏的环境差异整崩溃了。开发者Robert Nowell记录了整个排查过程——从数据持久化失效到两行代码修复,核心问题竟出在$HOME目录的生命周期上。
从Claude Code到Cowork:一次"看起来一样"的迁移
Claude Code与Cowork,两个AI编程环境从插件内部看几乎无法区分。但正是这个表面的一致性,让Nowell的skill-tree插件在迁移时遭遇致命陷阱。
该插件的核心功能是:分析用户与Claude的会话历史,对照Anthropic 2026年2月研究中的AI流利度指数(11种行为维度),为用户分配7种原型卡片之一,并推荐一个未尝试过的行为作为"成长任务"。
消失的数据:$HOME目录的生死线
在Claude Code中,持久化简单直接——写入~/.skill-tree/,下次会话依然存在。
Cowork彻底打破了这一假设。其$HOME目录是临时的:会话期间写入的任何内容,结束后立即销毁。早期测试完全遗漏这一点,因为开发仅在Claude Code环境进行。成长任务被分配、写入$HOME/.skill-tree/state.json,然后在下次SessionStart钩子读取前无声蒸发。
两行代码的代价
解决方案需要检测运行时环境并分流写入路径。Cowork暴露$CLAUDE_PLUGIN_ROOT作为持久路径——跨会话存活;Claude Code不设此变量。
状态路径现在这样解析:
const stateDir = process.env.CLAUDE_PLUGIN_ROOT ? path.join(process.env.CLAUDE_PLUGIN_ROOT, '.user-state') : path.join(os.homedir(), '.skill-tree');
仅两行代码。但为找到这两行,整整耗费一个调试会话追踪不断重置的任务。
7步管道的唯一分叉点
插件其余流程——提取用户消息、Fly.io远程分类器(Claude Haiku)、原型分配、叙事合成、渲染、返回稳定URL——双环境完全一致。双状态路径是唯一的分支。
给跨平台插件开发者的警告
若目标同时覆盖Claude Code与Cowork,务必尽早显式测试Cowork的状态持久化。临时$HOME目录未被显著文档化,它会无声吞噬写入其中的任何数据。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.