用途
duck-tape 是一个会话记忆管理技能,用于为活跃的 AI 编码会话提供两层记忆管理,目标是保持上下文卫生、持久记忆与会话状态交接,在保留信息保真度的同时降低中断。
主要能力
两层记忆结构:
- 第一层(持久):当前工作目录下的 CONTEXT.md,长期存在、随仓库跟踪,包含 7 个固定分区,采用确定性合并。
- 第二层(工作):.duck-tape/<session_id>.state.md,短期、不提交,使用 Agent State 模式,作为合并进 CONTEXT.md 的暂存输入。
子命令包括 merge、resume、init、prune、migrate。
激活方式:
- 仅状态(默认):写入会话状态文件。信号包括 /duck-tape、“save session state”、“checkpoint session”。
- 合并(CONTEXT.md):写入状态文件并合并进 CONTEXT.md。信号包括 “compact session”、“update CONTEXT.md”、“persist memory”、/duck-tape merge。
- 恢复:检测上下文压缩并重新加载检查点。信号包括 /duck-tape resume、“resume session”。当存在手动检查点时只读;若仅有自动检查点或无状态文件,则调用 LLM 辅助恢复并写入 -recovered.state.md(需批准)。
使用方式
方法流程:
-
脱敏传入内容:扫描会话内容中的密钥与个人身份信息,如 API key、密码、令牌、连接字符串、环境变量值、个人身份信息。检测到后拒绝被标记内容、报告发现,并要求用户脱敏来源或确认就地掩码(<REDACTED>)。若写入将包含原始密钥则拒绝;仅在用户确认后写入掩码内容。两层均适用。
-
写入会话状态文件:按 Agent State 模式写入 .duck-tape/<session_id>.state.md。会话 ID 格式为 <YYYY-MM-DD-HHMM>。完整模式见 references/STATE_SCHEMA.md,输出格式见 references/OUTPUT_SCHEMA.md,示例见 examples/STATE.md。若缺失则自动创建内容为 * 的 .duck-tape/.gitignore。会话 ID 默认静默自动生成;仅当用户明确要求自定义 ID 时才询问;若自定义 ID 无效,询问一次带格式要求的纠正问题后继续。应用轮换上限:最多 10 个状态文件,淘汰优先级为自动最先、其次 recovered、最后手动。报告状态文件路径,便于用户之后重新加载。
-
合并进 CONTEXT.md(条件执行):仅在合并信号下运行,仅状态模式跳过。若 CONTEXT.md 缺失则引导创建,使用 references/STATE_SCHEMA.md 中的固定映射从状态文件翻译内容,空分区使用 examples/bootstrap-CONTEXT.md 脚手架,并根据 8 个分区标题生成目录。若 CONTEXT.md 已存在,则按固定映射翻译,先应用持久上下文过滤器(决策级而非提交级),再应用各分区合并规则;仅当 ## 分区标题集合变化时刷新目录。各分区合并规则见 references/SCHEMA.md,摘要为:Goals/Decisions/Conventions/Glossary 按键去重、冲突时取代、新增追加;Deferred-Debt 仅追加并带状态标记;Open-Questions 追加新项、按文本去重;Notes 带时间戳仅追加、不重写。Re-derivation 与 Suggested Skills、Position.Current 与 Position.Done 为状态文件本地内容,不翻译进 CONTEXT.md。开发叙述、被否决方案、近期变更上下文、仅会话标志、生产历史引用不进入 CONTEXT.md,但若存在底层持久决策或约束则保留。按 references/OUTPUT_SCHEMA.md 输出变更日志,示例见 examples/CHANGELOG.md,格式为 Added、Superseded、Dropped,删除需明确原因,不得静默移除。
-
执行批准:改动工作区的操作需批准。语义变更(代码/逻辑、文档/规划、配置/模式、依赖、文件操作、变更命令、实现/补丁任务委派)需完整执行批准;外观变更(格式/空白、非代码文本文件拼写修正)需轻量确认,确认语为 “Confirm to proceed with [formatting change/typo fix]?”。边界情况:代码文件中的 JSDoc/docstring 变更、解释逻辑的注释、配置注释、文档更新、README 中可复制的代码片段示例均属语义变更。批准流程要求先做预检(目标阶段、阶段契合说明、目标文件、预期行为变化、最小验证检查),按文件以格式化 diff 呈现(已存在文件用统一 diff,不存在文件用围栏代码块加路径标题,每文件一个 diff 块,并在 diff 块上方内联注释说明每处变更),若文件违反阶段约束则拆分重新提议,然后询问 “Approve this scope?” 并等待明确批准。批准意图令牌包括 approve、approved、ok、go ahead、confirm、yes,以及引用选项的批准句;裸 “continue”、裸选项字母、“next” 不算批准。范围规则:阶段上限默认 Phase 1 最多 6 文件、Phase 2 最多 4 文件、Phase 3 最多 2 文件;阶段内容有硬性约束(Phase 1 仅骨架/接口/签名/占位,Phase 2 仅接线/集成,Phase 3 为具体实现);新文件引导规则要求首次批准仅 Phase 1 骨架;超出上限需拆分为更小批准。审查疲劳触发条件按阶段设定总改动行数与单文件行数阈值,超出则减少文件上限或拆分。阶段之间需重新开启执行批准,范围变化后需重新确认。
适用场景
适用于 AI 编码会话的上下文卫生、持久记忆维护、会话状态交接,以及在上下文压缩后恢复工作位置。
限制
- 持久产物安全:CONTEXT.md 长期存在且可能被提交,写入前脱敏不可协商。
- 会话状态安全:.duck-tape/<id>.state.md 虽为工作区本地,但可能被下一个 agent 读取,同样适用脱敏。
- 翻译边界:状态文件保留会话细节用于恢复;写入 CONTEXT.md 前仅保留持久决策、约束、约定、事实、债务与开放问题。
- 轮换上限:.duck-tape/ 中最多 10 个状态文件。
- 预压缩标记 .duck-tape/.last-compact 由 harness 写入、非语义,写入无需批准。
- 自动检查点为低保真恢复回退,模式匹配只能捕获显式决策;手动检查点保真度更高;LLM 辅助恢复介于两者之间。
- 触发失败时回退为仅标记。
- 恢复由 /duck-tape resume 触发,非自动。
- 状态文件写入(恢复步骤 5)需批准;只读恢复不写入。
- 若不存在状态文件且标记中无 transcript 路径,则报告无法恢复并建议重新检查点。
暂未提供
官方文档中未提供 init、prune、migrate 子命令的具体用法细节,以及收费、价格、平台支持范围等信息。