给 AI 一份可审计的长期记忆与主动唤醒机制
29.6/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add zhaoguoqiang-hub/dsh-soul-engine该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · chat
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 40 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 47 处,展示前 29 条)
- 读取本地文件lib/index.js:64
const L = JSON.parse(readFileSync(path, "utf8")); - 写入本地文件lib/index.js:435
appendFileSync(logPath, line, "utf8"); - 读取本地文件lib/index.js:551
const st = statSync(c); - 执行外部命令固定命令lib/index.js:644
execFile("/usr/bin/osascript", ["-e", script], { timeout: 8000 }, function () { }); - 执行外部命令固定命令lib/index.js:765
execFile("/usr/bin/osascript", ["-e", script], { timeout: timeoutMs || 8000 }, function (error, stdout) { - 执行外部命令固定命令lib/index.js:1426
execFile("git", ["-C", dir, "log", "--oneline", "-3"], { timeout: 8000 }, function (e, out) { - 读取本地文件lib/index.js:1437
"版本化:" + (existsSync(dir + "/.git") ? "已是独立 git 仓" : "⚠️ 不是 git 仓(改动不会被记录)"), - 读取本地文件lib/index.js:1526
try { L = JSON.parse(readFileSync(ledgerPath, "utf8")); } catch { } - 读取本地文件lib/index.js:1602
lines.push("· 真触发记录:" + (existsSync(wlog) - 读取本地文件lib/index.js:1603
? "\n" + readFileSync(wlog, "utf8").trim().split("\n").slice(-3).map(function (l) { return " " + l; }).join("\n") - 写入本地文件lib/index.js:1882
if (size > 512 * 1024) writeFileSync(LOG_PATH, ""); - 写入本地文件lib/index.js:1883
appendFileSync(LOG_PATH, new Date().toISOString() + " " + method + " " + path + "\n"); - 发起网络请求lib/client.js:220
fetch(API, { cache: 'no-store' }) - 发起网络请求lib/client.js:269
fetch('/dsh-soul/memories?limit=2000', { cache: 'no-store' }) - 发起网络请求lib/client.js:280
fetch(url, { method: 'POST' }) - 读取本地文件lib/store.js:266
const rt = JSON.parse(readFileSync(join(dir, "runtime.json"), "utf8")); - 读取本地文件lib/store.js:274
const t = readFileSync(join(mem, "soul.md"), "utf8"); - 读取本地文件lib/store.js:287
state.profile = JSON.parse(readFileSync(join(mem, "profile.json"), "utf8")); - 读取本地文件lib/store.js:292
const t = readFileSync(join(mem, "goals.md"), "utf8"); - 读取本地文件lib/store.js:319
const t = readFileSync(join(mem, "outbox.md"), "utf8"); - 读取本地文件lib/store.js:344
if (!existsSync(d)) return; - 写入本地文件lib/store.js:457
try { writeFileSync(dataFile, JSON.stringify(state, null, 2), "utf8"); return 1; } catch { return 0; } - 写入本地文件lib/store.js:465
mkdirSync(dirname(full), { recursive: true }); - 写入本地文件lib/store.js:466
writeFileSync(full, content, "utf8"); - 写入本地文件lib/store.js:489
mkdirSync(dirname(full), { recursive: true }); - 写入本地文件lib/store.js:490
writeFileSync(full, content, "utf8"); - 写入本地文件lib/store.js:508
try { writeFileSync(join(dir, DIRTY_FILE), new Date().toISOString(), "utf8"); } catch { } - 删除本地文件lib/store.js:518
try { rmSync(join(dir, DIRTY_FILE), { force: true }); } catch { } - 执行外部命令固定命令lib/store.js:568
execFile("git", ["-C", dir].concat(args), { timeout: 15000 }, (err, stdout) => {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 可审计明文记忆账本
- 轮首账本注入
- 心跳唤醒机制
可审计的明文 Markdown 记忆账本插件(DSH / DeepSeek Harness):14 个 soul_* 工具 + 轮首账本注入 + 零 token 自维护 + 心跳唤醒
README
由 DeepSeek 最新模型翻译生成dsh-soul-engine
DeepSeek Harness(DSH)的状态面插件:给 AI 伙伴一份可审计的长期记忆、一个能主动开口的机制,以及一本花销看得见的账。
English. A state-plane plugin for DeepSeek Harness: an auditable plain-Markdown memory ledger, per-turn ledger injection, zero-token self-maintenance, an opt-in heartbeat that wakes an existing session (never creates one), a user-state signal layer, and a read-only-by-default sidebar panel. macOS-only extras (desktop notifications, Calendar/Reminders bridge) degrade gracefully on other platforms.
它不是一个“聊天机器人插件”,而是补三件常被跳过的事:
| 缺什么 | 后果 | 本插件的做法 |
| 工具在,但模型想不起来用 | 主动性形同虚设 | 每轮把账本摘要注入系统提示词 |
展开完整文档(README 剩余 1 节)
dsh-soul-engine DeepSeek Harness(DSH)的状态面插件:给 AI 伙伴一份可审计的长期记忆、一个能主动开口的机制,以及一本花销看得见的账。 English. A state-plane plugin for DeepSeek Harness: an auditable plain-Markdown memory ledger, per-turn ledger injection, zero-token self-maintenance, an opt-in heartbeat that wakes an existing session (never creates one), a user-state signal layer, and a read-only-by-default sidebar panel. macOS-only extras (desktop notifications, Calendar/Reminders bridge) degrade gracefully on other platforms. 它不是一个“聊天机器人插件”,而是补三件常被跳过的事: | 缺什么 | 后果 | 本插件的做法 | | 工具在,但模型想不起来用 | 主动性形同虚设 | 每轮把账本摘要注入系统提示词 | | 记忆散在对话里 | 换会话就忘,无法审计 | 落成明文 Markdown 账本 + git 版本化 | | 主动性没有成本意识 | 静默烧钱、反复打扰 | 四道频率闸 + 预算看门狗 + 可整体关掉 | 三条自我约束(写在数据与代码里,不只是口号): 1. 透明优先于「为你好」——不隐藏状态,账本人人可读、可查、可删。 2. 一切自主行为自带预算——唤醒次数有闸,花费可见,预算看门狗可开。 3. 记忆属于用户——遗忘权是义务:soul_forget 软删,原文留痕,随时可撤销。 安装 从 npm dsh plugin --profile web add dsh-soul-engine 或从本地目录 / Git 仓库 dsh plugin --profile web add "file:/path/to/dsh-soul-engine" dsh plugin --profile web add "github:/dsh-soul-engine" 确认 ~/.dsh/profiles//package.json 的 dsh.profile.bundles 里含 dsh-soul-engine,然后重启 DSH(bundles 在宿主启动时读取)。 验证:新会话里调用 soul_status,应返回账本总览而不是 unknown tool。 停用:从 dsh.profile.bundles 里删掉那一行即可,不必卸载包。 快速开始 soul_init # 第一次:写下灵魂名 + 三条核心目标 soul_status # 每次都先看它:目标进度 / 最近记忆 / 待办 / 一条「此刻最该做的」 soul_remember # 值得记的事随手写一条 14 个工具 | 工具 | 作用 | | soul_init | 初始化账本(灵魂名 / 三条核心目标 / 空账本) | | soul_status | 总览:目标进度、叙事记忆、待办箱、画像,并给出“此刻最该主动做的”一条 | | soul_remember | 写入一条叙事记忆(含 selfState 自我状态标注);pin 可进永久层 | | soul_goal | 内生目标账本:list / add / update / done | | soul_outbox | 主动待办箱:push(可带 dueAt 到点时间)/ list / resolve | | soul_reflect | 规则层反思(零模型成本):高频模式、慢目标预警、待办积压、反馈比例 | | soul_daily | 每日首聊三件事:brief 取三件事并销标记;status 看今天做没做 | | soul_feedback | 正负反馈双轨:record / list / report(含正负比例提示) | | soul_memory | 账本审计(只读):list / get / search / recall / stats / archived / distill | | soul_forget | 记忆状态管理(都可逆,都不删原文):forget / restore / archive / unarchive / list | | soul_signal | 记录用户当前状态(能量 / 忙闲):record / status / clear | | soul_schedule | macOS 日历 / 提醒事项桥接:today / add / list | | soul_cost | 成本可见(只读):report 今日 / 本月花费与预算余量;days 逐日 | | soul_maintain | 自维护:status 看定时器与最近一次维护;run 立刻跑一次(幂等) | 账本布局 默认落在 $DSH_HOME/soul-data/(未设 DSH_HOME 时是 ~/.dsh/soul-data/),可用 config.dataFile 或环境变量 DSH_SOUL_DATA_FILE 覆盖。 soul-data/ ├── memory/ ← 人可读,进 git │ ├── soul.md 灵魂名 + 三条核心目标 │ ├── profile.json 用户画像 │ ├── goals.md / outbox.md 目标台账 / 待办箱 │ ├── reflections.md 规则层反思留痕 │ ├── feedback.md 正负反馈 │ ├── journal/YYYY-MM.md 叙事记忆,按月分文件、追加式 │ └── archive/YYYY.md 容量淘汰的旧条目(不删,可搬回) └── runtime.json ← 机器运行计数(心跳 / 信号 / 日程缓存),不入 git 三条设计判据: 1. 分流:进 git 的是“值得回看的东西”,运行计数走 runtime.json——否则版本历史会被 dayCount 3→4 淹没。 2. 账本独立建仓:不放进项目仓库。项目仓库的提交常被其他工具(如 Hindsight)当作工程知识吸收,私人记忆进去等于双重污染。插件会在维护 tick 里对账本目录做 git add -A 并按批提交;.git-dirty 与 runtime.json 通过 .git/info/exclude 排除,不污染你自己的 .gitignore。 3. 格式按后果选:解析失败只导致降级的用自由 Markdown;解析失败会导致行为错误的(outbox 到点提醒)用严格行格式。 轮首注入 每轮组装提示词时实时注入账本摘要(主轴目标 / 待主动提的那条 / 最近记忆 / 纪律行),让“主动性”不再依赖模型自己想起来: 【灵魂账本·】 主轴:[p10 33%] 守护用户长期福祉 —— …当前要事… 待主动提(到点自然说起,一次只提一条):… 最近记忆(10条):… 纪律:行动前先 soul_status;听到偏好/边界/纠正当场 soul_remember… - 开关:config.promptSection: false,或环境变量 DSH_SOUL_PROMPT=0 - 字数上限:config.promptMaxChars(默认 1000)——它直接决定每轮的常驻 token 成本,按自己的容忍度调 - 账本不存在时返回空串,由宿主丢弃,不占位 自维护(零 token) 维护 tick 默认每 5 分钟跑一次,纯本地代码,不调用模型: - 滞留待办自动作废(staleOutboxDays,默认 14 天) - 每周写一条自动周报进叙事(weeklyReport) - 叙事巩固 / 淘汰(consolidate):活跃叙事超过 retainMax(400)条时,把既不在最新 400 条内、又老于 retainDays(180)天的条目搬进 memory/archive/;永久层的(pin 过 / value / preference)永不自动搬;一次最多 archiveMaxPerRun(50)条 - 账本 git 提交(见上) 度量:soul_maintain action=status。 心跳(会花钱的自主行为,可整体关掉) 心跳让系统在真有事时叫醒一次会话。成本是这条设计的第一约束(复用已有会话,一次完整唤醒约等于 3 轮模型调用;新建会话要贵数倍——所以复用不到就不响)。 每 5 分钟 tick(纯代码,0 token) → 四道闸 + 真事判断(全本地计算) → 该响才复用已有会话 → 注入一条指令 - 四道闸:安静时段(默认 23:00–08:00 不响)|每天 ≤ heartbeatMaxPerDay(5)|每周 ≤ heartbeatMaxPerWeek(15)|距上次 ≥ heartbeatMinGapMinutes(60) - 两种真事:① 待办箱里有 dueAt 到点的事项;② 到点后「今日三件事」仍未做(heartbeatDailyBrief,默认关) - 启动布防:宿主重启后第一次 tick 只布防不响,避免“重启即打扰” - 注入的指令自带克制条款:只做这一件事;判断此刻不该说可以只记一笔、不发消息(跳过不算失败) - 不想被主动打扰:config.heartbeat: false 预算看门狗(dailyBudgetYuan,默认 0 = 关闭):设成正数后,每 5 分钟读一次 DSH 成本账本,今日花费超过阈值就 ①暂停当天心跳 ②弹桌面通知 ③写一条反思留痕。要不要给自己的自主行为设上限、设多少,由使用者决定,不预设。 右侧栏面板 在右侧栏注册一个「灵魂」页签(带待主动提条数角标),三个 tab:概览 / 成本 / 记忆。 - 数据源是宿主本地路由:GET /dsh-soul/state、GET /dsh-soul/memories - 记忆 tab 可就地对单条执行遗忘 / 撤销遗忘(POST /dsh-soul/forget)——这是修正案「记忆属于用户」的界面落地 - 其余写入一律走 soul_ 工具,面板不提供任意写操作 - 宿主会在 /tmp/dsh-soul-access.log 写一份访问诊断日志(带 512KB 上限),用于区分「浏览器缓存了旧客户端」与「新客户端真出错」 配置 全部参数写在 cordis.patch.yml 的 config 里,改配置即可调,不必动代码。常用项: | 键 | 默认 | 说明 | | dataFile | $DSH_HOME/soul-data/state.json | 账本位置 | | promptSection / promptMaxChars | true / 1000 | 轮首注入开关与字数上限 | | maintenance / maintenanceIntervalMs | true / 300000 | 自维护与 tick 间隔 | | heartbeat / heartbeatMaxPerDay / heartbeatMaxPerWeek | true / 5 / 15 | 心跳与频率闸 | | heartbeatMinGapMinutes / quietHours | 60 / true | 最小间隔 / 安静时段 | | dailyBudgetYuan / budgetPause | 0(关) / true | 预算看门狗与超预算是否自动刹车 | | consolidate / retainMax / retainDays | true / 400 / 180 | 叙事巩固 / 淘汰 | | notify | true | 桌面通知(macOS) | | quietWhenBusy / signalTtlHours | true / 3 | 忙时顺延 / 信号有效期 | | schedule / scheduleRefreshMinutes | true / 15 | 日历桥接与缓存刷新 | 环境变量:DSH_SOUL_DATA_FILE(账本路径)、DSH_SOUL_PROMPT=0(关注入)、DSH_SOUL_NOTIFY=0(关通知)、DSH_HOME、DSH_COST_LEDGER(成本账本路径)。 安全与隐私披露 装插件就是在本机跑第三方代码,这份清单请自己核: - 读写本地文件:默认目录 $DSH_HOME/soul-data/,由宿主进程用 node:fs 直接读写(不经过会话文件沙箱);soul_cost 会读 DSH 成本账本 $DSH_HOME/storages/cost-meter/ledger.json;面板路由会写 /tmp/dsh-soul-access.log。 - 执行外部命令:账本 git 提交会调 git;桌面通知与日历 / 提醒事项走 /usr/bin/osascript(macOS)。非 macOS 平台请设 notify: false 与 schedule: false:通知在非 macOS 上会静默不触发,日历桥接会返回底层命令不存在的错误——两者都不会假装成功。 - 会花钱:心跳唤醒消耗 token。默认每天上限 5 次、每周 15 次;不想被主动打扰设 heartbeat: false。 - 不对外联网:宿主端不做任何出站请求;面板只访问宿主本地的 /dsh-soul/ 路由。 - 系统授权:通知需在「系统设置 → 通知」给 DSH 授权;日历 / 提醒事项需在「隐私与安全性 → 自动化」授权。未授权时读返回 0 条、写返回明确的“需要授权”。 - 账本里是你的私人内容:它不会离开本机,但会被注入模型上下文(就是注入段那段),请自行判断哪些内容适合写进去。 平台支持 | | macOS | Linux / Windows | | 14 个工具、账本、注入、自维护 | ✅ | ✅ | | 右侧栏面板 | ✅ | ✅ | | 桌面通知(osascript) | ✅ | 不可用 | | 日历 / 提醒事项桥接 | ✅ | 不可用 | 开发与测试 npm test # 13 个离线脚本:清单闸门、自维护、巩固淘汰、检索、心跳闸、面板真实渲染、迁移…… npm run test:ledger -- # 往返一致性(需要一个真实账本) 测试不依赖 DSH 宿主:用假 ctx 装载插件后逐个执行工具。scripts/verify-manifest.mjs 专门补一个盲区——exports 写错时按文件路径 import 的测试会全绿、但宿主加载整包会失败。 已知取舍(明确写下来,不假装没有): - 账本 git 提交在维护 tick 里按批做,极端情况下丢最后一次写的提交(与下面这条同源) - 定时器用同步读写,与工具的异步写之间存在极小概率的丢更新窗口(维护每天只写一两次) - Markdown 靠约定解析,解析失败即降级(注入段少一行),不会因此崩掉宿主 License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
zhaoguoqiang-hub/dsh-soul-engine
给 AI 一份可审计的长期记忆与主动唤醒机制
相关插件 · 对话 / 记忆
上下文中枢oceanbase/powercontext
上下文跟着工作走 —— 跨会话、跨智能体、跨人。
★ 1,489已汉化DSH
73.1
智能体记忆库plastic-labs/honcho
Honcho 是记忆基础设施,用来构建有状态的智能体。这些智能体能理解不断变化的人、智能体、群组、项目和想法。
★ 7,918已汉化DSH
71.7
长程智能体控制面loopx-project/loopx
给 Agent 一个目标,让工作持续向前。
★ 6,358已汉化DSH
71.3
智能体上下文数据库volcengine/OpenViking
给 AI 智能体用的上下文数据库
★ 41,453已汉化DSH
71.3
长效机器人团队Fei2411/DS-Bot
Download DS Bot for Windows 10/11 64-bit / 下载 Windows…
★ 5,293已汉化DSH
71.2
可携带记忆层EverMind-AI/EverOS
为什么选择 EverOS
★ 13,797已汉化DSH
71.1
这是你的仓库?认领条目