dsh-hindsight-advanced

DSH PLUGIN记忆与知识

仓库 paulalesius/dsh-hindsight-advanced

记忆与知识 L4 · 沙盒安装通过 安全审查:低风险 可信度:银 可安装插件
安装这个插件

为 DeepSeek Harness 提供长期记忆:每轮自动回忆、保留/回忆/反思工具、常驻规则,并可将可见性限定到整个记忆库、预设或会话。

一句话选型结论

按资料字段整理

dsh-hindsight-advanced 是记忆与知识类的 DSH 可安装插件,验证等级 L4 · 沙盒安装通过,安全审查为低风险,列出 4 项功能,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类记忆与知识 收录类型可安装插件 验证等级L4 · 沙盒安装通过 安全审查低风险
验证等级 L4 L4 · 沙盒安装通过
GitHub 星标 3 复刻 0 · 未关闭 issue 未标注
最近更新 2026-09-20 创建于 2026-08-23
README 16.8 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add github:paulalesius/dsh-hindsight-advanced#v0.2.0
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

4 项功能
字段来自项目仓库与公开索引,中文说明由本站标注

dsh-hindsight-advanced:DeepSeek Harness 的长期记忆插件

  • 每轮自动回忆
  • 保留/回忆/反思工具
  • 常驻规则
  • 记忆范围控制

适用场景

记忆

上游标签

agent-memorydeepseek-harnessdsh-pluginhindsighthindsight-memory

验证等级与安全审查

L4 · 沙盒安装通过
自动化流程结论,不是人工审核
验证等级L4 · 沙盒安装通过安装命令在隔离沙盒内真实执行成功,无依赖错误
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度银综合仓库活跃度与验证结果

上面的结论来自上游最近一次自动化验证(2026-10-08): 同一套检查会在插件发新版后重跑,页面显示的是最新一次的逐项结果。

逐项检查结果

L1 · 已找到 ✓ 通过
  • L1.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L2 · 结构化 ✓ 通过
  • L2.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L3 · 安装规范 ✓ 通过
  • L3.1_INSTALL_COMMAND_PARSED 安装命令已解析 方式:安装规范解析
  • L3.2_DSH_VERSION_DECLARED DSH 版本已声明 方式:DSH 版本声明
L4 · 安装已测 ✓ 通过
  • L4.1_INSTALL_EXECUTED_CONFINED 受限沙盒内执行安装 方式:沙盒安装执行
  • L4.2_INSTALL_SUCCESS 沙盒安装成功 方式:沙盒安装执行
  • L4.3_ARTIFACT_CONFIRMED 安装产物已确认 方式:沙盒安装执行
L5 · 运行已测 ✕ 未通过
  • L5.1_INSTALL_PASSED_SANDBOXED 沙盒安装通过 方式:沙盒安装执行
  • L5.2_WEB_BOOT_READY Web 启动就绪 方式:Web 启动
  • L5.3_HTTP_SERVED HTTP 服务响应 方式:HTTP 请求
  • L5.4_PLUGIN_INVENTORY_ACTIVE 插件清单中已激活 方式:插件清单查询

风险详情

  • 审查结论 通过
  • 结论说明 vet 静态分析未发现可疑行为,判定为干净(clean)。
  • 风险计数 严重 0 / 高 0 / 中 0
  • 风险详情 未发现严重或警告级问题。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L4:在沙盒里真实装过,依赖能装上,不是纸面声明。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。
  • 列出了 4 项功能,能直接看出它解决什么问题。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在记忆与知识场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-hindsight-advanced当前 L4 · 沙盒安装通过 低风险 3 未标注 有
ruflo L3 · 安装规范通过 低风险 7.4 万 未标注 无
OpenViking L3 · 安装规范通过 低风险 3.9 万 未标注 无
WeKnora L4 · 沙盒安装通过 低风险 3.3 万 未标注 有
distilly L4 · 沙盒安装通过 低风险 2.5 万 未标注 有
EverOS L4 · 沙盒安装通过 低风险 1.3 万 未标注 有

