Skip to content

5.5 Status & Roadmap

Multi-cloud support in Esmeralda is being delivered in small steps, each one deployed and verified end to end in a dev environment before it merges. Some building blocks from this section are on main today, some are in open pull requests, and some are planned. This page keeps the line between them explicit, so you can tell what you can deploy now from what is still arriving.

Legend: βœ… available on main Β· 🚧 in progress (open pull request or branch) Β· πŸ—ΊοΈ planned


1. Status by Building Block

Identity

Building Block Status Notes
SPIFFE Agent Identity per agent, verified by the Central Agent Gateway on every egress hop βœ… See 2.1 Central Agent Gateway.
Apigee partner authentication (VerifyAPIKey), API products and owner_identity app attribute βœ… See 1.4 Apigee X Partner Gateway.
Apigee cross-cloud capability unit: trusted-issuer KeyValueMap βœ… The KeyValueMap is managed; nothing on main reads it yet.
Cross-cloud shared flow: fail-closed OIDC verification (401 / 403), iss#sub principal, spoof-proof x-verified-* headers, key-to-identity binding 🚧 Open pull request (Apigee cross-cloud shared flow and partner chargeback).
federated and spiffe caller types in the catalog βœ… Declared and validated in the team-owned catalog/; only service_account callers and agents are compiled into IAM today.
Catalog callers compiled into the Agent Gateway per-target egress lists βœ… One callers entry drives both the callee's IAM and the gateway list; callers that don't egress through the gateway (such as the Apigee proxy) use agent_gateway: false. See 2.6 Service Catalog.
Delegated end-user credential, forwarded only to opted-in targets βœ… Kept out of logs, traces, usage records and stored sessions. See Delegated user credential.
End-user authorization enforced by the MCP tool servers (per-tool modes) πŸ—ΊοΈ The claims guard (esmeralda.mcp_authz) exists; the sample servers don't enforce it yet.
Per-agent outbound identity (no shared invoker identity across agents) βœ… Agents call out with their own Agent Identity; each callee grants the calling agent's principal. See Outbound tokens and the Agent Gateway.
Compile catalog callers into Apigee products, apps and owner_identity πŸ—ΊοΈ Today configured directly in Terraform (5.4 Steps 3–4).
Envoy cross-cloud path (JWT verification against an external issuer) πŸ—ΊοΈ The non-Apigee inbound alternative.
SPIFFE federation and mTLS callers, end to end πŸ—ΊοΈ The catalog shape exists; enforcement planned.

Connectivity & Protocols

Building Block Status Notes
A2A between agents and MCP to tool servers over *.esmeralda.internal βœ… Framework-neutral; any cloud can speak them.
Central Agent Gateway + Agent Registry: deny-by-default egress to registered endpoints (cross_cloud = "agent_gateway") βœ… External agents, MCP servers and HTTPS endpoints are registered as registry entries.
Apigee partner front door (partner-agents, partner-mcp) with LLMTokenQuota βœ… Optional; enabled with governance.apigee.enabled. partner-mcp reaches the MCP servers through a private path to the entry point, with per-product tool scopes. See 1.4.
Long unary agent-to-agent calls (no fixed 30 s time-to-first-byte cap) βœ… Opt-in hybrid agent backend (gateways.agent_backend = "hybrid"). See 1.3.
Apigee LLM proxy for agent β†’ model calls 🚧 Branch in progress. The model-router choice for this hop is summarized in 1.5 One Gateway per Hop.
Reference hybrid networking (HA VPN / Cross-Cloud Interconnect to another cloud) πŸ—ΊοΈ Conceptual guidance in 5.2; no Terraform module yet.
Registering managed: false external targets from the catalog into the Agent Registry πŸ—ΊοΈ Catalog shape exists; compile planned.

Observability & Chargeback

Building Block Status Notes
Hub-and-spoke log sinks, OpenTelemetry baggage, vw_monthly_agent_chargeback βœ… Attribution from declared baggage. See 2.3.
Apigee ML-interaction gateway records βœ… Partner app, product and token counts.
esmeralda.usage contract (contracts/usage-event.schema.json), validated in CI βœ… See 5.3.
Python producers: ADK plugin, OTel GenAI span adapter, manual API, OTel logs transport βœ… Ship with the esmeralda library.
Layer 4 usage analytics: usage table, normalized and billable views, schema-keyed metrics βœ… Read only the esmeralda.usage contract.
caller_identity / caller_issuer in Apigee records and the partner chargeback view 🚧 Part of the cross-cloud shared flow pull request.
Verified attribution, internal hops: principal β†’ team table compiled from the catalog, catalog caller guard on MCP servers (unmapped_caller: deny, flag in dev first), unregistered-caller and declared-mismatch probes, unattributed alarm on βœ… Turns chargeback from declared to verified. The caller guard, the unregistered-caller probe and the principal β†’ team load are off in prd by default. See 5.3 Β§5.
Verified attribution, partner hop: Apigee apps and cross-cloud iss#sub callers in the same table and policy πŸ—ΊοΈ Follows the cross-cloud shared flow.
Reference OpenTelemetry Collector configuration and GenAI-span-to-record processor for non-Python workloads on other clouds πŸ—ΊοΈ 5.3 Β§2 shows a starting point.
Gateway records from Envoy in the esmeralda.usage shape πŸ—ΊοΈ JSON access-log template.

Catalog

Building Block Status Notes
catalog map consumed by the Terraform units (targets, routes, probes, callers for agents and the test VM) βœ… Drives the entry point, IAM grants and esmeralda verify; env.yaml decodes it from catalog/.resolved/<env>.json.
Team-owned catalog/ folder, contracts/catalog.schema.json, esmeralda catalog resolve / show βœ… Compiles to the same Terraform input as the former inline env.yaml block. See 2.6 Service Catalog.
Additional catalog sources (Agent Registry inventory, project labels, enterprise adapters) πŸ—ΊοΈ Extension points are declared in catalog/sources.yaml.

2. The Path from Here

The remaining work follows a deliberate order: first a normalized way to describe usage, then a single list of who may call, then verified attribution on top of both.

flowchart LR
    A["Usage contract<br/>+ producers βœ…"] --> B["Layer 4 usage<br/>analytics βœ…"]
    C["Team-owned<br/>catalog βœ…"] --> D["Verified attribution<br/>internal βœ… Β· partner πŸ—ΊοΈ"]
    B --> D
    E["Cross-cloud<br/>shared flow 🚧"] --> D
    D --> F["Catalog β†’ Apigee<br/>products & apps πŸ—ΊοΈ"]
    D --> G["Envoy cross-cloud<br/>path πŸ—ΊοΈ"]
    B --> H["Reference OTel<br/>Collector πŸ—ΊοΈ"]
  1. Describe usage the same way everywhere. The esmeralda.usage contract and its producers, then the Layer 4 views that read only that contract.
  2. Know who may call. The team-owned catalog, compiled into the same enforcement the platform already uses: callee IAM and the Agent Gateway per-target lists (done).
  3. Verify, then bill. A principal-to-team table compiled from the catalog, unmapped_caller: deny as a property of the compile, and the "unattributed" alarm switched on.
  4. Widen the paths. Catalog-driven Apigee products and apps, the Envoy cross-cloud alternative, and a reference collector for workloads in any language.

Tip

Want to help? Each row marked πŸ—ΊοΈ is a self-contained contribution. See the Contributing Guide for the workflow, and open an issue on GitHub to discuss a design before you start.


Next: For every Make target and the contribution workflow, continue to 6.1 Make Targets.