BettikDocsSign in

How it works · the box

The box

A box is a machine. One person's, always on, 16 GB, at an address named for them. Everything you do with Bettik happens on it: your environments run there, the workbench is there, Claude's sessions run there. It is not shared with anyone.

Its names

home.<handle>
The box's name: a short name, then your handle. Its page on the dashboard is /dashboard/boxes/<box>.
<environment>.home.<handle>.bettik.dev
Each environment's address. The environment's name in front, then the box's name.
public.home.<handle>.bettik.dev
The box's public folder, ~/public, open to anyone with a file's link (how).
home.<handle>.bettik.dev
The machine itself, for ssh. <box>@ is the workbench; root@ is the host.
box: "<box>"
How Claude names it when a tool call needs to say which box. With one box, it never has to.

Your first box is called home. Another gets a short name of its own — dev becomes dev.<handle> — and its environments answer under it: catan.dev.<handle>.bettik.dev. A box that belongs to an organisation has the organisation's name where your handle would be.

What is on it

Three kinds of thing, kept apart on purpose.

The workbench, once. A container holding the tooling — shell, editor connection, git, node, psql, tmux, Claude Code — with every environment's directory mounted under ~/environments. This is where you and your sessions work.

Its services, built in: nothing to install, and they update with the box.

Running environments, as many as fit. Each is a small set of containers — a runtime and the services beside it — running a directory the workbench can see. No editor in an environment, no agent, no terminal: those are in the workbench. That is what keeps an environment light enough to clone in seconds.

Nothing else. Your templates belong to your account, not the box.

Your home directory in the workbench is on the box's data disk and survives restarts, updates and rebuilds. Nothing outside it does — the workbench container is rebuilt from time to time and your home comes back as it was.

Memory is the limit

Sixteen gigabytes, and a development machine spends it differently from a server: a running environment holds a runtime and a database resident, a build spikes, and an agent is the hungriest process of all. The box's page shows a dial; environment_status opens with the number; every environment's row says its share.

Starting an environment asks about room, not a count. Under 75% used, it just starts. Above that, the box answers with a question — how full it is, and which running environment has been idle longest — and the session puts it to you: stop that one, or confirm and go ahead. Under a gigabyte free is a refusal. Stopped environments hold nothing; there is a guardrail of twenty active environments that nobody reaches in a day's work.

Disk fills from the inside

Environments, images, build caches and every container's scratch share the data disk, and a session can fill it -- a repository whose image is large, a browser downloading into its own container. When it does, the tool that hit the wall says which disk and how full, environment_status shows the same line under memory, and prune_box gets space back from inside the session -- or Prune cache, at the bottom of the box's Environments tab: the build cache, the images nothing refers to, and cached template versions older than the newest of their name, and nothing else. No environment, running or stopped, loses anything to it; the next build is slower, and an install of an older version fetches it again. What it leaves is freed by removing environments: save one first with save_environment if you want it back, then destroy_environment.

Updates are yours

Bettik ships releases, and the box's page on the dashboard shows update available with a button; Claude has update_box. One that changes nothing you would notice lands on its own. One that restarts the workbench — ending its Claude sessions and terminals; environments keep running — lands on its own once nobody is working on the box, usually overnight. To have those wait for you instead, tick Only restart for an update when I press Update on the box's Settings. One that needs a new machine is never an update: the page says reimage needed.

You

Is there an update for my box?

Bettik

Running 2026.09.15-a6786b; 2026.09.17-c0ffee is available (as of 09:14). Call again with confirm: true to take it.

A release that fails to install rolls itself back. There is no button on our side that forces one onto you.

Keys, tokens, and what reaches the box

Two things set on the box's own settings page are put on it, and kept there:

Inbound, the box accepts no HTTP at all. An environment's traffic comes through a tunnel the box opens to Cloudflare, and a gate on the box checks who you are before anything reaches an environment; Cloudflare carries the requests and decides nothing. That is why an environment's address opens for you and for nobody else, and why you never have to expose a port. ssh goes straight to the machine.

Creating and destroying

Your account has a limit on boxes, one to start with. Within it, a box is a form on the Boxes page or create_box from Claude — the one tool that needs no box, because it makes one. About six minutes.

Destroying a box deletes the machine and everything on it: every running environment and its data. Your templates are not on the box, so they stay, ready to install on the next one — which is what makes destroy-and-recreate a reset rather than a loss. It is done from the dashboard with the name typed back, or with destroy_box from a session that is not on that box.

Its page on the dashboard

Everything about a box is on its page, /dashboard/boxes/<box>, reached from the Boxes page. The memory and disk dials stay beside every tab.