Skip to content

Install — Pick Your Platform

Installing worthless

PlatformGuideTime to working proxy
macOS (Apple Silicon or Intel)macOS guide~2 min on a fast network
Linux (Ubuntu / Debian / Alpine)Linux guide~1-2 min on a fast network
Windows + WSL2WSL2 guide~2-3 min on a fast network
Docker (your app runs in a container)Docker guide~5 min (one-time per project)

Note: Worthless is always installed natively on your host, even if your app runs in Docker. The Docker image is for self-hosting a worthless server for a team — not for running the CLI. See Docker guide for the full explanation.

Behind a corporate proxy or with cold uv caches, add 1-2 min for the PyPI fetch.

Common to all platforms

What worthless lock does to your .env

BeforeAfter
OPENAI_API_KEY=<your-real-key-here>OPENAI_API_KEY=<decoy-prefix>... (useless on its own)
(no OPENAI_BASE_URL)OPENAI_BASE_URL=http://127.0.0.1:8787/<alias>/v1

<alias> is a per-key identifier worthless prints during lock (e.g. openai-bab71e6a). The proxy infers the upstream provider from the alias itself, so the URL is provider-neutral.

Your app code stays the same. The OpenAI/Anthropic SDK reads OPENAI_BASE_URL and routes through the proxy automatically. The proxy reconstructs the real key only when the request passes the spend-cap gate.

Verify it works

After locking on any platform, run your app’s normal SDK path:

verify.py
from openai import OpenAI
client = OpenAI() # picks up OPENAI_BASE_URL from .env
print(client.models.list().data[0].id)
Terminal window
python verify.py
# → prints e.g. "gpt-4o-mini"

If you see a model id, the proxy reconstructed your key, hit the upstream provider, and returned the response — without your real key ever leaving the proxy process.

Never put your real API key on a shell command line. That’s the exact exfiltration worthless protects against. Use the SDK pattern above; it reads from .env at the right boundary.

Known limitations as of v0.3.3

Honest list — these are tracked, not unknown.

LimitationTracked as
Proxy doesn’t auto-restart on reboot — you must run worthless up after every bootWOR-174 (macOS launchd) + WOR-175 (Linux systemd), v1.1
Docker containers can’t reach 127.0.0.1:8787 from inside — edit .env to use host.docker.internal:8787v1.2 work
worthless up & may exit prematurely instead of staying attachedworthless-n8tj, v0.3.4
Stale orphan proxy can confuse worthless up PID detectionworthless-6gkb, v0.3.4
uv tool uninstall worthless doesn’t purge the keychain entry or ~/.worthless/WOR-435, v1.2
No worthless CLI is exposed by docker run ghcr.io/.../worthless — you still install nativelyby design; see Docker guide

If you hit something that isn’t on this list, file a GitHub issue.


Installing worthless via an AI coding agent? See agent-schema — each platform guide’s ## For AI agents section carries a fenced YAML the agent can extract without parsing prose.