---
slug: agent-host-protocol-ahp-explained
title: AHP 在做什麼？把 AI Agent session 從單一視窗裡拆出來
status: published
excerpt: 當你在 Terminal 下了指令，換到 VS Code 卻要重新對話；當視窗一關，跑了一半的長任務直接灰飛煙滅。Microsoft 推出的 AHP (Agent Host Protocol) 草案，試圖將 Agent Session 從 UI 視窗剝離，建立跨 Client 同步的狀態基礎設施。
category: AI Agents
tags:
  - AI Agent
  - Agent Protocols
  - VS Code
  - Microsoft
  - AHP
author: Seer
author_role: Author
read_time: 7 min
cover: "/static/agent-host-protocol-ahp-explained-cover.png"
published_at: "2026-07-28T14:27:03Z"
updated_at: "2026-07-28T14:27:03Z"
---

如果你每天都在用 AI coding agent，這幕畫面你一定不陌生：

你在 Terminal 用 CLI 工具叫 Agent 跑一個大規模重構，跑到一半想開 VS Code 看產出的檔名與變更，結果發現 VS Code 裡的 Agent 視窗根本不知道 Terminal 剛剛做了什麼；你手賤把 Terminal 視窗關掉，那個跑了十幾分鐘的 Agent session 就跟著煙消雲散。接著你想試試某款 Desktop App，發現它又是另一個完全封閉的生態系。

同一個模型，換個介面就像換了個宇宙。

現階段 AI coding agent 最讓人抓狂的體驗，問題往往不是出在前端 UI 刻得不夠漂亮，而是**狀態（Session）、終端機（Terminal）與 Client 介面被硬生生綁在一起**。

Microsoft 最近開源的 `microsoft/agent-host-protocol`（簡稱 AHP），切入的角度非常精準：**AHP 不是要再造一個 AI agent UI，而是要把 Agent session 從單一視窗裡抽出來，交給獨立的 Host 管理。**

---

## AHP 是什麼？

用官方 README 的一句話摘要：

> *"A synchronized, multi-client state protocol for AI agent sessions."*

簡單來說，AHP (Agent Host Protocol) 定義了一套輕量且獨立的服務協定（Standalone Sessions Server），讓不同的 Client（不論是 VS Code、CLI 工具、桌面應用程式或網頁介面）能夠透過統一的協定連線到 Host，並看到完全同步的 Agent session 狀態。

過往的架構是「一個 UI 視窗內建一個 Agent 引擎」，Client 與 Session 是一對一死綁的；而 AHP 的核心思維，是把 Session 拿出來變成基礎設施（Infrastructure Layer）。

README 中對其設計本質的描述更精確：

> *"A portable, standalone server protocol that gives multiple clients a synchronized view of AI agent sessions through immutable state, pure reducers, and write-ahead reconciliation."*

這意味著無論你從 CLI 送出指令，還是在 VS Code 點擊按鈕，底層的狀態變更都是透過寫前協調（Write-ahead reconciliation）與不可變狀態（Immutable state）同步給所有連接的 Client。

---

## 拆解 AHP 的四大核心設計

深入看 AHP 的架構規範，會發現它為解開「平行宇宙」設計了幾個關鍵機制：

### 1. 頻道機制 (Channels) 與狀態訂閱

在 AHP 的溝通模型中，資源被拆解成不同的 URI 頻道（Channels）。Client 可以根據需求訂閱特定的狀態資源，支援 Lazy loading：

* `ahp-root://`：頂層 Host 狀態
* `ahp-session:/<uuid>`：特定 Session 的整體狀態
* `ahp-chat:/<uuid>`：對話脈絡與 Message 歷程
* `ahp-terminal:/<id>`：獨立的終端機通道
* `ahp-changeset:/<id>`：代碼變更與檔案編輯紀錄

這種設計讓輕量級 Client 不需要一口氣拿走所有歷史資料，而是能按需訂閱；至於 session list，則是另外用 RPC 方式抓取並同步。

### 2. Terminal 是第一等公民 (First-Class Citizen)

許多 Coding Agent 最怕「長時間執行的背景任務」（例如 Dev Server、Blaze/Cargo Build、測試套件）。在傳統 Client 中，UI 一關掉，下屬的 Terminal process 就跟著斷頭。

AHP 的規範中特別強調：

> *"Terminals are a first-class subscribable resource in AHP... Terminal state is separate from session state. A terminal persists independently of the session that created it."*

