Releases: tokencanopy/rainier
Release list
v0.0.6
Everything in v0.0.5, plus: two rainier processes sharing one config no longer log each other out. A refresh runs under an advisory lock beside the config file and re-reads the context first, so a pair a sibling process already rotated is adopted rather than replayed. Found by the hosted dogfood with rainier ls in a second terminal.
v0.0.5
Everything in v0.0.4, plus the runner's half of the heartbeat: runnerd pings its control socket on an interval and redials when a ping goes unanswered, so a control-plane instance replaced behind a load balancer no longer leaves a runner off the fleet until the kernel's keepalive gives up. The bounds are on AgentConfig (defaults 20 s / 10 s). Found by the hosted cell's first agent-credential live gate. Hosted deployments: republish the runner artifacts from this tag before the next plane raise.
Rainier CLI v0.0.4 beta
Rainier CLI v0.0.4 beta
A CLI-only onboarding and diagnostics release, built from 70a37360f66e4cd5311475277594d9ad224454fe (#54).
What's new
- Compact top-level help, focused command help, and
rainier help allfor the full guide. rainier versionand--versionidentify the installed release.rainier doctorreports basic authentication, workspace, runner, environment, and agent-status readiness with next steps. Checks are bounded to about 15 seconds, including normal token refresh.- Initial 503 attach waits are bounded to about a minute, followed by diagnostics and an exact reattach command. The session is preserved. Established-session reconnection behavior is unchanged.
- A first-session guide covers login, environment selection, agent login, detach, and reattach.
Install
npm install -g @tokencanopy/rainier@beta
rainier version
rainier doctorOr run npx @tokencanopy/rainier@0.0.4 --help. npm requires Node.js 22+ and tar.
Standalone macOS/Linux binaries are available below for ARM64 and x86-64.
Verify downloads against SHA256SUMS before extracting. macOS builds are not Developer ID signed or notarized.
Installation details · Build information
Beta boundaries
- Requires an existing compatible deployment and connected runner. The CLI does not create a Dedicated instance or provision infrastructure.
- This release does not deploy cloud services, publish environment images, or complete hosted agent-credential integration.
doctorpassing means basic prerequisites were observed; it does not verify model calls, provider credentials, agent binaries, or guarantee scheduling capacity. Normal token refresh may update saved credentials.- Better 503 diagnostics do not fix unavailable runners or session boot failures.
- Agent login requires compatible server/runner components and an environment containing Claude Code or Codex. Hosted agent-credential integration remains in development.
- Detach keeps the session running; cold suspend stops its process. Push important work regularly; deleting a session deletes its workspace.
npm's beta tag selects 0.0.4. latest remains 0.0.3. Published assets and package hashes are immutable; updates require a new version.
Rainier CLI v0.0.3 beta
Rainier CLI v0.0.3 beta
Prebuilt CLI downloads are now available for macOS and Linux. These binaries are built from the unchanged v0.0.3 tag (commit ee2f4671c400f307efa82bdefe5f179a3335f167).
Downloads
| Platform | Download |
|---|---|
| macOS Apple Silicon | darwin/arm64 |
| macOS Intel | darwin/amd64 |
| Linux x86-64 | linux/amd64 |
| Linux ARM64 | linux/arm64 |
Installation and first session · SHA-256 checksums · Build information
Extract the matching archive, place rainier on your PATH, and run rainier --help. Verify its archive hash against SHA256SUMS before installing. macOS builds are not Developer ID signed or notarized.
Beta scope
- An existing compatible Rainier server is required. The CLI does not provision a server or cloud workspace.
- Start with self-hosted Rainier. Hosted Cloud agent-credential integration is still in development.
- Agent login requires v0.0.3 server/runner components and an environment with the agent CLI installed.
- Detach leaves the agent running; cold suspend stops its process. Workspaces and snapshots currently depend on runner storage. Push important work regularly; deleting a session deletes its workspace.
- These exact-tag builds have no automatic updater or
versionsubcommand. The archive name, checksum, and BUILDINFO identify the release.
v0.0.3 — the agent credential home
A coding agent inside a Rainier session — Claude Code, Codex — is logged in once and stays logged in: in every later session, in every workspace the person is a member of, on any runner.
What is new
- The agent home. Every create for a person mounts one writable volume per (creator, workspace) at
/rainier/agents, prepared once with the same CAP_CHOWN-only job the workspace volume gets and never torn down with a session. Each agent is pointed at its own subdirectory through the variable it already honors (CLAUDE_CONFIG_DIR,CODEX_HOME);$HOMEand the read-only rootfs are untouched, anddocker commitexcludes the volume, so no environment snapshot can carry a credential. - The sync.
sessiondfetches the provider's allowlisted credential files at boot, puts them within two seconds of every change (a background token refresh included), and empties them on a downward revoke. Three additive session-RPC methods carry it:fetch_agent_credentials,put_agent_credentials,revoke_agent_credentials. Reads useO_NOFOLLOW, the set is capped at 64 KiB, and the bytes are never kept — a digest is compared, not the credential. - Custody. One sealed set per (user, provider) in
controld's database, AES-GCM underRAINIER_SECRETS_KEYwith the user, provider, and version bound as additional authenticated data, the version assigned under a compare-and-set. A hosted control plane answers the same three methods throughrunnerplane.Host.SessionRequestwith its own store. - The CLI and the wire.
rainier agent login <provider> --env NAME,rainier agent ls,rainier agent logout <provider>, andGET|DELETE /v0/agents. Login is an ordinary session running the vendor's own login flow, attached to your terminal. - One table. Everything provider-specific is a row in
controlapp/agents.go—claudeandcodextoday. A third agent is a row plus its probes.
Public surface (additive, protocol version 1)
protocol/runner:Spec.Home *HomeMount{Volume, Path}; the three method-name constants.controlapp:AgentProvider,AgentProviders(),EnableTestAgentProvider,HomeMountPath,AgentHomeVolume,AgentsEnv,AgentCredentialStore,AgentCredentialService,AgentCredentialSet,AgentCredentialStatus,AgentRefusalSentence, theErrAgent…sentinels;controlapp/repotest.RunAgentCredentialStore.v0wire:AgentView,AgentsEnvelope,RenderAgents.internal/controld(self-host): migration0010_agent_credentials.
Fixed
- The session proxy URL carries a placeholder password. The driver handed every session
http://<session-id>:@host:3128, and Claude Code — both the native and the npm build — refuses a proxy URL whose password is empty, failing every model call with "Connection error" without dialing the proxy. egressd only ever read the username half, so the URL now carries a fixed, non-secret password and both builds answer through the audited path in seconds. (#50)
Upgrade notes
- A runner older than this release mounts no home; a session that carries one then fails its boot stage with
this runner does not mount agent homes; upgrade runnerd to v0.0.3. Upgraderunnerdandcontroldtogether, as always. controldmigrates to schema 10 on start (one new table,agent_credentials, cascading with its user).- Every session's egress allowlist gains the agents' own hosts at dispatch (
api.anthropic.com,platform.claude.com,downloads.claude.ai,mcp-proxy.anthropic.com;auth.openai.com,chatgpt.com), the way a clone adds the git hosts. - Boot notes (a refused or timed-out fetch) are emitted by
sessiondbut not yet surfaced bycontrold; the agent starts and asks for a login, which is the truthful state.
Plan: docs/superpowers/plans/2026-09-04-agent-credential-home.md, with its execution record.
Rainier v0.0.2
The hosted composition kit: the last pieces a hosted regional cell needs from the OSS beyond control/controlapp, published as public packages that self-hosted controld composes exactly as a cell will.
New public packages (import github.com/tokencanopy/rainier@v0.0.2, no replace needed)
runnerplane— the runner WebSocket endpoint, connection registry, dispatch and session-RPC correlation, generation mint and heartbeat fence, capability acceptance and theaccept, event translation, reconciliation. A host supplies seven methods: identity, generation, the fleet service and repository, the scheduler wake, and hooks for the events that transition nothing and for a sandbox's upward request.attachplane— the terminal attach handshake: dial-back pairing, the splice, the WebSocket terminal stream. A host supplies three methods.v0wire— the/v0/JSON views, envelopes, request bodies, validators, and the closed sentinel-to-status table, so onerainierCLI sees one wire from either host.
CLI
rainier login --cloud <edge>runs the hosted passwordless login (start an attempt, open the browser link, poll the exchange) and stores a named context;rainier context list|use|current|remove,rainier workspace use. A legacy single-server config migrates on first read. Hosted requests carryRainier-Workspaceand refresh an expired access token once, transparently.
Fixes
connectRunnerasks the fleet service before installing a reconnecting socket, so a refused reconnect can no longer close the accepted connection (#36, by @AmirF194).
The self-hosted /v0/ wire, the runner protocol (still version 1), and the schema (migrations 0001–0009) are unchanged from v0.0.1.
Rainier v0.0.1
First tagged release of Rainier, the OSS control plane and runtime for cloud coding-agent sessions, at the end of the O9 program gates.
Public Go surface (import github.com/tokencanopy/rainier@v0.0.1, no replace needed)
control— the frozen application contract: portable domain vocabulary, the caller-facingSessions/Environments/Fleet/Attachmentsinterfaces, and the narrow host ports (repositories, authorizer, pool resolver, runner transport, attachment broker, event recorder, unit of work, checkpoint locator, clock, IDs).controlapp— the portable services behind that contract: session lifecycle, environments, fleet truth and within-pool scheduling, attachment and workspace RPC.controlapp/repotestis the executable contract a host's repositories must pass.protocol/runner,protocol/terminal,protocol/workspace— the wire.
Self-hosted product: controld (Postgres, GitHub identity, credential vault), runnerd (Docker), sessiond, egressd, and the rainier CLI, composed over the same contract.
Since the recomposition
- Workspace scope is mandatory in persistence; runner, placement, and controller generations are stored and fenced (#35, #38).
- Every command commits its mutation and its event in one unit of work; pgstore writes an
eventstable in the same transaction (#39, #40). - Placement prefers the runner holding a cached snapshot and falls back to a rebuild elsewhere (#40).
- Runners announce portable capabilities and are answered with an
acceptcarrying their generation; environments can require a capability (#40). - Secrets are handed to daemons through the environment, never as flags (#33).
Schema: migrations 0001–0009 apply on controld start; back up before upgrading from a pre-0007 database.