实测:用 --patch 停掉 Skill 那 4 件,整棵配置树只多 1 行,而界面面板(ui-skill)还挂着——删掉能力,删不掉按钮。
4.1.1 讲了 Skill 长什么样,这一节动手把它关掉——这是全书第一个真正的动手实验。
一、实验怎么做
用 --patch 传一份只有 4 行的覆盖文件,把 Skill 那几件全部 disabled: true;然后加 --dump-config 把配置树打出来,和基线做 diff。
为什么不真去删文件?因为要验证的是【能力从哪来】,不是【文件删了会不会报错】——补丁是可逆的,也不会污染安装目录。
这也是全课推荐的实验方式:用补丁做加减法,不动本体。
二、实测结果:只多 1 行
1260 行的配置树,diff 只有一处:- id: skill 下面多了一行 disabled: true。
为什么只多 1 行?因为另外 3 件(filesystem/badge/tool-skill)在 web profile 里本来就是停用的。
这说明一件事:你看到的【默认状态】已经是别人挑过一轮的结果——web 这个产品形态只留了技能的本体。
三、能力没了,按钮还在
同一份配置里,ui-skill 依然挂着、没有被停用。
所以问题的答案是:面板还在,能力没了。界面上的技能入口照旧显示,但它背后那套能力已经不在会话里了。
这正是 4.1.1 那句【面板归面板,能力归能力】的实测版:客户端渲染件和提供能力的插件,是两组完全独立的包。
四、这个实验证明了什么
三件事:
- 能力是可撤销的:一次启动一份补丁,不影响下次启动。
- 停用是分层的:你停的是本体,别人早就停了另外三件。
- 界面会骗人:判断能力在不在,看配置树,别看界面。
最后一条对日常排查特别有用:遇到【怎么没反应】,先 dump 配置树看那一件在不在。
五、动手 Demo:动手实验——把 Skill 关掉,能力还在吗
下面是真跑的原文(命令 + diff 结果):
# 1) 写一份只有 4 行的补丁
cat > exp_skill_off.yml <<'EOF'
- id: skill
disabled: true
- id: skill-filesystem
disabled: true
- id: skill-badge
disabled: true
- id: tool-skill
disabled: true
EOF
# 2) 带着补丁 dump 配置树,和基线对比
dsh --profile web --patch ./exp_skill_off.yml --dump-config > patched.txt
diff baseline.txt patched.txt
# 3) 看界面那一侧还在不在
grep -A1 "ui-skill" patched.txt
实跑输出:
--------------------------------------------------------------------
动手实验——把 Skill 关掉,能力还在吗
--------------------------------------------------------------------
第一步,写一份只有 4 行的补丁:
- id: skill
disabled: true
- id: skill-filesystem
disabled: true
(skill-badge、tool-skill 同理)
然后是启动时挂上这个补丁、把配置树打出来做对比。整棵 1260 行的树,
只多出这样一处差异:
------------------------------------------------------------------
190a191
> disabled: true
------------------------------------------------------------------
就 1 行。为什么只有 1 行?因为另外 3 件(filesystem/badge/tool-skill)
在 web profile 里本来就已经是停用状态了——
也就是说,web 这个产品形态只留了技能的本体在跑。
再看界面那一侧,同一份配置里:
- id: ui-skill
name: '@deepseek-ai/dsh-client-ui-skill' <- 没有 disabled
结论:面板还挂在界面上,能力已经不在了。
【删掉 Skill】删掉的是能力,不是那个按钮。
diff 里唯一的变化就是那行 disabled: true,再加一行标出【这个补丁来自哪个文件】的出处注释。
改的是能力,不是按钮——ui-skill 依然没有 disabled。
记住这个实验方法:补丁做加减法、dump 做对比——后面 4.7 还要用一次。
30 秒实验
- 在自己机器上跑一遍这个实验,把 diff 的完整输出存下来。
- 换个对象再试一次:把 tool-web 停掉,看配置树里少了什么。
- 不看界面,只靠配置树回答:当前这个 profile 里,技能能力到底开着没有?
常见误区
- 错误:要验证能力有没有,删掉插件文件最直接。——纠正:用补丁停用更干净——可逆、不污染安装目录、还能看见出处。
- 错误:配置树diff 只多 1 行,说明这次改动没用。——纠正:另外 3 件早就被停用了,本体这一下才是真正关掉整条链的那一刀。
- 错误:界面上技能入口还在,说明能力还在。——纠正:ui-skill 是渲染件;能力在不在,只看配置树。
自测三问(点开对答案)
1. 为什么用补丁而不是删文件做这个实验? —— **补丁可逆、不污染安装目录**;要验证的是能力从哪来,不是文件删了会不会报错。 2. 为什么 diff 只有 1 行? —— 因为 web profile 里另外 3 件本来就是停用的——**默认状态已经是别人挑过一轮的结果**。 3. 实验得出的三件事是什么? —— 能力可撤销、停用分层、**界面会骗人**(判断能力看配置树)。- ☐ 下一节(4.2.1 注册也有生命周期)
相关笔记
- Skill 路径与默认启用方式 —— 上一篇讲这一层长什么样
- Scope Context:会话级能力从哪里来 —— 停用与作用域是两套开关
- 观察 composition 的【差分】 —— 同样是【拉出来做对比】的方法
- 🐳 DeepSeek Harness · 索引