License Artifacts
In this section
There is one artifact: your license key. This page is the complete inventory of everything the engine reads or writes on its account, what a legacy install needs to migrate, and what the key issuer must mint.
The inventory
Artifact | Location | Written by | Required |
|---|---|---|---|
The key, as | process environment | you | one of these two |
The key, as a file |
| you | one of these two |
That is the whole list. The engine writes no license state to disk — no cache, no grace file, no activation record. There is nothing to clean up, nothing to copy when you move a deployment, and nothing that can go stale and give a wrong answer later.
The key
A license key is a complete, self-contained Ed25519-signed JWT. It verifies offline, against a public key compiled into the engine's binary: no network call, at install, at first boot, or ever. Air-gapped deployments are a first-class case, not a workaround.
Resolution order — first hit wins:
BRAINY_LICENSE— the environment variable. Always wins, so a deploy can inject the key with no filesystem write at all: CI, immutable images, serverless, Vault / Secret Manager.~/.config/soulcraft/brainy-license— the machine file. One key per machine. Mode0600; contents are the key itself, and a trailing newline is fine (echo "$KEY" > filedoes the right thing).
# either one — the env var is the recommended shape for anything deployed
export BRAINY_LICENSE="sc_brainy_..."
mkdir -p ~/.config/soulcraft
printf '%s\n' "sc_brainy_..." > ~/.config/soulcraft/brainy-license
chmod 600 ~/.config/soulcraft/brainy-licenseBASHCheck what the engine actually sees — the same resolver, the same verifier a real open uses, so the readout cannot disagree with a running database:
npx brainy license statusBASHIt prints the source, product, tier, expiry, renewal window and a key fingerprint. It never prints the key, writes no file, and opens no socket.
Expiry, and what it does not do
state | what happens |
|---|---|
more than 30 days left | opens; silent |
within 30 days | opens at full speed, and says how many days remain — one line at open, one a day after |
expired | at the next open, the engine registers no native providers and prints why, with the cure |
A running database is never darkened. The key is checked when the engine opens and at no other moment, so a key that lapses under a serving brain changes nothing: queries keep being answered and writes keep landing, for as long as that process lives. Nothing on a timer, on a network, or on disk can revoke a database that is already up.
And nothing here gates your data. A license buys speed. Open Brainy reads and writes the identical store with no key at all, so an unlicensed or expired engine is a slow engine, never a locked one. There is no kill switch.
There is no telemetry
None. Not opt-out, not opt-in. The engine contains no beacon, no analytics, no phone-home of any kind: license verification is offline, and nothing in the engine ever contacts Soulcraft. (An optional beacon existed in a pre-release draft of 11.0.0 and was removed before the cut — the absence is pinned by a test, so it cannot quietly grow back. If you carried BRAINY_LICENSE_TELEMETRY=off from that draft, the variable is now meaningless and can be deleted.)
Migrating a pre-11 install
Everything below keeps working — you are not required to change anything. The migration is a tidy-up, not a break.
you have | still works? | do this when convenient |
|---|---|---|
| yes, forever — with one log line naming the current variable | rename it to |
a key starting | yes, forever — issued keys never break | nothing; it stays valid to its own expiry |
| no — retired in 11.0.0 | move the key into |
| no — retired in 11.0.0 | delete the step; set the key directly |
a short activation code ( | no — retired in 11.0.0 | get your full key from https://soulcraft.com/account |
Retired artifacts, by name
None of these are read or written any more, and all are safe to delete:
artifact | retired in | replaced by |
|---|---|---|
| 11.0.0 |
|
| 11.0.0 | nothing — no license state is written to disk |
| 11.0.0 | nothing |
| 11.0.0 | nothing to point anywhere |
| 11.0.0 | nothing — there is no exchange |
| 11.0.0 |
|
Containers, CI, and hermetic tests
Pass the key as BRAINY_LICENSE. That is the entire guidance — there is no cache directory to redirect, no writable $HOME required, and nothing to bake into an image. A read-only root filesystem is fine.
For a monorepo, the old "which directory did the process start in?" question is gone with .soulcraft.json: the env var is process-wide and the machine file is machine-wide, so neither depends on the working directory.
The issuer's contract
A key is minted as sc_brainy_<header>.<payload>.<signature> — a standard JWT, Ed25519 (alg: EdDSA), signed by the issuing key whose public half the engine carries.
claim | value |
|---|---|
| licensee email |
|
|
|
|
|
|
| issued-at, Unix seconds |
| expiry, Unix seconds — |
| key id, for issuance tracking |
| subscription id |
Every paid tier gets the same gate: full acceleration. Tiers price the scale a brain runs at; they never gate a runtime capability. Renew by minting a fresh key with a later exp — there is nothing to revoke, and nothing to synchronize.