VS Code引入Agent Host,支持本地和远程会话跨环境持久化,多个Agent工具可共享上下文状态。
By Rob Lourens, Connor Peet, and Brigit Murtaugh
当你把任务交给一个 Agent 时,它应该能够持续工作,即使你并没有在盯着它看。无论你切换到另一个 Agent 会话、在编辑器和 Agent 窗口之间切换、还是从另一台机器或浏览器远程连接,都应该能够监控和交互该会话。
我们正式推出 Agent Host,这是一个自包含的进程,用于持有 Agent 会话;同时推出开放的 Agent Host Protocol(AHP),用于连接 Host 和客户端。二者共同实现了以下能力:会话在你关闭启动它的文件夹或编辑器窗口后仍能继续、在不同客户端之间保持同步、支持本地或远程运行,以及在不丧失各自特性前提下支持多个 Agent Harness。
本文将介绍我们为何构建 Agent Host、它在 VS Code 中实现了哪些能力(以及如何体验)、其架构如何工作,以及 AHP 如何将该架构开放给其他客户端。
2025 年底,我们增加了在关闭本地 Agent 聊天后让其继续在后台运行的支持。这使得在 VS Code 中并行运行多个会话或专注于其他任务成为可能。下一步是让这些会话在你关闭启动它们的文件夹后仍能继续,并能跨 VS Code 界面迁移。
除了支持长时间运行的会话,我们还着手在 VS Code 的 Copilot Harness 中采用 GitHub Copilot SDK。使用 SDK 使 Copilot 在 Copilot CLI、独立 GitHub Copilot 应用和其他 Copilot 产品中获得更一致的 Harness 行为和功能。
将这些工作整合在一起,让我们有机会重新审视在 VS Code 中运行 Agent Harness 的方式。Agent Harness 负责组装上下文、提供工具、运行 Agent 循环并应用变更。如果没有 Agent Host,VS Code 在每个编辑器窗口的扩展主机(Extension Host)中运行本地 Agent Harness——这是 VS Code 用于运行 GitHub Copilot Chat 等扩展的进程。扩展主机虽然将扩展代码与核心编辑器隔离开来,但也把 Agent 运行时绑定到了单个 VS Code 窗口上。关闭该窗口会停止运行时。因此,每个窗口都会加载自己的 Agent 基础设施。
将会话状态、Harness 适配器和基准工作区能力移入专用进程,改变了这层边界。扩展主机不再处于基准 Agent 工作的关键路径上,多个窗口可以连接到同一个 Host,而不是各自加载独立的运行时。VS Code 仍然与 Host 通信,客户端贡献的工具仍然路由回该客户端,但会话本身不再依赖于启动它的特定文件夹或编辑器窗口。
这种分离还为 VS Code 提供了多个 Agent Harness 的通用基础,同时保留了各自特性。今年早些时候,我们引入了使用 Anthropic 官方 Harness 的 Claude Agent。Copilot 和 Claude 可以保留各自的 SDK、Agent 循环、工具和特定于 Provider 的能力,而 Agent Host 和 AHP 为它们在 VS Code 中提供了一致的会话体验。
Agent Host 已在最新 VS Code Stable 和 Insiders 中启用。由于 Agent Host 持有会话,你可以在编辑器窗口中开始与 Agent 的协作,然后在 Agent 窗口中继续使用同一个实时会话。两个界面保持同步,你可以在任何你喜欢的界面中监控进度和交互会话,而无需创建副本。
客户端与 Host 之间的这种分离还支持远程会话。Agent Host 可以与你的工作区一起在另一台机器上运行,而你从桌面或 Web 连接来查看进度、审查变更和管理会话。详细了解远程 Agent 会话,包括 SSH、dev tunnels 和 Web 的设置说明。
尝试以下工作流,体验会话如何在关闭其文件夹后继续以及如何在 VS Code 各界面间保持同步:


重新打开文件夹并返回会话。它的状态和进度都还在那里。
打开 Agent 窗口来监控同一个实时会话。你可以在编辑器和 Agent 窗口中操作它而无需创建副本,两处都会显示更新。
重新打开文件夹并返回会话。它的状态和进度都还在那里。
打开 Agent 窗口来监控同一个实时会话。你可以在编辑器和 Agent 窗口中操作它而无需创建副本,两处都会显示更新。
要尝试远程连接,请将 Agent 窗口连接到远程 Agent Host 并启动或打开一个会话。然后打开 insiders.vscode.dev/agents,选择同一个 Host,并从浏览器中继续该会话。