仓库档案

记忆与知识
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方paulalesius仓库 dsh-hindsight-advanced · 默认分支 未标注
分类记忆与知识memory
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言JavaScript仓库主语言
许可证NOASSERTION商用或二次分发前请确认条款原文
星标 / 复刻 / issue3 / 0 / 未标注收录时的数值,非实时
创建 / 更新2026-08-23 · 2026-09-20最后推送 未标注
本站收录2026-08-25首次进入本站目录的时间

README 全文

16.8 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-plugin-hindsight-advanced

🔴 Compatibility: this plugin tracks DeepSeek Harness commit 0d1f50007f9bca3f52b06e1c3074fa14d5fb0720 verbatim. It is NOT compatible with later DeepSeek Harness versions - they are too buggy to use.

A plugin for DeepSeek Harness (dsh) that integrates the Hindsight memory
system: your agent stores memories in your own Hindsight server and brings
the relevant ones back into the conversation.

Installation

With the dsh command:

dsh plugin --profile web add /path/to/hindsight-advanced

When running dsh from source:

pnpm dsh plugin --profile web add /path/to/hindsight-advanced

Then restart the server.

Configuration

The configuration is one hindsight row in your own DSH config — never an
edit to the plugin's files. You place it in one of two spots - or both,
when the rows serve different banks (the profile-wide bank plus a
preset-specific bank; see Mounting the plugin twice below):

Every session. In your profile's patch layer
(~/.dsh/profiles/web/cordis.patch.yml, append to your existing file):

- id: hindsight
disabled: false
config:
bank: my-bank
baseUrl: http://127.0.0.1:9177
apiKeyRef: HINDSIGHT_API_KEY

