返回目录
Agent 与会话 插件

yammory-system

KhalilYamber/yammory-system

Cross-session user-profile memory for DeepSeek Harness: remembers who you are and how much you know, so the agent speaks at your level. Approval-gated, auditable, local SQLite.

Stars
0
Forks
0
Issues
0
更新
今天

PROJECT TOPICS

项目标签

INSTALL REFERENCE

安装参考

未验证
dsh plugin --profile web add github:KhalilYamber/yammory-system

该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。

PROJECT README

README

yammory_system

您的助手不再追问那些它本该知道的事。

它跨会话记得您——每个科目里您到了哪一层、您喜欢别人怎么跟您说话、哪些事您已经定下来了——并且没有您的批准,任何一条写入都不会落盘,所以关于您的事,不会被背着您存下来。

License DSH plugin Node CI Version

简体中文 · English · 日本語 · Русский

分发渠道:仅 GitHub 一条——没有 npm 包,也没有市场上架。


Why this exists

一个有本事的助手,依然是个失忆的助手。每次会话它都从头来过:不知道您已经懂了特征向量、却从没碰过张量网络;不知道您宁可被纠正、也不愿被鼓励;也不知道三周前您已经决定不走那条路。于是您一次次重新自我介绍,而这场本可以从有趣处开始的对话,从零开始。

yammory_system 给 DeepSeek Harness 一个地方存住这些知识,以及一套不去猜也能用上它的办法。三件事让它区别于一个记忆仓库:

  • 先决定怎么说话,再去检索。 七面画像携带分领域知识水位,所以助手在开口之前就知道您能接住哪些词——注入发生在提示组装时,而非检索之后。
  • 没有您,什么都不写。 每条写路径都被强制经过服务内部 DSH 自己的审批门。被拒的写同样留证;静默写入不是本插件能到达的状态。
  • 它的工作您可以查。 模型看过的每一句都有记录,库是一个您可以浏览、导出与审计的普通 SQLite 文件,一整类错误由设计拦下,而非靠自觉。

Install

# 1. install the bundle into your profile
dsh plugin --profile web add "github:KhalilYamber/yammory-system#main"

# 2. restart and verify the row
dsh --profile web --dump-config | grep -A3 'id: yammory_system'

其他渠道与卸载:

  • git channel(最新 main):dsh plugin --profile web add git+https://github.com/KhalilYamber/yammory-system.git
  • tarball channel:在本仓库执行 npm pack,然后 dsh plugin --profile web add ./yammory_system-<version>.tgz
  • uninstalldsh plugin --profile web remove yammory_system(记忆库与会话日志保留)。

The first minute

重启之后,什么都不用配,您就该看到:

位置 是什么
侧栏底部 设置旁边的一个记忆入口(它开关抽屉;可用 panel.enabled 隐藏)
会话标题栏 会话级的记忆开关——关掉即停掉该会话的注入、召回、写入与观察
侧栏底部 → 该入口 抽屉:按轨道与层级列出的条目、搜索、预警线用量、近期审计、三个可观测数,以及一个点一下就交给后台的整理全库按钮(起一轮无头会话,回来只留一行状态与批次号)
DSH 设置 → yammory-system 每一个配置项,各自带一个问号,用大白话解释它
/memory listquerystatsauditsession on\|offexport / import <path>,以及更多

Table of contents

How it works

yammory_system 是能力接缝,不是又一个仓库:一个类型安全的 ctx.memory 服务、一个本地 SQLite 提供方(node:sqlite,WAL,0600,位于 $DSH_HOME/dsh-memento/memory.db),以及它的消费方——memory 工具与注入系统提示的冻结快照。

两条轨道 × 两个层级 × 按 agent 隔离:user 轨(关于用户的事实)与 agent 轨(环境事实与约定),各自再分为 user-globalworkspace 层,并按 agentPreset 隔离。快照在会话首次组装提示时冻结一次,会话中途不再变化。预热块承载表达约束与常驻画像,末行是一行目录(本工作区与 agent 轨另有 N 条记忆不在本块),让模型知道还有东西可按需取——只报条数,正文仍留在 memory_recall 那一侧。

