前言¶
DeepSeek Harness(DSH)通过 Skill 扩展智能体能力。Skill 数量一多,模型或用户界面仍可能误触发不合适的 Skill;若只能改预设或删包,又会影响其他账号或项目。下面介绍社区插件 dsh-skill-preferences,在 Settings → Skills 里按全局、用户、工作区三层持久化禁用列表,并在运行时通过 Skill 提供方策略抑制已禁用的 Skill。
这是什么¶
dsh-skill-preferences(维护者 zc679087)是发布在 npm 的 DSH Web 侧插件,当前资料中的版本为 0.2.2,许可证 MIT。它使用 DSH 公开的 WebServer、Auth、settings、skills、Agent 与 client slot 等 API,无需改 DSH 源码或内置预设;偏好保存在宿主持久化命名空间 skill-preferences 中。社区目录分类为 admin-security,目录页:skillhub.cn/plugins/zc679087/dsh-skill-preferences。SkillHub 为独立社区站点,与 DeepSeek / 幻方无官方从属关系。
核心功能¶
三层偏好¶
在 Settings → Skills 中选择一层,搜索 Skill 并切换开关。开关只反映当前选中层的设置;「Current session」状态与层标签展示当前账号与工作区下的合并结果。
| 选中层 | 开关修改对象 | 作用范围 |
|---|---|---|
| Global | 全局 disabled 列表 | 所有账号与工作区 |
| This user | 当前登录账号的 disabled 列表 | 该账号在各工作区 |
| This workspace | 当前项目根的 disabled 列表 | 在该项目中工作的所有账号 |
限制按 global → user → workspace 取并集:在上层被禁用的 Skill,下层无法单独「启用」;在某层启用只会清除该层的限制。被继承限制的条目仍可见,并说明应改哪一层。用户层在多用户模式下需已认证账号;工作区层需有活动会话与工作目录。插件用最近的 .git、.dsh 或 .agents 项目根,若无标记则用当前工作目录。
持久化与权限¶
偏好示例结构(摘自 README):
skill-preferences:
disabled: [pdf]
hints: {}
byUser:
'<account-userId>':
disabled: [cad]
hints: {}
byWorkspace:
'/absolute/project/root':
disabled: [imagegen]
hints: {}
hints 保存禁用时的描述与来源,不参与 enforcement。用户键为账号 userId,非登录名。多用户模式下,仅宿主 admin 角色可见全局选择器并修改全局偏好;普通用户的全局写请求会被拒绝。0.2.2 起全局选择与全局写入限定为管理员;已废弃的 adminUsers 字段仅为兼容旧配置,不再授权。匿名本地模式仍保留全局访问;有认证账号时按宿主角色判断。工作区写入对普通用户仍可用;普通用户仍可在 Skill 上看到「Globally disabled」状态说明,但不等于能编辑全局层。
写入串行化、成功前即持久化,并保留其他层;保存后会失效插件 Skill 目录缓存,无需重启 DSH。
HTTP 接口¶
插件提供两个 JSON 端点,多用户请求需 Authorization: Bearer <token>;浏览器使用当前 DSH token。
| POST 路径 | JSON body |
|---|---|
/plugin-skill-preferences/list |
{ "query": {} } |
/plugin-skill-preferences/setEnabled |
{ "change": { "name": "pdf", "enabled": false, "target": "workspace", "cwd": "/project" } } |
query 与 change 可带可选 cwd、presetId;target 为 global、user 或 workspace,默认 global;工作区写入需 cwd。成功响应形如 { "ok": true, "value": { "skills": [], "userAvailable": true, "isAdmin": true } };错误为 { "ok": false, "error": { "code": "...", "message": "..." } }。
运行时 enforcement¶
插件注册完整 Skill 提供方,通过 model/user 调用策略抑制已禁用 Skill。Live Agent 绑定持久会话所有者,使用户目录隔离且不改共享宿主缓存;偏好变更在下一步 Agent 生效。需注意:保存后 DSH 根路径建议菜单可能仍是旧列表,需刷新页面;会话尚无 Live Agent 时,原生 skill.list 可能未应用用户层抑制,而设置 API 与 Live Agent 执行路径会应用三层;同一 Web profile 只应挂载一次,避免重复 settings 命名空间。
安装与启用¶
在 Web profile 从 npm 安装指定版本:
dsh plugin --profile web add dsh-skill-preferences@0.2.2
重启 DSH Web 并刷新浏览器。包内 bundle 会自动挂载宿主插件并暴露浏览器模块,无需再写 dsh-skill-preferences/preset 条目。
本地 tgz 安装:
dsh plugin --profile web add /absolute/path/dsh-skill-preferences-0.2.2.tgz
若手动管理 profile,在 $DSH_HOME/profiles/<profile>/ 用该 profile 的包管理器安装,并在 cordis.patch.yml 中插入(不要与 bundle 安装并存):
- insert:
- id: skill-preferences
name: 'dsh-skill-preferences'
升级或卸载重装后,已有偏好一般保留,除非单独删除对应 settings。
典型用法¶
- 安装 0.2.2 并重启 Web 后,打开 Settings → Skills。
- 若需全站禁用某 Skill,选 Global,搜索名称并关闭开关。
- 若仅当前账号不需要某 Skill,选 This user 再关闭。
- 若仅当前仓库禁用(例如避免误触
imagegen),选 This workspace,确认工作区根正确后关闭对应 Skill。 - 查看列表中的层标签与「Current session」,确认合并结果是否符合预期;若根路径建议未更新,按页面提示刷新浏览器。
脚本或集成可调用 /plugin-skill-preferences/list 拉取合并状态,或用 /plugin-skill-preferences/setEnabled 按层写入;反向代理部署时,需在插件 composition 的 http.trustedHosts 中配置精确的 host[:port]。
适用场景与注意¶
- 适用:多 Skill 的 DSH 部署;多用户或多项目共用同一宿主,又需要按人、按仓关闭 Skill 以防误触发;需要与 admin-security 类管理能力对齐的全局策略。
- 版本:资料明确安装 0.2.2;peer 依赖为安装约束,不保证与任意未来 DSH commit 兼容。发布验证针对未修改的宿主 commit
4d214f38c9fe03aefdfb9d900219f64f4ca85183,详见仓库 0.2.2 verification report(路径以仓库为准)。 - 安全:插件以当前 DSH 进程权限运行,安装前请阅读 GitHub 源码与 LICENSE,确认符合你的安全与合规要求。
结尾¶
dsh-skill-preferences 把 Skill 的启停从「改预设或删包」变成可审计的三层偏好,并在 Agent 侧实际抑制调用,适合需要精细控 Skill 暴露面的 DSH 环境。目录页:https://www.skillhub.cn/plugins/zc679087/dsh-skill-preferences;源码与完整说明:https://github.com/zc679087/dsh-skill-preferences。