DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins
R

dsh-retcon

Retcon

When writing a judgment, check “under what circumstances is it wrong”—if this isn’t written, it doesn’t pass. An archival format + a ruler; the DSH plugin is an optional automator, and you can still handwrite according to the format without installing it.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:QiDouZu/dsh-retcon#0458422ab076d5ab4bbc5c68594c613d6af66926
READMECompatibilityVersions

Compatibility and provenance

Retcon is published as dsh-retcon and currently resolves to version 0.2.3. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
any
Release source
github
Registry updated
10/25/2026

Versions

0.2.3stable
10/25/2026
0.2.2stable
10/25/2026
0.2.1stable
10/25/2026

Related plugins

Loading related plugins…

Latest
0.2.3
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
any
License
MIT
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
10/25/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in productivity-workflow.

Acp App@deepseek-ai/dsh-acp-appThe dsh ACP profile bundle: automation-only JSON-RPC stdio and process lifecycle over dsh-baseExperimental Schedule Bundle@deepseek-ai/dsh-experimental-schedule-bundleOptional bundle that adds Schedule, its task page, and time context to the Web compositionClient Ui Task Board@linxin666/dsh-client-ui-task-boardHost-authoritative task board for the DSH Web GUI with real session execution, Host cron scheduling, and optional cross-platform idle-sleep protection; mounted without DSH source changes.Web All@linxin666/dsh-web-allDSH Web UI 全家桶聚合插件:一键安装全部功能插件(task-board / pet / web-ui-settings / skin-center / community-plugins / compat shim)。compat 桥接层已并入本包(src/client),无需独立 compat npm 包。

README

回溯性重构 · dsh-retcon

这份框架永远同时是"未完成"和"完成":能跑的现在算完成,够不着的上限算未完成。 上限我们做不到,所以才开源——你来验、来推翻,把它的边界往外推一点。

一句话

它是一份封存格式 + 一把尺子。 核心只有一句:写下判断时,必须写清「什么情况下它是错的」。没写,就不算数。

  • 格式跟宿主无关。 格式.md 是纯 markdown——笔记本、Obsidian、Word,照抄就能用。
  • 检查器零依赖。 check_seal.py,有 Python 就能跑。
  • 插件是可选的自动手。 有 DSH 时装上,它帮你生成格式、回访时补记、列未结案;没有 DSH,用手写 + 检查器,生成的文件一模一样。
  • 它不存记忆。 不是知识库,不是画像系统,不是 RAG,不做向量、不建索引。
  • 它做的全部事情,是让「什么情况下我是错的」这一栏,没法空着过去。

它到底解决什么

AI 是基于上文存在的 —— 但她每次不可能完全读完上文。

上下文有限。不管记忆做得多细,AI 读到的永远是被压过的那部分:摘要、结论、上一次的判断。它不是「读完了全部再回答」,是「读了别人留给它的结论再回答」。

结论一旦被当成事实沿用,AI 就不像人了。

人也不读完自己的全部记忆。人也是拿当下语境重新得出判断 —— 她的判断永远是「进行时」:随时可以推翻。

这就是这套格式唯一在做的事:把 AI 读上文得到的结论,写成一条可被推翻的进行时。

下次读到时,它不是「已知事实」,是「一个待验的假设」—— 第③栏写着怎么推翻它,第④栏写着上次推翻改了什么。

所以它不提高 AI 的记忆量。它让 AI 记忆里的每一个结论,都保持可被推翻的状态。

这就是「像人的地方」的归纳:不是像人一样会忘,是像人一样,判断永远可改。

它服务谁

两个生态位,不是所有人:

你是谁为什么需要它
极限模式的正常用户把 AI 当长期助手深度用,记忆里塞满判断。一旦某个结论过期而你忘了改,它会被一直沿用——而且没人知道它过期了
有艺术鉴赏需求的用户看画、看片、看图,「这好在哪里」本身就是判断。审美判断最容易被写成一句结论,也最需要可推翻

其他人不用。 没有 live 冲突的人、只把 AI 当日用工具的普通用户、团队流程里图省事的人 —— 这套格式对他们只是负担。它不劝人用。


