On November 6, 2025, the Cloud Native Computing Foundation announced the graduation of Crossplane — recognizing its maturity, wide adoption, and importance in platform engineering after more than 100 releases, including the v2 line that turned it into a foundation for full application control planes. Buried in the graduation chatter was the thesis that actually matters: AI agents need strong, declarative APIs to move beyond code generation, not another dashboard.
Here is the verdict up front: that thesis is exactly right, and it points in two different directions depending on what you operate. Crossplane solves provider breadth — one declarative API over AWS, GCP, Azure, and anything else with an API. A purpose-built, Cluster-API-based PaaS on machines you own solves fleet depth — machine lifecycle, tenant workloads, and a Render-compatible API surface end to end. Same slogan, different problems. This post works through both, with Upbound's Modelplane as the concrete example of the first.
Why an agent can't drive your platform through a dashboard
A human tolerates a UI with five wizards, three confirmation dialogs, and a "contact sales for this region" dead end. An agent cannot. What an agent needs from infrastructure is a machine-readable contract with three properties.
First, it must be declarative: the caller states the desired outcome ("three replicas of this model behind one endpoint") rather than the imperative steps to get there. Second, it must be continuously reconciled: a controller loop watches actual state, compares it to desired state, and repairs drift without being asked. Third, it must be policy-guarded: composition and admission rules constrain what can be requested, so autonomy doesn't become blast radius.
That is precisely the Kubernetes control loop generalized beyond containers — and it is why Crossplane co-creator Bassam Tabbara framed graduation around agents needing strong APIs to move past code generation. An agent that can read a schema, submit desired state, and observe status conditions can operate infrastructure. An agent handed a runbook wiki page and a cloud console login cannot, at least not reliably.
Consider the failure mode concretely. A deploy agent working imperatively — SSH here, click there, run this Terraform apply — accumulates invisible state with every step: a half-applied plan, a console session that timed out, a manual approval nobody recorded. When step seven fails, no controller knows what steps one through six did, so recovery is another improvised script. The declarative alternative inverts this: the agent declares the outcome, the reconciler owns the steps, and the status subresource always reports how far reality is from intent. That gap — between "the agent remembers what it did" and "the platform knows what is true" — is the entire reliability argument for control-plane-first design, and it is why Upbound's own conference material for Crossplane 2.0 put it bluntly: AI needs APIs, not GUIs.
The worked example: Modelplane turns a pile of GPUs into one endpoint
The clearest demonstration of the thesis shipped from Upbound itself. In June 2026, Upbound open-sourced Modelplane (Apache 2.0, v0.1) — a Crossplane-based control plane for orchestrating open-weight inference across cloud, neocloud, and on-prem clusters.
Modelplane's trick is composition, Crossplane's core primitive. Operators define high-level custom resources and Modelplane expands them into everything underneath:
- A
ModelReplicaper cluster and aModelEndpointper model, composed across as many as five clusters spanning providers. - Cluster provisioning for GKE or EKS, or onboarding of existing clusters via a supplied kubeconfig.
- Model serving on any OpenAI-compatible engine (vLLM tested), running single-node or multi-node across a LeaderWorkerSet gang.
- Model-weight caching so a new replica doesn't re-download tens of gigabytes before it can serve.
- One unified OpenAI-compatible gateway with weighted canary and A/B rollouts, exposed through the standard Kubernetes scale subresource.
Read that list from the agent's perspective: the thing the agent consumes is a single stable endpoint with a familiar schema. The multi-cloud sprawl — different cluster APIs, different GPU inventories, different provisioning flows — collapses behind a declarative boundary the agent never has to cross. That collapse is the whole value proposition, and Crossplane's provider ecosystem (Upjet-generated AWS, Azure, and GCP providers included) is what makes the collapse cover more than one vendor.
The canary story makes the value tangible. Rolling a new open-weight checkpoint to production across five clusters without a control plane means five separate rollout scripts, five places to watch error rates, and a manual traffic-shift decision per cluster. Through Modelplane's ModelEndpoint, the same operation is a weight change on one resource — shift 5% of traffic to the new checkpoint, watch the gateway's aggregated error signal, promote or roll back in one edit. The agent driving the rollout never addresses a cluster directly; it addresses the fleet. Every provider-specific detail that would otherwise bloat the agent's context window into irrelevance stays on the reconciler's side of the boundary.
The comparison: generic control plane vs. a fleet you own
So should your self-hosted platform be built on Crossplane? The honest answer is a table, not a slogan.
| Dimension | Crossplane (generic control plane) | Purpose-built Cluster API fleet (e.g. bex) |
|---|---|---|
| Problem it solves | One declarative API over many providers' resources | Full machine + workload lifecycle on machines you own |
| Provider breadth | Native: Upjet-generated providers for AWS/Azure/GCP plus community providers | Deliberately narrow: your own Hetzner-region nodes, no multi-cloud abstraction layer |
| Machine lifecycle | Delegated: clusters come from GKE/EKS/AKS or existing kubeconfigs | Owned: Cluster API provisions, upgrades, and replaces the actual machines |
| What the agent consumes | Composed custom resources (XRs/claims) you design | Render-compatible REST/GraphQL API plus MCP surface |
| Operational footprint | Requires a Kubernetes cluster to host the reconcilers | Requires the fleet itself — the control plane and the workload plane converge |
| Best fit | Tenants spread across clouds who need one request path | Teams who want push-to-deploy on flat-rate hardware with no per-resource meter |
The rule of thumb: reach for Crossplane when the sprawl is the problem — many providers, many account boundaries, one desired request path. Own the API end to end when the fleet is the product — every tenant lands on your machines, and the request path only needs to be excellent once.
Notice what the table makes explicit: these are complements at different layers, not rivals. Crossplane's own documentation draws the same line against Cluster API — Cluster API takes an exclusive focus on Kubernetes cluster provisioning, while Crossplane aims at a universal control plane for anything with an API. A Cluster-API-managed fleet could, in principle, expose composed Crossplane claims above its own machines. The question is whether the abstraction earns its keep when there is exactly one provider: yourself.
Honesty requires pricing the generic layer, not just praising it. Crossplane runs its reconcilers inside a Kubernetes cluster, so the control plane itself is infrastructure you operate: provider controllers reconcile every managed resource on a loop, and production reports put that overhead well above lighter GitOps polling (one operator measured Crossplane at 7.8% CPU against Argo CD's 3.2% with a full AWS provider and a dozen-plus compositions loaded). Provider credentials live in your cluster, composition functions are code you version and test, and every new cloud resource type arrives as a CRD you must learn. For a team whose sprawl genuinely spans clouds, that is a fair price for one request path. For a team whose entire fleet is a set of owned Hetzner machines in two regions, it is machinery with no sprawl to amortize it — a host cluster, a credential store, and a composition layer all serving a single backend that a purpose-built API already covers.
What "agents as first-class consumers" takes on an owned fleet
If the fleet is yours, the agent-operability checklist is shorter than Crossplane's but stricter, because there is no provider layer to hide behind:
- A stable, documented API contract. Render-compatible REST/GraphQL endpoints mean agents (and existing Render tooling) already know the request shapes for services, deploys, and environment state.
- Machine-readable infrastructure state. Status conditions, deploy history, and log drains must be queryable as data, not scraped from a dashboard — the same reconciliation-visibility argument Crossplane makes, applied to app lifecycle.
- An MCP surface for tool-calling agents. Model Context Protocol endpoints turn "deploy this repo" from a script the agent writes into an operation the platform offers.
- Policy guardrails by default. Preview environments, resource quotas, and network policy are the owned-fleet equivalent of Crossplane compositions: the boundaries inside which agent autonomy is safe.
And the honest non-goals matter as much as the checklist. A platform in this shape does not offer managed databases, does not abstract multiple clouds, and is not a closed SaaS — tenants bring their own Postgres (Neon, Supabase, RDS, or self-hosted on the same fleet). An agent operating this platform should know those boundaries from the schema, not discover them from an error message.
Use Crossplane for breadth, own the API for depth
Crossplane's graduation is good news for everyone building agent-operated infrastructure, including teams that will never install a Crossplane provider. It validates — at the CNCF's highest maturity level — the exact contract agents need: declarative desired state, continuous reconciliation, and policy-guarded composition. Modelplane shows what that contract buys when the problem is multi-cloud sprawl: five clusters' worth of accelerators behind one OpenAI-compatible endpoint.
But graduation doesn't make every platform a Crossplane platform. When your tenants all land on machines you own, the sprawl Crossplane abstracts away isn't your problem — and the machine lifecycle, per-tenant cost structure, and deploy-from-git experience are problems Crossplane was never built to solve. That is the seam: provider breadth on one side, fleet depth on the other. Pick the layer whose problem you actually have, and give your agents an API — not a UI — at whichever layer you own.
Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own. Star the repo on GitHub or deploy your first app today.



