The mental model
- A project is your app or environment. It holds one API key (or several).
- A subject is one of your users. You choose the string:
user_8213, an email, a tenant id, a device serial — anything stable, up to 128 characters matching^[A-Za-z0-9_.:@\-]{1,128}$. - Each
(project × subject)pair is one isolated memory bag. Everything yourememberfor a subject is recalled only for that same subject.
How private is it, really
Isolation is cryptographic, not just aWHERE clause. Atlaso derives an
opaque tenant key from your project id and the subject with a keyed HMAC, and
the memory engine only ever sees that derived key as the identity. So:
- Two subjects in the same project can never read each other’s memories.
- The same subject string in two different projects (
acme-travelandacme-staging) are completely separate bags — they never collide. - Developer memory lives in its own storage plane, entirely separate from Atlaso’s consumer users.
The subject header is a claim, not a login
When you sendX-Atlaso-Subject: user_8213, Atlaso trusts that your server
already authenticated that user. Whoever holds the project key can name any
subject — that’s why the key stays server-side and you do your own auth first.
For devices where you can’t hold the key server-side, mint a
per-device credential instead: the subject is baked into the
credential, so a compromised device can only ever touch its own bag.
Choosing subject ids
- Use a stable, opaque id you control — your internal user id is ideal.
- Don’t put personal data in the subject if you can avoid it. Atlaso scrubs recognized secrets, credentials, and high-entropy tokens from memory content, not subject identifiers — treat the subject like an identifier.
- One real user = one subject. If the same person uses your app on phone and web, use the same subject so their memory follows them. If you want a device to have its own separate memory, give it its own subject.
There’s no “create subject” call — a subject springs into existence the first
time you
remember for it, and is gone once you
purge it.