checkfu add
prints write-nothing instructions for a coding agent to build customer-owned
adapter or UI code.
CHECKFU_API_KEY and CHECKFU_WORKSPACE_ID come from
Get access; the setup script
below mints CHECKFU_SETUP_ID itself. The TypeScript tabs use the
TypeScript SDK with this client:
Provision the referenced resources
The template adopts a service Principal named Then authorize the GitHub Connection with the exact label, provider, scopes,
owner, and egress used by the template:Open the printed HTTPS URL and complete the hosted authorization before it
expires. No GitHub token enters the Blueprint or this API request. Before
applying, read the returned
tag-bot and references a
Connection named github-main. Provision both through their ordinary APIs
before apply. The Connection must be owned by tag-bot, because that is the
Principal the installed agent acts as.First create the service Principal and keep its ID:.connection.id with GET /v1/connections/{id}
and confirm lifecycle: "active", health: "healthy", drift: "none", and
custody_revoke_pending: false.The example also references an existing person Principal named owner, a model
routing profile named default-model, an active Slack ExternalInstallation named
primary-workspace, and the engineering and owner Slack scopes. Its
Workspace must provide the default-harness profile and the declared Slack and
GitHub capabilities.Validate locally
Preview the plan
create, reuse, update, publish, replace, or blocked) plus the release hash and the missing-credential steps:update; an exact live
tag-bot is reused and recorded as adopted. The local plan also assumes
referenced resources exist, so its credential line is a custody check deferred
to the server. A live apply resolves Workspace authority. If github-main is
absent, it records a non-mutating planned installation with a visible action:github-app-token owed. Restore it through the Connection’s hosted,
write-only authorization flow; never add the credential value to the package.Apply the Blueprint
Applying reconciles the Blueprint into the ordinary resources server-side and records the outcome as a BlueprintInstallation: the resolved resources with created-versus-reused ownership, any still-owed inputs, and the lifecycle. Apply from the CLI:The CLI first publishes the directory to The request carries
POST /v1/organizations/{organization_id}/agent-blueprints. The server parses and canonicalizes the package, derives its metadata and content hash, and returns an immutable release ID scoped to your Organization. The CLI then applies that release:agent_blueprint_release_id; the authenticated API key’s Workspace is the only target. A package that creates or rotates the signing value of a webhook Automation also carries a bounded write-only sidecar such as "webhook_secret_inputs": [{ "requirement": "incident-webhook-secret", "value": "whsec_…" }]. The requirement must exactly match the Automation declaration; values are compared only against the exact stored Automation version, consumed during reconciliation, and never returned or persisted in the installation. An unchanged reapply may omit the sidecar. When the webhook declaration changes, a missing exact sidecar fails before the installation or Automation is mutated. Raw package bytes are not apply authority, and neither are the available_references and credentialed compatibility hints older clients may still send. The server re-reads the immutable published package, derives references from it, proves that each concrete resource exists in the target Workspace, and records its ID.Credential requirements complete only through an exact server-side custody check; a requirement form without a settled exact slot selector fails closed as planned. A known unresolved reference likewise leaves a non-mutating planned installation, so naming a resource or credential cannot make it exist. The response is the recorded BlueprintInstallation:GET /v1/blueprint-installations lists what a Workspace has installed, and GET /v1/blueprint-installations/{id} reads one for reproducibility and drift.Operate over time
- Promotion is currently fail-closed.
POST /v1/blueprint-installations/promoteretains the dated caller-reported evaluation request for wire compatibility, but returnspolicy.deniedbecause Checkfu has not published a platform receipt issuer. A localcheckfu evalreport is unverified; saving or resubmitting it never upgrades its trust. The denial happens before package publication, reconciliation, or installation mutation, so the prior release stays active. - Roll back by re-applying an immutable prior release. Apply is idempotent and upgrade-aware, so re-applying an earlier package restores it; nothing published is mutated.
- Uninstall revokes Blueprint-owned PermissionAssignments, removes Blueprint-owned ActionPolicies, disables or archives Blueprint-managed AgentInstallations, detaches Blueprint-managed SurfaceScopes, and pauses Blueprint-managed Automations before marking the installation uninstalled. This includes adopted exposure when its effective management mode is
reconcileorreplace; references andadoptwithmanage: noneremain read-only. No data-bearing resource is deleted: MemoryStores, Connections, principals, transcripts, and artifacts are retained.POST /v1/blueprint-installations/{id}/uninstallrequires anIdempotency-Key; an interrupted attempt resumes from live aggregate state under the same operation fence. Erasure remains a separate, explicit request.
Resource capability matrix
The schema accepts dispositions more broadly than every aggregate adapter can currently execute. This is the supported apply behavior for the resource kinds used bytag-assistant:
Historical SurfaceScope selectors and historical thin Automation recipes are
reference-only. Connection creation is deliberately absent rather than
unimplemented:
checkfu blueprint plan will not imply it, so provision the
Connection through POST /v1/connections/authorize as shown above.