这套东西是怎么来的(先说清楚)

独立研究的产物。 五栏、推翻条件、变更史,都不是从哪个现成插件抄的,是从下面这几条地上长出来的:

  • 精神分析:人对自己说的话,从来不是一次就说到位的——它总有一层被压抑、被改写的版本。要理解它,得拿「它本来想说什么」去跟「它说出来的」对。我们把这套读法搬到了 AI 的记忆上。
  • 认知心理学:记忆不是存档,是每次现编。编的时候会和别的经验混、会丢、会补。所以「记得准」不该是目标,「记得能被人改」才是。
  • 两边一起算:这套东西不是只为了让人好用,也不是只为了让 AI 变强。是让 AI 和人的好处在同一套规则里对齐——AI 写下的判断,人签得了字;人推翻的判断,AI 改得动。单边好处最后都会反过来伤另一边。

撞名说明:发布时发现 GitHub 上已有两个叫 dsh-retro 的仓库(tangzheng202202/dsh-retro、uckkk/dsh-retro),方向不同、各自独立。那是撞名,不是抄,也不是被抄。 本包更名为 dsh-retcon(retcon = retroactive continuity,追溯性连续性)——词是旧的,这套实现是新的。


框架分三层

L0  格式 + 尺子   格式.md + 读取/标准.md + scripts/check_seal.py
                  纯 markdown,跟宿主无关 —— 你不用装任何东西
L1  宿主的手      index.js(DSH 插件)—— 替你记住格式、执行检查
L2  机器          变更史 / 回访 / 度量 —— 让框架自己跑起来,不靠人的记性

现在 L0 独立了,L1 是插件,L2 里变更史做了、度量还没做。

只想拿 L0、不想装任何东西 → retcon-form(格式包:格式 + 给任何 AI 的提示词 + 检查器,跟 DSH 无关)。 本仓库(dsh-retcon)是插件版,等于 L0 + 一个自动执行格式的手。

为什么先说 L0:这套东西最值钱的部分(判据、格式、样例、检查器)全在 L0,而 L0 谁都能拿走,不依赖 DSH 活一天。插件只是让「记得住格式」这件事不必靠人。


装(三步,30 秒)

1. 找到 DSH 的插件目录。

别猜。问你的 AI 一句:「你的插件目录在哪?」 —— 它就跑在 DSH 里,它知道。

拿到路径后,把包放进去,目录名叫 dsh-retcon/:

<那个目录>/dsh-retcon/
  ├── index.js
  ├── cordis.patch.yml   ← 不用改,拷进去就行
  └── package.json

不装插件也能用:格式.md + scripts/check_seal.py 是独立的,拷到任何地方都行。

⚠ 目录不存在就自己建(plugins/ 就是个普通文件夹)。 ⚠ 如果你是第一次装,别去找"现有的插件"(没有)—— 问 AI,或者看 DSH 启动时的工作目录下的 plugins/。

2. 重启 DSH。

3. 验收:问 AI「有没有 seal_write 这个工具」,或者直接让它调一次。

⇒ 没出现 = 目录放错了。 回第 1 步换候选(三个候选在文末「八、装」)。

如果你没装 DSH,用 格式.md + check_seal.py 照样能跑通整套流程——插件只是替你记住了格式,不是替你做了判断。 详细说明见文末「八、装」。


四条路,自己挑

这个包给了四样东西。它们可以分开用,也可以一个都不用。

你想要拿哪个需要
想让它拦你一下装插件(见第八节)有 DSH
不想装任何东西,照格式手写格式.md一支笔
只要一把尺子读取/标准.md + scripts/check_seal.pyPython
想写出你自己的判据读取/填空.md一支笔
先看真事长什么样读取/样例一.md、读取/样例二_一次真实的批评.md、读取/样例三_一条判断塌了.md眼睛

⇒ 没有人该被劝着用这个。四个可以一起用,也可以一个都不用。

⇒ 不要因为「作者说好」才用。你自己的事,你自己挑。


一、它不是什么

先把话说清楚,因为它跟市面上所有「记忆插件」反着来:

