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.
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.
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.
/v1/checkno keyStateless drift check (no API key)/v1/dialogueList dialogues, or read one conversation/v1/dialogueSubmit one agent turn and get the collective drift verdict/v1/driftLog one drift step against a retained run/v1/drift/outcomeSet a run's outcome and score without adding a step/v1/drift/runOne run's full drift trace/v1/drift/runsList this account's retained drift runs/v1/escalationPoll one escalation, or list the queue/v1/escalationEscalate a persistent drift for human decision/v1/escalation/decideRecord a human decision on an escalation/v1/experimentPaired treatment/control token cost across retained runs/v1/guidanceFramework guidance from Alice/v1/modulateSingle-agent drift check plus role-styled return policy/v1/operator/consultAsk whether an irreversible act should proceed/v1/recursion-teamList recursion-team templates, or fetch one by name/v1/recursion-teamStore a custom recursion-team template/v1/recursion-teamDelete a custom recursion-team template/v1/selfRead the persisted self and its session log/v1/selfSet or advance the persisted self/v1/selfDelete the persisted self and its logaccount
8 operations
Keys, tiers, usage and cost.
/v1/costAggregate token cost across this account's retained drift runs/v1/dataUpload a corpus and score its drift from its own first window/v1/keysno keyDisabled — keys are issued through a GitHub account/v1/meThis key's tier and today's usage/v1/me/emailAttach or remove a contact address on this key/v1/openapi.jsonno keyThis document/v1/tiersno keyThe tier table/v1/upgradeStripe checkout link for a paid tieroperating
9 operations
Webhook alerts and scheduled digests.
/v1/alertsRead the drift-alert webhook config/v1/alertsSet the drift-alert webhook/v1/alertsDelete the drift-alert webhook config/v1/alerts/logRead recent alert delivery attempts/v1/alerts/testFire a synthetic drift alert at the configured webhook/v1/digestRead the scheduled digest config/v1/digestEnable or replace the scheduled digest/v1/digestDisable the scheduled digest/v1/digest/testSend this account's digest immediatelyteam
6 operations
Seats, invitations and the fleet view.
/v1/teamTeam seats for the calling key/v1/team/fleetFleet rollup across the caller's own team/v1/team/inviteMint a seat invite code/v1/team/joinRedeem a seat invite code/v1/team/leaveGive up the calling key's seat/v1/team/seatRemove a member from the caller's teamfield
3 operations
The laserfield weather system laserbrain grew out of. Documented because it is reachable, not because it is the product.
/v1/hearSpeak eight vocabulary words into the laserfield (field endpoint, not the detector)/v1/historyLaserfield signal series (field endpoint, not the detector)/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.