PKUfudawei/dsh-capability-menu
dsh-capability-menu 是一个可独立安装的 Cordis 插件(服务端 @daweifu/capability-menu,前端配套 @daweifu/capability-menu-web),为 DeepSeek Harness 提供统一的能力目录(ctx.meta)、两个元工具(metasearch / metainvoke),并以 Exposed / Progressive / Blocked 三档管理所有能力的暴露程度和执行方式。配套前端「能力菜单」管理 tab(MCP tools / Skills 两栏,分类可点击循环切换)让你在设置页直接调整这些策略。它不修改上游源码,通过 Cordis 插件机制与 Harness 组合进同一个运行时——核心的智能体、模型、工具、会话、Web UI 与插件生态都来自上游项目。
catalog 简介 / catalog descriptioncatalog description:Unified capability menu for DeepSeek Harness: manage exposure level (context footprint) and execution mode of MCP tools & skills via Exposed/Progressive/Blocked tiers.
项目介绍Project Overview
dsh-capability-menu 是 DeepSeek Harness 的 Cordis 插件,提供统一能力目录与 meta_search / meta_invoke 元工具,把 MCP 工具与 Skill 按 Exposed、Progressive、Blocked 三档管理暴露程度和执行方式,适合工具与技能数量多、上下文受限的代理场景;通过配置规则可把低频能力按需发现并调用,节省 token。需注意:原生工具(bash 等)不进入目录,务必在 tools.exposed 中保活,否则一旦被裁剪将完全不可调用。
dsh-capability-menu is a Cordis plugin for DeepSeek Harness that provides a unified capability registry and the meta_search / meta_invoke meta-tools, managing MCP tools and Skills across Exposed, Progressive, and Blocked tiers for context footprint and invocation control. It suits agents handling many tools or skills under tight token budgets by archiving low-frequency capabilities behind on-demand discovery. Caveat: native tools such as bash are not cataloged, so keep them listed in tools.exposed; otherwise projection can hide them with no way to invoke them.
请帮我了解并安装插件:【dsh-capability-menu】【https://github.com/PKUfudawei/dsh-capability-menu】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add @daweifu/capability-menu
把 PKUfudawei/dsh-capability-menu 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
dsh-capability-menu
为 DeepSeek Harness 提供统一的能力菜单管理 Tools 和 Skills 的暴露水平 (上下文占用大小) 和执行方式
海量tools/skills也不会塞满一次请求, 节省token和上下文
MCP 工具与 Skill 按 exposed/progressive/blocked 三级管理暴露程度和执行方式
dsh-capability-menu 是一个可独立安装的 Cordis 插件(服务端 @daweifu/capability-menu,前端配套 @daweifu/capability-menu-web),为 DeepSeek Harness 提供统一的能力目录(ctx.meta)、两个元工具(meta_search / meta_invoke),并以 Exposed / Progressive / Blocked 三档管理所有能力的暴露程度和执行方式。配套前端「能力菜单」管理 tab(MCP tools / Skills 两栏,分类可点击循环切换)让你在设置页直接调整这些策略。它不修改上游源码,通过 Cordis 插件机制与 Harness 组合进同一个运行时——核心的智能体、模型、工具、会话、Web UI 与插件生态都来自上游项目。
快速安装
前置:已安装 Node.js 与 dsh CLI(dsh plugin 内部会转发给 pnpm)。
服务端与前端两个包均已发布到 npm(@daweifu/capability-menu 与 @daweifu/capability-menu-web):
dsh plugin --profile web add @daweifu/capability-menu
dsh plugin --profile web add @daweifu/capability-menu-web
第一条安装服务端插件(registry / search / invoke / policy 四个 entry),第二条安装前端「能力菜单」tab。装完后在「设置 / 通用设置」下即可看到「能力菜单」。
验证(应看到本包自己的 patch 层):
dsh --profile web --dump-config | grep -E 'capability-menu'
# == @daweifu/capability-menu
- id: capability-menu-registry
name: '@daweifu/capability-menu/registry'
- id: capability-menu-search
name: '@daweifu/capability-menu/search'
- id: capability-menu-invoke
name: '@daweifu/capability-menu/invoke'
- id: capability-menu-policy
name: '@daweifu/capability-menu/policy'
卸载:
dsh plugin --profile web remove @daweifu/capability-menu
dsh plugin --profile web remove @daweifu/capability-menu-web
能力模型
Capability 是上位概念,Tool / Skill 是不同类型的 capability,不是「两种工具」:
| kind | 对 Agent 提供 | action | 备注 |
|---|---|---|---|
tool |
执行一个动作(MCP 工具) | execute |
由 ctx.tools 索引 |
skill |
某类任务的方法/流程/知识 | load |
由 ctx.skills 索引 |
execute/load是 capability 对外声明的规范 action:tool 的execute在底层由ctx.tools.execute走完整工具管线执行;skill 的load加载方法/流程正文。当前版本(0.1.0)只有这两种 kind 与两种 action。
模型获得两个元工具:
| 工具 | 作用 | 对应 entry |
|---|---|---|
meta_search |
检索能力目录(Tool / Skill),list/detail 双模式 | @daweifu/capability-menu/search |
meta_invoke |
统一执行面:Tool 真执行(走完整 ctx.tools 管线)+ Skill 加载 |
@daweifu/capability-menu/invoke |
边界:Command / Prompt / Memory 不是可发现可调用的能力,不进 registry。需要查知识/文档时直接用底层检索类 MCP 工具(如
mcp__km__search),它们和其他 MCP 工具一样被meta_search编目、被meta_invoke转发。边界:非
mcp__前缀的原生工具(bash/read/write/edit/read_image/glob/grep等)不进 registry——不被meta_search编目、不被meta_invoke派发、也不出现在能力管理列表中。它们只受投影链裁剪可见性;且因不可meta_invoke,一旦被投影掉就真的不可调用,所以请保留在tools.exposed保活(见下方配置示例)。
核心:Exposed / Progressive / Blocked 三档能力策略
所有能力(Tool 与 Skill)按 暴露程度(模型在上下文中看到什么)与 执行方式 分为三档:
Tools / Skills 三档暴露与执行对照
| 档位 | 能力 | 暴露方式(模型视野) | 发现 | 执行方式 |
|---|---|---|---|---|
| Exposed | tool | 完整 schema 进 assembly.tools → 模型请求 tools payload,每步可见 |
无需发现(已常驻) | 模型直接调用,运行时走完整 ctx.tools 管线 |
| skill | 名字+描述进 <available_skills> 目录(正文不在目录) |
无需发现(已常驻) | skill 工具按需加载正文(渐进加载) |
|
| Progressive | tool | 不进 payload(零上下文成本) | meta_search list 返回 name+summary |
meta_invoke 执行(走 ctx.tools.execute,管线完整);或 detail 拿 schema 后直接调 |
| skill | 不进 <available_skills> 目录 |
meta_search 检索(progressiveSkillCatalog 条目) |
meta_invoke 按 path 加载 SKILL.md 正文 |
|
| Blocked | tool | 不进 payload | meta_search 不返回 |
meta_invoke 拒绝,直接调用被投影排除 |
| skill | 不进目录 | meta_search 不返回 |
meta_invoke 拒绝 |
Exposed / Progressive 就是「高频 vs 低频」的具象化。 Exposed = 常驻、随叫随到的高频能力(拿 payload/目录体积换单跳可靠);Progressive = 归档进目录、用到才翻出来的低频能力(省 token、按需取用);Blocked = 明确禁止使用。它是由你配置的驻留策略(
tools.exposed/tools.progressive/tools.blocked规则),而不是按使用次数自动统计的标签。上表的 tool 档位均指
mcp__编目工具;原生工具不参与三档管理,只能以tools.exposed保活可见性(见「能力模型」边界说明)。
配置(在 @daweifu/capability-menu/policy 上)
- insert:
- id: capability-menu-policy
name: '@daweifu/capability-menu/policy'
config:
tools:
exposed:
- execute_cmd
- get_session_context
- search_kb
- 'mcp__gongfeng__*' # 通配:该 server 下全部 Exposed
progressive:
- 'mcp__*' # 该规则覆盖所有未显式列出的 MCP 工具
- 'server:km:*' # 按 server 前缀批量 Progressive
blocked:
- 'mcp__secret__*' # 明确禁用(优先级最高,压过 Exposed)
skills:
exposed:
- debugging
- coding
progressive:
- legacy_skill # 显式 Progressive(未列出即默认 Exposed)
blocked:
- forbidden_skill
metaTools:
- meta_search # 恒 Exposed,不可被 Blocked
- meta_invoke
progressiveSkillCatalog: ~/.dsh/progressive-skills.yaml # Progressive skill 的 name+description+path 目录
规则优先级(命中即停):blocked 精确 > blocked 通配 > exposed 精确 > exposed 通配 > progressive 精确 > progressive 通配 > 默认 Exposed。blocked 压过 exposed(控制语义)。meta 工具(meta_search/meta_invoke)恒为 Exposed,出现在 blocked 里会 fail loud。
tools.exposed里列原生工具名(execute_cmd等)是保活语义:原生工具不进能力管理编目(能力列表里看不到它们),但投影链会裁剪其可见性,列在这里保持模型直接可见可调。不要因为「它不在能力管理里」就把它从 exposed 移除——一旦被progressive/blocked规则覆盖,模型既看不到也调不到。
默认(不配置 policy)
- 不挂
capability-menu-policy→ 全部工具/技能照旧可见(不投影)。 - 挂了 policy 但没有任何规则 → 全部能力默认 Exposed(
classify兜底),不投影、不隐藏。需要把低频能力归档进目录时,显式配置progressive(或blocked)规则把它们从模型视野中移出。
Progressive skill
Progressive skill 的 name + description + path 汇总进独立 YAML(progressiveSkillCatalog),由 registry 索引、meta_search 检索;完整 SKILL.md 由 meta_invoke 按需加载(ctx.skills 未注册时按 YAML 的 path 读取)。Progressive skill 不进固定上下文。
能力菜单(前端管理 tab)
安装 @daweifu/capability-menu-web 后,「设置 / 通用设置」下出现「能力菜单」tab(位于「模型」与「插件」之间),用于可视化查看和调整上面的三档策略,改动即时生效、无需重启:
- 两栏:MCP 工具(按 server 分组、可折叠)与 Skills。
- 三态圆点 + 统计:每个能力带一个分类圆点(实心 = Exposed、半实心 = Progressive、空心 = Blocked),栏顶部显示各档数量统计。
- 点击循环切换:点击能力旁的圆点或分类计数即可循环切换分类;MCP 工具还可以点击整行查看模型侧工具定义(name / description / parameters)。
- Skills 目录浏览:展开某个 skill 可浏览其文件目录,点击文件预览 SKILL.md 等正文内容。
License
本项目遵循 Apache License 2.0。
nexu-io/open-design
ruvnet/ruflo
amruthpillai/reactive-resume
esengine/DeepSeek-Reasonix
volcengine/OpenViking
Molunerfinn/PicGo
titanwings/distilly
titanwings/colleague-skill