Skip to content

Releases: tokencanopy/rainier

v0.0.6

Choose a tag to compare

@jiashuoz jiashuoz released this 06 Sep 06:25
d05919e

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

Choose a tag to compare

@jiashuoz jiashuoz released this 06 Sep 03:39
dc89e93

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

Pre-release

Choose a tag to compare

@jiashuoz jiashuoz released this 06 Sep 03:08
70a3736

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 all for the full guide.
  • rainier version and --version identify the installed release.
  • rainier doctor reports 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 doctor

Or 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.
  • doctor passing 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

Pre-release

Choose a tag to compare

@jiashuoz jiashuoz released this 05 Sep 11:44
ee2f467

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 version subcommand. 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); $HOME and the read-only rootfs are untouched, and docker commit excludes the volume, so no environment snapshot can carry a credential.
  • The sync. sessiond fetches 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 use O_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 under RAINIER_SECRETS_KEY with 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 through runnerplane.Host.SessionRequest with its own store.
  • The CLI and the wire. rainier agent login <provider> --env NAME, rainier agent ls, rainier agent logout <provider>, and GET|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.goclaude and codex today. 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, the ErrAgent… sentinels; controlapp/repotest.RunAgentCredentialStore.
  • v0wire: AgentView, AgentsEnvelope, RenderAgents.
  • internal/controld (self-host): migration 0010_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. Upgrade runnerd and controld together, as always.
  • controld migrates 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 sessiond but not yet surfaced by controld; 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

Choose a tag to compare

@jiashuoz jiashuoz released this 03 Sep 06:05
48ac6e6

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 the accept, 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 one rainier CLI 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 carry Rainier-Workspace and refresh an expired access token once, transparently.

Fixes

  • connectRunner asks 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

Choose a tag to compare

@jiashuoz jiashuoz released this 03 Sep 04:43
56127e0

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-facing Sessions/Environments/Fleet/Attachments interfaces, 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/repotest is 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 events table 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 accept carrying 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.