sideren
v0.4.1
Published
One command to put your coding agents on Sideren: it finds the agents on your machine, asks for your key and a model, writes each agent's own config and checks it live. Claude Code, Codex, pi, oh-my-pi, ZCode, Hermes, OpenCode, Kilo Code, Aider, Crush, Go
Maintainers
Readme
sideren
One command puts the coding agents on your machine on Sideren: one endpoint, one key, one model list.
npx siderenIt finds the agents you have installed, then asks three things:
- Your key — checked with Sideren before anything is written. A key from an earlier setup
or from
SIDEREN_API_KEYis offered, so a re-run is one keypress. - Your model —
Auto(Sideren picks per request), your plan's default, or any model from the live list. - Go — yes, or choose which agents.
Then each agent gets its own config, in its own format, and one live request is sent through it:
SIDEREN v0.4.1
agents Claude Code, OpenAI Codex, pi, oh-my-pi, Hermes Agent
key ✓ accepted · Pro plan
models auto · stronger @sdn/glm-5.3, gpt-5.6-sol · lighter @sdn/glm-5.3-flash
✓ Claude Code ~/.claude/settings.json · live check ok, 812 ms
✓ OpenAI Codex ~/.codex/config.toml · live check ok, 640 ms
✓ pi ~/.pi/agent/models.json · live check ok, 590 ms
✓ oh-my-pi ~/.omp/agent/models.yml · live check ok, 604 ms
✓ Hermes Agent ~/.hermes/config.yaml · live check ok, 571 msGet a key at sideren.io/dashboard/keys. Zero dependencies; needs Node 18 or newer.
Coming from LayerX1?
npx layerx1is nownpx sideren. Yourlx1_key, your model ids and yourLAYERX1_*variables keep working — see Coming from LayerX1.
Without questions
# every agent found on this machine, model auto
npx sideren setup --key sdn_your_key
# named agents and a named model
npx sideren setup --key sdn_your_key --tool claude-code,codex --model @sdn/glm-5.3
# see what would be written, write nothing
npx sideren setup --key sdn_your_key --printsetup exits with status 1 when an agent's live check fails (its config is still written), so a
script can tell "configured" from "configured and working". npx sideren in a pipe or in CI runs
setup when it has a key, and says how to give one when it has none.
Agents
| Agent | --tool | What is written | Wire |
|---|---|---|---|
| Claude Code | claude-code | ~/.claude/settings.json | Anthropic /v1/messages |
| OpenAI Codex (CLI, IDE, app) | codex | ~/.codex/config.toml, ~/.codex/model-catalogs/sideren.json | Responses |
| pi | pi | ~/.pi/agent/models.json, auth.json, settings.json | Chat |
| senpi | senpi | the same three files under ~/.senpi/agent/ | Chat |
| oh-my-pi | omp | ~/.omp/agent/models.yml, config.yml | Chat |
| ZCode (CLI and desktop app) | zcode | ~/.zcode/v2/provider_config.json | Anthropic /v1/messages |
| Hermes Agent | hermes | ~/.hermes/config.yaml, ~/.hermes/.env | Chat |
| OpenCode | opencode | ~/.config/opencode/opencode.json | Chat |
| Kilo Code | kilo | ~/.config/kilo/kilo.jsonc (Kilo 7), else opencode.json there | Chat |
| Aider | aider | ~/.aider.conf.yml, ~/.aider.model.settings.yml, ~/.aider.model.metadata.json | Chat |
| Crush | crush | ~/.config/crush/crush.json | Chat |
| Goose | goose | ~/.config/goose/config.yaml, custom_providers/sideren.json, sideren.key | Chat |
| Qwen Code | qwen | ~/.qwen/settings.json, ~/.qwen/.env | Responses |
| Factory Droid | droid | ~/.factory/settings.json | Responses |
| OpenClaw | openclaw | ~/.openclaw/openclaw.json, ~/.openclaw/.env | Responses |
| Continue | continue | ~/.continue/config.yaml, ~/.continue/.env | Chat |
| Cline | cline | ~/.cline/data/settings/providers.json and its model list | Chat |
| Zed | zed | ~/.config/zed/settings.json | Responses |
| Cursor (IDE), Roo Code | cursor, roo | nothing — exact steps are printed | — |
Paths are the macOS / Linux defaults; Windows paths, the variables that move a config directory
and every per-agent detail are in TOOLS.md. --wire hermes=responses,crush=anthropic
picks another wire for an agent that supports more than one.
Cursor CLI, Windsurf, Antigravity, Kiro and Gemini CLI cannot be pointed at another endpoint.
--tool accepts their names and says so instead of writing a config that would not be used.
Each writer was checked against the real agent — what it reads, and what it then sends — except Zed (checked against its source) and the desktop apps and editor extensions, which were not run.
Models
Auto is the default. auto lets Sideren choose the model for each request. Pick a model in
the wizard or name one with --model.
You get a set, not one model. Agents have more than one model slot — a stronger model for planning or review, a small one for titles, summaries and background work. Setup fills every slot the agent has, so nothing falls back to a model the agent made up:
- your pick (or
auto), - one or two stronger models,
- one or two lighter ones.
They are chosen from the live list, from what your plan can use. Name them yourself with
--stronger, --lighter and --small-model (none leaves a group empty). --fallback <ids>
registers more models in each agent's model picker.
New models need no new release. Nothing about models is compiled into this package. Every run
reads GET /v1/models and GET /v1/me from Sideren: the models, their context windows, thinking
levels and prices, and what your plan allows. A model added to Sideren today is in the wizard, in
npx sideren models and in every agent's model picker on the next run. Without a network the
last list is used (~/.sideren/catalog.json, six hours), then the snapshot shipped in the
package.
Thinking effort
Your level stays yours. If you set your agent to high or xhigh, setup does not change it
and it is sent as you set it.
- Where you have set none, setup writes
high, or the nearest level the model offers.--effort <level>picks another. - Each model is registered with the levels it really offers, so an agent's effort selector shows what the model can do.
- Effort mapping is on: a level a model does not offer runs at the nearest one it does, instead
of an error.
--no-allow-effort-mappingturns that off.
Commands
| Command | What it does |
|---|---|
| npx sideren | Set up the agents on this machine. |
| npx sideren setup --key <key> | The same without questions. |
| npx sideren status | Which agents are set up (--all lists every agent). |
| npx sideren test | One live request through every agent's config. Exits 1 on a failure. |
| npx sideren models | The model list, with context window and price (--json). |
| npx sideren unset | Put every config back the way it was (--tool <ids> for some). |
| npx sideren doctor | Environment, install paths, where the model list came from, a live check per agent. |
| npx sideren install <ids> | Install agents. Asks before running a vendor's install script. |
| npx sideren help all | Every command, agent and flag. |
The flags used most:
| Flag | |
|---|---|
| --key <key> | Your sdn_… key. Read from SIDEREN_API_KEY or an earlier setup when left out. |
| --tool <ids> | Agents to set up, comma-separated, or all. Default: the ones found on this machine. |
| --model <id> | The main model. Default auto. |
| --effort <level> | The default thinking level. Default high. |
| --yes, -y | Ask nothing. |
| --print | Show the configs instead of writing them. Writes nothing at all. |
| --verbose, -v | Show every note each agent's setup produced. |
| --no-verify | Skip the live check. |
| --offline | Never touch the network. |
| --home <dir> | Write under <dir> instead of your home (sandboxes, tests). |
The live check
After writing, setup sends one streamed request through each agent's config — read back from the
file, not assumed: the agent's own endpoint, key, headers, model and thinking level. It passes
when the answer streams to its end in that wire's own format. Each check has a deadline
(--verify-timeout, 60 seconds) and is never retried, so it cannot be billed twice. The key is
never printed.
Your config stays yours
- Merged, never replaced. Setup adds Sideren to the file you have. Your other providers, settings and comments stay.
- One thing is taken over: which model the agent starts on, so it starts on Sideren. What it was before is recorded.
npx sideren unsetputs it back. Sideren's entries are removed and anything taken over is restored. A file setup created is removed.- A file that does not parse is left alone, with a message saying which one.
Installing agents
Setup only configures agents that are already installed. --install (or npx sideren install
<ids>) installs the ones named. Some vendors ship only a curl … | bash installer, which
downloads and runs a remote script: the exact command is shown and nothing runs until you say
yes, or pass --yes.
Paying from wallet credit
On a subscription, setup uses the plan. --payment-mode payg makes Claude Code, Codex, Hermes or
OpenCode spend purchased wallet credit instead (it needs a named --model). Run setup again
without the flag, or with --payment-mode subscription, to go back. It does not change your
subscription or buy credit.
Staging (Sideren team)
SIDEREN_STAGING_ACCESS_TOKEN is accepted only together with the private staging --url. Setup
stores the guard header for Claude Code, Codex, Hermes and OpenCode and uses it for the model
list and the live check. The token is never a flag, is hidden by --print, and is ignored for
every other origin; a normal setup clears old staging headers.
Coming from LayerX1
LayerX1 is now Sideren. npx layerx1 prints a one-line notice and runs npx sideren.
| What you have | What happens |
|---|---|
| An lx1_… key | Works everywhere an sdn_… key does. |
| lx1-* / sdn-* / bare model ids | Still accepted. New configs are written with the public id: @sdn/glm-5.3 for open-weight models, the plain name (gpt-5.6-sol) for closed ones. |
| LAYERX1_* variables | Each SIDEREN_* variable falls back to its LAYERX1_* name. |
| Configs written by npx layerx1 | Keep working. npx sideren status flags them; running setup again replaces each LayerX1 entry with the Sideren one, so you never have two providers for one account. |
| npx sideren unset | Removes Sideren and LayerX1 entries alike. |
License
MIT
