i-have-adhd:易读回答、适配器与证据
一份规则,三种持久化模型:i-have-adhd 架构拆解
分别追踪启动注入、逐轮转换和 Pi 会话状态,不把它们压缩成通用插件框图。
你将学会
- 真正可复用的资产是规则文档
- 启动一次与每轮注入的后果不同
- Pi 增加明确状态与上下文同步
开始前需要
- 基础 Git 与命令行知识
- 能够区分观测行为与未经测试的主张
解释已检查的机制,设计可撤销试验,并在不把风格当正确性的前提下理解证据。
先看结论
- 规则内容和传递生命周期是不同组件。
- 不中断启动的错误处理可能掩盖规则缺失。
- 检查 Pi 状态源码不等于验证 Pi 运行时。
真正可复用的资产是规则文档
核心技能提供表达指令;manifest 负责让宿主发现它;可执行适配器决定何时注入。分开这些职责,就能理解为什么修改一句规则可能影响多个集成,而修复某个适配器不一定会修复另一个宿主的生命周期。比较版本时,应同时固定规则和适配器代码。
Node 启动 hook 根据脚本自身位置寻找 SKILL.md,移除开头 YAML 区块,再输出正文。启动器则另行从环境变量获得插件根目录。这是两个不同信任边界:规则使用相对路径,并不代表启动器选择的路径或宿主给予插件的执行能力已经全部得到验证。
启动一次与每轮注入的后果不同
hooks.json 注册 SessionStart 事件,Node 实现在输出前检查选择加入标记;它没有维护进程内的对话状态机。被检查的 OpenCode 适配器注册 experimental.chat.system.transform,只要自己的标记还在,每次调用就追加规则,因此新的转换调用可能再次注入。
两种实现都容忍某些文件操作失败,以免中断宿主。这有利于可用性,却让无输出的含义变得模糊:可能是主动关闭、文件缺失,或其他受保护操作失败。认定模型忽略指令前应先检查加载链路;进程成功退出不能单独证明规则已进入上下文。
Pi 增加明确状态与上下文同步
Pi 扩展读取已保存的自定义状态,并在没有保存值时回退到启动参数、配置等默认值。启用和关闭使用不同的自定义消息,同时处理退出短语,并在会话事件后同步。其上下文辅助函数用于判断上下文变化后,最新相关标记是否仍为启用状态。
本系列检查了该 TypeScript 路径,但未执行 Pi 运行时及其兼容辅助函数。十四个案例仅覆盖使用合成上下文的 Node hook 和 OpenCode 适配器。架构图把静态检查的 Pi 路径与实际执行的 fixture 分开,避免把一个集成的成功测试冒充三个集成都通过。
如何选择
| 比较维度 | 方案 A | 方案 B |
|---|---|---|
| Best when | You need predictable behavior and easy auditing | You need adaptive optimization and have reliable telemetry |
| Main risk | May leave performance on the table | Can become difficult to explain or debug |
实施步骤
- 1
定位核心规则文档。
- 2
标出每个适配器由哪个事件调用。
- 3
找出各自启用和关闭状态。
- 4
区分静态阅读与实际执行路径。
可复制示例
{
"Node": "SessionStart 与选择加入标记",
"OpenCode": "系统提示转换与独立标记",
"Pi": "保存状态与上下文同步",
"PiRuntimeTested": false
}常见问题
所有集成都只注入一次吗?
不是;被检查的实现包含启动注入和逐轮转换。
退出码为零能证明已启用吗?
不能;主动关闭及受保护失败也可能成功退出。
资料来源
- i-have-adhd / skills/i-have-adhd/SKILL.md来源核查 2026-09-12
- i-have-adhd / hooks/always-on.mjs来源核查 2026-09-12
- i-have-adhd / hooks/hooks.json来源核查 2026-09-12
- i-have-adhd / .opencode/plugins/i-have-adhd.mjs来源核查 2026-09-12
- i-have-adhd / extensions/i-have-adhd.ts来源核查 2026-09-12