这个项目能做什么

dejavu-gates 是面向 AI 编码代理的跨会话记忆层。代理会在会话之间遗忘,因此重复犯同样的错误,而 markdown 规则无法解决这个问题。该工具以机械方式检测反复出现的工具调用失败(bash、read、edit、write、glob、grep),并将其升级为强制门禁:下次尝试时提醒,同一会话内重复违规则硬性阻止。 一个引擎,多种宿主。它既可作为 OpenCode 插件运行,也可作为 Claude Code、Codex CLI、Gemini CLI、Cursor、Copilot CLI 和 Crush 的 hook-handler CLI 运行。使用 TypeScript 编写,通过 Bun 运行,以源码形式发布,无需构建步骤。 工作原理:失败的工具调用会获得规范化签名(剥离路径、数字和哈希),模式键会跨会话计数,在 2 个不同会话中累计 3 次失败后,门禁即被提升。下一次尝试会收到 [dejavu] 提醒,同时调用被中止;若重试再次失败,则触发硬性阻止。诊断类命令保持仅提醒,因此调用会执行,提醒会作为 NOTE 附加在失败输出上,每个会话一次。 设计选择包括:先提醒,仅在重复时阻止(纯粹阻止会诱发切换包管理器等规避手段);门禁消息携带 CORRECTION 和 EVIDENCE,而不是单纯的禁止;仅使用机械模式键,热路径中不做 LLM 分类;两种作用域,仓库特定门禁位于仓库中,代理级习惯位于用户配置中;60 天无复发后门禁过期;以及门禁后复发指标,用于检查门禁是否真正减少了重复。 强制执行具有负反馈。持续复发或持续被显式绕过的门禁会自我降级为观察状态,且不会机械地重新提升;人类可以重新强制执行。门禁也会自愈:与已强制执行门禁匹配的连续三次成功会将其退役为观察状态;被多次提醒但未再违规的门禁会以已教会状态退役。 安全与健壮性细节:只有非诊断类 bash 命令才能成为阻止型门禁;文件探测保持观察状态;没有残留身份信息的签名只能观察;hook CLI 采用失败开放策略,在载荷格式错误或内部错误时返回空决策并以退出码 0 结束。机密在持久化前会被擦除,终端控制字符会被剥离,存储在初始化时会进行协调和修复,损坏文件会被隔离。并发使用锁文件,采用 tmp+rename 写入,并在 Windows 错误时重试;提醒到阻止的升级链会持久化在门禁上,因此多个窗口和 harness 可以共享它。 安装可通过 npx、多个 harness 的原生插件渠道、GitHub Packages,或从克隆仓库使用安装脚本完成,该脚本会以幂等方式将 hook 条目合并到各 harness 配置中。可观测性包括 doctor 脚本、analyze 脚本、/dejavu status 命令以及一个调试环境变量。