Flow

Managed agent adoption

Adopt the core Pilot node first; attach a harness action boundary only when in-flight control is wanted.

Prerequisites

Adoption workflow

  1. Open Connect an agent in the management console.
  2. Select the real harness that runs the agent. The selection records the expected capability boundary; it does not pretend every harness has universal interception.
  3. Enter a node display name and choose action interception and .pilot state synchronization. Fleet reporting is required.
  4. Select Create one-time command. Pilot allocates the agent ID server-side and returns a high-entropy claim that expires after 15 minutes and is consumed once.
  5. Run the displayed command on the agent host:
curl -fsSL https://pilotprotocol.network/install.sh |   PILOT_ENROLLMENT_TOKEN='<one-time token>' sh -s --   --managed-url https://management.pilotprotocol.network
  1. If action interception is enabled, run the separate, version-pinned harness attachment command shown by the console, for example npx -y pilotprotocol-mcp@0.2.13 attach --gemini.
  2. Return to the waiting page. Pilot accepts completion only after the allocated identity sends a fresh signed report carrying the exact harness and onboarding-run marker.
  3. Create and activate a language policy, then attempt a real violating action. The guided flow completes only after it observes a semantic denial for that exact agent before the side effect.

The token is a short-lived bearer secret. Do not put the generated command in tickets, chat, source control, shared shell history, process supervisors, or screenshots.

What the one-time claim installs

The installer downloads the management-authority-pinned managed runtime, then calls pilotctl enterprise adopt. The service returns exactly one delegated node identity plus the public root pin, signed trust bundle, signed bootstrap policy, organization endpoints, adoption options, and run identity. The browser never creates a node key.

The client verifies that the credential, key, trust bundle, policy, tenant, agent ID, and HTTPS authority origins agree. It then atomically writes an owner-only attachment under $HOME/.pilot/managed/:

The enrollment token is stored server-side only as a hash, consumed before private credential material is released, removed from the process environment, and never reused. Unknown, expired, and consumed tokens return the same generic error.

Optional controls

OptionWhen enabledWhen disabled
Fleet connectionSigned health, desired state, rollout, and typed commands.Not a managed adoption; this option is required.
In-flight action controlSelected harness actions wait for signed hosted decisions and produce receipts.Ordinary harness actions remain unchanged.
.pilot state visibilitySafe state manifests and revision-checked mutations synchronize over the fleet channel.No state tree or remote state mutation.

Core adoption installs the node runtime; it does not install pilot-mcp. Harness attachment is a separate opt-in integration that reads the existing managed attachment. See Harness coverage.

How Pilot verifies adoption

The console does not trust a client-side success message. It checks:

Moving or replacing a node

A managed identity is not portable between organizations. The installer deliberately refuses a new enrollment token when $HOME/.pilot/managed/enterprise-control.json already exists. To replace or move a node, an administrator must retire or revoke the old identity, preserve required evidence, remove the old managed attachment through an approved local decommissioning procedure, and issue a fresh organization-bound adoption. There is no public self-service cross-organization transfer workflow today.

Do not copy agent.seed or the complete managed directory to clone a node. Each runtime instance should receive a distinct delegated identity and appear separately in fleet inventory.

Unmanaged compatibility

Running the ordinary Pilot installer without --managed-url and without an enrollment token preserves unmanaged behavior. Installing a harness adapter without a valid owner-only managed attachment is a zero-side-effect pass-through. Disabling or removing an optional harness boundary should restore the harness's original execution path, subject to that harness's own configuration.

Before calling a node governed: prove an allowed action, a denied action with no side effect, an approval that resumes only the exact request, an expired approval that stays blocked, a failed tool with terminal evidence, and the documented hook-timeout behavior.