DevStation CLI

Models & Providers

Set up a model once and every new terminal just works. Keys are kept in a file only you can read, and never in a config file you might commit.

Log in

bash
devstation login

It asks which provider, then the key (hidden as you type), then the model. Or name the provider:

bash
devstation login anthropic # Claude, directly
devstation login openrouter # one key for Claude, GPT, Gemini, DeepSeek and more
devstation login openai # OpenAI, or any compatible server: Ollama, LM Studio, Groq, Together

For scripts, the key can come from standard input:

bash
echo "$OPENROUTER_API_KEY" | devstation login openrouter

devstation logout [provider] removes stored keys. devstation config shows every value in use and where it came from.

Use your Claude or ChatGPT subscription

DevStation can hand each turn to Claude Code or Codex running on your machine, signed in with your own account. The work then counts against your Claude Pro or Max plan, or your ChatGPT Plus or Pro plan, instead of an API key.

bash
claude auth login # once, through Anthropic's own sign-in
devstation login claude-code
 
codex login # once, through OpenAI's own sign-in
devstation login codex

The session looks the same as before: every command, edit and todo list is a cell, Shift+Tab switches to plan mode, and /resume carries a conversation on. The model is that CLI's own default. devstation config set model <name>, or /model <name> in a session, passes a different one through.

Modeclaude-codecodex
normal and autoClaude Code's auto mode: a classifier reviews each actionwrites inside the project, with network access
planClaude Code's plan moderead-only

Note

DevStation never sees, stores or passes on your Claude or ChatGPT sign-in. It runs the official claude or codex program, which uses its own login. Anthropic's terms allow exactly that, and do not allow other tools to use a Claude subscription's tokens directly. Keep it to your own account, for your own work.

On these turns the engine uses its own tools, permissions and sandbox, so DevStation's container, budget and undo checkpoints do not apply. Use git, or the engine's own tools, to go back.

Endpoints

To useproviderbaseUrlKey
Anthropicanthropicdefaultyes
OpenRouteropenrouterdefaultyes
OpenAIopenaidefault (https://api.openai.com/v1)yes
Ollamaopenaihttp://localhost:11434/v1none
LM Studioopenaihttp://localhost:1234/v1none
Groqopenaihttps://api.groq.com/openai/v1yes
Togetheropenaihttps://api.together.xyz/v1yes
An Anthropic-compatible gatewayanthropicthe gateway's URLyes
Claude Pro/Max, through Claude Codeclaude-codenoneno: claude auth login
ChatGPT Plus/Pro, through Codexcodexnoneno: codex login

baseUrl is everything up to, not including, /chat/completions. The openai provider always needs a model name, because every compatible server names them differently. For a local server, leave the key blank when asked.

Where settings live

text
~/.devstation/config.json provider, model, baseUrl (global)
.devstation/config.json the same, for one project (overrides global)
~/.devstation/credentials.json API keys (owner-only, mode 600)

config.json never holds a key: it is the file people share and commit, so a key there would end up in git. An apiKey field in it is ignored with a warning. Keys go through login into the credentials file, which only you can read, and doctor warns if its permissions are ever loosened.

json
{
"provider": "openai",
"model": "llama3.3",
"baseUrl": "http://localhost:11434/v1"
}

Change one setting

bash
devstation config set model anthropic/claude-opus-5
devstation config set provider openrouter
devstation config set baseUrl https://api.groq.com/openai/v1
devstation config set model qwen2.5-coder --project # this workspace only
devstation config get model
devstation config unset baseUrl
devstation config path # where the files are

Inside a session, /model <name> switches the model for that session only.

Which value wins

SettingFirst found wins
providerDEVSTATION_PROVIDER → project config → global config → inferred from whichever key is exported
model--model → DEVSTATION_MODEL → project config → global config → provider default
baseUrlDEVSTATION_BASE_URL → project config → global config → provider default
keythe exported variable for that provider → ~/.devstation/credentials.json

A provider you chose in a config file is never overridden by a key that happens to be exported for some other tool. With no settings files at all, ANTHROPIC_API_KEY is used first, then OPENROUTER_API_KEY.

On a server or in CI

Environment variables still work, and are what a server or CI job should use:

bash
export ANTHROPIC_API_KEY=...
export OPENROUTER_API_KEY=...
export OPENAI_API_KEY=...

Important

Treat a provider key like a password. Do not paste it into a project file, a chat, or an issue. If one leaks, revoke it at the provider and run devstation login again.
DevStation
Loading console…