The Practical Meaning of a Control Plane
OpenHands Agent Canvas is most useful when the runtime remains visible even as the interface becomes simpler. This final synthesis connects backend identity, conversation lifecycle, agent choice, automation, deployment, and extension trust into one practical question: what can Canvas responsibly unify, and what must remain the responsibility of the active backend and its operator? The answer gives a defensible way to choose an operating mode without mistaking portability for isolation or a completed UI action for a completed real-world outcome.
What Canvas unifies—and what it deliberately leaves elsewhere
The distinctive value of Agent Canvas is not that it replaces the OpenHands Agent Server, an ACP provider, or an Automation service. Its value is that it gives a person one control surface for choosing among them and for carrying the consequences of that choice through the product. Backend selection, conversation creation, settings, files, runtime events, automation records, and agent configuration can be managed from one place because Canvas keeps the handoffs between them explicit.
That creates a particular kind of continuity. A person can express a task through the same interface while moving from a local host to a remote or Cloud backend, from an interactive message to a scheduled trigger, or from the built-in OpenHands agent to an external ACP process. Canvas can preserve the user’s intention, present familiar views, scope cached data to the selected backend, and adapt requests to the transport that backend expects. It can tell the agent which runtime services are reachable and show the resulting events in chat, file, terminal, browser, or planning surfaces.
It cannot preserve every runtime fact across those moves. The active backend still owns execution authority, workspace access, the agent process, credentials, server-side validation, and much of the lifecycle. A conversation record may outlive a Cloud sandbox, but its live events still come from a runtime host. A path that works on a laptop may fail in a remote workspace. A provider login available to a local CLI may not exist in a fresh container. A schedule can dispatch a conversation, but the Agent Server still executes it. The common surface is valuable because it manages these differences; it would be misleading if it concealed them.
The backend registry is the mechanism that keeps the abstraction honest. It treats a backend as an identity and namespace, not only as a URL. Host, authentication mode, local or Cloud kind, organization scope, connection revision, and active selection determine what data and actions mean. When the selection changes, Canvas re-keys queries and can reset routes before old conversation IDs are sent to the new authority. That is why a seamless experience sometimes includes a redirect, a re-fetch, or a temporary empty state. The interface is preserving correctness rather than preserving an invalid object at all costs.
The conversation adapter performs the next translation. It binds user intent to a selected agent, model or profile, workspace, worktree, tools, plugins, hooks, context, confirmation policy, and credentials. It chooses a local ready path or a Cloud task-and-runtime path. It connects durable history to live events without assuming that the application API and runtime sandbox are the same host. In this sense, Canvas acts like a coordinator of contracts: it does not perform the work, but it decides which contract must be invoked and how its result is made legible to the user.
That is the right standard for judging the product. Ask whether it preserves identity, context, transport, visibility, and choice across supported runtime boundaries. Do not ask it to provide guarantees owned by the runtime. A control plane succeeds when a person can understand and control the handoffs. It fails when a unified screen encourages the person to forget them.
A conditional choice of backend, agent, and trigger
There is no universally best Agent Canvas deployment because the choices optimize different constraints.