One preset only. In that preset's own file
(~/.dsh/.agent-presets//agent.cordis.yml, append):

- id: hindsight
name: dsh-plugin-hindsight-advanced
config:
bank: my-bank
baseUrl: http://127.0.0.1:9177
apiKeyRef: HINDSIGHT_API_KEY

Presets that point at the same bank don't need separate banks — the
preset scope already keeps each preset's memories apart.

Two things to know about the row:

  • the config block replaces the plugin's defaults wholesale — list
    every key you want; only bank is strictly required, the rest fall back
    to the defaults in the table below (but baseUrl and apiKeyRef are
    worth repeating, since their defaults point at port 8888 and carry no
    key);
  • to switch the plugin off again, set disabled: true on the row (or
    remove the preset row) and restart.

Mounting the plugin twice

Two rows can reach one session: the profile-wide row plus an agent-preset
row, against DIFFERENT banks. The session's PRESET mount then owns its
automatic recall: every automatic surface (the turn-start snapshot, the
mid-step recalls, the post-compaction recall, the lesson gate) commits ONE
snapshot - the preset bank's card - with the profile-wide bank's standing
directives merged in as their own section (headered by that bank), so the
profile-wide bank's rules keep reaching the model without a second block
per turn. The profile-wide row stays silent on every automatic surface for
that session: no second snapshot, no prefetch, no mid-step or
post-compaction recall, no gate lookup (its hindsight tool stays
registered, shadowed by the preset row's for that session's agents). A
session no preset row covers is served by the profile-wide row exactly as
usual. The merge is failure-isolated per bank: a profile-wide bank whose
directive listing fails is simply left out of the merge, the preset bank's
card still lands with its own rules. Mounting twice against the SAME bank
is redundant: the second mount's refreshes retire the first mount's cards,
so the surface converges on one bank's cards.

The configuration keys

key default what it does
bank — Required. The name of the Hindsight bank to use (the server creates it on first use).
baseUrl http://127.0.0.1:8888 Your Hindsight server's address.
apiKeyRef — The way to give the plugin its key — a name for the secret, not the secret itself. The value is looked up on every call (environment → ~/.dsh/.credentials.yaml → .env files), so rotating the key needs no restart and the key never sits in a config file. See below.
apiKey — A plain key in the config, instead of a reference. Prefer apiKeyRef.
autoContext true Set false to turn off the automatic recall (each turn's first step, any human intervention claimed mid-turn, the mid-step agent-output recall, the post-compaction recall, and the opt-in pre-execution lesson gate; the hindsight tool stays).
prefetch true true (default): the recall starts as the previous turn ends, so from the second turn on it targets the previous message. false: every turn queries the message you just sent and waits on the server for it — the memory is always relevant to what you just said, at the cost of the server's latency on every first model call.
recallContextTurns 5 How many of your recent turns ride along in the recall's query, so the bank can match memories against what the conversation was about, not just the last message. The query is the anchor message under a Prior context: block of the recent prior turns (one line per user/assistant message), capped at 1000 characters with the oldest lines dropped first. 1 (what the reference integrations ship) is the plain single-message query.
recallPreserve true true (the default): the model context is append-only — every committed recall snapshot stays in the conversation, so later turns see the memories that were recalled earlier. false: the model context carries only the latest full snapshot — each new one retires the previous full card in place (a one-line tombstone marker stays where that turn's recall fired, its full tokens metered out of the pricing) and lands as a fresh card at its own turn, while the durable session log keeps every full snapshot for replay and audit. The naming matches llama-server's --no-reasoning-preserve: with it off, a turn's snapshot, like its reasoning, lives for that turn only.
recallAfterText false true: a step past the first whose claim carries no human message recalls the bank anchored on the previous step's committed text - the words the agent wrote. Bounded by autoContextTimeoutMs, at most one recall per step; a human message in the claim takes the intervention path instead.
recallAfterReasoning false Like recallAfterText, but anchored on the previous step's committed reasoning. With both keys on, the two anchors are combined into ONE recall (the reasoning first, then the text) - never two lookups.
actionLessons false true: at a step past the first whose claim carries no human message, the plugin matches the previous step's committed tool calls against the bank's failure lessons (its experience memories) and commits a collapsed notice row (no label - just its summary) listing the matches before the next model call. A previous step without tool calls anchors nothing (no bank call); each lesson shows at most once per turn; subagent sessions stay silent.
actionLessonCandidates 10 How many lesson lines the actionLessons notice row renders - the recall is unbounded by this key, the row keeps the first matches.
lessonGate false true: before a call to a tool named in lessonGateTools is executed, the PENDING call itself anchors a bounded recall on the bank's failure lessons (its experience memories), and a hit whose match score is at or above lessonGateMinScore DENIES the call before the tool body runs: the model sees the rendered lessons as the tool's error result and learns from the recall before the action acts. Subagent sessions stay silent; only the named tools pay the lookup; a timeout or bank failure allows the call (no bank, no gate). Off by default.
lessonGateMinScore 0.3 The minimum match score at which the gate denies a gated call (a hit under the threshold, or a hit without any score, allows the call).
lessonGateTools bash, run_code The tool names the gate covers - only these calls pay the pre-execution lookup (the default is the side-effect-capable executors).
recallAfterCompaction false true: right after a successful context compaction, the plugin recalls the bank on the conversation's last human message (the same Prior context: composition as the prefetch) and lands the snapshot directly on the surface - the row is labeled recall:compact - ms. A compaction fires outside any step (at a turn boundary, mid-step under context pressure, or on a request retry), so there is no step to hang the recall on; the lookup is detached and bounded by recallCompactTimeoutMs, and a failed compaction recalls nothing. Off by default.
retainScope preset Where a stored memory lands when the agent doesn't say: global (everything in the bank), preset (this agent preset), or session (this session only).
maxRecallTokens 4096 How much memory to bring back per recall.
autoContextTimeoutMs 2500 How long a turn may wait on the memory server before moving on without it. Because the lookup runs ahead (below), most turns never pay this; a slow or stopped server never blocks the agent.
recallCompactTimeoutMs 8000 The bound for the DETACHED post-compaction lookup (recallAfterCompaction). Its query is the full multi-turn composition (anchor + Prior context: block, up to 1000 chars), which the bank serves slower than the single-message lookups of the loop-blocking paths - under the shared autoContextTimeoutMs it would time out deterministically and the snapshot would be silently discarded. The event is fire-and-forget, so the larger default never reaches the agent loop.
retainAsync false false (the default): storing waits until the bank has processed the memory, so the next turn already sees it. true: store acknowledges fast and the bank processes it in the background.
bankConfig — Optional instructions for the server's own memory extraction — for example retain_mission: "Focus on decisions and durable project facts." tells the Hindsight server what to pull out of what the agent stores.

How the automatic recall works

At the start of each turn the agent gets a small note: the memories that
match your latest message, plus any standing rules you stored. The lookup
starts in the background as soon as the previous turn ends — while you
are reading or typing — so by the time the agent starts the next turn the
memory is usually already there and the turn does not wait on the memory
server at all. The first turn of a conversation has nothing to read ahead
of, so it waits on the server normally (up to autoContextTimeoutMs).
Set prefetch: false to query the message you just sent instead — at the
cost of that wait on every turn.
If you send a message while the agent is already working, the recall
follows it: when the agent picks the intervention up at its next step it
recalls the bank on the spot (bounded by autoContextTimeoutMs),
anchored on the intervention itself, so a mid-turn correction arrives
with the memories about what it corrects. A step that only carries
plugin-injected context recalls nothing.
By default, that last sentence is the whole story: a step without a
human message recalls nothing. Set recallAfterText: true and/or
recallAfterReasoning: true to change it - at a step past the first
whose claim carries no human message, the plugin recalls the bank
anchored on the previous step's own output: the text it wrote and/or the
reasoning it committed (with both on, one combined anchor, the reasoning
first, then the text). The lookup is bounded by autoContextTimeoutMs
like the intervention's and rides the same decision that advances the
step, so memory about what the agent just did is in context before the
next model call. A human message in the claim still wins the precedence
(the intervention path above), and there is at most one recall per step.
Each note's row shows how long its lookup took (for example
recall - 12ms) in place of the plugin name — expand the row to see the
producer. A mid-step agent-output note is labeled by what it anchored on:
recall:text - 12ms (the text), recall:think - 12ms (the reasoning),
or recall:think+text - 12ms (the combined anchor).
A separate pass, actionLessons, does the same mid-step dance for the
agent's ACTIONS instead of its words: at a step past the first whose
claim carries no human message, the plugin matches the previous step's
committed tool calls (one line per call) against the bank's failure
lessons - its experience memories - and a match commits a collapsed
notice row (no label - just its summary) listing the matching
lessons before the next model call. A previous step without tool calls
anchors nothing (no bank call), each lesson shows at most once per
turn, and subagent sessions stay silent. Off by default;
actionLessonCandidates caps how many lesson lines the row renders.
A fourth surface, recallAfterCompaction (off by default), recalls
right after a successful context compaction: the compaction fires
outside any step (a manual compaction at a turn boundary, the automatic
pressure compaction mid-step, or a retry after a request overflow), so
there is no pre-step decision to hang the snapshot on - the lookup runs
detached on the conversation's last human message (the same
Prior context: composition as the prefetch) and the snapshot lands
directly on the surface, labeled recall:compact - ms. The lookup
rides its own bound (recallCompactTimeoutMs, default 8000) because
the composed query is served slower than the single-message lookups of
the loop-blocking paths - under the shared autoContextTimeoutMs it
would time out deterministically; the event is fire-and-forget, so the
bound never reaches the agent loop. A failed
compaction (the server reports the error) recalls nothing, subagent
sessions stay silent, and an unchanged recall commits nothing - or the
"no new memories" marker row, as everywhere else.
A separate opt-in surface, lessonGate (off by default), does the
lesson dance at EXECUTION time instead of step time: before a call to
a tool named in lessonGateTools (default bash and run_code) is
executed, the pending call itself anchors a bounded recall on the
bank's failure lessons - its experience memories - and a match whose
score is at or above lessonGateMinScore (default 0.3) DENIES the
call before the tool body runs: the rendered lessons travel as the
tool's error result, so the model learns from the recall before the
action acts. It composes with actionLessons (the gate prevents the
first execution; the notice reinforces it after the result) without
sharing state - the gate commits nothing and is never de-duplicated,
because the denial is the model's only feedback channel. Subagent
sessions stay silent, only the named tools pay the lookup, and a
timeout, an aborted call, or a bank failure allows the call.
The query is not just that one message: with the default
recallContextTurns: 5, the last few turns of the conversation ride
along under a Prior context: block (one line per message, capped at
1000 characters), so a memory about the topic you were discussing a turn
or two back can match — set it to 1 for the plain single-message query.
When a turn's recall matches nothing new, you get a
"no new memories this turn" row instead of a repeated block: it names
the memories still in effect, one line each, so you can see exactly what
was applied without the whole block repeating.
The notes are append-only by default (recallPreserve: true): every
turn's snapshot stays in the model context, so the agent keeps seeing
what it recalled earlier. Set recallPreserve: false to keep the context
lean — each new note retires the previous full card in place: a one-line
marker stays where that turn's recall fired (so you can always see WHERE
in the conversation a recall happened, without scrolling), while the
full note lands as a fresh card at its own turn — only the latest full
recall stays on the model's surface (the full history of cards remains
in the session log for replay). Retirement is per bank - and when a
session is dual-mounted against different banks, only its OWNER mount
commits there (Mounting the plugin twice), so only the owner bank's cards
can be retired. The naming matches llama-server's
--no-reasoning-preserve: with it off, a turn's snapshot, like its
reasoning, lives for that turn only. The price is that a retired card
restarts the model's cached prefix - a mid-step note retires on the same
terms, and an unchanged recall commits nothing at all (no retirement, no
prefix cost), so identical repeated steps stay free.

