🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

技能自进化 xinyanglii/dsh-skill-curator

DeepSeek Harness
xinyanglii10 天前有提交已提供中文文档扫描:含敏感能力

自动复盘对话并沉淀可复用技能,保持技能库整洁

30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/22 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add xinyanglii/dsh-skill-curator
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · skill
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 10 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令
查看扫描证据(共 2 处,展示前 2 条)
  • 执行外部命令来自配置/变量
    index.js:142
    child = spawn(command, args, { env, stdio: ['pipe', 'pipe', 'pipe'] })
  • 执行外部命令来自配置/变量
    preset.js:108
    child = spawn(cfg.python, [cfg.skillctl, ...args], {
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

为 DeepSeek Harness 提供 Hermes 风格的进程内后台技能学习,维护者 Xinyang Li <lxymario@gmail.com>。

README

由 DeepSeek 最新模型翻译生成
dsh-skill-curator Hermes 风格的进程内后台技能学习,面向 DeepSeek Harness。 它监视已结束的对话,在受限的子代理里复盘这些对话,通过带校验的命令行写入类级技能,用确定性的生命周期管理器保持技能库整洁,还附带一个只读的仪表盘面板。 它做什么 - 回合后复盘。 按根会话统计模型迭代次数(每个助手步骤算一次,一个步骤里的并行工具调用只算一次),跨回合累计。已完成的回合越过阈值时,它在同一进程里启动一个复盘子代理。 - 受限的复盘者。 子代理运行在内置的 skill-review 智能体预设下:一个角色设定,加上 skill_list / skill_read / skill_manage。没有 shell,不能直接写文件,没有网络工具。 - 带校验的写入。 每次写入都走 skillctl(内置于 scripts/):校验名称和 frontmatter,写入前做 SHA 读取校验,限制支持文件的路径范围,账本只追加并保存 blob,删除改为归档。 - 生命周期管理器。 每 curatorEveryDays 天运行一次 skillctl curator --apply:active → stale(14 天未使用)→ archived(30 天未使用)。只归档,可回滚。 - 可选的合并流程。 默认关闭。
展开完整文档(README 剩余 1 节)
dsh-skill-curator

Hermes 风格的进程内后台技能学习,面向 DeepSeek Harness。

它监视已结束的对话,在受限的子代理里复盘这些对话,通过带校验的命令行写入类级技能,用确定性的生命周期管理器保持技能库整洁,还附带一个只读的仪表盘面板。

它做什么

- 回合后复盘。 按根会话统计模型迭代次数(每个助手步骤算一次,一个步骤里的并行工具调用只算一次),跨回合累计。已完成的回合越过阈值时,它在同一进程里启动一个复盘子代理。
- 受限的复盘者。 子代理运行在内置的 skill-review 智能体预设下:一个角色设定,加上 skill_list / skill_read / skill_manage。没有 shell,不能直接写文件,没有网络工具。
- 带校验的写入。 每次写入都走 skillctl(内置于 scripts/):校验名称和 frontmatter,写入前做 SHA 读取校验,限制支持文件的路径范围,账本只追加并保存 blob,删除改为归档。
- 生命周期管理器。 每 curatorEveryDays 天运行一次 skillctl curator --apply:active → stale(14 天未使用)→ archived(30 天未使用)。只归档,可回滚。
- 可选的合并流程。 默认关闭。开启后,同一次运行会再启动一个受限子代理,把重叠的、由管理器托管的技能合并成伞形技能,把过窄的深度内容降级为支持文件,并归档被吸收的同类技能,同时给出明确的 absorbed_into 映射。
- 使用遥测。 技能加载记录汇总到 <skillsRoot>/.dsh-usage.json,管理器读的也是这个文件。
- 仪表盘。 一个侧边栏面板(Skill Curator),背后是两条仅限回环地址的 GET 路由:技能库、复盘历史、14 天活动,以及一个可折叠的技术信息区。
- 自检金丝雀。 首次激活时启动一个金丝雀子代理,它必须解析出预设并调用 skill_list,这样配置有问题时,在第一次真实复盘之前就会明显失败。

工作原理

session events ──► iteration counter (root sessions only, persisted)
│
completed turn, counter ≥ threshold
▼
skillctl review --session <id> (build prompt from the transcript)
▼
subagent activation under the skill-review preset
(persona + skill_list / skill_read / skill_manage only)
▼
skillctl manage create|patch|write_file|archive
(validate → write → ledger → usage)
▼
review.finished / review.failed → state.json → dashboard

插件本身从不修改 SKILL.md,也从不向浏览器暴露写接口。

环境要求

| 要求 | 说明 |
| DeepSeek Harness | 基于 0.2.1-rc.2 开发;bundle 就是普通的配置档补丁层。 |
| Node.js | 宿主插件要求 >= 20。 |
| Python | PATH 中需有 >= 3.9(也可设置 python / DSH_CURATOR_PYTHON)。 |
| zstd | 用 zstdcat 读取会话日志,生成转录和用量扫描。安装方式:brew install zstd 或 apt install zstd。 |

安装

DSH bundle 是一个带 dsh.bundle.patch 层的包。安装包并不会激活它,还要把它加进配置档的 bundle 列表。

从 GitHub 安装 bash

1. Install the package into the profile (creates ~/.dsh/profiles/<name>/node_modules)

dsh plugin --profile desktop add github:xinyanglii/dsh-skill-curator

2. Activate the bundle: add "dsh-skill-curator" to dsh.profile.bundles in

~/.dsh/profiles/desktop/package.json

3. Restart the app once so the browser half is loaded.

要装到别的运行时,改用 --profile web(或其他配置档)。dashboard 只在 Web/Desktop 配置档里出现;headless 和 ACP 配置档没有浏览器界面。

从本地检出安装 bash
git clone https://github.com/xinyanglii/dsh-skill-curator.git
dsh plugin --profile desktop add /absolute/path/to/dsh-skill-curator

then add "dsh-skill-curator" to dsh.profile.bundles

验证 bash tail ~/.dsh/skills/.dsh-curator/plugin.log # plugin.started / dashboard.registered
curl http://127.0.0.1:<port>/skill-curator/api/state

端口是配置档的 Web 宿主端口;桌面应用在内部做代理。

配置

在配置档的 cordis.patch.yml 里按行 id(skill-curator)覆盖任意值: yaml
- id: skill-curator
config:
nudgeAfterToolIters: 10
python: /usr/bin/python3

| 字段 | 默认值 | 含义 |
| enabled | true | 总开关。 |
| skillsRoot | ~/.dsh/skills | 技能库根目录(所有配置档共用)。 |
| skillctl | 包内 scripts/skillctl | 编写用命令行,负责提示词和写入。 |
| python | python3 | skillctl 的解释器(DSH_CURATOR_PYTHON 同样有效)。 |
| stateDir | <skillsRoot>/.dsh-curator | 存放 state.json 和 plugin.log。 |
| nudgeAfterToolIters | 10 | 累计多少次模型迭代后触发一次审查。 |
| reviewEnabled | true | 是否触发审查。 |
| reviewPreset | skill-review | 给子代理挂载的智能体预设。 |
| reviewProvider | spawn | 子代理使用的服务商。 |
| reviewAgentProvider / reviewAgentModel | 空 | 显式指定审查路由;留空则沿用父会话当前的实时路由。 |
| reviewTimeoutMs | 900000 | 单次审查的硬超时。 |
| maxTranscriptChars | 40000 | 传给 skillctl review 的转录预算。 |
| curatorEnabled | true | 是否运行确定性的生命周期管理器。 |
| curatorEveryDays | 7 | curator 两次运行之间的最小间隔。 |
| staleDays | 14 | 技能多久没被使用就算过期。 |
| archiveDays | 30 | 过期技能再闲置多少天就归档。 |
| consolidateEnabled | false | 在确定性 curator 之后,是否再跑一遍可选的 LLM 伞形构建。 |
| consolidatePreset | skill-consolidate | 为 consolidation 子进程挂载的预设。 |
| consolidateTimeoutMs | 1800000 | 单次 consolidation 运行的硬超时。 |
| consolidateBackupKeep | 2 | consolidation 运行前保留的整树快照数量。 |
| selfTestOnFirstRun | true | 首次激活时跑一次性的金丝雀检查。 |
| maxSessions | 200 | 状态里保留的会话计数记录条数。 |
| logMaxBytes | 2097152 | plugin.log 超过这个大小就轮转。 |

技能生命周期与目录结构

~/.dsh/skills/
├── <skill>/SKILL.md # skills themselves
├── .dsh-usage.json # use counts, last-used, state, provenance
├── .curator_ledger.jsonl # append-only write ledger
├── .ledger/blobs/ # content blobs for rollback
├── .curator_backups/ # tree snapshots
├── .archive/ # archived skills (never deleted)
└── .dsh-curator/ # state.json, plugin.log

skill_manage 可用的动作有:create、patch、write_file、archive。
这里刻意不提供删除动作;skillctl restore 能把归档的技能找回来。

写入限制

skillctl 把这些限制当作硬错误返回给 reviewer;技能内容永远不会被悄悄截断。
写入被拒后,技能库保持原样,reviewer 会拿到实测大小和限制值,于是它可以拆分技能,或者把细节挪进 references/ 再重试。

| 项目 | 限制 | 行为 |
| SKILL.md(整个文件) | 100,000 字符 | 硬错误 |
| 单个附属文件 | 1 MiB | 硬错误 |
| description | 500 字符 | 硬错误(超过 500 时 DSH 会截断);建议的路由长度为 120 |
| SKILL.md 建议值 | 24,000 字节 | 仅警告:「should split into references/」 |

这些是写入路径上的限制。插件里唯一的截断发生在 review 的输入转录(maxTranscriptChars,默认 40,000 字符),那是提示词预算,不是技能内容限制。
技能的注入与读取行为归 DSH 自己管。

consolidation 阶段(可选)

技能库会碎成许多狭窄的同级技能,任何单次 review 都看不全。consolidation 阶段就是 Hermes 的答案:多开一个后台子进程,读遍整个 curator 管理的技能库,构建伞形技能。

- 默认关闭。 开启后每次 curator 运行都要多一次模型调用,还会重写技能内容,所以必须显式开启。
- 在确定性的过期/归档转换之后运行,最多每 curatorEveryDays 跑一次。
- 候选是 curator 管理的技能(created_by: agent),不含 pinned 技能;用户编写或安装的技能绝不触碰。
- 子代理拿到同样受限的工具面(skill_list、skill_read、skill_manage),外加一份专用提示词。它可以并入已有伞形技能、新建一个,或把深度内容降级到 references//templates//scripts/。
- 每个归档都必须声明 absorbed_into=<existing umbrella>;skillctl 会校验伞形技能存在,并把映射记进账本和使用记录。缺了它,归档会被拒绝。
- 先做整树快照(skillctl backup --keep N);运行结果写入 <stateDir>/curator-runs/<timestamp>/ 下的 run.json 和 REPORT.md,内容包括合并/裁剪分类、新增技能、状态迁移和子代理的最终总结。归档仍可用 skillctl restore <name> 恢复。
- 手动触发(等价于 Hermes 的 curator run --consolidate):skillctl curator --request-consolidation 写入一个请求标记;插件在下一个完成的回合消费它,跑一轮,即使 consolidateEnabled 为 false 也照跑。
- 和 Hermes 不同,DSH 没有 cron 任务里的技能引用,所以没有 cron 重写这一步。

仪表盘

- 侧边栏入口 Skill Curator → 全宽主面板。
- GET /skill-curator/api/state、GET /skill-curator/api/skill?name=<name>、POST /skill-curator/api/config,后者用于可编辑的设置项。
- 所有路由仅限回环地址;GET 路由不暴露 <skillsRoot>/<name>/SKILL.md 之外的任何内容。POST 路由只接受 JSON,按固定 schema 校验每个键,并通过 Host 的 configEditor 写入当前配置档补丁(实时重载);路径、python、skillctl 以及插件/预设身份都不能从浏览器写入。

安全模型

- 审查子代理只能看到三个技能工具;skill-review 预设作用域以增量、防御性的方式拒绝其他所有全局工具。
- 审查者会收到对话记录(上限 maxTranscriptChars)和技能列表;除非另行覆盖,它跑在被审查会话相同的模型路由上。如果某个会话的记录不能离开你已在使用的模型服务商,就不要在该会话上启用这个插件。
- skillctl 以当前用户身份运行,只写入 skillsRoot 之下(以及其下的归档、账本、备份和状态)。它从不读取凭据文件。
- HTTP 路由仅限回环地址,不暴露技能目录之外的任何文件。

测试 bash
npm test

- node --test test/.test.js 覆盖清单、bundle 补丁、仪表盘路由(200/400/403/405、路径穿越、dispose)、预设工具注册、针对假 skillctl 的参数校验、合并报告构建器,以及浏览器端注册。
- python3 -m unittest discover -s test -p 'test_.py' 覆盖内置的 skillctl:创建、带 SHA 校验的补丁、受限支持文件、归档/恢复、校验、合并候选/提示词、absorbed_into 守卫、list --json,以及审查者提示词构建器。
- CI 在 Node 20/22 上运行,同时使用 Python 3.11。

兼容性说明

- 计数方式与 Hermes 的 _iters_since_skill 一致:每次模型迭代计一次,跨轮次累加,在轮次结束时检查。Hermes 单独的 memory nudge 计数器在这里没有实现;长期记忆归你的 memory 插件管。
- 不跳过 cron/定时会话。只统计根会话,review 子会话不计入。
- 整合流程沿用 Hermes 的防护结构(仅限 curator 管理、跳过 pinned、只归档且带校验过的 umbrella、运行前快照),但不做它的 cron 引用重写,因为 DSH 的调度不携带结构化技能引用。
- 对已加载的包说明符增删 dsh.client 元数据,需要重启 App。已安装 bundle 的纯代码改动,可以删掉再重装 bundle 来重新加载。

License

MIT © 2026 dsh-skill-curator contributors
预览分享卡片长什么样 ↓xinyanglii/dsh-skill-curator
分享 · DeepSeek Harness Hub
xinyanglii/dsh-skill-curator

自动复盘对话并沉淀可复用技能,保持技能库整洁

回到顶部