扩展怎么被加载

项目覆盖全局的同名规则、各类扩展的读取位置,以及「改完什么时候生效」的两条不同路径。

  • 技能:先看当前项目的 <项目>/.klaus/skills,再看 ~/.klaus/skills,同名先到先得,也就是项目里的同名技能会盖住全局的。内置技能只在名字还没被占用时补进来。
  • 子代理:~/.klaus/agents/*.md。
  • 斜杠命令:全局 ~/.klaus/commands,项目 <项目>/.klaus/commands。
  • 回答风格:全局 ~/.klaus/output-styles,再从会话工作目录往上逐级找各级 .klaus/output-styles(到仓库边界为止),同名后者盖前者。
  • 钩子:全局 ~/.klaus/hooks.json,项目 <项目>/.klaus/hooks.json,且每条声明要先在设置里被信任才注入会话,见钩子。
  • 插件:由引擎自己读它配置里的插件账本加载,见插件。插件里带的技能、命令、子代理、MCP、钩子会打上来源标记,不会和上面几类重复出现。插件启停是应用级的,没有项目作用域。

改完什么时候生效

这里有两条不同的路径,混在一起说就会给出错答案:

  • 在 App 里改(从市场装技能、启停插件、在钩子页点信任):客户端知道这件事变了,会把已经开着的会话标记为「配置过期」,于是在下一回合之间自动重建并带上新值。不用重开会话,更不用重启应用。插件尤其如此——装完、启用、停用都免重启。
  • 手动改磁盘上的文件(自己在编辑器里改 hooks.json、往 .klaus/skills 丢一个目录):Klaus 不监听这些目录,所以没人告诉它变了。这些内容在会话启动时读取,改完要开一个新会话才生效。

所以「装完新技能要开新会话」这句话只对第二种情况成立。真在界面上装的东西,下一轮就带上了。