pve-agents
Concepts

Agents and harnesses

How the controller supports multiple coding-agent implementations.

A harness defines how the controller runs one kind of coding agent. Operators create configured agents in the Agents tab; each one chooses a harness, credential, and optional model.

What a harness provides

PartPurpose
bootstrapFiles required for the agent to start unattended.
credentialHow its credential is validated and installed.
mergesSeed files that must merge with bootstrap configuration.
runnerThe process that talks to the agent's API.
readTranscriptTranslation of agent events into the operator conversation.

Harnesses register themselves by name. An unknown name fails rather than falling back to a default: the controller must never run an agent the caller did not select. The registry also limits the Types shown in Settings to the harnesses this controller build can run.

Included harnesses

claude-code runs through @anthropic-ai/claude-agent-sdk. Unresolved tool calls wait for the browser approval flow. Its credential is an OAuth token from claude setup-token.

opencode2 runs a server on loopback and subscribes to its event bus. Its credential is a JSON envelope naming the integration; the runner writes it into opencode's credential store.

The controller uses the same workspace lifecycle and UI for both.

Kind versus configured agent

  • A kind is a harness built into this release.
  • A configured agent is an operator-created row with a name, kind, credential, and optional model. Several configured agents can share a kind.

A workspace records its configured agent when it is requested; there is no controller-wide default. Changing or deleting a configured agent affects only future workspaces. Running workspaces retain the runner and credential installed when they were provisioned.

Last updated on

On this page