Zed 怎么用 Worktree Trust 机制控制未受信项目的语言服务器和 MCP 服务器?
【免费下载链接】zedCode at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.项目地址: https://gitcode.com/GitHub_Trending/ze/zed
当你把一个来路不明的目录拖进 Zed、或用zed some/path打开一个陌生项目时,项目根目录下的.zed/settings.json可能要求 Zed 安装并启动语言服务器、MCP 服务器。Zed 的 Worktree Trust 机制就是用来控制这件事的:所有 worktree 打开后默认处于Restricted Mode,在你对它做出信任决定之前,Zed 不会解析项目设置,也不会下载和启动项目定义的语言服务器或 MCP 服务器。本文按「识别未受信项目 → 在安全对话框中做信任决定 → 管理信任记录」的顺序说明这个机制怎么用。
Restricted Mode 到底限制了什么
Zed 中的 worktree 是被 Zed 作为独立「项目」打开的目录或单个文件。每次你运行zed some/path、把文件/目录拖入 Zed、或打开用户设置文件时,都会产生一个 worktree。这比 Git worktree 的范围更广——Zed 的信任模型适用于每一个被打开的文件或目录根(见 git worktrees 说明)。
Restricted Mode 会阻止三件事:
- 项目设置(
.zed/settings.json)被解析和应用; - 语言服务器被安装和启动;
- MCP 服务器被安装和启动。
有一个重要例外:Zed 全局安装的工具不受 worktree 信任约束。全局 MCP 服务器和全局语言服务器(如 Prettier、Copilot)会照常安装和启动,与 worktree 是否受信无关。也就是说,信任机制只管辖项目设置里声明的那部分。
判断当前项目是否处于受限状态:未受信的 worktree 会在标题栏显示一个感叹号图标。
打开安全对话框并做信任决定
点击标题栏的感叹号图标,或执行workspace::ToggleWorktreeSecurity操作,会打开安全对话框。对话框会列出所有受限的路径,并提示你先审查项目的.zed/settings.json——那里配置了由该项目安装和启动的扩展、语言服务器与 MCP 服务器。
在对话框中你有两个选择:
- 信任并继续:该 worktree 的语言服务器和 MCP 服务器被允许下载和启动,项目设置开始生效。文档给出的判断依据很直接:worktree 受信后,「language and MCP servers are permitted to be downloaded and started」;
- 留在 Restricted Mode:项目继续处于受限状态,相关服务器不会被启动,你可以继续浏览代码而不触发项目配置。
如果同一批次有多个受限项目,对话框支持一次处理多个。针对多个目录 worktree,可以勾选对话框中的复选框,把信任范围扩大到某个父目录——这会一次性信任该父目录下的所有子目录,包括当前和将来可能打开的目录 worktree。
信任决定是持久的:手动信任一个 worktree 会在重启之间保留。
三层信任层级:为什么单个文件也要单独信任
信任层级从最小到最大分三层(文档说明这些偏内部细节、可能变化,但有助于理解多个信任请求如何被一次性批准):
- single file worktree(单文件):在空窗口中打开单个文件、或在打开目录后再打开目录外的文件,都会形成单文件 worktree。例如通过 {#action zed::OpenSettingsFile} 打开用户设置文件,就可能为那个文件启动语言服务器并新建一个单文件 worktree。由于语言服务器存在供应链攻击风险,Zed 默认对其限制:每个单文件 worktree 都需要单独的信任授权,除非它所在目录已受信、或所有 worktree 都被信任。
- directory worktree(目录):打开一个目录就是完整 worktree,可能启动项目设置里定义的多个语言服务器和 MCP 服务器,每个目录 worktree 需要单独的信任授权,除非已存在父目录级别的信任。信任一个目录 worktree 后,Zed 会自动为对应主机启用单文件 worktree 信任——方便你在已受信的目录里使用语言服务器功能时再打开单个文件。
- parent directory worktree(父目录):即前面对话框里复选框对应的那一层,一次信任覆盖父目录下所有子目录的现有及未来 worktree。
可选:跳过所有信任检查(不推荐)
默认情况下 Zed 不信任任何新 worktree,必须逐个信任。如果你管理的是完全可控的项目集合,可以在用户设置中打开全局开关——文档明确标注「though not recommended」:
"session": { "trust_all_worktrees": true }该设置的用户默认值是false(见 session 设置参考:{ "restore_unsaved_buffers": true, "trust_all_worktrees": false })。设置生效后的效果是:项目设置自动同步,语言和 MCP 服务器自动下载并启动。
两点限制需要注意:
- 自动信任不会持久化。只有手动信任的 worktree 才跨重启保留,这样日后你关闭
trust_all_worktrees时,需要对每个项目重新做信任决定; - 这个开关写在哪里:用户设置文件,通过命令面板执行 {#action zed::OpenSettingsFile} 打开,文件位于 macOS/Linux 的
~/.config/zed/settings.json(Linux 也可能是$XDG_CONFIG_HOME/zed/settings.json)、Windows 的%APPDATA%\Zed\settings.json(见 Configuring Zed)。
如何验证信任状态已生效
文档给出的可核对依据:
- 受信的目录 worktree 会允许语言服务器和 MCP 服务器被下载并启动——即此前被 Restricted Mode 拦截的项目级服务器开始工作;
- 标题栏的感叹号图标是「未受信」的指示,做出信任决定后该 worktree 不再处于受限状态;
- 反向验证:执行清除命令后 Zed 会重启,重启后所有 worktree 回到需要逐个信任的状态,可以再次观察安全对话框是否列出它们。
清除所有信任记录
当你怀疑某些项目已被误信任、或想重置整个信任状态时,执行workspace::ClearTrustedWorktrees命令。该命令会重启 Zed,目的是确保没有任何未受信设置、语言服务器或 MCP 服务器残留运行。重启后所有 worktree 回到初始的未信任状态。
适用范围与限制
- 该机制在本地、SSH 远程主机和 WSL 远程主机上都生效;远程场景下 Zed 按主机(per host)跟踪信任信息,同一目录在不同主机上需要分别信任。
- 信任只拦截项目设置声明的服务器与设置解析,不拦截Zed 全局安装的 MCP 服务器和语言服务器。
- 信任范围最小单位是单个 worktree;想批量覆盖多个项目,用父目录信任(对话框复选框)或
trust_all_worktrees开关,两者持久化行为不同,按上面的说明选择。
更多设置细节可参考 Zed and trusted worktrees 与 all settings 参考。
【免费下载链接】zedCode at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.项目地址: https://gitcode.com/GitHub_Trending/ze/zed
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考