SKIBOX: Wrangling the API Keys Across a Pile of AI Tools
SKIBOX is an API key manager that lives in your terminal. My machine has claude code, codex, cline, gemini cli, openclaw, and a whole pile of AI coding tools installed, and every one of them stores its key in a different place and format. Rotating a token, or switching a given tool to a different backend, means digging through each config and editing by hand, and one wrong character means half a day of debugging. SKIBOX handles this once and for all: you log into an OpenAI-compatible backend (it defaults to my own https://skiapi.dev, but you can point it at your own), then view, create, delete, and switch tokens in a TUI. Whichever one you pick, it writes the token straight into the config files of each AI tool on the machine, so there’s no more manual editing. That’s the core.
I threw in a chat interface while I was at it: pull the backend’s model list, pick one, and chat right in the terminal, with streaming support. Configs get broken all the time, by me or by other tools, so I added diagnostics that detect anomalies and try to auto-repair them.
A pure-terminal thing needs to start fast, ship as a single file, and run anywhere on a whim, so I used Go. The interface goes with the charm stack: Bubble Tea for the TUI, Bubbles for components, Lip Gloss for styling, Markdown rendering handed off to Glamour, and config read/write via Viper. The update logic is a state machine, and switching between the login, main, chat, init, and repair screens stays clean.
The part that took the most thought is toolswitch, which pokes tokens into other tools’ configs. Every tool has a different structure, so each one has to be adapted individually. The scariest thing when writing files is crashing halfway and corrupting someone’s config, so I did atomic writes: write to a temp file first, then rename. fileutil is what does that. Platform paths are handed off separately to platform for detection and assembly.
Login supports username and password plus optional 2FA. Data stays on the local machine only and is never written back to the repo: config lives in ~/.skibox/config.json, chat history in ~/.skibox/sessions.json. Early on it used ~/.skiapi-helper/, so if the new file isn’t there it reads the old path to do a migration.
Building from source needs Go 1.24.2 or above. The scripts prefer the local Go/ toolchain in the repo and fall back to the system go if it’s missing. On Windows build.bat release, on mac build-mac.bat release, or most directly go build -o skibox.exe. For development I usually just go run .. MIT.