Agent Host 是一个专用进程,用于持有会话。它可以作为 VS Code 实用程序进程在本地运行,也可以作为独立服务器在远程运行。无论哪种情况,它都会在多个编辑器会话中保持活跃。以前,我们可以依赖扩展主机和编辑器窗口之间的直接 IPC,但一个能与多个版本的 VS Code 通信的持久进程,需要在我们谈论 Agent 的方式上做标准化。Agent Host Protocol(AHP)就是这个标准化。
当 Host 与 VS Code 运行在同一台机器上时,所有编辑器窗口和 Agent 窗口都连接到单个 Host 进程。在 AHP 术语中,这些窗口是客户端,Agent Host 扮演服务器角色。VS Code 绑定了我们自己的 Agent Host 实现,我们的 UI 是一个客户端,但其他应用程序可以实现这个与协议无关的协议的任意一端。客户端还可以根据自己的能力贡献工具。
Agent Host 被设计为支持不同的 Harness。每个 Harness 保留自己的 Agent 循环和能力,而适配器将其事件转换为通用的 AHP 会话模型。以下是两个工作示例:
AHP 标准化的是客户端面对的会话,而不是 Agent 如何推理、管理上下文或调用工具。了解更多关于在 VS Code 中选择 Agent Harness 的信息。
大多数 Agent 协议描述的是客户端与 Agent 之间一对一对话。AHP 解决的是一个不同的问题:协调多个独立客户端围绕同一个长时间运行的 Agent 会话。Host 拥有权威的、Agent 无关的状态,而已连接的客户端可以观察进度、贡献操作、批准工具调用或取消工作。
AHP 是刻意以状态优先的。Host 不暴露特定于 Harness 的后端事件,而是将它们翻译成持久的、可展示的状态和有序的类 Redux 操作。客户端可以乐观地应用一个操作,然后与 Host 的有序响应进行协调,并在重新连接时优雅地重放错过的操作。
这种状态是有主见的,以反映客户端应该呈现何种用户体验,同时避免涉及实现细节。例如,虽然我们的 Agent Host 通过本地 git 和 GitHub 驱动变更,但这被建模为变更集(changeset)这一通用概念。实现可以使用其他表示形式——例如,vscode.dev 或 GitHub Repositories 扩展所使用的内存虚拟文件系统。
所有协议功能都通过 URI 可寻址的通道暴露,包括会话、聊天、终端和变更集。当客户端订阅时,它会收到当前状态的快照,然后是有序的操作流。共享的 Reducer 一致地应用这些操作,因此编辑器、Agent 窗口和浏览器客户端收敛到相同的视图,而无需每个客户端理解 Harness 的 SDK 或会话模型。
虽然 AHP 处理这些协调挑战,我们也希望它易于实现。在最粗粒度上,客户端和 Host 选择在基本会话和聊天通道之外实现哪些通道,并协商更细粒度控制的能力。当我们添加功能时,它将继续组合到协议中——为启用它的设置提供更丰富的体验,而不会为新的客户端和 Host 增加负担。
由于 AHP 是开放的,你可以构建连接到 Agent Host 的客户端,以监控会话进度、审查变更、批准工具调用,以及根据客户端的能力贡献工具。
要开始使用,请在你的机器上运行 code agent host(或 Insiders 版运行 code-insiders agent host)来启动一个独立的 Agent Host。然后使用以下 AHP 客户端库之一连接到它:
请参阅 AHP 客户端库表格了解当前版本和其他客户端。
VS Code 的 Agent Host 实现和 AHP 规范正在积极开发中,新能力不断推出。请关注 Agent Host 架构文档以了解当前的 VS Code 行为。要关注 AHP 的设计或分享对协议的总体反馈,请探索 AHP 文档和源代码仓库。
当你在 VS Code 中通过 Agent Host 运行 Agent 时,请在 VS Code 仓库中与我们分享你的反馈。