@moonmath-ai/zro
v0.1.11
Published
Launch coding tools with the Zro OpenAI-compatible endpoint.
Readme
zro
zro launches coding tools with the Zro OpenAI-compatible endpoint.
npx @moonmath-ai/zro login
npx @moonmath-ai/zro launch <tool>It does not edit your normal tool configs. It injects the Zro endpoint, API key, model catalog, temporary config, or Zro-owned app home needed by the launched child process.
Defaults:
- Base URL:
https://zro.moonmath.ai/v1 - Model:
minimax-m3 - Packaged model list:
minimax-m3,glm-5.2
Supported platforms: macOS and Linux. On Windows, run zro from WSL.
Usage
Store your Zro key once:
zro login
zro launch claude
zro launch codex --model glm-5.2 -- --sandbox workspace-write
zro launch codex-app
zro launch opencode --print
zro launch pi --model minimax-m3For CI, servers, or one-off runs, use ZRO_API_KEY:
export ZRO_API_KEY=sk-...
zro launch claudeFull command:
zro login [--api-key <key>]
zro logout
zro auth status
zro launch <tool> [--api-key <key>] [--model <id>] [--print] [-- <tool args...>]API key resolution order:
--api-key <key>ZRO_API_KEYenvironment variable- Stored key from
zro login
If none is present, zro exits with a clear error. zro login stores the key in ~/.config/zro/credentials.json with 0600 permissions. It only stores Zro credentials; it does not edit Claude Code, Codex CLI, Codex App, OpenCode, Hermes, OpenClaw, or Pi config.
Model selection:
- Pass
--model <id>for a specific model. - In an interactive terminal,
zroopens a model selector. Use Up/Down and Enter, or type the number/model id. - In non-interactive runs,
zrodefaults tominimax-m3.
--print shows the launch plan with secrets redacted and does not start the tool.
Tools
| Command | Product | What zro launch does |
| --- | --- | --- |
| claude | Claude Code | Starts claude with Anthropic-compatible Zro env vars and model picker entries for every packaged Zro model. Type /model to switch models. |
| codex | Codex CLI / IDE backend | Starts codex with ZRO_API_KEY and an isolated temporary CODEX_HOME containing the selected Zro model and provider. The IDE extension presents the non-catalog model as Custom. |
| codex-app | Codex App | Starts codex app with CODEX_HOME=~/.config/zro/codex-app, a Zro provider config, .env, and model catalog. Your normal ~/.codex/config.toml is not modified. |
| opencode | OpenCode | Starts opencode with a temporary XDG_CONFIG_HOME containing a merged Zro provider config and an isolated copy of the user's OpenCode config resources. |
| hermes | Hermes | Starts hermes with a temporary home config that registers the Zro provider and selected model. |
| openclaw | OpenClaw | Starts openclaw with a temporary home config that registers the Zro provider and selected model. |
| pi | Pi | Starts pi with a temporary PI_CODING_AGENT_DIR containing a merged Zro models.json. |
Safety
- User config files are read when needed, but not modified.
zro loginstores only the Zro API key, not tool-specific settings.- Temporary launch files are written with
0600permissions. - Temporary launch files are created in per-launch directories under
~/.cache/zro/launches(or$XDG_CACHE_HOME/zro/launches) and removed after the launched process exits. Codex App uses persistent Zro-owned files under~/.config/zro/codex-app. - API keys are never printed unmasked.
--printredacts secret environment values.
CI checks
The Zro CI workflow builds the packed local zro package once, then runs independent jobs for Claude Code, Codex CLI, OpenCode, and Pi. Each job installs only its own client and runs that harness's compatibility and live API checks.
- Pull requests and pushes verify each client's model-discovery surface without making paid API calls.
- Same-repository pull requests and opt-in manual runs make live calls with both packaged models, exercise disabled/low and maximum reasoning settings, and require each client to report prompt-cache reads. Fork pull requests skip these checks because secrets are unavailable.
- Live API checks require the repository Actions secret
ZRO_API_KEY. Reports contain client versions and token counters, never the key or raw request headers.
Local commands:
npm run test:clients
ZRO_API_KEY=sk-... npm run test:live
# Run one harness
npm run test:clients -- codex
ZRO_API_KEY=sk-... npm run test:live -- codex