checkfu-runner — the Runner this page
starts — is the customer-side executor, and it is the one Checkfu ships for the
lanes that are physically outside Checkfu’s own infrastructure: your own pools,
local Docker, host-process. Checkfu-hosted execution is ratified to run a
different implementation of the same wire (D217), so treat the protocol as the
compatibility surface and never a shared binary. Nothing about the contract below
changes under that split: it is public, versioned, and the thing both sides
implement.
How it works
The Runner makes outbound HTTPS requests to the control plane, claims only work inside its server-owned enrollment ceiling, provisions the admitted sandbox, and reports observations. Checkfu never dials your machine: no inbound port, tunnel, or webhook receiver is required. The Session remains the settlement authority. A Run executed on your laptop therefore writes to the same durable event log as one executed on hosted capacity, and the transcript does not depend on that laptop staying awake. Stopping a Runner fences new claims and drains owned work. Revoking its credential is the control-plane kill switch for later claims and writes.Choose an enrollment scope
Use pairing for a person’s machine. An admin creates a short-lived code naming the active Principal; redeeming it stamps that Principal into a new Runner credential. The machine can claim only Sessions for that Principal and never asserts or widens its owner ceiling. The example uses the customer root key for Organization management. A Workspace-bound admin key can create the same pairing. The root key, Workspace, and Principal variables come from Access and identities.code. Give only that code to the person
starting the Runner; do not give them the root key.
For a shared, Workspace-wide machine, an Organization root key can instead create a
BYOC Runner key directly. The target Workspace is in the body.
secret once. The resulting credential is a
Workspace-scoped, BYOC-only bootstrap and recovery secret, not the bearer
used by steady-state Runner traffic. Both enrollment paths use the server’s default
compatibility ceiling unless the authenticated creator supplies an explicit,
valid runner_enrollment. The stored enrollment remains the ceiling: an
advertised capability outside it never becomes claim authority.
Enroll an exact Cursor login
Cursor is the first harness-owned model lane. It is intentionally narrower than ordinary Docker enrollment: the API-keyrunner_enrollment, the Runner’s live
advertisement, the Agent’s pinned HarnessProfile/Release and ModelRoutingProfile, and
the eventual claim must all agree on one non-secret tuple:
runner_enrollment field of the Workspace Runner-key
request above. The named RunnerPool must already exist, and the AgentDefinition
must route to it. Use arm64 instead of amd64 when that is the Runner host’s
architecture. The Cursor catalog entry remains image_required; build the
recipe and use its digest-pinned release before copying the profile version and
release digest into enrollment.
Configure the same tuple locally, with the credential only in the Runner
process environment:
Start the Runner
Two flows start the same Runner. From a prepared Checkfu source checkout (see CLI access)checkfu runner start builds
and starts the Runner. From the private packaged CLI artifact the same command
launches an embedded Runner directly — no build, no checkout. This packaged
lane is a developer-laptop path for exercising the local-agent protocols; it is
not the D77 supported customer-hosted deployment product, whose gates stay
open, and the private archive is qualification evidence, not a customer
distribution channel.
For a principal-scoped pairing, pass the one-use code returned above:
secret; the credential already selects its Workspace:
Choose a local sandbox tier
The default for every lane — hosted, BYOC, and both local ones — is stated together with its capability consequences on Sandbox defaults.--sandbox selects the local execution tier. The packaged laptop lane defaults
to host-process, which runs harnesses as ordinary OS processes with your
machine’s own network — no container isolation and no egress enforcement. That
is a deliberately weaker posture than the guarded Docker path (D130/D167); the
Runner advertises exactly that realized behavior, and managed Runs still admit
it only against exact conformance evidence. It is the zero-Docker default so a
laptop with no daemon still serves work. Pass --sandbox docker to use a
configured Docker daemon with a pinned model relay (auto-detected when the
daemon is running), or --sandbox none to disable the CLI-controlled
host-process tier while preserving other explicit provider configuration. Inherited
CHECKFU_ENABLE_HOST_PROCESS_SANDBOX=true always wins — weak isolation is
chosen, never silently inherited. Exact false is also accepted; any other
defined value fails before launch.
checkfu doctor covers the lane end to end: it proves API readiness and lists
the Workspace’s live Runner presences, including each paired Runner’s
server-stamped owner principal, lifecycle status, placement, and advertised
capabilities.
From a source checkout, runner start builds the Runner; from the packaged
artifact it launches the embedded one. Either way it attaches to the control
plane, streams its output, and turns Ctrl-C into an owned drain. The process
runs until interrupted.
On every start it exchanges the bootstrap credential once for a distinct
15-minute workload identity bound to the Workspace, RunnerPool, owner,
RunnerGeneration, an in-memory process nonce, and the admitted capability
ceiling. Presence, claims, heartbeats, observations, and control calls use only
that short-lived identity. Rotation is automatic; concurrent use of one
RunnerGeneration under another process nonce revokes that generation as a
clone, and explicit revocation immediately fences both the current bearer and
its bounded in-flight overlap.
CHECKFU_RUNNER_IDLE_TIMEOUT_MS is the maximum silence inside one harness turn,
not a process idle-exit timer. Docker is needed only for admitted container
sandboxes; the opt-in host-process tier has a deliberately smaller capability
envelope and still requires exact conformance evidence.
Verify readiness
List the Workspace’s unexpired Runner presences with a read-capable credential. This example reuses the customer root key, which must select the Workspace:owner — the Principal and
optional machine label the pairing named. The owner comes from the
credential’s enrollment, never from the Runner’s heartbeat, so a machine
cannot claim to be someone else’s. Pass ?owner=<principal id> to filter the
list to that person’s paired machines — the “your machine is connected” check
an application renders per end user; Workspace-scoped Runners never match an
owner filter. From a backend, the SDK’s
client.runnerPools.createRunnerPairing mints the code and the standalone
redeemRunnerPairing export performs the machine-side redeem the CLI itself
uses. A presence is an expiring liveness
projection, not lease authority or proof that every harness is usable. A
ready Runner can claim only Sessions whose admitted target intersects its
enrollment and advertised capabilities and has the required conformance
evidence. pnpm exec checkfu doctor --api-url "$CHECKFU_API_URL" performs the
bounded API-and-presence readiness check when the source-checkout CLI is
configured with an authenticated connection. For the variables used on this
page:
What stays honest
- Conformance is evidence, not configuration. An exact release/driver/provider tuple serves managed Runs only after the server-owned conformance suite proves its realized behavior.
- Capabilities are intersected ceilings. The Runner advertises what it can realize, the credential bounds what it may claim, and the Session freezes the admitted target. Self-advertisement alone is never platform truth.
- Owner scope only narrows. Pairing stamps the owning Principal on the server. A person cannot use the code or claim body to select someone else’s Sessions.
- Presence is disposable. Missing or expired presence means no recent heartbeat arrived; it does not rewrite Session history or settlement.
- Revocation is immediate for later control requests. Revoking the Runner key blocks subsequent claims, observations, and settlement writes from that credential.