http reference

The laserbrain API

Send the goal your agent is pursuing right now. laserbrain scores it against the goal the run started with. That goal does not move while the agent works. You get back whether the two are still the same errand.

base https://api.phronesis.worldopenapi 3.146 operations, 4 of them keyless

start here

One call, no account

POST /v1/check is stateless and takes no credential. You hold the ground and pass it in; nothing is stored but a rate-limit counter. A hundred calls a day from one address, which is enough to decide whether it is worth a key.

curl -s https://api.phronesis.world/v1/check \
  -H 'content-type: application/json' \
  -d '{
    "ground": "write a CSV parser for the import job",
    "goal":   "refactor the logging subsystem to structured events"
  }'

what comes back

{
  "ground": "write a CSV parser for the import job",
  "verdict": {
    "drifting":   true,
    "reason":     "goal-drift",
    "phi":        0.5,
    "goal_score": 0,
    "advice":     "Your goal no longer matches the one you started with (overlap 0.00). Return.",
    "context":    "ctx_1an6e3a"
  },
  "stateless": true,
  "retained":  "nothing"
}

Send steps instead of ground and goal to replay a whole run and get a verdict per step. Two steps can only produce grounded, advancing, goal-drift or ungrammatical — the slower verdicts need history, and stalled cannot fire on fewer than five readings.

choosing between them

Who holds the ground

That is the only real decision in this API. Everything else follows from it.

POST /v1/check

you hold it, no key

You pass the ground with every call. The server keeps nothing. There is no run, no history, no retention, and nothing to leak. Right for trying it, for a curl in an email, and for an integration that already has its own store.

POST /v1/drift

laserbrain holds it, key

laserbrain remembers the ground for a run, so an agent in a loop sends one step at a time and never carries the reference itself. Run history, retention, webhook alerts and the account store all hang off this route.

A free key is issued to a GitHub account at the product page. Send it as Authorization: Bearer lb_live_…. The detector itself needs no key and never did: pip install laserbrain runs offline under MIT, and the credential is for the hosted surface only.

before you build on this

Measured precision on goal-drift is 14.6%, and the one controlled study run on laserbrain returned a null result. Both are published in full on the evidence page. They are the reason the keyless path exists. Measure it on your own work.

detector

20 operations

Scoring a step against the goal a run started with. This is the product.

POST/v1/checkno keyStateless drift check (no API key)
GET/v1/dialogueList dialogues, or read one conversation
POST/v1/dialogueSubmit one agent turn and get the collective drift verdict
POST/v1/driftLog one drift step against a retained run
POST/v1/drift/outcomeSet a run's outcome and score without adding a step
GET/v1/drift/runOne run's full drift trace
GET/v1/drift/runsList this account's retained drift runs
GET/v1/escalationPoll one escalation, or list the queue
POST/v1/escalationEscalate a persistent drift for human decision
POST/v1/escalation/decideRecord a human decision on an escalation
GET/v1/experimentPaired treatment/control token cost across retained runs
POST/v1/guidanceFramework guidance from Alice
POST/v1/modulateSingle-agent drift check plus role-styled return policy
POST/v1/operator/consultAsk whether an irreversible act should proceed
GET/v1/recursion-teamList recursion-team templates, or fetch one by name
POST/v1/recursion-teamStore a custom recursion-team template
DELETE/v1/recursion-teamDelete a custom recursion-team template
GET/v1/selfRead the persisted self and its session log
POST/v1/selfSet or advance the persisted self
DELETE/v1/selfDelete the persisted self and its log

account

8 operations

Keys, tiers, usage and cost.

GET/v1/costAggregate token cost across this account's retained drift runs
POST/v1/dataUpload a corpus and score its drift from its own first window
POST/v1/keysno keyDisabled — keys are issued through a GitHub account
GET/v1/meThis key's tier and today's usage
POST/v1/me/emailAttach or remove a contact address on this key
GET/v1/openapi.jsonno keyThis document
GET/v1/tiersno keyThe tier table
GET/v1/upgradeStripe checkout link for a paid tier

operating

9 operations

Webhook alerts and scheduled digests.

GET/v1/alertsRead the drift-alert webhook config
POST/v1/alertsSet the drift-alert webhook
DELETE/v1/alertsDelete the drift-alert webhook config
GET/v1/alerts/logRead recent alert delivery attempts
POST/v1/alerts/testFire a synthetic drift alert at the configured webhook
GET/v1/digestRead the scheduled digest config
POST/v1/digestEnable or replace the scheduled digest
DELETE/v1/digestDisable the scheduled digest
POST/v1/digest/testSend this account's digest immediately

team

6 operations

Seats, invitations and the fleet view.

GET/v1/teamTeam seats for the calling key
GET/v1/team/fleetFleet rollup across the caller's own team
POST/v1/team/inviteMint a seat invite code
POST/v1/team/joinRedeem a seat invite code
POST/v1/team/leaveGive up the calling key's seat
DELETE/v1/team/seatRemove a member from the caller's team

field

3 operations

The laserfield weather system laserbrain grew out of. Documented because it is reachable, not because it is the product.

POST/v1/hearSpeak eight vocabulary words into the laserfield (field endpoint, not the detector)
GET/v1/historyLaserfield signal series (field endpoint, not the detector)
GET/v1/signalCurrent laserfield signal (field endpoint, not the detector)

full shapes

The machine-readable copy

Every field and status code is in the OpenAPI 3.1 document. It needs no key. When a route changes, the document changes with it.

https://api.phronesis.world/v1/openapi.json