Capabilities

  • 审批门不可绕过。 每条写路径(add / replace / remove / seed)都被强制经过服务内部的审批 waterfall,而非工具层。writePolicy: ask | auto | off 是模型看不见的配置;replace / remove / consolidate 的审批载荷携带将被改动条目的全文,被拒的写同样落一条 *-denied 审计行。

  • 模型可见 ⟺ 已记录。 注入的快照逐字进入 system/message;每次写都能从 approval/asked + approval/decided + 插件自有审计表重建。

  • 有界且诚实。 每轨每层软预警线(默认 user 2000 / agent 4000)。越线绝不拦写——只提示这一格值得整合。绝不截断、绝不自动压缩。

  • 会话级开关。 每个会话一个自己的记忆开关(插件自有 SQLite 表,schema v6;默认开)。关掉即四件同时停:注入停(该会话的冻结预热块立刻作废)、召回禁SESSION_MEMORY_OFF)、写入停(与审批门同层拦截)、观察不碰(本会话不扫,历史选区也不选它)。管理面只读(/memory list / budgets / audit / export)照常可用。用 /memory session on|off 或输入框下方的开关切换;开关状态本身绝不进会话日志,审计行 text 恒为 null

  • 观察,并让观察自己跑下去。 观察通道读一段您自己的旧发言,落下面向「问卷够不到的那几面」的行为条目。

    • 闹钟:一条只读检查在距上次观察超过一周时提醒——一行 observe-due 审计 + 下一次会话预热段末行一句。
    • 无人值守轮:一条每周的计划任务能在一个工作区里跑完它——无头 dsh 会话扫描、至多推断 3 条带证据的条目、过同一道审批门落库,放行靠它自己的写策略来源(source:observationauto / ask / off)。
    • 调度在哪:插件里不装定时器;调度是一条 Windows 计划任务,与整理轮同理。
  • 整理与度量。 模型驱动的整理把「在讲同一件事」的条目并成一条带 merged 标的条目,旧条目降级为 superseded——仍在库里,退出每个会话的可见集,绝不物理删。它不跨桶(track × scope × agentKey,workspace 层再加 workspaceKey),也绝不自动跑。

    • 谁说了算:合并能否不经人眼落写,由五根机械硬杠判定(同桶 / 条数 / 去标点、空白与符号后逐字一致 / 相似度 / 覆盖度),不由模型自报把握。只有「去过标点、空白与符号后逐字相同」的那一档判 auto、可以无人值守落写;改写过的同义句连 review 线都够不着,落 skip(原地不动);一字之差落 review,等您过目。
    • 后台轮:由您自己的计划任务唤起的无头 dsh 会话自行合掉机制上明确无歧义的重复,硬杠不敢担保的部分留着等您。写入把审计来源钉成 tidy-auto,所以粒度写策略(source:tidy-auto)可以只放行这一条路,其余写入仍留在审批门后。
    • 只提示,不动手:只读的 agent/turn-stopping 检查只提示积压过线——一行 tidy-due 审计 + 下个会话预热段末行一句。
    • 三数/memory stats 打印可观测三数(重复率 / 召回命中率 / 注入量),抽屉面板里同样有这三行;成功率刻意留白,因为本仓库没有「注入之后对方是否真听懂了」这条信号源。
    • 面板按钮整理全库现在真的会跑——点一下即登记标记(tidy_requests,schema v7)并起一轮无头会话去整理,会话里的模型自己读计划、自己合,跑完清标记、落批次号。面板只留一行状态(排队中整理中已完成 · 合并 N 组,或 没有需要合并的条目,失败则给「重试」)+ 下方批次块里的整批撤回按钮;前端不冒对话、不占上下文。执行体是探测出来的而非按平台猜死(配置点名 → 宿主自身的 CLI 入口 → PATH),一轮没落下任何批次也会自己留一行「正常退出」凭据,按钮不会卡死tidy.enabled: false 可退回旧的排队式。
  • 治理:把降级走回来,把冲突按面裁决。

    • restore 把一次降级走反方向(superseded → activeversion 不动,重新进入每个会话的可见集),它是脱离降级态的唯一出口。
    • arbitrate 处理「同一条事实、两个来源」:在一个面上裁决,方向由固定表决定——能力听观察、意愿听自陈,其余五面两条都留并各打 gap 标(落差本身即证据)。表即方向,所以没有反向参数可传;同组内保留 updatedAt 最新者。
    • 与所有写路径同门:同一审批门、同一会话开关、同一桶内边界。审计也逐条留痕——restore 每条一行,arbitrate 每次降级一行(text 恒为 null,只记 id)、打标一行 arbitrate-tag,收尾一行 arbitrate 摘要写清保留了谁、降级了谁、理由是什么。

