Install with Docker
Set up Umpteenth on one host with Docker Compose, from an empty directory to a signed-in instance with a working model.
This setup keeps its SQLite database and its files in ./data next to the compose file, so you need no database server.
On a Kubernetes cluster, install the Helm chart instead.
Requirements
Section titled “Requirements”- A host with Docker Engine and Docker Compose on amd64 (x86-64) or arm64.
- An Anthropic API key, or an OpenAI-compatible API such as OpenAI, OpenRouter, Ollama or LM Studio.
Set up
Section titled “Set up”-
Create a directory for Umpteenth and a
docker-compose.ymlin it.Terminal window mkdir umpteenth && cd umpteenthdocker-compose.yml services:umpteenth:image: ghcr.io/stonith404/umpteenth:latestcontainer_name: umpteenthrestart: unless-stoppedports:- "8080:8080"volumes:- ./config.yml:/app/config.yml:ro- ./data:/app/data- /var/run/docker.sock:/var/run/docker.sockUmpteenth creates each run’s sandbox through the Docker socket.
-
Generate an encryption key of at least 16 bytes.
Terminal window openssl rand -base64 32Umpteenth encrypts your secrets, model API keys and MCP logins with the key and signs sessions with it. Keep a copy with your backups: under a different key, Umpteenth can’t decrypt what it stored, and everyone has to sign in again.
-
Pick how you sign in.
Umpteenth has no passwords, and passkeys work without any setup. To sign in through an identity provider or with GitHub instead, register Umpteenth with it as Sign-in shows, and come back with a client ID and a client secret.
-
Create
config.ymlnext todocker-compose.yml, with the key and any provider.config.yml app:url: http://localhost:8080encryption_key: "<the key from step 2>"config.yml app:url: http://localhost:8080encryption_key: "<the key from step 2>"auth:providers:pocket-id:type: oidcname: Pocket IDissuer: https://id.example.comclient_id: "<client ID>"client_secret: "<client secret>"config.yml app:url: http://localhost:8080encryption_key: "<the key from step 2>"auth:providers:github:type: githubname: GitHubclient_id: "<client ID>"client_secret: "<client secret>"allowed_users: [octocat]app.urlis the address you open Umpteenth at, which passkeys are bound to and your sign-in provider sends you back to:- On the machine that runs Docker, keep
http://localhost:8080. - From another computer on your network, use the host’s address, such as
http://192.168.1.10:8080, and sign in through a provider, since browsers refuse passkeys on plain HTTP away fromlocalhost. - On a server that others reach, set its HTTPS address, such as
https://umpteenth.example.com, and set up the reverse proxy before you sign in. With anhttps://address, Umpteenth marks the session cookie as Secure, so a sign-in over plain HTTP on port 8080 fails.
Everyone who signs in joins your workspace, with every job and secret in it. Passkey accounts come only from you once you have yours, a
githubprovider admits only the accounts you list, and Sign-in shows how to limit an identity provider to a group.Every other option has a default, which Configuration lists.
- On the machine that runs Docker, keep
-
Start Umpteenth.
Terminal window docker compose up -dOn its first start, Umpteenth pulls the default sandbox image,
ghcr.io/stonith404/umpteenth-sandbox:latest, which takes a moment. The log showsServer listeningonce Umpteenth is up:Terminal window docker compose logs umpteenthA missing or invalid option stops the start with an error that names it, such as
app.encryption_key (APP_ENCRYPTION_KEY) is required. -
Open
app.urlin your browser.The login page reads Set up Umpteenth. Enter your Name and click Create account with a passkey, or click your provider’s button, such as Sign in with Pocket ID.
As the first to sign in, you own the workspace, and the Dashboard shows Nothing to show yet until your first job runs. If sign-in fails, the login page shows the reason.
Connect a model
Section titled “Connect a model”A fresh instance has no model providers, so jobs have nothing to run on until you add one.
-
Open Settings → Providers & models and click Add provider. Keep the Anthropic kind, paste your key into API key and click Add provider.
-
Click Test on the new row, pick a model and click Send test prompt. Replied in with the model’s answer means the key works, and Failed after shows the provider’s error.
-
Open Settings → General, pick a model for Agent under Default models, such as Claude Opus 5.5, and click Save. A cheaper Utility model, such as Claude Haiku 4.5, compiles jobs and checks results for less, and without one the Agent model does that work.


For another provider, choose OpenAI-compatible in step 1 and enter its Base URL. Models and costs explains the model roles and how to connect a local server such as Ollama. To run jobs on your Claude or ChatGPT plan in place of an API key, follow Claude Code and Codex subscriptions.
Next steps
Section titled “Next steps”Your instance is ready for your first job. To make it reachable for others over HTTPS, continue with Reverse proxy.