C=USThe kill switch →

Agents live where they run; C=US says who they are and what they may do

An agent should run in its native hosted environment: a Gemini agent on Google Cloud Run, an edge agent on Cloudflare Workers, a sensor agent on a farm's Raspberry Pi, a research agent in a CI pipeline. Its identity and its authority should not live there. They come from the c=US directory, and from a person whose identity is proofed through Utah's State-Endorsed Digital Identity (SEDI) program. This page sets out that architecture: what exists today, what is missing, and a first step.

The principle

Run the agent anywhere. Decide who it is, and what it may do, in one place.

The host proves which workload is running. The directory decides which agent that workload is, and which grants it holds. A SEDI-proofed person answers for it, and can stop it. Relying parties ask C=US before they act, and the host is told when to stop.

Where the agents run today

As of the evening of 11 October 2026 (US Eastern), from the deployment notes and the agent gateway's public status page, every C=US agent runs either on the cequs.com server or on the project owner's laptop. Only two act on a schedule.

AgentRuns onStarted byNative home it could have
architecture-review-001cequs.com; calls Google's Gemini APIA daily timerGoogle Cloud Run, next to the model it calls
sensor-relay-001cequs.com; reads a simulated sensor on Google Apps ScriptA timer, every 15 minutesThe sensor's own device, once it can hold a key (a TPM)
vt-maple-quality-001, qc-maple-quality-001The owner's laptopBy handThe farm or warehouse, beside the Raman analyser
research-intern-001, project-steward-001The owner's laptopBy handA CI pipeline, such as GitHub Actions
tpm-agent-demo-001, claudeClients on the laptop, checked by Cloudflare Workers at sugarbushagent.comBy handAlready partly native: the Workers check C=US at the edge

Keeping agents on the control plane's own server, or on one laptop, makes the demonstration easy to run but mixes two jobs. The server that decides authority should not also be the place every agent runs, and an agent's key should not sit on a laptop.

The shape

Native-hosted agents with a C=US control plane On the left, four native hosts run agents: Cloud Run, Cloudflare Workers, a farm device and a CI pipeline. Each sends its platform's own proof of the workload to a token exchange in the C=US control plane, in the middle, which holds the directory, the trust registry, stops and kill signals, and the signed log. The exchange returns a short-lived C=US credential. On the right, a SEDI-proofed accountable person holds a passkey that can stop the agent. At the bottom, relying parties ask the trust registry before acting. A dashed line shows stop signals going back to the hosts; that and the token exchange are not built. Native hosts where agents run Google Cloud RunGoogle-signed OIDC token Cloudflare WorkersCloudflare client certificate Farm devicekey in a TPM CI pipelineGitHub OIDC token C=US control plane cequs.com, outside every host Token exchangenot built: proof in, credential out Directory c=US / c=CAagent, workload, grants, person Trust registry and credentialsthe same rule the gateway enforces Stops and kill signalsonly take authority away Signed, hash-chained log Accountable person proofed through SEDI signs grants; stops the agent with a passkey Relying parties services, edges, other agents' gateways stop signals to hosts (not built) ask before acting
Hosts prove which workload is running; C=US turns that proof into an agent identity with current authority, and relying parties ask C=US before they act. Dashed lines mark the two pieces that are not built: the token exchange (amber) and stop signals sent back to hosts (red).

1. Identity: the host proves the workload, the directory names the agent

Every major hosting platform can already prove which workload is running, without a long-lived key copied onto it:

HostWhat it can proveExample agent
Google Cloud RunA Google-signed OpenID Connect token from the metadata server, naming the service's account and the audience it is forThe architecture review agent, beside the Gemini model it calls
Cloudflare WorkersA client certificate from Cloudflare's managed certificate authority, as agent.sugarbushagent.com already usesThe sugarbushagent.com edges
A farm deviceA key held in a TPM, which cannot be copied off the deviceThe Brix reader and, later, grading at the farm
GitHub ActionsA GitHub-signed OpenID Connect token naming the repository, workflow and commitThe research intern and the project steward

The missing piece is a token exchange at C=US, in the manner of OAuth token exchange (RFC 8693) or SPIFFE federation. The agent presents its host's proof; C=US checks it against that host's published keys; the directory maps the issuer and subject to exactly one agent entry, through a new attribute such as cequsWorkloadIdentity; and C=US returns a short-lived credential for the agent's wimse://cequs.com/agents/… identity. That credential could be the SD-JWT verifiable credential the gateway already issues at /credentials, or a certificate that lasts minutes rather than days.

The directory remains the only place that decides which workload is which agent. A workload the directory does not name gets nothing, however valid its host's token.

2. Authority: signals relying parties pull, and signals hosts are sent

3. The person: SEDI behind every agent

An agent is only as accountable as the person who answers for it. In this architecture that person's identity is proofed through Utah's State-Endorsed Digital Identity program. C=US acts as a verifier and relying party, never as the issuer: it records that the person is proofed, and a digest rather than the identifier itself. The chain of accountability then reads:

  1. a SEDI-proofed person,
  2. a dated grant they signed in the directory,
  3. the agent's workload identity on its host,
  4. each action, signed into the evidence log.

Because the person's passkey stop withdraws authority at C=US, it works wherever the agent runs.

4. Enforcement moves to where agents act

Once agents run on their own hosts, many of their actions no longer pass through the C=US gateway. Two things fill the gap:

An action against a service that never asks C=US is outside its control. That limit is the same one the kill switch page states.

What exists and what does not

PieceStatusWhere
Directory of agents, grants and accountable peopleWorks nowc=US and c=CA directories
Trust registry and SD-JWT credentialsWorks nowtrust-registry.html; the gateway's /credentials
Receiving kill signals; the person's passkey stopWorks nowZero Trust; stop my agent
Stop properties of the decision ruleProvedFormal methods: a Z3 model, tested against the code
Sandbox and guard policy digests in the deployment binding; guard proofs re-checked at registrationLocal demonstrationThe delegation demonstration
SEDI-proofed accountable personSynthetic onlyNo SEDI conformance profile chosen
Token exchange from host proofs to C=US credentialsBuilt and tested; not deployedGoogle Cloud Run tokens, advisory scopes only (2026-10-11); bound to the agent's key with DPoP and server nonces (2026-10-12)
Workload identities in the directory (cequsWorkloadIdentity)In the schema; not appliedThe live directory needs a schema upgrade
Sending stop signals to hostsNot built—
Deployment digests measured by the host, not declaredNot built—

A first step: the review agent on Cloud Run

The architecture review agent is the natural pilot. It already calls Google's Gemini API, it acts once a day, and it can only propose. The steps:

  1. Run it as a Cloud Run job under its own service account, with its Nagini-verified guard unchanged.
  2. Record that service account in its directory entry as its workload identity.
  3. Build the token exchange for Google-signed tokens: check the token, find the one agent it names, return a short-lived credential. Built and tested on 2026-10-11, not yet deployed: the agent exchanges its Google ID token for a C=US access token lasting at most five minutes and bound to a key the agent makes for each run (DPoP), so a copied token is useless without that key; every request that presents it is decided again from the directory, so a stop refuses the next request.
  4. Submit proposals with that credential, and remove the agent's private key from cequs.com.
  5. Check that a stop by its accountable person still refuses it on the next run.

Limits

Sources

Drafted by Claude Code (Claude Opus 5.5) at the project lead's request, 2026-10-11, from the project's own code, deployment notes and the agent gateway's public status page. The architecture is the project lead's direction; the design details are proposals and, except where marked, are not built or tested.