# Agent Plugins 是 Agent Skills 的未來

> 📖 本站完整內容索引（documentation index）：[llms.txt](/llms.txt)

> 原作者：Google Cloud Tech (@GoogleCloudTech) · 策展與摘要：EasyVibeCoding · 平台：X (Twitter) · 熱度：🔥🔥🔥🔥 · 日期：2026-08-13

> 原始來源：https://x.com/GoogleCloudTech/status/2087733334617063503

## 證據與延伸閱讀

- [# Agent Plugins 是 Agent Skills 的未來](https://virtualizationreview.com/articles/2026/08/06/cloud-giants-back-agent-plugins-for-cross-client-ai.aspx)
- [gigazine.net/gsc_news/en/20260807-agent-plugins](https://gigazine.net/gsc_news/en/20260807-agent-plugins/)
- [skool.com](https://www.skool.com/the-ai-advantage/ai-news-six-major-ai-companies-agree-on-one-format-for-packaging-agent-skills-anthropic-notably-absent)
- [Agent Plugins 是開放標準，Google 將加入 TSC](https://x.com/GoogleCloudTech/status/2087733334617063503)
- [架構圖表、plugin.json 與 mcp.json 規範等](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/78fff85fcebe2c8a.jpg)
- [提及 Google 產品與安裝指令相容性說明](https://github.com/GoogleCloudPlatform/data-agent-kit) — 官方 Repository

## 中文摘要

# Agent Plugins 是 Agent Skills 的未來

Agent Plugins 是一項開放、與供應商無關的標準，用來將 Agent Skills 以及它們所依賴的 MCP 伺服器封裝到同一個可攜式資料夾中，任何相容的客戶端都能載入。Google 將以 Core Maintainer 身分加入 Technical Steering Committee。發布文章涵蓋了公告內容，而規格則提供詳細資訊。以下是我們讓實際的 skill 採用這套標準後得到的心得。

Agent Skills 讓 Agent 能按需取得專業能力。它是一個由模型只在工作相符時才載入的指示資料夾，因此當你修正 CSS 錯誤時，context window 不會同時攜帶部署操作手冊。我們在 google/skills 程式庫，以及隨 Agents CLI 一起提供的七個 skill 中，都大量採用了這種方式。

Skills 始終沒有解決的是發佈與分發。

作者：@lavinigam，Google Cloud Developer Relations Engineer

![Plugins are part of an ecosystem 架構圖，將生態系拆分為 Find it、Describe it、Package it 與 Run it 四個 independent layers](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/78fff85fcebe2c8a.jpg)

<details class="chart-data"><summary>展開畫面重點</summary><div class="me-note">畫面標題為「Plugins are part of an ecosystem」，下方副標題為「Four independent layers」。左側標註「four independent layers」並以大括號涵蓋四個橫向長條區塊，每個區塊分為左側的動作標籤與右側的內容描述：
1. Find it：Agentic Resource Discovery（底部帶有黃色裝飾線）
2. Describe it：AI Catalog（底部帶有灰色裝飾線）
3. Package it：Agent Plugins（藍色長條背景，搭配白色文字）
4. Run it：MCP + Agent Skills（底部帶有綠色裝飾線）
最下方說明文字為「Adopting one never obligates you to the next」。</div></details>

需要工具的 skill 會由兩個成品組成。指示放在 SKILL.md，工具則放在 MCP 伺服器中，但沒有任何東西能將兩者綁在一起。因此，綁定關係只能寫在 README 裡：把這個複製到這裡，再把那段 JSON 加到另一處，而且每個客戶端都要使用不同的片段。每個客戶端最後都自行發明 bundle 格式來解決這件事，於是作者只能先選一種格式，接著為下一種格式重新撰寫。

Agent Plugins 將這個封裝格式標準化。裡面的元件原本就具備可攜性。

當你的 skill 變成 plugin 後，會有以下變化；而且你其實已經完成了大部分工作：

- 你唯一缺少的那個檔案。你的資料夾結構本來就已經正確。

- 工具會和你的專業能力一起移動。mcp.json，以及能在移動後繼續運作的路徑。

- 元件會各自獨立失效。失效的伺服器不會拖垮你的 skill。

- 不需要分支，就能支援客戶端專屬行為。使用 extension namespace。

- 一個資料夾，所有客戶端都能使用。我們實際發布的內容，以及它真正能在哪裡執行。

## 你唯一缺少的那個檔案

如果你寫過 ADK skill，可以看看它目前的所在位置：skills/<name>/SKILL.md，底下再放 scripts/ / references/ / assets/。Agent Plugins 要求使用 skills/<dir>/SKILL.md，並將該資料夾內部的內容交由 Agent Skills 規格處理。這是相同的樹狀結構。

以下是我們早已寫好的 skill，封裝時完全不需要修改：

```
---
name: summarize-report
description: Summarize a quarterly revenue report into an executive brief.
  Use when the user asks to summarize, condense, or brief a financial report.
---

# Summarize a revenue report

## Steps

1. Fetch the report with the `reports` MCP server's `fetch_report` tool.
2. Load `references/house-style.md` and follow its tone rules.
3. Produce three sections: Headline, Numbers That Moved, Risks.
4. Keep the brief under 300 words.

## Rules

- Never estimate a figure the report does not state.
- Quote every percentage with its comparison period.
- If a quarter is missing, say so rather than interpolating.

```

請注意 Steps 第 1 行的前提：MCP 伺服器必須正在執行。封裝要解決的正是這項相依性。

遷移只需要在根目錄新增一個檔案：

```json
{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "acme.reports"
}

```

這兩個欄位都是必要欄位，而這就是最小需求。名稱長度必須介於 1 到 64 個字元之間，只能包含小寫英數字元、連字號和句點，且必須以英數字元開頭和結尾，也不能包含 `--` 或 `...`。因此 `acme.reports` 沒問題，但 `My-Plugin`、`-start` 和 `has--double` 都不符合規定。

準備好要發布，而不是只做測試時，manifest 也可以加入中繼資料。這個結構描述採封閉設計：只允許十個頂層欄位，不能有其他欄位（完整欄位參考）。

```json
{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "acme.reports",
  "version": "1.2.0",
  "description": "Revenue reporting skills and the MCP server they call.",
  "author": { "name": "Acme Data", "url": "https://acme.example" },
  "homepage": "https://acme.example/reports-plugin",
  "repository": "https://github.com/acme/reports-plugin",
  "license": "Apache-2.0",
  "keywords": ["reports", "finance", "bigquery"]
}

```

這是十個欄位中的九個。最後一個是 extensions，用於放置客戶端專屬資料，稍後會再介紹。author 也可以選擇性加入 email。

version 應該使用 SemVer，license 則應該使用 SPDX；不過，如果字串格式不正確，客戶端不會因此拒絕你。JSON 型別錯誤則是另一回事：即使是選用欄位，該是字串的地方放了數字，也會造成致命錯誤。只有兩種結構描述違規不會造成致命錯誤：未知的頂層欄位，以及不是物件的 extensions 值。這兩者都會被回報並忽略，plugin 仍然可以載入。其他所有錯誤都是致命錯誤，客戶端會拒絕整個套件。

有一項規則常讓正在遷移大型 skill 程式庫的人踩雷。探索只會深入一層：客戶端會讀取 skills/ 的直接子資料夾，不會遞迴搜尋（探索規則）。如果你過去將 skill 分組放在分類資料夾中，那些 skill 在封裝後就會直接消失，而且不會有錯誤說明原因。

![說明 skill 資料夾加上 manifest 即可構成 Agent Plugin 的架構圖](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/8284eebce2a1577a.jpg)

<details class="chart-data"><summary>展開畫面重點</summary><div class="me-note">畫面頂部標題：「You have already built most of one」
副標題：「A skill folder plus one manifest is a plugin」
左側方框內容：「Your skill folder」下方標示「skills/ + SKILL.md」，方框下方有綠色橫條。
中間有加號（+），接著是方框標示「plugin.json」，下方有黃色橫條。
右側有等號（=），接著是方框標示「An Agent Plugin」，下方有藍色橫條。
底部文字：「The migration is a single file.」</div></details>

## 工具會和你的專業能力一起移動

mcp.json 放在 manifest 旁邊，用來宣告 skill 所需的伺服器。它只有兩個頂層鍵，而每個伺服器都必須明確宣告傳輸方式：

```json
{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
  "mcpServers": {
    "reports": {
      "type": "stdio",
      "command": "./bin/reports-server",
      "args": ["--cache", "${PLUGIN_DATA}/cache"],
      "env": { "TEMPLATES": "${PLUGIN_ROOT}/templates" },
      "cwd": "${PLUGIN_DATA}"
    },
    "deployment-api": {
      "type": "streamable-http",
      "url": "https://deploy.example.com/mcp",
      "headers": { "X-Tenant": "public-tenant" }
    }
  }
}

```

共有三種傳輸方式，必要欄位也各不相同（MCP server reference）：

```
stdio             type, command      + optional args, env, cwd
streamable-http   type, url          + optional literal headers
sse               type, url          deprecated; client support optional

```

command 必須是一個可執行檔 token，而不是 shell 指令。它可以是依照平台搜尋規則解析的純名稱，也可以是以 `./` 開頭、相對於 plugin 的路徑。Placeholder 展開刻意不套用於 command，因此 bundled binary 會透過那個 `./` 路徑找到，沒有其他方式。

這兩個 placeholder 是客戶端提供給 stdio 子程序的環境變數，而它們之間的差異比名稱看起來更重要：

```
${PLUGIN_ROOT}    plugin 的絕對路徑。從這裡讀取範本、
                  設定檔和隨附的 asset。

${PLUGIN_DATA}    在 plugin 更新後仍會保留的可寫入目錄。
                  快取、索引和本機狀態都放在這裡。

```

如果寫入 PLUGIN_ROOT，下一次有人更新 plugin 時，你的狀態就會消失。這兩個 placeholder 只會在 args / env 值 / cwd 中展開，不會套用於環境變數鍵、command、遠端 URL 或 headers。展開是文字式且只執行一次，因此不會巢狀展開。

Headers 是套件中任何下載 plugin 的人都能讀取的文字資料，因此規格禁止將憑證放在其中。Agent Plugins 1.0.0 完全沒有定義可攜式的 OAuth 或憑證參照欄位。驗證由客戶端管理。

![reports-plugin 資料夾結構展示，包含 skills 與 mcp.json 兩個核心組成部分](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/4bdb1414f904bdad.jpg)

<details class="chart-data"><summary>展開畫面重點</summary><div class="me-note">- 頂部標題：「What travels together」
- 副標題：「Expertise and tools in one package」
- 容器區塊標題：「reports-plugin/」
- 左側子區塊：
  - 標題：「skills/」
  - 描述：「what the agent knows」
- 右側子區塊：
  - 標題：「mcp.json」
  - 描述：「what the agent can do」
- 底部標題：「One folder carries both.」</div></details>

## 元件會各自獨立失效

如果你的 MCP 伺服器無法啟動，skill 仍然會載入。規格要求客戶端繼續載入其他所有內容，並且應該回報失敗，而不是將錯誤吞掉。對於無效項目，或宣告了客戶端不支援之傳輸方式的項目，規格更進一步要求：客戶端必須略過該項目並繼續執行。

失敗範圍分成三個層級（失敗邊界），而除錯工作的關鍵，多半就在於判斷你遇到的是哪一層：

```
Manifest invalid          → 拒絕整個 plugin，不載入任何內容
mcp.json invalid          → 停用所有 MCP，但 skill 仍然載入
One server unreachable    → 停用該項目，其他伺服器仍然載入

```

缺少元件也可以接受。沒有 mcp.json 的 plugin 不代表損壞，因為缺少元件位置並不是錯誤。若位置的形式錯誤，例如 mcp.json 是一個資料夾，則該元件類型會失效，但其他內容仍會繼續載入。

```
reports-plugin/
├── plugin.json                  ✅ 載入
├── skills/summarize-report/     ✅ 載入
└── mcp.json
    ├── reports                  ✅ 已連線
    └── deployment-api           ❌ 無法連線 → 已回報、略過

```

這就是 bundle 與套件格式之間的差異。Bundle 是全有或全無；套件格式則能讓部分元件降級，這也是為什麼可以放心把同時包含指示與需要連線到網路之伺服器的資料夾交給別人。

![說明元件獨立失敗機制的架構圖，展示伺服器故障時 skills 與其他部分不受影響的降級狀態](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/d24de7bf03d15fa0.jpg)

<details class="chart-data"><summary>展開畫面重點</summary><div class="me-note">頂端標題文字：
Components fail independently
A dead server does not take your skills down

中央區塊（標題：reports-plugin/）：
- 第一個項目：plugin.json，右側帶有綠色打勾圖示與文字「loads」以及綠色底線。
- 第二個項目：skills/summarize-report/，右側帶有綠色打勾圖示與文字「loads」以及綠色底線。
- 第三個項目：mcp.json，呈灰色字樣，右側帶有紅色打叉圖示與文字「skipped, reported」以及紅色底線。

底端說明文字：
The package degrades in parts, not all at once.</div></details>

## 不需要分支，就能支援客戶端專屬行為

Hooks / commands / subagents / rules 不在 v1 中。它們太過客戶端專屬，若要標準化，就必須在不凍結任何一方產品路線圖的前提下進行。規格沒有強迫大家採用最低公分母，而是將一個由各客戶端自行管理的 namespace 交給每個客戶端。

客戶端 namespace 可以在根目錄以反向網域資料夾的形式出現，也可以作為 manifest 中 extensions 底下的鍵，或兩者同時使用。兩種形式互不要求對方存在。

```json
{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "acme.reports",
  "extensions": {
    "com.example.client": { "autoActivate": true }
  }
}

```

```
reports-plugin/
├── plugin.json
├── skills/
├── mcp.json
└── com.example.client/
    └── hooks/
```

客戶端會忽略自己不認識的 namespace，因此可攜式核心仍然保持可攜。若每個客戶端都依賴自己的 namespace，而不是核心規格，同一套機制也可能讓 plugin 在下一層資料夾再次碎片化；這是 v2 討論時需要留意的地方。

![Portable core 與 client extensions 的架構設計圖](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/38622b21765bc2ab.jpg)

<details class="chart-data"><summary>展開畫面重點</summary><div class="me-note">Portable core, client extensions
Clients ignore namespaces they do not recognise

Portable core
skills/
mcp.json

Client extensions
com.example.client/
com.other.client/

Everyone reads the core. Only its owner reads the namespace.</div></details>

## 一個資料夾，所有客戶端都能使用

目前有兩項 Google 產品以 Agent Plugins 的形式發布。Agents CLI 將我們在 Agent 建置、評估、部署、可觀測性和發布方面的專業 skill 封裝起來。Data Agent Kit 則提供 Spanner、Cloud SQL 和 AlloyDB plugin，另外也提供涵蓋 BigQuery 的入門套件，讓你可以在現有使用的 coding agent 中直接採用。

在 Antigravity CLI 中，只需要一個指令：

```shell
agy plugin install https://github.com/GoogleCloudPlatform/data-agent-kit
```

其他客戶端仍各自擁有安裝程式，這正是規格正在填補的缺口：

```shell
# Claude Code — marketplace，接著是 plugin，最後重新載入
claude plugin marketplace add GoogleCloudPlatform/data-agent-kit
claude
  /plugin install <plugin-name>@data-agent-kit   # 工作階段中
  /reload-plugins                                # 工作階段中

# Codex — marketplace，接著是 plugin
codex plugin marketplace add GoogleCloudPlatform/data-agent-kit
codex plugin add <plugin-name>@data-agent-kit
```

目前能讀取可攜式格式的客戶端數量正在增加，清單已發布並持續更新於 agent-plugins.org/compatible-clients。

這是我們實際操作後得到的一項提醒。相容性規範允許部分實作：客戶端至少必須支援 stdio 和 streamable-http 其中一種，且應該同時支援兩者；sse 則是選用項目。只要採用任一種現代傳輸方式，在目前列出的所有客戶端中都能安全運作，但在宣稱 plugin 可用於某個客戶端之前，最好先在第二個客戶端中測試。

## 決定要封裝什麼

不是所有東西都需要 plugin。沒有工具的單一 skill，直接作為 skill 使用就很好。只服務單一客戶端的單一伺服器，使用一般 MCP 設定會更簡單。當指示和工具必須一起抵達，而且要在多個地方使用時，再考慮使用 plugin。

![決定打包方式的流程圖，說明如何根據是否需要 tools 以及 client 數量來選擇打包成 skill、mcp.json 或 plugin](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/ea13476b00c8474b.jpg)

<details class="chart-data"><summary>展開畫面重點</summary><div class="me-note">畫面為一張標題為「Deciding what to package」的流程圖，副標題為「Not everything needs to be a plugin」。

流程圖內容如下：
- 頂層判斷：「Does it need tools?」
  - 若為「no」：導向「Ship a Skill」（下方有綠色橫條）。
  - 若為「yes」：導向下一步判斷：「More than one client?」
    - 若為「no」：導向「Ship mcp.json」（下方有黃色橫條）。
    - 若為「yes」：導向「Ship a Plugin」（下方有藍色橫條）。

底部文字為：「Reach for a plugin when instructions and tools must arrive together.」</div></details>

## 無法載入時

實際上，我們遇到的每個失敗案例都沒有明確顯示錯誤，不過只有第一種情況是規格刻意設計成靜默處理：巢狀太深的資料夾永遠不會被探索，因此客戶端沒有任何內容可以回報。對於無效的 SKILL.md，規格要求客戶端應該回報，但我們嘗試過的客戶端都沒有這麼做。每種情況都有不同的特徵：

```
Skill missing, no error          深度超過 skills/<dir>/SKILL.md
Skill missing, still no error    SKILL.md 缺少 name 或 description frontmatter
No tools at all                  頂層 mcp.json 無效，所有 MCP 都被停用
One tool missing                 該伺服器項目無法連線或無效
Nothing loads                    manifest 必要欄位使用了錯誤的 JSON 型別
Binary not found                 在 command 中使用了 placeholder，但 command 不會展開 placeholder
State lost on update             將資料寫入 PLUGIN_ROOT，而不是 PLUGIN_DATA
```

目前還沒有標準驗證工具。專案的非規範性 future-considerations 文件提出了 plugin linter，以及針對客戶端實作的相容性測試套件，作為未來版本可能定義的內容，但目前都尚未定案。現階段的檢查方式，是在實際客戶端中載入 plugin，並閱讀診斷資訊。

## 目前還無法一起移動的內容

憑證是第一個缺口。Plugin 不得嵌入秘密，也沒有可攜式欄位可以參照憑證，因此任何位於需要驗證之 gateway 後方的服務，仍然需要依各客戶端個別設定。資料夾可以移動，但驗證設定仍留在原本的客戶端環境中。

第二個問題是與既有格式發生名稱衝突。Claude Code 使用 `.claude-plugin/plugin.json` 和 `.mcp.json`。Antigravity 使用 `mcp_config.json`。這些檔案位於可攜式結構旁邊，而不是其中。接下來可能會有一段過渡期，同一個 repository 同時攜帶兩種格式；在除錯一個其實從未被載入的 plugin 之前，請先確認客戶端實際讀取的是哪一個檔案。

還有兩項狀態資訊值得注意：ADK 的 Skills 支援仍處於實驗階段（Python v1.25.0、TypeScript v0.6.1、Go v1.2.0），而 Agent Plugins 1.0.0 目前以 Working Draft 形式發布。

## 今天就開始

大約一分鐘內就能建立一個有效的 plugin：

```shell
mkdir -p acme-reports/skills/summarize-report
cd acme-reports

cat > plugin.json <<'JSON'
{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "acme.reports"
}
JSON

cat > skills/summarize-report/SKILL.md <<'MD'
---
name: summarize-report
description: Summarize a quarterly revenue report into an executive brief.
  Use when the user asks to summarize, condense, or brief a financial report.
---
Produce three sections: Headline, Numbers That Moved, Risks.
Keep it under 300 words.
MD
```

接著從這裡逐步擴充：

1. 先轉換一個真實案例。將它指向你已經寫好的 skill，並確認沒有任何內容位於 skills/ 底下超過一層。

1. 加入工具。撰寫 mcp.json。Bundled binary 使用 `./` 路徑；隨 plugin 發布的 asset 使用 `${PLUGIN_ROOT}`；任何需要寫入的內容則使用 `${PLUGIN_DATA}`。

1. 在第二個客戶端中開啟它，確認實際載入了什麼，而不是只確認理論上應該載入什麼。

1. 確認運作後，再加入發布中繼資料：version / license / repository / keywords。

1. 安裝我們的 Agent Plugin，以及 Agents CLI 和 Data Agent Kit，並閱讀規格

如果你喜歡這篇文章，別錯過我們上一篇文章〈每位 AI 工程師都該知道的自我改進 Agent 迴圈 7 項規則〉。也歡迎持續關注我們，取得更多內容。

## 標籤

Agent, MCP, 新產品, Google
