Brainy Brainy
Docs Brainy

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 BRAINY_LICENSE

process environment

you

one of these two

The key, as a file

~/.config/soulcraft/brainy-license (mode 0600)

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:

  1. 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.

  2. ~/.config/soulcraft/brainy-license — the machine file. One key per machine. Mode 0600; contents are the key itself, and a trailing newline is fine (echo "$KEY" > file does 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-licenseBASH

Check 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 statusBASH

It 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

COR_LICENSE_KEY, CORTEX_LICENSE_KEY or SOULCRAFT_LICENSE set

yes, forever — with one log line naming the current variable

rename it to BRAINY_LICENSE

a key starting sc_cor_ or sc_cortex_

yes, forever — issued keys never break

nothing; it stays valid to its own expiry

.soulcraft.json with a cor (or cortex) key

no — retired in 11.0.0

move the key into BRAINY_LICENSE or the machine file, then delete the file

npx @soulcraft/cor activate … in a deploy script

no — retired in 11.0.0

delete the step; set the key directly

a short activation code (CO-… / CX-…)

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

.soulcraft.json (cor / cortex key)

11.0.0

BRAINY_LICENSE, or the machine file

~/.soulcraft/cor/heartbeat-*.json

11.0.0

nothing — no license state is written to disk

<cwd>/.soulcraft/heartbeat.json (pre-4.2.0)

11.0.0

nothing

COR_LICENSE_CACHE_DIR

11.0.0

nothing to point anywhere

COR_LICENSE_EXCHANGE_URL

11.0.0

nothing — there is no exchange

cor activate / cor login / cor deactivate

11.0.0

brainy license status (read-only)

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

sub

licensee email

product

brainy

tier

startup | pro | growth | scale | enterprise | internal

iss

soulcraft

iat

issued-at, Unix seconds

exp

expiry, Unix seconds — 0 (perpetual) is accepted for internal only

jti

key id, for issuance tracking

sid

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.