插件目前处于 beta 阶段。其行为和配置可能会在后续版本中发生变化。
/<plugin>:<skill> 斜杠命令的形式提供,并且还会自动拉取其依赖的其他插件。
插件本质上只是一个包含以下内容的来源:
skills/ 目录用于存放常规技能——插件不会引入新的技能
格式。有关 SKILL.md 的格式,请参阅创建技能。
安装插件
owner/repo、git URL 或本地路径:
-y / --yes 可跳过
提示。
插件以 user 级别安装,并可在你的所有
项目中使用。
管理插件
devin plugins install ./my-plugin → 编辑 skills/<name>/SKILL.md → 所做更改
会在下一次会话中生效,无需执行 update。
清单
.devin-plugin/plugin.json 用于描述插件。只有 name 是必填项,
并且它在已安装插件中必须唯一 (即 /<name>:… 命名空间) 。
name、version、description、author
({ name, email }) 、homepage、repository、license 和 keywords。
依赖项条目表示一个来源——可以是字符串简写,也可以是对象:
"owner/repo"→ GitHub"https://…","git@…","ssh://…"→ git URL{ "source": "github", "repo": "owner/repo" }{ "source": "url", "url": "https://gitlab.com/team/plugin.git" }
owner/repo、HTTPS URL、.git
URL、SSH 形式) 都对应同一个插件标识。
依赖与治理
requiredPlugins
optionalPlugins
forbiddenPlugins
- 一个精确的插件标识,可写为
owner/repo、git URL 或本地路径。 - 一个 glob 模式 —— 任何包含
*的条目。*可匹配任意长度的 字符序列,包括/。模式会先规范化到标准标识空间,因此acme/*会变成https://github.com/acme/*(acme的所有 GitHub 代码仓库) ,*/secrets会匹配任意 owner 下名为secrets的代码仓库,而https://gitlab.com/acme/*会匹配该路径下的任意代码仓库。 - 单独的
"*",它会匹配所有其他插件 (不可绕过的完全锁定) 。
- 禁止优先。 如果任一已安装插件禁止某个插件 (通过其
精确标识、匹配的 glob 或
"*") ,该插件就会被阻止。 - 自身覆盖。 插件自身的
requiredPlugins、optionalPlugins以及它 本身,不受其自身禁止列表的限制。因此,forbiddenPlugins: ["*"]与optionalPlugins: [B, C]一起使用时表示“允许 我自己、B 和 C;禁止其他所有内容。” - 不允许跨插件重新放行。 一个插件的允许列表不能重新放行
另一个插件所禁止的内容。带有
forbiddenPlugins: ["*"]的已安装插件会形成不可绕过的完全锁定。 - 默认开放。 如果没有任何已安装插件禁止任何内容,就不会有任何插件被阻止。
- 安装时 —— 如果要安装的插件已被阻止 (或其必需插件 无法满足,或其名称与已安装插件冲突) ,则会 拒绝安装。
- 加载时 —— 如果插件在安装后变为被阻止 (例如,某个实施禁止的插件稍后才安装) ,它会继续保留在磁盘上,但其技能会在会话开始时被跳过,并显示一条警告,指出是哪个插件禁止了它。
