Rainier CLI v0.0.3 beta
Pre-release
Pre-release
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.