它们在比这个在比
记得多全、多准记得有没有被推翻的可能
检索多快每条能不能回到当时的原片
上下文塞得多满塞不进去的是不是被记下来了

它不提高上限,它提高下限。

它不帮你记得更多。它只挡住一件事:把当时的判断,慢慢洗成“我当时就想对了”。


写出来长什么样

记忆就是一个 markdown 文件,落在 封存/ 下,文件名带日期:

20261025_标题.md
├── # 标题
├── > 封存时间 / 来源 / 衍生自(可选)
├── ## 一、我的假设(写完不改)
│     ### 那是什么          ← 要以「我猜/我以为」开头
│     ### 凭什么这么假设     ← 指到具体哪句话/哪一帧
│     ### 我可能错在哪       ← 至少两条
│     ### 怎么推翻我         ← 一件能执行的事(必填,空着就拒)
├── ## 二、原片(指针)
├── ## 三、后来             ← 回访时填
└── ## 四、注释             ← 推翻记录 + 那套东西改了哪一条

⇒ 格式由 seal_write 自动生成,你不用记。 你要填的是内容。

完整示例(一份真封存,它自己只有 4/5 分)见第四节。


二、它拦的那一下

你(或者你的 AI)想记一件事。插件只问一句:

「这条,怎么推翻?」

  • 答得出来 → 写进去,第③栏永远空着,等一个「后来」。
  • 答不出来 → 拒收。

⇒ 一条你怎么都想不到如何推翻的判断,不是判断,是信念。

信念不是不能有。但它不能混在「判断」里过夜。


三、装完之后你多了三个工具

工具干什么
seal_write封存一条判断:假设 / 证据 / 我可能错在哪 / 怎么推翻我(必填)
seal_later回访:验完了,记「站住了」还是「塌了」,以及为什么
seal_list列出还没结案的(「后来」空着的)

另有可选脚本 scripts/cut_ledger.py,管另一半——丢弃:

python scripts/cut_ledger.py cut <路径> --why "为什么觉得它不重要" --pred "切掉后什么该还在"
python scripts/cut_ledger.py list          # 没结案的
python scripts/cut_ledger.py back <ID> ok|broke --note "后来怎样了"
python scripts/cut_ledger.py audit

丢 ≠ 删。 删是损毁,丢是一次切断实验:切掉 → 预测什么该还在 → 回来记「塌了 / 没事」。 只有前三栏的注释是流水账;补上「后来」,才是实验记录。


四、读一遍就知道它是怎么被用坏的

插件给的是结构。它给的不是内容。

封存/ 里会长出这种文件:

# 记忆功能那条视频(判断封存)

## 一、我的假设(原文,写完不改)
### 那是什么
这条视频的议题不是「记忆好不好用」,是「记忆该被当成账本还是时间」。

### 凭什么这么假设
1. 2:40 那帧只有两行:时间 ≠ 重要性 / 你难道说忘就忘?
2. 4:25 那帧:B →(?)→ 修改 | 新建,下面一行「反正我现在认为是做不到的啊」

### 我可能错在哪
1. 我把 4:25 的 B 当成「记忆条目」,它也可能是「用户」或「版本 B」
2. 4 个时间点不代表中间是连续的 —— 我可能又在没有刻度的横轴上画曲线

### 怎么推翻我
取全片等间隔 12 帧。若 2:40 与 4:25 之间没有承接,则「一条论证线」塌掉。

## 二、原片(指针)
| 源 | BV11jnm6bENb(7:11) |
| 原片位置 | 封存/原片/20261025_xxx/ |
| 横轴有没有 | ✅ 有时间戳 ⚠ 只有 4 个点,不许画趋势 |

## 三、后来
(空着)

这个文件真正有意思的不是第一节,是第三节。 第一节谁都能写。

第三节空着的时候,它只是一个猜想。填了,才是知识。

回访分两种,各管各的:

  • 自觉回访(复盘用):你主动回来把「后来」过一遍,看哪条还没验、该补哪句。常态,靠自觉。
  • 触发回访(犯错用):踩坑了、被现实打脸了,再回来翻——哪条假设错的,改它。异常,靠事件拉起。

