BettikDocsSign in

Reference · your account

Your account

A handle, a limit on boxes, boxes, templates, keys, one token, your Claude settings, and the secrets and variables you want on every box. That is the whole model. It lives at the dashboard; this page says what each thing is and what it reaches.

Signing in

One sign-in, at www.bettik.ai, is what opens everything: the dashboard, where each box has its page, every environment's address, and — the first time — the connector. Suspend the account and all of it closes at once, on the next request.

The connector signs in the same way, once per Claude client, and renews itself while you stay signed in. There is no token in the config and nothing that expires there. (The bk_ token some older instructions mention was for a door that is closed; nothing outside a box uses it.)

Boxes

The Boxes page lists yours with their state, memory, disk, release, and how long since each was heard from — a box that has not reported in twelve minutes is marked quiet. Each card has the ssh targets and opens the box's own page: its dials, its running environments, its release, restarts, and signing Claude Code in.

Your limit starts at one. Within it, a new box is a form here or create_box from Claude, about six minutes; past it, destroy one or ask for the limit to be raised. The box called home is your default — the one the connector picks when you do not say.

Destroying a box deletes every environment running on it. Your templates stay. The name is typed back to confirm.

Paying for boxes

Boxes are priced by size and billed by the day. Every person gets one free box, ever: the first box they make, for themselves or for someone else, in any account, free for its first 3 days with no card. Every other box needs a card on its account's Billing page, so a refusal that says the free box is used means: add a card there, or make the box in an account that has one. A free box whose 3 days end without a card is powered off for 2 days, then destroyed. The pricing page has each size's price and the rest.

SSH keys

On each box's settings page. Paste the public half — usually ~/.ssh/id_ed25519.pub. A key opens the box it is set on; a new box can copy the keys of another box of yours, in any account, or of your box settings, when it is made. Adding or removing one reaches the box within a minute. Two targets per box:

ssh <box>@home.<handle>.bettik.dev      # the workbench, where you work
ssh root@home.<handle>.bettik.dev      # the machine itself: VS Code Remote SSH, scp, docker

Your Claude settings

On each box's settings page. On a box, ~/.claude is where Claude Code reads your own configuration — CLAUDE.md, settings.json, skills/, commands/, agents/, hooks/ — and it is yours: the box seeds three files once (a short CLAUDE.md, an empty settings.json, and a .gitignore that keeps sign-in, transcripts and caches out of any repository) and never writes there again.

It can be a git repository you keep. Name it on a box's settings page, or when the box is made, and the box clones it if it has nothing of yours yet. A box that already has your configuration is left alone. Nothing commits for you: the settings page and each box's card say clean, 3 uncommitted, 2 ahead, 1 behind, and the rest is git in ~/.claude, as anywhere.

On the box, bettik-profile does the moves that need care, and a session can do them for you through the profile tool:

None of them touches .credentials.json, ~/.claude.json, projects/ (transcripts and memory) or history.jsonl. A repository that tracks one of those is refused. A commit that adds what looks like a token is refused too, by a hook check-in and adopt install: values belong under Env vars, and the repository carries their names.

Memory does not travel. ~/.claude/projects/ is keyed by path and specific to a box, so it stays where it was made. Your own MCP servers live in ~/.claude.json, outside the directory, and do not travel either yet.

Box settings

A box's SSH keys, env vars and Claude settings, kept under a name with no box, on your Settings page. Save a box's from its Settings tab (or when you destroy it), or make one there and fill it in. A new box can be set up from them, in any of your accounts. They are yours alone: nobody else in a family or organization sees them, and they stay yours if you leave one. Secrets in them stay sealed, as on a box. Changing them changes no box; a box gets a copy when it is set up from them.

Env vars

Each box's own settings page, under Env vars (D131). A name and a value that you want in every shell on that box — an API key for an MCP server, a token a hook needs, a plain setting like a region. Two kinds:

On the box they are the same thing: one file each under ~/.bettik/env/, readable by you alone, and an environment variable of the same name in every shell and in every command a Claude session runs. A value you set is on the box within a minute — and in a running session's next command, with nothing to restart. Remove one and it is gone the same way.

A var is the box's alone: a second box is set up on its own page, so a key that belongs on your work box never drifts onto a play one. A box that changes hands starts with none. A session already running keeps what it had until it restarts.

GitHub

Define GH_TOKEN — a GitHub personal access token, as a secret — and gh, git clone and git push just work: the box exports it as GITHUB_TOKEN too, a git credential helper for github.com answers with it so no URL ever carries it, and an environment's seed and update get it as GITHUB_TOKEN for the clone line. It is an ordinary env var — nothing needs it, and GITHUB_TOKEN works the same if you prefer that name. A token set on the old GitHub token field became GH_TOKEN on each box that had it.

Refer to one by name. In your Claude settings, an MCP server's key is "env": { "OPENAI_API_KEY": "${OPENAI_API_KEY}" }; a hook or a script reads $OPENAI_API_KEY. Nothing you commit carries a value, only the name. The page lists the names your configuration on each box refers to and says which of them are set.

Names are uppercase letters, digits and underscores, starting with a letter. A few are the box's own and cannot be set here: CLAUDE_CODE_OAUTH_TOKEN, HOME, PATH and the like, and anything beginning _BETTIK_. Names beginning BETTIK_ are yours to use.

A session can read a value it has been given, which is what an environment variable is for. Every session on a box is told to refer to secrets by name and never print one; that instruction is the protection.

Templates

The Templates page lists every template your account has — name, kind, version, size, which environment it was saved from, and what that was installed from — with a button to share each one by link. These are what survive a box, and any box of yours can install them. The templates page has the rest.

Updates

Bettik ships releases. Your boxes take one when you say so: update available on the box's card and its page, a button there, and update_box from Claude. Taking one restarts the box's own services for about a minute; your environments and your sessions do not notice. A release that fails to install rolls itself back.

What we can see, and what we cannot

Your box reports a fact sheet to us — environment names and states, memory and disk, its release — so the dashboard can show it. That is what we see. We do not see your code, your data, or what you type: source and keystrokes go over ssh straight to your machine, and an environment's traffic is carried by Cloudflare through your box's tunnel to a gate on the box, which asks us only whether the visitor may open it. We do not see or keep the traffic. Your secret env vars, as above, are things we hold and cannot read; a variable we can, and the page shows it to you for the same reason.