Giving the plugin its key

apiKeyRef: HINDSIGHT_API_KEY is only a name — the plugin looks up the
value by that name on every call, in this order: the environment, then
~/.dsh/.credentials.yaml, then .env files. The usual way is one line in
~/.dsh/.credentials.yaml, added alongside your existing entries
(like the LLM key — don't replace them):

version: 1
refs:
HINDSIGHT_API_KEY:

常见问题

7 问
答案由本站依据条目字段整理,不引用上游原文
dsh-hindsight-advanced 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add github:paulalesius/dsh-hindsight-advanced#v0.2.0` 即可。

dsh-hindsight-advanced 的验证等级是什么意思?

L4 · 沙盒安装通过。安装命令在隔离沙盒内真实执行成功,无依赖错误

dsh-hindsight-advanced 安全吗?

低风险。vet 静态分析未发现可疑行为,判定为干净(clean)。

dsh-hindsight-advanced 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-hindsight-advanced 用的是什么许可证?

上游标注为 NOASSERTION。商用或二次分发前请到仓库确认许可证原文。

dsh-hindsight-advanced 有哪些功能?

每轮自动回忆、保留/回忆/反思工具、常驻规则、记忆范围控制。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

记忆与知识
按星标排序,可作替代方案

ruflo

ruflo

L3 · 安装规范通过 7.4 万 星

OpenViking

OpenViking

面向 DeepSeek Harness 的 OpenViking 记忆与上下文插件:pre-step 自动召回与画像注入、会话捕获、`vik

L3 · 安装规范通过 3.9 万 星

WeKnora

WeKnora

把 WeKnora 知识库接入 dsh 的四个只读工具:列出知识库、混合检索原文片段、按顺序还原单篇文档,以及直接取用 WeKnora 自己

L4 · 沙盒安装通过 3.3 万 星

distilly

distilly

Distilly — Distill how they think into reusable Skills for any Agent o

L4 · 沙盒安装通过 2.5 万 星

EverOS

EverOS

L4 · 沙盒安装通过 1.3 万 星

MemOS

MemOS

L4 · 沙盒安装通过 1.2 万 星

paulalesius 的其它插件

1 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 2026-10-08。