ofttold-memory(拾光):用本地 Markdown 把记忆带进每个 DSH 会话

前言

在 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 / 幻方无官方从属关系。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