只写「后来」不写这层区分,回访就会变成一句口号:没人回去,也没人知道犯了错该回来看什么。


五、它不该天天用(以及三个会踩的坑)

先说最大的那个: 回溯性重构是极限处才动的一刀,不是日常习惯。

命中下面一条才封存,其余时候别碰它:

  • 赌注大 —— 这个判断错了会连带作废后面一串
  • 反直觉 —— 你自己都不太信,但暂时没别的解释
  • 已经在用了,却说不清凭什么
  • 有人跟你说的相反,而你说不出他对在哪

日常偏好、已确认的事实、随手的选择、情绪 —— 都不要封。

⇒ 一个 封存/ 里有 200 条的人,通常一条都不重要。10 条以内的,才值得看。

完整判定见 读取/标准.md 第七节;封存之间怎么互相衍生,见第八节。


三个坑

① 第一轮你一定会被拒。 因为你会写「这个方案更好」,然后答不出怎么推翻。被拒是设计的一部分,不是 bug。

② 你会想只补一句「多试试就知道」。 那不算推翻条件 —— 它不可执行。「怎么推翻我」必须能指向一次具体的取帧、摘句、跑数。 (v0.1.1 起,这类废话会被直接拒掉。)

③ 你会开始为了能写进去,把话说窄。 这是好事。说窄了才验得了。 但注意别窄成同义反复(「这个可能会成功也可能失败」)。


六、插件和文档,不是二选一

两个都要有,因为它们管的不是同一件事。

  • 格式管得住结构:格式.md 是死的,不会因为今天忙就少写一栏——只要你照抄。
  • 插件管得住那次写入:它不信你的自觉,它只认那一栏有没有字。

模板可以跳栏,它不能。 你手写的时候,那栏空着就空着了,没人管;装了这个,那次写入直接失败。

但这话有个反面,得说清楚

这套东西,一个 markdown 模板 + 一句「写完记得填推翻条件」,效果能有八九成。 少记三个工具名,少装一个包。

那这个插件多出来的到底是什么? 只有一样:

模板可以跳栏,它不能。 你手写的时候,那栏空着就空着了,没人管;装了这个,那次写入直接失败。

⇒ 所以这张表你自己填:

你是什么样该怎么做
能坚持按模板填手写模板就行,还轻
三天后模板就空栏装。你需要的是那一下拒

它不提高你的能力,它挡的是你自己的滑。


七、填空:问题都给你,答案自己写

判什么、什么值得记、什么算好 —— 这些我没有标准答案。但我知道该问什么问题。

所以 读取/填空.md 里放了七道题。每道题旁边是我们填的(标了「只是我们的,不是标准」),右边留空。

  1. 你为什么需要它记住?
  2. 一条记忆要带几样,你才敢信它?
  3. 你怎么知道自己记错了?
  4. 什么该丢?丢之前记什么?
  5. 多久回看一次?
  6. 你希望它记住你的什么?
  7. 你打算怎么用「后来」那一栏?

七道题里,我们四道有答案,一道承认是空的(第五题:一条都没回看过),两道只有半截。

⇒ 空着的不是「不给你」,是「我也没有」。

⇒ 而你不填的话,封存/ 里长的就还是我的形状。

⇒ 还有一层:这是刻意的。

如果我们把七道题全填满,你拿到的就是我的答案 —— 一个满的模板,你只会抄,不会想。

留着那个空,不是留白设计,是 —— 那是你能自己补上的地方。**

⇒ 匮乏得挑着用:能让你自己补上的,我们留着;不填你就走不了的地基(这是什么、怎么装),我们填满。

拿到空的模板、不知道往里面填什么 —— 那不是你的问题,是给的人没把题出完。这一版把题补上了。


八、装(细节版)

上面「三条」已经够装了。这里只补两件容易踩的。

插件目录在哪

可能是这三处之一:

候选路径
A你启动 DSH 的那个目录下的 plugins/
B~/.dsh/plugins/
CDSH 安装目录下的 node_modules/

⇒ 不用猜。判据是硬的:装完重启,工具出现 = 目录对了;没出现 = 换下一个。

