cldz: A One-Command Launcher for Claude Code
· 3 min read
cldz: A One-Command Launcher for Claude Code
cldz is a small tool I built to solve a small but constant annoyance: running Claude Code with different credentials meant remembering and exporting the right environment variables every single time. cldz lets you pick an authentication method once, then just run cldz, it sets the variables and hands off to claude, passing through any arguments. It's MIT licensed.
npx cldzz # first run walks you through setup, then launches Claude Code
The problem it removes
Before cldz, switching between an API key, a subscription login, and a Bedrock or Vertex setup looked like this every time:
export ANTHROPIC_API_KEY=sk-ant-... # or
export CLAUDE_CODE_OAUTH_TOKEN=... # or
export CLAUDE_CODE_USE_BEDROCK=1 AWS_REGION=us-east-1
claude
cldz remembers your choices in ~/.cldz/config.json and does the exporting for you. On first run it even detects credentials you already have, $ANTHROPIC_API_KEY, $CLAUDE_CODE_OAUTH_TOKEN, existing ~/.claude / ~/.codex logins, and offers to make matching profiles.
Auth methods it handles
Each profile launches one agent (Claude Code by default, or Codex) with the right variables set. The supported methods:
- Claude subscription (your existing
~/.claudelogin, nothing injected) - API key, sets
ANTHROPIC_API_KEY - OAuth token (Pro / Max, from
claude setup-token), setsCLAUDE_CODE_OAUTH_TOKEN - Custom gateway / proxy, sets
ANTHROPIC_BASE_URLandANTHROPIC_AUTH_TOKEN - Amazon Bedrock, sets
CLAUDE_CODE_USE_BEDROCK=1,AWS_REGION,AWS_PROFILE - Google Vertex AI, sets
CLAUDE_CODE_USE_VERTEX=1and the Vertex project vars - Codex / ChatGPT subscription and OpenAI API key for the Codex agent
So you can keep a subscription profile, an API-key profile, and a Codex profile side by side and switch with cldz -P <name>.
The design decisions I care about
A couple of choices that took the most thought:
- Session isolation by default. Each profile launches
claudewith its ownCLAUDE_CONFIG_DIRat~/.cldz/sessions/<profile>/. This matters because if you're already logged into Claude Code normally, that stored login would otherwise override an injected token, isolation guarantees the profile's credential is the one actually used. Your main~/.claudeis never touched. - Secrets are opt-in. When you save them, they land in
~/.cldz/config.jsonwith0600permissions. If you'd rather not, decline the prompt and cldz reads the value from the environment each run, and a matching env var always overrides the saved value at runtime. - Zero runtime dependencies. The CLI intentionally ships with none, so it stays a thin, trustworthy launcher rather than a heavy framework.
There's also a shared-history option (link every profile's history back to your main ~/.claude while keeping credentials isolated) and unified api profiles that can run either agent on either provider via a proxy when they don't match natively.
What I learned
- The boring env-var problem was worth solving. The friction was tiny per run but constant, and removing it changed how often I'd bother switching accounts.
- Isolation is a correctness feature, not just tidiness. The subtle bug, an ambient login silently winning over an injected token, is exactly the kind of thing a launcher should protect you from.
If you want to look at the code, here it is: cldz on GitHub.