Zed 怎么用 Worktree Trust 机制控制未受信项目的语言服务器和 MCP 服务器?
2026/9/13 11:54:39 网站建设 项目流程

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 会在重启之间保留

三层信任层级:为什么单个文件也要单独信任

信任层级从最小到最大分三层(文档说明这些偏内部细节、可能变化,但有助于理解多个信任请求如何被一次性批准):

  1. single file worktree(单文件):在空窗口中打开单个文件、或在打开目录后再打开目录外的文件,都会形成单文件 worktree。例如通过 {#action zed::OpenSettingsFile} 打开用户设置文件,就可能为那个文件启动语言服务器并新建一个单文件 worktree。由于语言服务器存在供应链攻击风险,Zed 默认对其限制:每个单文件 worktree 都需要单独的信任授权,除非它所在目录已受信、或所有 worktree 都被信任。
  2. directory worktree(目录):打开一个目录就是完整 worktree,可能启动项目设置里定义的多个语言服务器和 MCP 服务器,每个目录 worktree 需要单独的信任授权,除非已存在父目录级别的信任。信任一个目录 worktree 后,Zed 会自动为对应主机启用单文件 worktree 信任——方便你在已受信的目录里使用语言服务器功能时再打开单个文件。
  3. 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询