|
| 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