A licensed instance now also sends the product name — the literal string
`jarvis` — and a checksum of the set of limits your build understands. Neither
adds anything about your network or your work: the first is a constant, and the
second is a hash, not the document.
They are here because the table above is a promise. It says it is everything
your instance sends, in full, and a field that arrived without appearing in it
would make the rest of the table worth nothing.
Nothing else changed. Still counts, not contents: no names, no email addresses,
no conversation text, no asset inventory, no credentials. An unlicensed instance
still contacts nobody at all.
The stack now refuses to create new organizations, users or agents without
`JARVIS_LICENSE_KEY`. Everything already set up keeps running, and an instance
with no key contacts nobody at all — but a fresh install gets as far as its
first administrator account and then needs a key, and that was documented
nowhere here.
The README now lists, in full and field by field, everything a licensed
instance sends: counts and a version string, no names, no addresses, no
conversation text, no asset inventory, no credentials. The only field that
identifies your network rather than measuring something is the public URL, and
it can be switched off.
Everything needed to run Jarvis on your own Docker host, and nothing else. The images are
published; this is the compose that arranges them, the environment they read, and the
prose explaining which values are load-bearing.
It lives in its own repository rather than in a directory of the product's, because the
audience is different in the one way that matters: a self-hoster has no access to the
source and no reason to want it. Handing them a monorepo path to browse would be handing
them a page of files they cannot clone, next to the four they can.
WHAT IS HERE:
- `docker-compose.yml` — postgres, redis, the api and the web. Only the web publishes a
port; it reverse-proxies /api and the websocket internally, so a TLS terminator in
front has exactly one target and the API is never reachable from outside the network.
- `docker-compose.agent.yml` — the optional overlay that supplies the compiled agent
binaries as a pullable image. Off by default, and the README says why leaving it off is
a supported state rather than a broken one.
- `.env.example` — every comment in it is load-bearing. The VAULT_MASTER_KEY note
especially: it has no recovery, and a database backup does not protect what it wraps.
- `.gitignore` — .env and database dumps, because the first thing anyone does with this
repository is fill one of those with secrets and the second is to forget it is there.
The README states the limitations plainly instead of leaving them to be discovered: SSH
host keys are not verified, access tokens survive revocation for up to 15 minutes,
self-registration is open by default and the first account created becomes super-admin,
both containers run as root, and /api/health answers 200 while the database is down.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>