Rush CLI 0.2.35
Install
macOS / Linux
curl -fsSL https://cdn.getrush.ai/install.sh | bashWindows
irm https://cdn.getrush.ai/install.ps1 | iexHomebrew
brew install phnx-labs/tap/rushDebian / Ubuntu
sudo apt install rush-cliAlready installed?
rush upgradeAdded
- Grok, Cursor, GitHub Copilot, and Codex run as Rush agents (RUSH-2333,
RUSH-2378, RUSH-2381).
rush run grok-cli/cursor-cli/copilot-cli/codex-cliwraps the vendor coding CLI you already pay for as an external-runtime agent — Rush spawns it, translates its event stream into the Rush protocol, and streams the work back. The same agents dispatch to the cloud (rush cloud run <agent>), where a factory pod runs the wrapped CLI with your key injected per-run and returns the full transcript and token/cost accounting. - Enforced agent compliance policies (RUSH-1927).
agent.yamlmay declarecompliance.certifications,data_residency, anddata_handling;rush buildrejects unenforceable declarations, and the harness recursively scrubs PII/PHI from tool inputs and results without retaining raw values in sanitization audit events. - Ingest per-process Google/Microsoft account tokens in cloud runs (RUSH-1884).
A cloud/Factory pod has no
~/.rush/user.yamland no daemon, sorush runnow reads the user's Google/Microsoft account access tokens from the per-process env varsRUSH_GOOGLE_ACCOUNT_TOKENS/RUSH_MICROSOFT_ACCOUNT_TOKENS(minted server-side by rush/cloud from the user's vault-stored refresh tokens) and feeds them intoWithGoogleAccountTokens/WithMicrosoftAccountTokens, preserving per-account tokens and the primary account. When set, the env var is authoritative — a malformed payload is a hard error, never a silent fall-through to on-disk accounts. Local runs (env unset) are unchanged. - User memory and agent state travel to cloud dispatches (RUSH-856). A cloud run now carries the user's memory and the agent's saved state up to the pod, so a dispatched run continues from the same context a local run would have instead of starting cold.
- Per-run visibility stats in
rush cloud(RUSH-2176, RUSH-2589).rush cloud view <id>now prints the run'sModeland aUsageline — tokens in/out (+ cached), dollar cost, tool-call count (with failures), and turns — e.g.128.4k in · 8.0k out · $1.23 · 387 tools (3 failed) · 14 turns, plus total tokens and the inline transcript; the picker preview (rush cloud listin a TTY) shows the same compact line under each run. The numbers are parsed from the agent's own stream at finalize on the factory pod and stored on the run; runs that finished before this shipped show nothing (no fabricated zeros). - First-party connector kit — QuickBooks, Salesforce, NetSuite (RUSH-1930).
rush connection install {quickbooks,salesforce,netsuite}now yields a real, runnable MCP connector. QuickBooks' catalog manifest previously declared a baregithub.comsource-repo link as itsmcp_server, which the scalar-string parser turned into an unexecutableCommand(a dead connector that "installed" successfully but could never spawn); it now launchesnpx quickbooks-mcp. Salesforce (npx @salesforce/mcp) and NetSuite (npx netsuite-mcp-server) gain brand-new manifests — neither had a CLI or app catalog entry before. Verified end-to-end:rush connector probe quickbooksconnects and exposes 36 tools. rush connection env set <name> KEY=VALUE ...(RUSH-1930). Attaches credentials (API keys / OAuth client secrets) to an already-installed catalog connector without re-declaring its launch command via the catalog-bypassingrush connection addpath. It reads the stored row, merges the given keys into its env map, and re-saves the full row so command/args/remote-URL/tools are preserved exactly; the env flows into the MCP subprocess at run time, and only key names are echoed, never the secret values.rush setupcommand group (RUSH-1881). A consolidated onboarding surface in a new visible "Setup:" help group. Barerush setupruns an interactive wizard that walks only the incomplete steps; on a non-interactive shell (SSH/CI) it prints the checklist plus each item's fix command instead of prompting, so it never hangs.rush setup statusgives a concise "am I ready?" summary;rush setup checklist [--json]lists itemized checkmarks with a per-item fix command;rush setup install <computer|browser|menubar|daemon|cloud>completes one step by delegating to the existing paths and re-probes the live signal before reporting done.- Daemon
GET /setup/statusendpoint (RUSH-1880). Exposes the shared onboarding rollup (internal/setup.Status()) over the daemon's loopback-TCP mux beside/health, so the menu-bar tray and scripts can read "am I set up?" without shelling out. Read-only and secret-free; inherits the existing host-check (DNS-rebind) + Origin/CSRF guards, and stays/health-fast. - Import the coding-agent CLIs you already have (#1367). Onboarding now detects installed Kimi and Grok CLIs and imports them, so an agent you already run in the terminal shows up in Rush without a manual setup step.
session_continuity: imessageonagent.yaml(RUSH-1984). When set,rush run <agent>without--session/--resumeresumes the sticky iMessage DM session the channel gateway uses for that agent, so a phone thread continues at the desk. Implemented viaDaemonDB.LatestSessionForChannelAgent(channel_sessions, then executions fallback) andresolveSessionContinuityinrush run.--model deepseek/deepseek-v4-flashis selectable (RUSH-2528). The model is now on the CLI--modelallowlist, so a run can target DeepSeek V4 Flash directly.
Changed
rush dev enablecan now grant Developer access instantly (RUSH-1679). A new signup with a verified email and an account in good standing (no prior rejection, not banned/soft-deleted) is auto-approved by the server onPOST /api/v1/developer/apply—rush init/rush build/rush publishunblock in one command, no admin round trip. Everyone else still lands in the existing admin-reviewed pending queue.
Fixed
-
rush install <renamed-alias>now actually installs (BUG-1). Installing a registry agent by a renamed alias (e.g.prix/deep-researcher, which redirects toprix/rabbit-hole) printedInstalled …with exit 0 but wrote nothing to~/.rush/agents/. The container was written under the alias slug directory, which the rename-cleanup step then deleted. The container directory now tracks the canonical resolved agent, and the cleanup never removes the directory it just wrote. -
rush init <dir>writes a valid agent name (BUG-3).rush init /tmp/my-projectused to put the full path inname:, so the fresh project failedrush buildwith an invalid-name error. The name is now derived from the directory basename and sanitized to a build-valid two-word slug. -
Missing external-runtime dependency is reported at default verbosity (BUG-5). Running an external-runtime agent (codex-cli, copilot-cli, …) with its vendor CLI absent printed a bare
Error: Agent run failed; the honestmissing dependency: …message only showed under--verbose. The actionable message now surfaces at default verbosity. -
iMessage stays reachable after a transient relay disconnect (RUSH-1959).
ImessageGateway.Start()gated its self-healing goroutines (readLoop/reconnectLoop/pingLoop) behind the first WebSocket dial succeeding, so a single failed initial connect (a network blip, prix-api mid-deploy, a DNS hiccup) permanently killed the channel for the life of the daemon with no retry — the menu bar still showed "Daemon: running" while the relay correctly reported the user offline.Start()now treats the first dial as best-effort and always starts the goroutines;reconnectLoop(already polling every 10s) picks up the retry. -
Cloud transcripts keep every assistant and tool turn (RUSH-2533). A cloud pod wrote
messages.jsonlencrypted at rest with a machine-bound key that nothing in the pod could later read, so a finished cloud run came back with its history stripped. At-rest session encryption is now disabled inside the ephemeral, isolated pod, so the full transcript survives the run. -
rush whoamino longer says "Not logged in" while the daemon holds a fresh token (RUSH-1918). Post-RUSH-632 the on-diskaccess_tokenis always blank (the token lives in the OS keychain). When the CLI's own keychain read missed or was denied,GetValidAuthConfig()bailed on the empty on-disk token before consulting the daemon — the sole token owner, which can serve a fresh token from its in-memory cache.whoami(and the daemon-aware resolver used byrush run/ scheduled runs /rush http) now bail only when there is no session identity at all; a present session whose token is only locally unreadable falls through to the daemon consult, andwhoamidistinguishes daemon-down from signed-out. -
rush daemon statusreports the real last-refresh outcome, not a fantasy clock (RUSH-1918). The status view derived a confident "Next token refresh" time purely from the daemon's start time, so it printed a healthy future clock even while every refresh was failing. The daemon now records the outcome of each refresh tick and the status view printsLast token refresh: HH:MM:SS (ok)or... (FAILED: <error>). -
Sign-in stays put on a dead session (RUSH-1843). Reconciled an auth split-brain that looked connected while silently failing, and surfaced a clean re-auth prompt instead of failing silently.
-
Agents are no longer told they're connected to OAuth accounts they have no tools for (RUSH-1035). The
connected_<provider>prompt vars are now gated by the agent'sux.yamldeclaration — the same signal the builder uses to inject first-party Google/Microsoft/Twitter/LinkedIn tools — so an agent that doesn't declare a provider is no longer injected with that account's context (it had no tools for it, so it could only hallucinate the capability). Declaring agents also report only their declared scopes. -
Registry agents run headless without a running daemon (RUSH-1310). A manual cloud run of a registry agent no longer dies on "rush daemon not running".
-
Headless token refresh no longer wedges on Linux (RUSH-632). The keychain write that persists a refreshed session token could block forever on a box with no unlocked Secret Service collection, so the token was fetched but never saved and
expires_atstayed frozen. Every keychain write is now bounded (5s) and a hung write degrades to the plaintext-user.yamlfallback, sorush refresh-tokensandrush runsucceed and persist the new token. -
Friendlier errors instead of raw Go strings. Quota-exceeded runs show the upgrade message instead of a bare "Model call failed" (RUSH-1841); a daemon round-trip timeout is classified as transient so users see "temporarily unavailable — check your connection and try again" instead of a leaked
context deadline exceeded; andrush cloud computersroutes its timeout through the shared error classifier ("Request timed out — try again"). -
The daemon reaps an orphaned instance by pidfile (RUSH-1844, RUSH-1855).
rush daemon stop/restartnow recover instead of wedging against a detached daemon, and re-bootstrap launchd so the daemon restarts onto the re-signed binary. -
rush uninstallcleans up user-created agents (RUSH-1917). Uninstalling now removes the agent's metadata.db row, so a re-created agent of the same slug no longer collides with a stale record. -
rush cloud accounts remove/editaccept a short-ID prefix (RUSH-2124). You can pass the short ID shown inrush cloud accounts listinstead of the full UUID. -
Download as PDF no longer crashes on hardened (garble) release builds (RUSH-1840). The
html/templatepalette is denormalized so field reflection survives obfuscation. -
rush buildaccepts registered first-party tool groups such asbox_toolsanddropbox_toolsduring catalog validation. -
Smaller CLI-surface fixes. Session-storage init failures emit a structured
error_coderather than a raw Go string (RUSH-1838);rush toolaccepts-vand applies auth config to dual-registered tools (RUSH-1845);rushexits 1 when signed out and emitsside_effect=unknownin run meta (RUSH-1848);rush initscaffolds an agent that passesrush buildwithout a gallery (RUSH-1847);rushx --versionprints the version instead of failing with "rushx takes a single agent"; andrush connection disable <name> --for <slug>rejects a connector that was never installed instead of writing an orphandisabled=1row.
Security
- agent_slug memory-isolation gate. A subagent may share its parent family's
KV / SQL store only when its declared
agent_slugequals the root (top-level) agent's slug. Any other override is now ignored and logged, so one agent family can no longer point itsagent_slugat another family's store and read or write its memory. Enforced inAgentKVMemoryTool.SetRootAgentName/AgentSQLMemoryTool.SetRootAgentName, wired fromAgentBuilder.BuildviaWithRootAgentNameandrootAgentNameForSubon therush run --subpath.
Downloads
| Platform | Binary | SHA-256 |
|---|---|---|
| macOS · Apple Silicon | download | — |
| macOS · Intel | download | — |
| Linux · x64 | download | — |
| Linux · arm64 | download | — |
| Windows · x64 | download | — |
| Windows · arm64 | download | — |
Checksums are published for the current latest release. Verify older binaries against rush --version after install.