前言¶
在 DeepSeek Harness(DSH)里开新会话,上下文往往从零开始:昨天定过的约定、项目路径、你纠正过一次的偏好,都要靠人再讲一遍,或靠模型「记得去翻文件」——后者在忙起来时很容易漏。社区里也有把记忆塞进向量库或外部服务的做法;拾光走的是另一条路:指定工作区里的一个笔记文件夹,每会话开头注入其中几段 Markdown,清单、日记摘要、待办状态由插件按规则维护,写进文件的才算数。
下面介绍 IcyDate 维护的 DSH 插件 ofttold-memory(中文名「拾光」),分类为「记忆」,当前在 GitHub 上约 2 stars。本文事实来自仓库 README 与 npm 包元数据;安装与配置以原文为准。
这是什么¶
拾光是给 AI 用的「小本子」:模型可以往里面写当天做了什么、自己的判断、常拐错的步骤;下次开口前插件先把本子 relevant 部分摆进上下文。README 强调:它记得的不只是用户说过什么,还有模型自己写进日记的内容。你也可以把「希望 AI 是什么样的人」写进 relationship.md,不必每会话重复嘱咐。
插件面向 DSH web profile,依赖 Node.js 22+ 与 DSH 0.2.x 系列(见包内 engines 与 peerDependencies)。许可证为 MIT。其他 harness 支持在 README 中标注为「规划中」。
核心功能¶
会话注入与文件骨架¶
安装后首次运行会在当前工作区创建 .ofttold/,并铺五文件骨架(空壳加注释,不预填记忆):
memory.md:注入源(如「常被提起」「待办」)index.md:日记索引relationship.md:身份描述与情绪词表、缓存区detours.md:常出错步骤diary/:按天一文件的日记
若把配置里的 memoryDir 指向已有文件夹,插件只补缺文件,已有内容不动;但需补齐 relationship.md 与 diary/,否则「写的一半」会缺块。
清单与沉底¶
memory.md 里「常被提起」建议上限约 8 条。写满后插件按权重决定谁沉底(公式为 exp(-t / 2^n),详见仓库 docs/design.md),沉底不是删除,日记里再提起可浮回。设计目标是:不看见就会干错活的信息才进清单,而不是把一切「重要」都堆进上下文。
日记、摘要与体检¶
每天一个 diary/YYYY-MM-DD.md。文件顶部的 ## 今天(HH:mm 更新) 是随写随新的摘要;插件会比对摘要时间与正文最后一节时间,落后则点名。summaryFrom(默认 17:30)之前不催摘要。
同一套逻辑做「日记体检」,只报不改:缺 情绪: 行、标签不在词表、节数超过你设的 diarySections、过了点仍无摘要等,会在块尾合并成一行 Diary check — …。
工具:落盘才算记住¶
README 明确:口头「记下了」若没有调用工具写到文件,与没记一样。
| 工具 | 作用 |
|---|---|
remember_note |
写入 memory.md:kind: anchor(默认)进「常被提起」,kind: task 进「待办」 |
complete_task |
勾选待办并补完成日,不删除记录 |
remember_emotion |
改 relationship.md 里 **现在** 一行;词必须在同文件 ## 情绪词表 中,否则拒绝 |
情绪值由人定,插件校验词表并打时间戳;不自动写日记,没写只在块尾给一行状态(不写成催写指令)。
块尾状态行¶
注入末尾可能附带:今日日记是否存在、待办条数与最久未动天数、到期/逾期任务、relationship.md 当天是否被文件工具打开过、第二会话与「今日日记写入时间」的关系等。这些是状态事实,便于模型决定是否补写,而不是替用户做内容判断。
生效节奏¶
README 用表格说明预期:第 1 天本子仍空、模型开始往里写;约第 3 天能接上上次事;约第 10 天日记与自我描述更稳定;约一个月后本子行数变多但注入仍只挑少量条目——延迟是设计的一部分,不是装完立刻满配记忆。
安装与启用¶
官方安装命令(npm 预构建包,无需本地构建):
dsh plugin --profile web add ofttold-memory@latest
跟仓库最新源码安装时,README 说明可将包名换为 github:IcyDate/ofttold-memory(与 @latest 二选一,按你的更新策略来)。
装好后可在 设置 → 拾光 调整,或直接改 profile 的 cordis.patch.yml(例如 memoryDir)。
Windows 注意(来自 README 实测说明):dsh plugin 会转发到 pnpm,需先 npm install -g pnpm;PowerShell 执行策略可能拦 .ps1,可用 cmd /c "dsh plugin --profile web add ofttold-memory" 或在 cmd 中执行;国内镜像未同步时可加 --registry=https://registry.npmjs.org/。插件需写入 ~/.dsh/profiles/,若由沙箱内的 agent 代装可能 EPERM,安装命令宜在本机终端自行执行。
典型用法¶
1、安装并确认工作区出现 .ofttold/¶
执行上面的 dsh plugin 命令,打开 DSH web profile,在新工作区发起会话,确认骨架文件已创建。
2、编辑 memory.md 的「常被提起」¶
按 README 示例格式写硬约定与高频路径,例如:
## 常被提起
- **项目在哪** → `~/work/my-project`|省掉每次都要问
- **什么不能动** → 不要改 `config/prod.yml`
3、通过工具追加锚点或待办¶
模型侧应调用(示意来自 README):
remember_note(text: "主人喜欢一条溪穿街的古镇,黄龙溪那种", title: "主人喜欢古镇")
待办示例格式:
- [ ] 2026-11-02 起 | 2026-11-05 到期 | 修上游白名单
4、维护情绪词表与当前状态¶
在 relationship.md 维护 ## 情绪词表,用 remember_emotion(word: "定") 更新 **现在** 行;日记里 情绪: 标签需用词表内的词,否则体检会提示且情绪检索对不上。
适用场景与注意¶
适合:希望记忆留在工作区 Git 可管的 Markdown 里、接受「养几天才顺」、需要待办/日记/清单分工且愿意自己写内容的人;不想把会话记忆默认交给外部 SaaS 的 DSH 用户。
边界(README「它做什么,不做什么」):插件不替你决定记什么、不判断情绪含义、不自动补日记;上限、沉底、词表等「看不见就会错」的部分交给代码,内容取舍留给写文件的人。
安全与信任:插件以当前 DSH 进程权限读写工作区与 profile;安装前请查看 GitHub 仓库 源码与 MIT 许可证,再决定是否用于含敏感信息的项目。
结尾¶
拾光把「每会话先看一眼笔记」做成 DSH 插件:文件夹在你手里,注入一次,工具和块尾把「写没写、过没过期、今天翻没翻 relationship」说清楚。社区插件目录见 SkillHub 上的 ofttold-memory 页;源码、设计说明与变更记录在 IcyDate/ofttold-memory。DSH 生态强调「一切皆插件」,SkillHub 为社区站点,与 DeepSeek / 幻方无官方从属关系。