ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

OpenCode `/i-have-adhd` 命令实战:让编码 Agent 的每次回复都为 ADHD 读者而设计

2026/9/30 15:50:13 拓冰建站 浏览量
OpenCode `/i-have-adhd` 命令实战:让编码 Agent 的每次回复都为 ADHD 读者而设计 AI 技能人工智能AI 评测【免费下载链接】i-have-adhdA skill to stop your coding agent from burying the answer. ADHD-friendly output.项目地址https://gitcode.com/GitHub_Trending/ih/i-have-adhd点击查看免费下载本篇技术指南围绕 i-have-adhd 项目中 .opencode/command/i-have-adhd.md 这个命令定义文件展开讲解它在 OpenCode 中的真实作用通过一条斜杠命令把「先给下一步动作、步骤编号、跨轮次复述状态、压制跑题、给出具体时间估计、让进展可见」的 ADHD 友好输出规则集应用到整个会话。读完本文你将掌握命令文件的结构与解析方式、10 条核心输出规则的完整内容、在 OpenCode 中安装启用与关闭该模式的全流程以及背后的插件实现与测试验证路径。一、命令文件是什么.opencode/command/i-have-adhd.md的结构OpenCode 会把.opencode/command/下的 Markdown 文件解析为斜杠命令。i-have-adhd.md全文只有两层结构一段 JSON frontmatter 加一段模板正文。--- {description: Shape output for a reader with ADHD for the rest of this session} --- Use the i-have-adhd skill and apply its ruleset to every response for the rest of this session: lead with the next action, number multi-step work, restate state across turns, suppress tangents, give concrete time estimates, and make wins visible. These rules persist until I say stop adhd mode or normal mode.逐层解读frontmatter第 1-3 行唯一的元数据字段是description它会在命令面板与/自动补全列表里展示。命令名不写在 frontmatter 里——OpenCode 插件按文件名i-have-adhd注册见下文第四节。正文第 5-8 行这就是命令被触发后注入给模型的实际指令。它是一份「会话级指令」明确列出六个行为要求以下一步动作开头lead with the next action、给多步工作编号number multi-step work、跨轮次复述当前状态restate state across turns、压制跑题suppress tangents、给出具体时间估计give concrete time estimates、让已完成的工作可见make wins visible。持久化语义最后一句规则「持续到我说 stop adhd mode 或 normal mode」。这意味着该命令不是一次性提示而是一个模式开关与SKILL.md中 Persistence 一节完全一致。值得注意的一点这份 frontmatter 是 JSON 而不是传统 YAML。这不是巧合——.opencode/plugins/i-have-adhd.mjs 顶部注释写明了设计动机JSON is valid YAML frontmatter; share native command metadata without a YAML dependencyJSON 本身就是合法的 YAML frontmatter可无 YAML 依赖地共享命令元数据。二、命令的核心效力它调用的「规则集」是什么命令正文的第一句话是 Use thei-have-adhdskill——它真正的作用是把 skills/i-have-adhd/SKILL.md 中定义的规则集应用到本会话。SKILL.md 是全部行为的「单一事实来源」单源命令只是触发它的入口。以下内容全部继承自该文件也是命令生效后模型必须遵守的完整规范。2.1 五条认知前提规则不是凭空设计的它建立在五条关于 ADHD 读者阅读行为的认知事实上工作记忆很小。不在屏幕上的内容就会被遗忘所以不要要求读者「记着 X」。知道答案 ≠ 做到答案。「懂了」到「做了」之间的摩擦力正是任务夭折的地方。开始是最难的一步。第一个动作必须显而易见、足够小、当下就能做。时间估计在感知上是均匀的。「一点小活」和「几小时」在感受上没有区别模糊估计必然失败。多巴胺稀缺。可见的进展才有意义被埋没的成果不会被感知。这五条前提驱动了下文全部十条规则。2.2 十条输出规则完整清单规则 1先给下一步动作Lead with the next action第一行必须是读者可以执行的东西——命令、路径或代码片段而不是上下文、不是计划。坏示例Lets think about this. Your auth flow has a few moving pieces...好示例Runnpm install jsonwebtoken, then editsrc/auth.ts:42.如果答案本身就是命令、路径或片段它必须排在最前散文放在后面甚至可以不写。规则 2多步任务编号Number multi-step tasks超过一步的工作写成编号列表每一步是一个有边界的动作任何一步都不得出现两次「然后and then」。用最少的可行步骤数删掉读者不需要的步骤把琐碎步骤并入前一步。一条走完的短路径胜过一条被放弃的完整路径。坏示例First open the file, find the function, swap it out, then run the tests.好示例1. Open src/auth.ts 2. Replace verifyToken (lines 42 to 58) with the snippet below 3. Run npm test -- auth.spec.ts规则 3以一个具体下一步收尾End with one concrete next action任何未完成事项指定唯一一件两分钟内能做完的事。即使只是「打开文件」也算数。坏示例Hope that helps. Let me know if you want to dig deeper.好示例Next: runnpm testand paste the first failing line.规则 4压制跑题Suppress tangents存在第二个问题时先解决第一个再把第二个作为独立问题提出。工作中冒出的问题不算跑题能自己回答就自己回答并融入结果确实需要读者处理的只在结尾出现一次。坏示例Heres the fix. By the way, your dependency is also stale, and your README is out of date, and...好示例Heres the fix. Separately: there is also a stale dependency. Want me to handle that next?规则 5每轮复述状态Restate state every turn读者无法在消息之间记住「我们在 5 步中的第 3 步」必须由你复述。若宿主环境提供任务/计划工具用它管理多步工作每步一项、同时只推进一项让清单承担复述职责不要把完整计划再讲一遍散文。坏示例Done. Ready for the next part?好示例Step 3 of 5 done: schema updated. Next: backfill the new column. Run the script?规则 6给出具体时间估计Give specific time estimates用分钟、小时这类具体单位估算禁止「要花些功夫」这类模糊说法。坏示例This will take some work.好示例About 15 minutes if tests already cover this. An afternoon if not.规则 7让已完成的工作可见Make completed work visible用具体语言展示现在什么能用了不要把成果埋在回顾里。坏示例Ive made some changes to the auth flow. Among other things...好示例Login now works with magic links. Try:npm run dev, open/login.规则 8错误要就事论事Matter-of-fact tone for errors永远不说「Uh oh」「Oh no」「There seems to be a problem」。直接陈述原因和修复。坏示例Uh oh, the test is failing. There seems to be an issue...好示例Test fails atauth.spec.ts:42: expected 200, got 401. Cause: missing auth header. Fix: addAuthorization: Bearer ${token}to the request.规则 9列表封顶 5 项Cap lists to 5 items最终回复中的长列表要分组并按相关性排序每组尽量不超过 5 项。更多相关项在内部保留、不丢弃仅在用户询问或轮到它们时展示。当完整性重要时绝不遗漏相关项——这条规则只约束呈现方式不限制分析、搜索、工具结果、候选生成与信息保留。规则 10不要前言、不要回顾、不要寒暄No preamble, no recap, no closing pleasantries禁用的开场白「Great question」「Let me...」「Ill...」「Sure!」「Looking at your...」「To answer your question...」。禁用的完成后回顾「Ive now done X, Y, and Z, which means...」。禁用的结尾「Let me know if you need anything else」「Hope this helps」「Happy to clarify」「Feel free to ask」。以答案开头答案说完就结束。2.3 何时允许打破规则规则集同时定义了六种覆盖默认行为的场景用户要求「解释」或「带我过一遍」可以充分展开长度以主题需要为准但仍无前言、无结尾用标题方便回看。前方有破坏性操作rm -rf、强制推送、schema 迁移、删表先确认安全优先于简洁。调试螺旋连续三轮都是「还是不行」停止继续改代码点出可能出错的假设问一个诊断性问题。请求确实存在歧义问一个简短的澄清问题好过猜错后重写。规则与任务冲突当规则本身会删掉答案时任务优先、形式保留。例如「我有哪些选项」应给出 2-4 个带一行权衡的排序选项、推荐在前而不是只给一条路径——选项本身就是答案。规则与宿主环境冲突Agent harness 的系统提示优先于本技能需要时宣布工具调用、直接做事而不是问「要不要我…」、把时间估计指向真正执行步骤的人。2.4 发送前检查清单每条回复发送前执行一次「pre-send check」删除五类内容宣布「我要做什么」的第一句话问「还有别的事吗」或回顾刚才内容的最好一句话任何「顺便说一句by the way」的旁支不携带信息的模糊副词「perhaps」「might」「could possibly」——但保留携带真实不确定性的措辞删掉它等于制造虚假自信任何习语或比喻说法「circle back」「get the ball rolling」「on the same page」换成字面动作。最后验证如果读者只看第一行和最后一行能否知道 (a) 接下来做什么、(b) 刚才发生了什么能就发送。三、在 OpenCode 中安装与启用命令文件本身不会自动生效它需要被 OpenCode 插件注册。仓库根目录的 opencode.json 已经做好了接线{ $schema: https://opencode.ai/config.json, plugin: [./.opencode/plugins/i-have-adhd.mjs] }从仓库目录直接运行 OpenCode 即可也可以把插件绝对路径写入全局~/.config/opencode/opencode.json的plugin数组让所有项目共享同一份插件安装细节见 INSTALL.md 的 OpenCode 一节。启用会话级模式在新会话中执行/i-have-adhd规则从此刻起作用于本会话的每一次回复直到你说出关闭短语。若宿主支持也可用等价形式$i-have-adhd或/skill:i-have-adhd触发。验证安装的方式是在 OpenCode 中输入/确认命令列表中出现i-have-adhd。四、底层实现命令文件如何被解析与注册理解.opencode/command/i-have-adhd.md的价值关键在于看它如何被 .opencode/plugins/i-have-adhd.mjs 消费。4.1 命令解析正则提取 JSON.parse插件通过commandDefinition()函数读取命令文件见 .opencode/plugins/i-have-adhd.mjs#L29-L34const match raw.match(/^---[^\S\r\n]*\r?\n([\s\S]*?)\r?\n---[^\S\r\n]*(?:\r?\n|$)([\s\S]*)$/); if (!match) throw new Error(Missing command frontmatter); return { ...JSON.parse(match[1]), template: match[2].trim() };正则把文件切成两段match[1]是---之间的 JSON 元数据match[2]是命令模板正文。JSON.parse解析元数据后与template合并成 OpenCode 的命令定义。因此任何对命令文件 frontmatter 或正文的修改都会在下次启动时直接反映到/i-have-adhd命令上无需改动插件本体——命令文件是「配置即代码」的典型用法。4.2 注册流程config 钩子插件导出一个异步默认函数返回的config钩子完成两件事.opencode/plugins/i-have-adhd.mjs#L58-L72把skills/目录追加到config.skills.paths让skill工具能发现 skills/i-have-adhd/SKILL.md若config.command[i-have-adhd]尚不存在则用commandDefinition()的返回结果注册该命令且不覆盖原生或用户自定义的命令。插件的容错设计也体现在这里命令文件缺失或格式错误时只静默跳过命令注册绝不阻断 skill 发现。4.3 模式状态的同步注入一次而非每次与 Claude Code 的 SessionStart hook 思路一致插件确保规则集「注入一次、不随每次请求重复注入」避免污染上下文。syncContext逻辑检查当前会话上下文里最新的标记是「规则已注入i-have-adhd-rules」还是「已禁用i-have-adhd-disabled」启用时未注入则补注一次禁用时已注入则补发禁用通知。上下文的判定委托给 extensions/context-compat.ts 的latestMarkerIsActive——遍历消息流按顺序覆盖 active 状态保证「只有最新标记有效」且上下文压缩compaction丢弃摘要条目后规则会再次注入。4.4 always-on把规则推进系统提示不想每次手动敲命令插件实现了 always-on 开关。创建 opt-in 标志文件touch ~/.config/opencode/.i-have-adhd-always插件通过experimental.chat.system.transform钩子在每次对话时检查该文件.opencode/plugins/i-have-adhd.mjs#L78-L97文件存在时把 frontmatter 剥离后的完整规则集追加到 system prompt 的末尾一节并附上横幅说明当前处于 ADHD MODE ACTIVE、以及关闭与彻底退出的方法。删除标志文件则永久关闭rm ~/.config/opencode/.i-have-adhd-always这套机制与 Claude Code 的SessionStarthookhooks/always-on.mjs等价只是把标志文件放在 OpenCode 自己的配置目录$XDG_CONFIG_HOME/opencode/或~/.config/opencode/下使两个工具保持独立。五、测试与验证这些行为是如何被证实的仓库用自动化测试锁定插件行为确保命令解析、frontmatter 剥离与 always-on 注入不回归tests/test_opencode_plugin.py 通过tests/opencode_plugin_driver.mjs驱动插件在临时目录中拷贝.opencode/与skills/并设置XDG_CONFIG_HOME指向隔离配置。已确认的用例包括test_silent_without_opt_in_flag无 opt-in 标志时插件静默、输出为空和test_strips_frontmatter_with_trailing_whitespace剥离带尾随空白的 frontmatter 后正文完整保留并且 frontmatter 剥离的正则与 hooks 保持一致保证各宿主环境下注入内容行为一致。tests/test_always_on_hooks.py 覆盖 Claude Code 侧hooks/always-on.mjs、always-on.sh、always-on.ps1三套实现验证标志文件门控与规则注入。运行全部测试python3 -m unittest discover -s tests -v六、关闭模式与会话恢复三种方式可以关闭 ADHD 友好模式stop adhd mode normal mode对于 Pi 宿主extensions/i-have-adhd.ts关闭短语被STOP_PHRASES集合精确匹配且模式状态写入会话条目i-have-adhd-state持久化新会话、会话树分支恢复session_start / session_tree时会读取保存的状态当前会话保存的显式选择优先于 always-on 默认值因此「stop adhd mode」能保持该会话关闭。OpenCode 插件则遵循 SKILL.md 自身的持久化语义——模型遵守 Persistence 规则直到用户说出关闭短语。七、常见问题排查/i-have-adhd不在自动补全里重启 OpenCode。插件索引在启动时读取确认opencode.json的plugin数组指向了正确的 .opencode/plugins/i-have-adhd.mjs 路径。always-on 标志无效确认标志文件路径正确~/.config/opencode/.i-have-adhd-always并检查插件版本是否包含experimental.chat.system.transform钩子修改后启动新会话。启用后回复仍有寒暄打开新会话重试若仍偏离可 fork 并收紧 skills/i-have-adhd/SKILL.md 的措辞——它是所有宿主行为的事实来源。八、总结命令文件虽短机制完整.opencode/command/i-have-adhd.md只有八行却是整个 OpenCode 接入面的「配置即代码」入口一段 JSON frontmatter 描述命令一段模板正文指向 skills/i-have-adhd/SKILL.md 的完整规则集由 .opencode/plugins/i-have-adhd.mjs 解析注册、按需注入配合 always-on 标志文件实现全局默认并有测试兜底。理解这条命令等于同时理解了「先给动作、步骤编号、复述状态、压制跑题、具体时间、可见进展」这套可被任何编码 Agent 复用的输出设计模式。赞分享AI 技能人工智能AI 评测【免费下载链接】i-have-adhdA skill to stop your coding agent from burying the answer. ADHD-friendly output.项目地址https://gitcode.com/GitHub_Trending/ih/i-have-adhd点击查看免费下载相关推荐如何第一次运行ADHD用Claude Code的/adhd命令设计限流器完整实战指南如何第一次运行ADHD用Claude Code的/adhd命令设计限流器完整实战指南 第一次运行 ADHD 只需要一条命令在 Claude Code 里输入i-have-adhd 的 Gemini CLI 接入指南GEMINI.md 上下文文件与 ADHD 友好输出规则全解析i have adhd 的 Gemini CLI 接入指南GEMINI.md 上下文文件与 ADHD 友好输出规则全解析 本篇技术指南以 GEMINI.mdAI 技能人工智能AI 评测Lore 后台服务实战让每条命令都由 lore service 代为执行Lore 后台服务实战让每条命令都由 lore service 代为执行 本篇以 Lore 仓库的教程文档为核心完整演示如何开启 Lore 后台服务、确认命版本控制后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考