Security & self-hosting

Your server. Your keys. Your rules for the agents.

Agents that work for days need room — and fences. Vancetope runs on your own machine or cluster, holds no account with anyone, and puts a gate wherever an agent could do real damage: on your files, your shell, your secrets and your budget.


Self-hosted

Runs where you put it. Talks to whom you tell it.

Two commands on a machine with Docker: one installs and starts the stack — MongoDB, Brain, web UI — the other sets up your tenant, user and model. The wizard generates strong secrets instead of shipping defaults, and pins the image version, so an update happens when you decide.

  • No phoning home. No telemetry, no licence server, no account with us. The apps answer “Data not collected” in the stores — because it’s true.
  • Your model, your contract. Vancetope ships no model; prompts go only to the endpoint you configured — or never leave the machine with a local one.
  • Agent-installable. Both setup wizards run headless from a YAML config, fail-closed, with a dry run.
  • Open source. GNU AGPLv3. Read what runs — and change it.

Get started →   Upgrading →

$ curl -fsSL https://www.vancetope.com/install.sh | bash
  wizard    port · local or external access
  secrets   generated · encryption · internal · mongo
  compose   ~/.vancetope/docker-compose.yml
  image     IMAGE_TAG=0.5.0  (pinned)
$ curl -fsSL https://www.vancetope.com/setup.sh | bash
  tenant    acme · user ada · provider your choice
  ✓ open http://localhost:9999

Encryption

Documents the server can’t read.

Some things shouldn’t be readable even by the machine that stores them. Encrypt a document with age and the server keeps only ciphertext — the key stays with you, as a passphrase or an identity file.

  • Decrypt locally in Cortex, in the terminal view or the apps — never on the server.
  • Agents respect it: tools refuse to treat ciphertext as text, and doc_encrypt checks the write gate before it locks anything away.
  • Several recipients per document, standard age format — readable with the plain age CLI, too.

Encryption spec →

# what the server stores
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgy
NTUxOSBQcmV2bGF4c0x1Z1dQb2N0R2ZqVEZ0
…
-----END AGE ENCRYPTED FILE-----

# what you see after unlocking
private/keys.md · 2 recipients · 🔓 local only