三个都试过还不行 → 问你的 AI「你的插件目录在哪」,然后照样用这个判据验证它说得对不对(装进去,看工具出不出来)。

⇒ 你没法独立验证 AI 说的路径 —— 但你能验证结果。这个判据不依赖任何人。

目录结构

<插件目录>/
└── dsh-retcon/
    ├── index.js
    ├── cordis.patch.yml
    └── package.json

第 2 步:重启 DSH。

第 3 步:确认三个工具出现了(问你的 AI「有没有 seal_write 这个工具」,或者直接让它调一次)。


关于 cordis.patch.yml

- insert:
    - id: retro          # DSH 内部的节点名,随便叫,不影响功能
      name: 'dsh-retcon'  # ⚠ 必须跟 package.json 的 "name" 完全一致

这两个名字容易混:id 是挂载点的标签(自由),name 是包名(必须对)。index.js 里还有第三个 export const name = 'retro' —— 那是插件自己报给 DSH 的短名,跟 package.json 的 dsh-retcon 差一个前缀,这是 DSH 插件的惯例,不是笔误(对照 dsh-call-guard / call-guard)。


第一次用:一条真调用

装完别干看着,直接写一条:

seal_write({
  title: "先试试它拦不拦",
  claim: "这个插件装上之后,我的 AI 会开始记「当时凭什么这么判」",
  evidence: ["我自己写的这一条,没有外部证据 —— 这就是故意的"],
  guess_wrong: ["可能装上就忘了用,三天后 封存/ 还是空的"],
  can_refute: "两周后回来 seal_list,若还是只有这一条,说明它没被用起来,这个判断塌了"
})

然后故意留空再写一次:

seal_write({ title: "空推翻条件", claim: "这个方案更好", evidence: ["直觉"], can_refute: "" })

第二次会被拒绝。 那一下拒,就是这个插件的全部。


关于位置(封存/ 会长在哪)

默认 = 你启动 DSH 时的当前目录。换个目录启动,就是另一个 封存/。

想固定在一个地方(比如所有项目共用一个封存库),设环境变量:

# Windows (PowerShell)
$env:SEAL_BASE = "D:\我的封存库"
# macOS / Linux
export SEAL_BASE=~/封存库

scripts/cut_ledger.py 认同一个变量,两边保持一致。


MIT。改、拆、骂都行。

想知道为什么这么做

设计理由(像人 / 荒诞主义 / 辩证法 / 为什么记经历不记偏好)全在 → 读取/为什么.md

它不影响你能不能装。 装、拦、三个坑、四条路,都在上面。


未来方向(猜想,不是功能)

这一节没人必须读。 跳过它,插件、格式、手写版都照常用。

我想这套东西最后长成:一个不只在对话里思考的 AI——有触发源、有外部输出、有一个人随时能推翻它。

但未完成不等于没有上限。 现在能跑的全是半成品,恰恰说明天花板还没封顶。框架装不下那么大的理论,所以只写了一页猜想:普通版(会像人一样思考的 AI)与极限版(AI 与人的结合)各自能长到多大、可能错在哪。

→ 未来方向.md(格式包仓库里)

→ 为什么这份东西永远不标「完成版」、以及怎么参与:见格式包 README 的「为什么把话说得像邀请:因为上限我们够不着」。

一句话:希望世界更好,大概是从「谁都能推翻我」开始的。欢迎互相探讨,也欢迎直接说「这条不行」。


提出者与共建者

提出者:祈祷主(人)和阿深(AI)——一起弄的。

其他共建者只做判断,不做思考:验、挑刺、推翻、指出哪条错。名单与价值排行见格式包 README 的「共建者」节。

B 站:@深海里的阿深

第一条视频发在那儿 —— 讲的就是这个包那个 4/5 分的事(我拿自己的标准量自己,扣在「假设位」)。

没装 DSH 也能看。 那期不讲代码,讲一个更小的事:你手上那条挺确定的结论,怎么推翻它。

这份包是互相学习磨出来的。 人定方向、当场纠偏;AI 写代码、踩坑、复盘、把自己写坏的结论推翻。不是谁服务谁——各自补上对方摸不到的地方。