尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

i-have-adhd Hook 失败安全设计终极指南:任何异常都 exit 0,绝不阻塞会话启动

i-have-adhd Hook 失败安全设计终极指南:任何异常都 exit 0,绝不阻塞会话启动 i-have-adhd Hook 失败安全设计终极指南任何异常都 exit 0绝不阻塞会话启动【免费下载链接】i-have-adhdA skill to stop your coding agent from burying the answer. ADHD-friendly output.项目地址: https://gitcode.com/GitHub_Trending/ih/i-have-adhdi-have-adhd 是一个让编程助手输出ADHD 友好的技能插件先给动作、步骤编号、不废话。它的 always-on常驻功能靠一个SessionStartHook 在每个会话启动时自动注入规则集。这个项目的 Hook 有一条铁律任何异常都 exit 0绝不阻塞会话启动。下面带你读懂这套失败安全fail-safe设计的三层防线。为什么 Hook 绝不能阻塞会话启动 先理解场景Hook 是会在每个新会话启动时自动执行的小脚本来源见 hooks/hooks.json。想象一下如果这个脚本抛了个未捕获的异常退出码非 0用户打开 AI 编程助手的第一件事就是看到报错——一个帮你说人话的插件先把你惹毛了。所以失败安全原则很简单Hook 失败了 ≠ 会话失败。宁可这次不注入规则也绝不让用户开不了工。这个设计在三个平台的实现里被反复强调Node 版脚本 hooks/always-on.mjs 的开头注释就写着Never blocks session start: any failure exits 0.第一层防线没开开关就直接走人Hook 是选择性启用的只有当你创建过标志文件.i-have-adhd-always才会干活开启方法见 INSTALL.mdtouch ~/.claude/.i-have-adhd-always对应源码里只有两行关键判断hooks/always-on.mjsif (!fs.existsSync(flagPath)) process.exit(0); // 没开开关 → 安静退出 if (!fs.existsSync(skillPath)) process.exit(0); // 规则文件丢了 → 安静退出注意两个细节SKILL.md路径是相对脚本自身位置解析的而不是信任环境变量——就算插件目录被动过也只会安静退出不会炸。每一步检查不通过都不是报错而是exit 0优雅离场。第二层防线整个逻辑包在 try/catch 里文件读取、正则替换 frontmatter、写输出……任何一步都可能出意外磁盘故障、编码问题、正则不匹配。hooks/always-on.mjs 的收尾是一个兜底大网} catch { // Never block session start. process.exit(0); }没有catch (e)去打印日志、没有重试逻辑——因为在会话启动这条关键路径上静默成功比失败得响亮重要得多。第三层防线sh 与 PowerShell 版本逐一对齐不是只有 Node 一个实现。项目为不同环境准备了原生降级方案且三份实现行为完全一致实现适用环境失败时行为hooks/always-on.mjsmacOS / Linux / Windows默认catch后process.exit(0)hooks/always-on.sh无 Node 的 POSIX 环境标志文件、规则文件、awk 任一失败都exit 0hooks/always-on.ps1Windows PowerShellcatch后exit 0比如 sh 版里连awk处理 frontmatter 失败都会|| exit 0hooks/always-on.sh——连文本处理工具都可能缺席的环境也要保证最坏情况只是这次没注入规则。hooks.json里的统一入口甚至在外层再套了一层.catch((){})hooks/hooks.json并配了 30 秒超时双保险。测试如何守护这条铁律光写出来不算数tests/test_always_on_hooks.py 用测试把绝不阻塞固化成了契约值得学习的用例没开标志文件→ 三种运行时node/sh/powershell都必须返回 0、零输出test_always_on_hooks.py插件目录整个不存在→ 命令依然返回 0test_always_on_hooks.pyfrontmatter 未闭合等边界情况→ 保留原文、不报错且三个平台输出逐字一致test_always_on_hooks.py带空格的路径也能跑通测试里插件目录就叫plugin with spaces换句话说异常时返回 0不是代码风格是被测试锁死的行为承诺。给其他 Hook/插件作者的 3 条可复制经验启动路径上的脚本把exit 0当作默认出口每个前置检查开关、依赖文件不满足就安静退出而不是抛错。整个逻辑体包一层兜底异常处理与其枚举 10 种失败不如承认还有第 11 种。用测试锁死退出码把任何失败都返回 0、零 stderr写成断言跨平台实现逐一对齐防止某个平台版本悄悄破坏契约。如何启用 always-on 模式安装插件后创建标志文件touch ~/.claude/.i-have-adhd-always重启会话——规则集全文见 skills/i-have-adhd/SKILL.md从第一条消息开始生效想关掉删除标志文件即可或会话内说 stop adhd mode整个过程中哪怕哪天标志文件损坏、SKILL.md 被误删、环境缺 Node你的会话启动也只会少一条横幅绝不会多一个报错。这就是失败安全设计的价值它平时不被看见直到出事的那一天。【免费下载链接】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创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表