在 AHP 的架構下，Terminal 獨立於 Session 存在。不論是 Shell session 還是背景開發伺服器，它都不再只是某個視窗附屬的暫時物件。Client 重新連線後，可以重新 Claim 或 Subscribe 該 `ahp-terminal` 頻道，接回這條終端機的狀態與輸出。

### 3. 斷線重連與 Replay 機制 (Reconnect / Replay)

網路中斷或編輯器重啟是常態。AHP 在生命週期規範（Lifecycle Spec）中納入了明確的追補機制：

當 Client 重新連線時，會發送包含 `clientId` 與 `lastSeenServerSeq`（最後收到的伺服器序號）的 Reconnect 請求。AHP Host 會評估差異：
* **Replay**：若差異在可追補範圍內，Host 會回傳錯過的 Action Envelopes，讓 Client 無縫重播恢復狀態。
* **Snapshot**：若斷線太久或狀態落差過大，Host 會直接發送完整的狀態快照（Snapshot）讓 Client 重新對齊。

這確保了「隨開隨走、隨接隨讀」的開發體驗，長任務不再因為視窗關閉而付諸東流。

---

## AHP vs. ACP：分工到底在哪裡？

很多人看到各種新協定出爐，第一反應常常是：「這跟 ACP (Agent Communication Protocol) 有什麼不一樣？」

AHP 的文件在 `docs/guide/ahp-and-acp.md` 中給出了一個非常清晰的分界：

> *"AHP is a coordination layer. ACP is a communication layer."*

* **ACP (Agent Communication Protocol)**：解決的是 **1 對 1** 的通訊。關注 Client 怎麼把 Prompt 送給 Agent、Agent 怎麼 call tool、怎麼回傳 stream response。
* **AHP (Agent Host Protocol)**：解決的是 **N 個 Clients 共享 shared agent sessions** 的協調問題。關注的是狀態同步、多端訂閱、Terminal 存活與連線生命週期。

AHP 是 agent-agnostic 的。它不綁定特定 agent runtime 或 backend tool vocabulary，專注做好「多端狀態協調者」（Coordination Layer）的角色。

```mermaid
flowchart TB
  H["AHP Host Server: sessions, terminals, replay, channels"]
  V["VS Code"] -->|"AHP protocol"| H
  C["CLI / AHPX"] -->|"AHP protocol"| H
  D["Desktop Client"] -->|"AHP protocol"| H
```

---

## 目前落地的真實狀態：VS Code Reference Implementation

這不是純粹寫在紙上的白皮書。在目前公開的資料中，已經能找到明確的落地痕跡：

根據 AHP 的 `docs/guide/implementations.md` 與 VS Code 原始碼：
1. **VS Code 已經是 Reference Implementation**：VS Code 的 Agent Host 是 AHP 官方參考 Server 實作，程式碼落腳於 VS Code repo 的 `src/vs/platform/agentHost/node/`。
2. **VS Code 內建 Client**：VS Code 內部已經包含能夠與 AHP Host 互動的 Agent Sessions client code。
3. **多語言 SDK 鋪路**：生態系中已經出現 Rust、TypeScript、Kotlin、Swift、Go 等語言的 Client Library，以及 `AHPX` 這類 CLI 工具雛形。

---

## 冷靜看待：邊界與未竟之業

看到這裡，你可能會想：「太好了，所以現在所有 AI 工具都打通了嗎？」

**請先慢著太樂觀。**

我們必須非常明確地劃清目前的實作邊界：

* **AHP 目前仍是 Draft / Under Active Development 階段**，絕非已經定案的業界通用標準。
* **沒有直接證據顯示 ChatGPT Desktop 或 Claude Desktop 採用了 AHP**。
* **Codex CLI 與 Claude Code CLI 也還沒有透過 AHP 達成全面互通**。
* **AHP 並沒有奇蹟般地解決所有複雜的 Context Sync 或 Git 衝突問題**。

目前能下的客觀結論只有一個：**如果未來有更多 Client 廠商與 CLI 工具願意接入同一套 AHP 協定，理論上有機會大幅收斂現今割裂的平行宇宙體驗。**

---

## 結語

AHP 真正有價值的地方，**不是業界又多了一個英文縮寫的協定名詞，而是它提示了一個關鍵的架構轉向——把 Agent Session 從 UI 視窗的附屬品，拉回基礎設施層。**

當 Agent 開始承接越來越多動輒執行數小時的長任務，把 Session 與 Terminal 交給獨立的 Host 代管，讓 VS Code、CLI 與各種 Client 隨時加入或離開觀測，才是軟體工程走向成熟應有的樣貌。這張草案能走多遠，值得持續關注。
