Skip to main content
Four fields on every retrieval that say which engine answered and whether you should trust it as much as usual. Returned by POST /v1/retrieve.
200 application/json

What it is

Exo has two engines behind one route. Brain path, the org’s trained ExoBrain answering from learned weights (in practice, a model that has seen this graph and settled on a region of it). Hybrid path, vector plus keyword search over stored content, fused by reciprocal rank (in practice, ordinary retrieval, run when the brain cannot serve). You never choose. The route picks, then tells you what it picked. That last part is the design decision worth the page: a memory API that quietly degrades is worse than one that fails, because you cannot tell a thin answer from a wrong one. So path names the engine, degraded is the one boolean to branch on, and degradationReason says why.

Where it comes from

Two things in that diagram surprise people. A stale brain still answers: staleness is reported, not routed around, because a slightly out-of-date brain is still the best answer available. And cold_start overrides the other reasons: if the hybrid fallback ran and found nothing at all, the reason you get back is cold_start regardless of why you were on the fallback in the first place.

Fields

The four states you can actually see

path: "hybrid" with degraded: false cannot happen. Every hybrid response is degraded by definition.

no_brain and brain_stale are different problems

no_brain is a setup gap: nobody has trained this org’s brain. The fix is POST /v1/brain/train, once. brain_stale is a maintenance signal: a brain exists and the graph has moved. It is raised two ways. The brain itself reports divergence when node and edge counts drift far enough, which sends you to the hybrid path. Separately, every mutation through the public API stamps the brain dirty, which keeps you on the brain path but sets degraded: true. That second mechanism exists because editing a node’s text or tombstoning it never changes a count, so a count check alone would call a stale brain healthy. cold_start is neither. It says the search found nothing, so check that the subject has content and that their import jobs have finished before you look at the brain at all.

How to use it

Branch on degraded once, and let degradationReason decide what you tell the user.
Write the null branch of cognition first. On a new org every retrieval is hybrid, so the degraded path is the one your code will exercise before any other.

Details worth knowing

Usually thinner rather than wrong. Hybrid retrieval still ranks the right content; what it cannot give you is the reasoning trace, the focal set, or the brain’s own confidence. If your product only shows sources, a degraded response may be indistinguishable to the user. If it shows confidence or explains itself, degraded is the field that should change the wording.
sources with full provenance, contradictions, usage, traceId, latencyMs, expand=sources.content and streaming. Only cognition is withheld, because the hybrid path has no reasoning state to report and inventing one would be the exact dishonesty these fields exist to prevent.
Retrain with POST /v1/brain/train. Training is asynchronous and one train per org may be in flight, so a second call while one is running returns 409 conflict. The serve path picks the new brain up on its own once training finishes; you do not restart anything.
Because it is per call, not per org. It fires when this particular query matched nothing for the effective subject. A wrong X-Exo-Subject, a subject who has genuinely ingested nothing, or an import that is still running all produce it. Check GET /v1/jobs before assuming the query was bad.

Limits

  • The route decides. There is no parameter that forces the brain path or forbids it.
  • degradationReason is typed as a plain string. The three values above are what ships today; keep a default branch.
  • A brain_stale response does not say how stale. cognition.driftRate is the closest thing to a magnitude, and it only covers the region this query touched.
  • path describes the engine, not quality. It is not a confidence score, and it should not be shown to end users as one.

Next

Cognition

The block that is present on one path and null on the other.

ExoBrain

What the per-org model is, and what training it costs you.