扩展安全模型
本页面向安装或发布扩展包的人。读完后,你会知道 Phase 1 为什么不运行第三方代码,以及如何评估一个 pack 是否适合安装。
基本原则
标题为“基本原则”的章节Phase 1 扩展包是 data-only。Jarvis 读取 manifest、profile YAML 和 workflow YAML,然后由 Jarvis Core 执行已有能力。
这条边界带来三个安全属性:
- 没有插件入口函数。
- 没有安装脚本或 post-install hook。
- 没有在线 registry 自动拉取。
权限不是授权
标题为“权限不是授权”的章节permissions 是声明和展示机制,不是绕过确认的授权机制。比如:
permissions: terminal: requested: true这会在验证和 UI 中显示为高风险能力。真正运行时,worker 仍走 Jarvis 的权限模式、启动门和人工确认。
Locked Objects
标题为“Locked Objects”的章节Pack 安装后创建的 Profile 和 Workflow 带有 ownership metadata:
source: extensionowner_pack_id: example.ssh-tunnelowner_contribution_id: open-tunnellocked: true普通编辑和删除 API 会拒绝 locked 对象。用户需要修改时,在 UI 中选择“复制后编辑”。复制件不再归原 pack 所有,停用或卸载 pack 不会删除复制件。
Secret 处理
标题为“Secret 处理”的章节Manifest 只能声明 secret 名称:
secrets: - name: SSH_TARGET_ALIAS required: false description: Optional host alias used by the workflow prompt.不要把 secret 值写进 manifest、profile、workflow、README 或示例命令。Profile 中 MCP server 的 secret-like env 值如果是明文,会被 lint 视为错误;使用环境变量引用。
MCP stdio 风险
标题为“MCP stdio 风险”的章节Profile 可以包含 MCP server 配置。MCP stdio server 是可执行进程,因此 pack 作者必须:
- 在
permissions.profiles.mcpServers中声明。 - 在 README 中说明 server 来源和用途。
- 不使用
jarvis作为 MCP server 名称;该名称保留给 worker uplink。 - 不在 env 中写入明文 token。
安装者应把含 MCP stdio 的 pack 当作高风险 pack 审核。
终端和外部副作用
标题为“终端和外部副作用”的章节如果 workflow 可能运行终端命令、部署、发布、写远程系统或关闭外部资源,建议把对应节点设为:
requires_approval: true这样 pipeline engine 到达节点时会等待显式放行。
禁用和卸载
标题为“禁用和卸载”的章节disable:移除 pack-owned Profile、Workflow 和 command contribution,保留 pack registry。uninstall:删除 pack registry。启用中的 pack 需要先停用,或使用 force 卸载。- 历史 workflow run 读取创建 run 时的快照,不依赖当前 pack 是否仍安装。
离线和 gated 环境
标题为“离线和 gated 环境”的章节Phase 1 不增加自动外发路径。安装目标是 server-local pack path。需要通过内网分发时,把 pack 目录或归档交给环境管理员,再在目标机器本地安装。