Skip to content

Commit 6e000df

Browse files
phurynclaude
andcommitted
docs: add canonical provider-matrix.md, drop redundant README copies
The detailed row-by-row capability matrix now lives in docs/provider-matrix.md (searchable, screen-readable, diffable) instead of being restated three more ways in the README's Provider support section. - new docs/provider-matrix.md: the canonical what-maps-where reference, generated from capabilities.py, with the audit-vs-deploy distinction and per-cell notes - README: remove the providers.png embed (its 'catch' cells were a hand-made, un-diffable fourth copy of the same capability truth) - README: trim the Google live-preview blockquote to the parity WARNING + a link to the matrix (the enumerated maps/doesn't-map list now lives in the matrix) - README: list provider-matrix.md in the Documentation index Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent f702428 commit 6e000df

2 files changed

Lines changed: 67 additions & 3 deletions

File tree

README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,15 +198,13 @@ A subagent roster is a **universal** capability, not a per-provider lottery: `na
198198

199199
### Provider support
200200

201-
![The provider map: one neutral folder, three runtimes. Anthropic Managed Agents (deploy live + export anthropic-yaml; all six dimensions exercised server-side), Google Vertex AI Agent Engine (deploy preview, live-verified; compiles prompts + subagents + skills + URL MCP to a real reasoningEngine, all six exercised server-side), OpenAI Agents SDK (export + self-host; subagents as agent-as-tool).](providers.png)
202-
203201
| Runtime | How agentlift targets it | Notes |
204202
|---|---|---|
205203
| **Anthropic Managed Agents** | `deploy` (live) + `export anthropic-yaml` | reference target; the folder maps 1:1. `export` emits the YAML the official `ant` CLI consumes — `ant` is one of agentlift's *outputs*, not a competitor. |
206204
| **Google Vertex AI Agent Engine** | `deploy --target google` (live, preview) + `export google-adk` | Live `reasoningEngine` with confirmed server-side coordinator→subagent delegation. The deploy now also maps **skills** (SKILL.md bundles ship inside the engine's source package, loaded via ADK `load_skill_from_dir`) and **URL MCP servers** (each an ADK `McpToolset` with a `tool_filter` allowlist; inline auth header values resolve from your local env into Agent Engine `env_vars`, never inlined into source). Idempotent create/update/skip via a spec hash. Remaining gaps: `:ask`/per-tool approval, the built-in tool sandbox (Python/JS only), and stdio MCP servers; Claude models map to Gemini. See [tested-platforms](docs/tested-platforms.md). |
207205
| **OpenAI** | `export openai-agents` (preview, self-host) | subagents emulated via agent-as-tool (the delegation loop runs in your app); no code-define + OpenAI-host path, so `export`, never `deploy`. |
208206

209-
> **What "live, preview" means for Google — read this before assuming parity.** The deploy carries the agent's portable capabilities onto a hosted `reasoningEngine`: the coordinator + subagents delegate server-side, **skills** ride inside the source package (loaded via ADK `load_skill_from_dir`), and **URL MCP servers** are wired as ADK `McpToolset`s with a `tool_filter` allowlist (inline auth header values resolve from your local env into Agent Engine `env_vars` — the secret never lands in the generated source). Redeploys are idempotent: a spec hash drives create / update / skip. What's still **not** mapped: the built-in tool sandbox (Vertex's is Python/JS only — no bash/web/glob-grep), `:ask`/per-tool approval (not enforced on `VertexAiSessionService`), and stdio MCP servers (host them behind HTTPS first); Claude models map to Gemini. So Anthropic remains the fullest mapping (its sandbox + `:ask` + native Claude have no Vertex equivalent), but Google is no longer a prompt-only skeleton. OpenAI is export/self-host (no hosted engine at all).
207+
> **Google is live but preview — read this before assuming parity.** Anthropic is the fullest managed-agent target today. Google deploys real Vertex AI Agent Engine agents (server-side delegation, skills, and URL MCP with inline-auth-via-env-vars all map), but parity is not exact: the built-in tool sandbox, `:ask` enforcement, and stdio MCP are not equivalent, and Claude model names become Gemini defaults. OpenAI is export + self-host only (no hosted-deploy path at all). For the row-by-row breakdown, see the **[full provider capability matrix](docs/provider-matrix.md)**.
210208
211209
#### Live coverage matrix — what actually ran, not what the docs claim
212210

@@ -371,6 +369,7 @@ Everything is here or one click away:
371369
| Doc | What's in it |
372370
|---|---|
373371
| [docs/convention.md](docs/convention.md) | The `.managed-agents/` folder spec, frontmatter, skills, MCP, `:ask` permissions, native subagents |
372+
| [docs/provider-matrix.md](docs/provider-matrix.md) | Row-by-row capability matrix — what maps where across Anthropic / Google / OpenAI |
374373
| [docs/deploying.md](docs/deploying.md) | The three deploy paths, the lockfile / where IDs live, isolation, hooks |
375374
| [docs/how-it-works.md](docs/how-it-works.md) | `parse → plan → apply → run`, determinism, idempotency, the confirmed wire format |
376375
| [docs/anthropic-mapping.md](docs/anthropic-mapping.md) | Exact local → Managed Agents field mapping + API constraints |

docs/provider-matrix.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# Provider capability matrix
2+
3+
One neutral `.managed-agents/` folder, three managed-agent runtimes. This is the
4+
row-by-row reference for **what maps where** — the detailed companion to the README's
5+
summary. It is generated from the same source of truth the tooling uses:
6+
[`src/agentlift/capabilities.py`](../src/agentlift/capabilities.py), which `agentlift
7+
audit` and `agentlift export` both read.
8+
9+
**`audit` vs `deploy` — they answer different questions.** `audit` reports each
10+
*platform's* capability (what the runtime could do); `deploy` reports *agentlift's
11+
current implementation* (what the compiler ships today). They agree on almost everything;
12+
where they differ it's called out below (built-in tools and `:ask` on Google: `audit`
13+
rates the platform `degraded`/`unsupported`, and `deploy` correspondingly skips/refuses).
14+
15+
**Legend:** ✅ native / maps 1:1 · 🟡 live, preview · 🔁 translated to a different shape
16+
(export, or model remap) · 🚧 not mapped / not enforced yet (surfaced as a diagnostic,
17+
never a silent drop) · ❌ refused / not applicable.
18+
19+
| Capability | Anthropic Managed Agents | Google (`--target google`) | OpenAI |
20+
|---|---|---|---|
21+
| **Handoff** |`deploy` (live, full) | 🟡 `deploy` (live, preview) | 🔁 `export` + self-host |
22+
| **Agents** | ✅ live, per-agent IDs | ✅ live (one `reasoningEngine`) | 🔁 export |
23+
| **Subagents** | ✅ native, server-side coordinator | ✅ server-side delegation (ADK `sub_agents`, one engine) | 🔁 `as_tool`, loop runs in your app |
24+
| **Shared skill** | ✅ uploaded once, shared by id | ✅ embedded in source pkg, ADK `load_skill_from_dir` | 🔁 Skills-API scaffold (self-host) |
25+
| **Private skill** ||| 🔁 scaffold |
26+
| **Shared MCP (URL)** | ✅ mapped |`McpToolset` + `tool_filter` | 🔁 `HostedMCPTool` scaffold |
27+
| **Private MCP (URL)** ||| 🔁 scaffold |
28+
| **MCP inline auth** | 🚧 dropped (diagnostic) | ✅ resolved to Agent Engine `env_vars` (never inlined) | 🚧 scaffold |
29+
| **stdio MCP** | ❌ refused (host behind HTTPS) | ❌ refused (host behind HTTPS) | ❌ n/a |
30+
| **Built-in tools** | ✅ mapped (`read/glob/grep/bash/edit/write/web_*`) | 🚧 skipped — Vertex sandbox is Python/JS only | 🔁 self-host runner |
31+
| **`:ask` per-tool** | ✅ permission policy | 🚧 not enforced on `VertexAiSessionService` | 🔁 client-side (your runner) |
32+
| **Idempotency** | ✅ lockfile + content hashes |`.agentlift-google.json` spec hash → create / update / skip | ❌ n/a |
33+
| **Model** | ✅ Claude (native) | 🔁 Gemini (`gemini-2.5-flash`, override with `--google-model`) | 🔁 `gpt-*` |
34+
35+
## How to read the non-obvious cells
36+
37+
- **MCP inline auth.** Anthropic's managed URL-MCP shape carries no credentials, so an
38+
inline auth header is **dropped with a warning** — the server must be public or
39+
self-authenticating. Google **does** carry it: the header *value* resolves from the
40+
deployer's local environment at deploy time into an Agent Engine `env_var`; only the
41+
env-var *name* is ever written into the plan, source, or lockfile.
42+
- **stdio MCP.** A hosted engine can't spawn a local subprocess, so a `command:`/`npx`
43+
server is refused on both deploy targets. Host it behind an HTTPS URL first.
44+
- **Built-in tools (Google).** Agent Engine's hosted sandbox is Python/JS only — no
45+
shell, no network fetch, no glob/grep over a workspace (there is no workspace). Supply
46+
equivalents via an MCP server. The agent deploys without the built-ins, with a warning.
47+
- **`:ask` (Google).** ADK tool-confirmation is not enforced under the Agent Engine
48+
session service today, so a `:ask`-gated tool stays available without a gate. Keep
49+
`:ask` agents on the Anthropic target where the gate is real.
50+
- **Subagents (per-agent IDs).** Anthropic gives each agent its own addressable id;
51+
Google deploys the whole roster as **one** `reasoningEngine` with server-side
52+
delegation, so the roster is not individually addressable (the A2A protocol across
53+
separate deployments would be the path to per-agent ids).
54+
- **OpenAI.** There is no code-define + OpenAI-host path, so OpenAI is an `export` target,
55+
never a `deploy` target. Agents + subagents are real (`as_tool` composition,
56+
trace-verified); skills and MCP compile to guided self-host scaffolding.
57+
58+
## What's been exercised live
59+
60+
This matrix is the *capability* reference — what the compiler maps. For *receipt
61+
evidence* of what actually ran on a deployed engine (all six portability dimensions, both
62+
Anthropic and Google, classified by objective runtime events), see
63+
[`tested-platforms.md`](tested-platforms.md). For the honest constraints and non-goals,
64+
see [`limitations.md`](limitations.md). The exact Anthropic field-level mapping is in
65+
[`anthropic-mapping.md`](anthropic-mapping.md).

0 commit comments

Comments
 (0)