Compatibility

Surface Status
Harness DeepSeek Harness dsh-v0.1.5-rc.2(2026-09-09 已适配):会话信封保留 ignorable 字段但仅用于存量日志读取兼容——Session.append 仍无法盖章,门控行为不变。 2026-09-11 已对照 dsh-v0.1.5-rc.2 master checkout 核验(全部门禁链 + profile 安装冒烟)。
Node ^22.19.0 \|\| >=24.0.0
Platforms Windows / macOS / Linux(纯 host;无原生代码、无网络)
Model 任意

Configuration

所有可调项均为 Schemastery Config 字段(可在 cordis.yml 中修改)。非法值在加载期响亮失败。在 yammory_system 行下覆盖。

设置面板。 DSH 设置服务挂载时,下表除 enabled 外的全部字段可在 DSH 设置侧栏的插件一级项 yammory-system(与通用设置、插件等并列)中编辑;修改写入设置用户层(settings.yaml),无需改文件。几乎全部即时生效(写策略、语言、预算、各上限、提案、面板;dbPath / auditRetentionDays 经重开 store 生效;retrieval.vector 经重装检索器生效)——只有 snapshotOrder 需要 DSH 重载。设置服务缺失时一切回退组合配置,与从前完全一致。侧栏底部的记忆入口可在同一页面隐藏(panel.enabled)。

