插件

一个包里同时带技能、命令、子代理、MCP 服务器和钩子;安装账本归引擎所有。

插件是打包分发的能力集合,一个插件里可以同时带技能、斜杠命令、子代理、MCP 服务器和钩子。

  • 市场档:从插件市场浏览并安装。每行「装了会多出什么」是引擎用真正加载时那套解析器算出来的,所以不会出现「市场页写的和装完实际有的不一样」。
  • 更新:市场卡片和已安装列表会显示已装版本、可用版本和「更新到」按钮。刷新市场获取新目录后,更新把新版本交给引擎安装,保留启用状态和插件数据;失败保留当前状态,过期更新会被引擎拒绝。
  • 已安装档:启用/禁用开关。注意插件启停是应用级的,没有项目作用域——启用后所有会话可见。
  • 已装列表里的「已加载 / 加载失败」是某一条会话的运行时状态,不是全局属性:同一个插件可以在新会话里好的、在旧会话里还是旧状态。

它的安装与生效机制:

  • 账本归引擎所有,存在引擎自己的配置文件 ~/.klaus/config.toml 的 [plugins] 段里,每条记录带名字、来源、安装路径、安装时间和启用位。这份文件由引擎读写,不要拿第二个写入方去改它的形状——引擎启动时要解它,形状不对会启动不了。已登记的市场目录同样记在这份配置的 [marketplaces] 段。
  • 安装分两段:客户端先把包取到一个暂存目录(本地复制,或 git 拉取——支持仓库地址、owner/repo 简写、以及只拉仓库里某一个子目录),再交给引擎校验、复制进它自己的存储区、写账本。无论成败暂存目录都会被清掉,所以安装失败不会留下半个插件。
  • 启停改的是账本里的启用位,装完、启用、停用都不用重启应用,已经开着的会话也能看到新装插件带来的技能。(只有发布失败或需要迁移旧格式这类少数情况,引擎会回报需要换一个连接。)
  • 卸载同时删账本行和存储区里的那份副本。内置的那几个(比如浏览器)标为内置来源,可以停用但卸不掉。
  • 插件里的技能/命令/子代理/MCP/钩子由引擎自己从账本加载并标上来源,客户端不再重复报一遍(否则插件里的钩子会每个事件触发两次)。