Key Default Meaning
enabled true 总开关;false 移除服务、工具、快照、命令、面板与 answerer(设置页不可编辑——禁用的插件没有设置项)
panel.enabled true 显示侧栏底部的记忆入口;在设置页保存 false 后立即隐藏,无需刷新(设置页本身不受影响)
dbPath ''$DSH_HOME/dsh-memento/memory.db 绝对路径,或相对 $DSH_HOME(Windows 上回退到 ~/.dsh
budgets.user.userGlobal 2000 user 轨 user-global 层的软预警线
budgets.user.workspace 2000 user 轨 workspace 层的软预警线
budgets.agent.userGlobal 4000 agent 轨 user-global 层的软预警线
budgets.agent.workspace 4000 agent 轨 workspace 层的软预警线
writePolicy 'ask' 默认写策略:ask / auto / off(模型不可见)
writePolicies {} 按轨/作用域或按来源的覆盖(如 user/workspacesource:claude
language 'en' 模型可见文本与命令输出语言:en / zh
snapshotOrder -50 快照段顺序(在 harness 身份之后、persona 之前)
maxEntriesPerQuery 20 每次查询默认结果上限(硬上限 1000)
commandListLimit 50 每次 /memory list / query 渲染的条目数
commandAuditLimit 10 每次 /memory audit 渲染的审计行数
recall.historyLimitDefault 8 memory_recall 默认扫描的会话数
recall.snippetCap 5 memory_recall 每个会话的片段数
recall.snippetChars 300 memory_recall 片段字符数
recall.windowDays 30 memory_recall 近期窗口天数
observe.days 14 memory_observe scan 的回看天数(硬上限 90)
observe.sessions 8 单次扫描采样最近多少个会话(硬上限 20)
observe.perSession 12 每个会话采样几条发言,均匀分布,好让开场与中后段的改口都留得下(硬上限 20)
observe.messageChars 400 单条发言超过多少字符即截断加省略号(硬上限 800)
observe.totalChars 12000 整段切片的字符预算;到顶即停并报出未覆盖范围(硬上限 30000)
recall.weighting.heat 0.3 热度加成上限(乘性;0 = 关闭)。热度 = 召回次数(封顶)× 距上次召回的半衰期衰减——记忆要靠持续被召回才保得住热度
recall.weighting.heatSaturation 10 吃满热度加成所需的召回次数
recall.weighting.heatHalfLifeDays 14 热度半衰期(天):久未被召回即失温
recall.weighting.freshness 0.2 新旧加成上限(乘性;0 = 关闭)
recall.weighting.freshnessHalfLifeDays 30 新旧半衰期(天)
recall.weighting.tagDiscount 0.5 词元只在 tags 命中时的权重(正文命中记 1
retrieval.vector false 语义召回开关:true 且注册了真语义嵌入 provider 时才换装向量召回——伪嵌入(哈希袋)刻意不算数,它不做语义建模、会让中文召回静默归零;否则保持零依赖 keyword 检索器(中文二字分词、任一词元命中、热度/新旧加权、相关度排序)
panelEntriesLimit 200 Web 面板条目分页大小
panelAuditLimit 20 Web 面板默认审计行数
auditRetentionDays 0 审计保留天数(0 = 永久保留)
proposals.enabled true 每次成功压缩后自动捕获一条记忆提案
proposals.maxChars 2000 提案字符上限
proposals.maxPending 8 待处理提案上限
tidy.enabled true 整理全库按钮是否真的起一轮后台会话:false 退回旧行为(只登记标记,等下次会话开口)
tidy.profile 'headless' 后台轮用的执行体 profile 名
tidy.exec '' → 自动探测 执行体入口:空 = 自己探(先用宿主自己的启动器:宿主启动时那个 CLI 脚本,由同一份 node 执行;再找 PATH 里的 dsh.cmd / dsh);填了就盖过这两条(绝对路径或你自己的启动脚本)。找不到它会如实报「执行体起不来」并给「重试」
tidy.timeoutMs 480000 判活窗口:到点未退出即杀进程并如实报「超时」(下限 30 秒)
tidy.task '' → 内置任务文本 覆盖交给无头会话的作业说明(只在 cordis.patch.yml 里可改,不进设置卡片)

Tools & surfaces

Surface Kind Notes
memory tool 带 Save/Skip 指引的 add/replace/remove/consolidate/supersede/auto-tidy/restore/arbitrate/query/tidy;条目可带画像坐标(facet 七面之一、level 分领域知识水平);supersede 把 1..20 条并成一条带 merged 标的条目、旧条目降级为 superseded(留痕不删),restore 把降级条目救回,arbitrate 按裁决表在一个面上裁两个来源的冲突,tidy 返回只读整理计划;写入走审批门
memory_profile tool 31 个子领域刻度上的分领域知识水平(set / list / get);set 走审批门并落审计,tierlevel 推导
yammory-survey skill 用户主动激发的画像问卷,覆盖 24 个问卷合法子板块;经 memory + memory_profile 落库。源文件:skills/yammory-survey/
memory_recall tool 有界的记忆匹配(查询按词元切分:中文二字、英文整词;任一词元命中即召回,按相关度排序)+ 近期会话历史匹配
memory_observe tool 观察通道:scan 只读取「用户本人」旧发言的有界切片(cwd 精确收窄、系统注入的伪发言过滤并计数、预算缺口如实报出);commit 以一次审批、一次原子写落 1..8 条带证据的条目,source 固定 observation
yammory-observe skill 用户主动发起的行为观察,把五个仅观察面(思维方式与思辨 / 人格特质 / 情绪模式与心理强度 / 自我认知 / 决策与行动风格)经 memory_observe 落库。源文件:skills/yammory-observe/
yammory-tidy skill 用户主动发起的记忆整理:读只读计划、把讲同一件事的条目并成一条、旧条目降级留痕(不删、不跨桶)。源文件:skills/yammory-tidy/;判据表在 references/merge-rules.md
yammory-experience skill 把「干活的教训」收进 agent 轨(环境事实/约定/教训),与用户画像分家,判据只有一句:这条知识该不该每一轮都在场。源文件:skills/yammory-experience/
/memory command list · query · add · remove · consolidate · restore <id...> · arbitrate <id...> · tidy [--days=N] · stats · proposals · budgets · audit · export · import <path> · adapters · observe [--days=N] · session [on\|off]
session switch session header 会话标题栏里的会话记忆开关,紧挨 Agent 预设(conversation.session.header.actions,session scope):显示当前状态并点击切换,走 GET/POST /api/memento/session(与面板路由同一条 connection.fetch 信任栅栏)
web panel client drawer 对记忆内容只读,且拆成两个世界:记忆页签是七面多边形结构树(先看分类、点开才见条目)+ 知识水位块;经验页签把 agent 轨按话题分桶。两侧共用搜索、预算条、可观测三数与审计尾部;另有一个用户动作按钮:起一轮后台整理并显示那一轮的状态行与批次块(写路径全在服务端);侧栏入口可隐藏(panel.enabled
settings section DSH 设置侧栏 → yammory-system 免改文件编辑除 enabled 外的全部配置字段;即时/重载生效时机在页面内标注

MCP server

yammory_system 附带一个只读 stdio MCP 服务器yammory_system-mcp),让外部 MCP 客户端(Claude、Codex 等)无需 harness 即可检索记忆库。它通过 newline-delimited JSON(NDJSON)承载 JSON-RPC 2.0——每行一个 JSON 对象,不支持 Content-Length 分帧。

只读。 数据库以 node:sqlitereadOnly: true 打开(不跑迁移、不写 WAL、不 bump recall-count);库文件不存在时返回空结果而非崩溃。

工具 用途
memory_search {query, limit?} → 排序后的条目(经检索 Provider seam 的大小写不敏感子串检索)
memory_stats {}{total, namespaces} 条目总数 + 按轨道/作用域概览

直接运行:

node bin/mcp-server.mjs
# 或从 GitHub 渠道装好之后:npx yammory_system-mcp
#(本仓库尚未发布到 npm 注册表;上面的 -p github:… 就是取包来源)

数据库路径取自 $DSH_MEMENTO_DB_PATH(绝对路径,或相对 $DSH_HOME);默认为 $DSH_HOME/dsh-memento/memory.db

Claude Desktop(claude_desktop_config.json)配置示例:

{
  "mcpServers": {
    "yammory_system": {
      "command": "npx",
      "args": ["-y", "-p", "github:KhalilYamber/yammory-system", "yammory_system-mcp"],
      "env": {
        "DSH_MEMENTO_DB_PATH": "/home/you/.dsh/dsh-memento/memory.db"
      }
    }
  }
}

服务器只读:无网络、无写入、无审批门——仅检索与统计。

Permissions & data

  • Permissions:workshop 清单声明 harness:toolfilesystem:readfilesystem:write,以及 network:none / subprocess:none / shell:none / python:none / credentials:none。写审批走官方审批接缝。这份声明有一处要照实读:整理全库按钮会起一轮一次性无头会话(dsh --profile headless)——它是本插件唯一的一次进程启动,由用户触发、落日志、可整批撤回,并可由 tidy.enabled 关掉。
  • Data:本地 SQLite 数据库(0600),零网络、零凭据。
  • Session log:审计完整性来自审批对(approval/asked + approval/decided)加插件自有审计表。

Security boundaries

  • 仅公开服务。 只消费 toolssystemPrompt 与审批接缝;不改 engine / agent-loop / apiproxy / 官方 UI。
  • 零网络、零凭据。 本地数据库,POSIX 文件权限 0600
  • 失败要大声。 库损坏、schema 过新或非法配置在加载期抛错;子串歧义返回结构化错误。越预警线不拦写。
  • 一进程一库。 多个会话共享 SQLite 库;共享同一 $DSH_HOME 的两个进程写同一文件(SQLite 锁下后写覆盖)。

Known limitations

  • 会话事件已声明、尚未发出(rc.2)。 memory/added|updated|removed|recalled|snapshot 已合并声明,但 rc.2 没有仓库外事件类型的注册面;一旦 harness 构建收录这些类型即自动开启发出。
  • 一轮后台整理只覆盖一个工作区。 闸一只读 cwd 与调用方精确相等的会话,所以从面板起的那一轮覆盖它启程时所在的工作目录(外加 user-global 层)。别的工作区各有各的一轮。
  • ask 策略需要 answerer。 未组合 UI/ACP answerer 时,写入失败关闭。
  • 无 FTS5 索引。 子串搜索走大小写不敏感的 instr(对 CJK 正确)。
  • 观察面是白名单,而白名单有边界。 memory_observe scan 只保留 source.kinduser / user-rpcuser/message 事件;本机实测这一条会挡下全部 user/message 的 48%(运行时上下文、AGENTS.md、skill 目录、goal 轮次、子代理通知)。但它分不出「人打的」与「外部桥接注入、同样声明 kind: 'user' 的」——事件日志只带这一个信号。故单条引文只算弱证据;要下结论,须跨会话重复出现。
  • 被叫作「语义」的那半边召回还不语义。 retrieval.vector 只在注册了真正声明为语义的嵌入 provider 时才生效,而本仓库自带的那个 provider 声明 false,所以今天这个开关是按设计回落到关键词召回。要开真正的语义召回,得先有一个本仓库尚未选定的嵌入来源。

How it's different

Plugin 是什么 yammory_system 的差异
dsh-mneme 自进化记忆,功能面宽 只做小语料画像:靠「按用户水平说话」差异化,不靠加功能
dsh-meow-memory 七层库、BM25 检索 不做检索工程:分领域水位表 + 分面裁决
dsh-persona-memory 画像注入 多一层:常驻画像之上再带分领域知识水位分面裁决
dsh-memory-evolve 记忆仓库 / 进化循环 类型化服务接缝、审批门与会话日志审计;无仓库野心
dsh-mnemon 记忆存储助手 协议 + 门 + 审计,而非又一个 store
dsh-kb-sieve 知识库筛选 无检索工程:小语料子串搜索,经 session_search/sessionQuery 跨会话召回
dsh-tdai-memory 任务驱动记忆工具 预算按 track×layer 且在服务内强制执行,而非尽力而为
claude-bridge Claude Code 桥接 DSH 原生;未来的 seed(source:'claude') 路径让桥接写入同一 store
dsh-external/Recall 外部 agent 记忆 本地优先、零网络、走 DSH 自有审批接缝
Official MCP memory examples DSH 宣称的"memory = 外部 MCP"立场 原生第一方补充:同目标、无外部服务器;两者共存

今天真正立得住的差异是上表最后两条:带分领域知识水位的七面画像(在任何检索发生之前就决定助手该用什么口吻说话),以及分面裁决(同一条事实有两个来源时怎么收场——能力听观察、意愿听自陈,其余五面两条都留、各打一个 gap 标)。

名称是 yammory_system(走 GitHub 渠道安装;尚未发布到 npm 注册表)。不是 dsh-recall(易与 dsh-external/Recall 混淆),也不是已删除的旧名 dsh-memory

dsh-memory-protocol v1

yammory_system 是 DSH 记忆协议的社区预演——官方 ctx.memory 接缝的一个候选形态。该协议把本插件的接缝规范化为跨插件契约:

  • Entry spec — 两条轨道 × 两个层级 × 按 agent 隔离,外加短 tags(≤16 × ≤32 字符)与每次 replace 递增的每条目 version

  • Write semantics — 幂等的唯一子串条件写;批准即所见载荷(replace / remove / consolidate 携带将被改动的全文)。

  • Audit contract — 每次写都能从 approval/asked + approval/decided + 提供方账本重建。

  • 预警线模型 — 每层软预警线 / AMBIGUOUS_MATCH 语义。

  • Schema versioning — 带响亮版本检查的迁移规则。

  • Specdocs/protocol-v1.md(中文: protocol-v1.zh.md);规范性 JSON Schema 见 docs/schemas/dsh-memory-protocol-v1.schema.json

Adapter registryctx.memoryAdaptersregister / list / adapt / export)让第三方记忆插件通过注册纯数据转换器接入协议(可逆 register();导入走审批门 seed,导出只读)。接入指南:docs/adapters-guide.md(中文: adapters-guide.zh.md)。

Built-in adapter External format Notes
mem0 mem0 fact collections({facts: [{memory, metadata?}]} metadata.category / metadata.tags 成为 tags;原始 messages 数组被拒绝——适配器只转换、绝不抽取
hermes-memory-md Hermes memory.md## section + 列表项) 章节名成为 tags;非列表散文响亮失败
claude-code-memory-md CLAUDE.md 风格 markdown(标题、列表、段落) 列表项与段落成为条目;章节名成为 tags

Conformance suitetest/protocol-conformance/:可分发用例集,任何声明兼容的提供方都能跑(node test/protocol-conformance/run.mjs --provider ./your-factory.mjs);本仓库 CI 以自有提供方为黄金参考运行它(npm run test:conformance)。

What we learned from the terminal memories

yammory_system 不是 Claude Code、Codex 或 Hermes 的移植——但其设计刻意吸收了它们各自做对的部分,并拒绝有害的部分:

Terminal memory 做对了什么 yammory_system 采纳了什么
Claude CodeCLAUDE.md 分层纯文本记忆文件(用户级 → 项目级),人类可读、可编辑,自动合并进每个会话 纯文本条目;user-global / workspace 层按会话合并;可浏览、export、审计的 store——透明即特性
CodexAGENTS.md 按目录作用域自动发现并注入的指令,零模型摩擦 按会话 cwd 隔离的 workspace 层(Windows 大小写不敏感);会话开始时自动注入冻结快照
Hermesmemory.md 主动记忆保存,以及"只在工具层强制门可被后期工具注入绕过"的安全教训 带 Save/Skip 指引的 memory 工具 + 审批门控的自动捕获提案;门位于 ctx.memory 写方法内部,而非工具层

来源:Claude Code memory · Codex AGENTS.md · Hermes memory · Hermes #48181

刻意拒绝的部分:隐藏地自动摘要进模型私有状态(此处压缩摘要成为等待人类 approve/dismiss 的待处理提案)、仓库/向量库野心,以及任何缺少人类可见审批或审计链的写入。也采纳了:Hermes 记载的"两个进程共享一个主目录写同一记忆文件"的告诫——见 Security boundaries。

Development

npm install              # node ^22.19 || >=24
npm test                 # node --test: 484 tests
npm run lint             # oxlint
npm run test:conformance # dsh-memory-protocol v1 conformance suite
npm run typecheck        # tsc --checkJs gate
npm run check:coverage   # line-coverage gate
npm run check:readmes    # five-language README consistency gate
npm run verify:self-contained # reject out-of-repo dependency specs
npm run verify:artifacts # artifact presence + syntax + import

lib/ 零 DSH 依赖(仅 node: 内置模块);DSH 导入只出现在 index.mjs

Topics

dsh, dsh-plugin, deepseek-harness, memory, agent-memory, approval, audit, sqlite, cordis, llm

Contributors

  • @Niuniu-Sirissue #1 中的启动崩溃报告,催生了 0.3.1 引入的 ~/.dsh 回退。

Upstream

This project is a fork of dsh-memento, originally part of the PerryLink DSH plugin family. Upstream attribution and the Apache-2.0 licence are preserved.

Apache License 2.0 © 2026 dsh-memento contributors

CLASSIFICATION EVIDENCE

分类依据

项目类型插件
功能分类Agent 与会话
规则置信度

系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: agent-memory。