Rika is a collaborative coding-agent CLI and terminal application. Every Turn runs as a durable execution that survives client and executor restarts. Local execution remains the default, while an explicitly remote Thread runs in an isolated Box workspace. Hosted identity, access, Threads, and product state live in PostgreSQL; Generalist execution authority lives in the runtime object store.
curl -fsSL https://raw.githubusercontent.com/In-Time-Tec/rika/main/install.sh | shOr with a package manager:
npm install -g @rikafx/cli
# or
bun add -g @rikafx/cliAll three install the same binaries and give you a rika command. The curl installer puts them under
~/.local/share/rika/current with a link at ~/.local/bin/rika; set RIKA_VERSION,
RIKA_INSTALL_ROOT, or RIKA_BIN_DIR to change the version or locations. Supported targets are
macOS arm64, Linux arm64, and Linux x64.
Update any of these installs with:
rika updateRika uses npm or Bun for package-managed installs and verified release archives for curl installs. It updates the existing installation, not a second copy elsewhere on PATH.
Only needed to work on Rika itself.
bun install
bun run check
bun run devThe standard repository commands are build, check, dev, format, test, and typecheck.
See the script map for what each development and packaging helper does.
apps/tui-v2 is the connected Solid/OpenTUI interface embedded in the production rika CLI, built with Effect V4
and Effect/CLI. It also runs standalone deterministic offline scenarios without authentication, hosted services,
model calls, or workspace execution — useful for rendering and interaction checks.
bun run tui-v2
bun run tui-v2 --scenario conversation
bun run tui-v2 scenarios
bun run --cwd apps/tui-v2 build
./apps/tui-v2/dist/rika-tui-v2 --scenario approvalThe build produces a native executable for the current host. Add --no-animate to disable decorative animation.
The default layout has no persistent Thread list. Ctrl+O opens commands and scenario selection; Ctrl+T or
Alt+W opens the Thread switcher and preview; Ctrl+S selects a mode. Type @ for file completion and @@
for Thread mentions. Alt+T toggles the right-hand file tree; Alt+S toggles changed files.
Enter submits or queues a prompt, Shift+Enter inserts a newline, and Ctrl+Enter interrupts and sends. With an empty composer, Up selects a pending instruction: Ctrl+E edits it, Enter steers it into the active Turn, and Backspace removes it. Enter saves an edit; Escape restores the original draft. Tab/Shift+Tab selects expandable transcript sections; Enter toggles the selected section and Shift+D toggles all sections. Large text pastes are compressed in the composer and expanded when submitted. Ctrl+V inserts a deterministic image attachment fixture; it does not access the system clipboard.
Approval, denial, removal, and steering are also available through the command palette. Ctrl+C cancels active playback; a second Ctrl+C force-quits. When idle, Ctrl+C opens the exit menu. Files, images, and Threads are offline fixtures; no workspace files are read or modified. State is discarded on exit.
bun run dev:remote deploys the current Docker worktree to an isolated rika-dev-* Railway project. Alchemy
creates private API and web services, private PostgreSQL 17, a runtime-storage Bucket, and the only public service, Caddy.
The service processes use production configuration. Set the external GitHub OAuth, GitHub App, Resend, Rivet,
model, and Box provider/template values from .env.example before deploying. Set RAILWAY_WORKSPACE_ID in the command process so the project cannot land in another workspace. Authenticate
Alchemy's Railway provider with an Alchemy profile or inject RAILWAY_API_TOKEN into the command process. Do not
store that provisioning token in .env.
bun run dev:remote
bun run dev:remote:destroyThe generated stage identity is retained at .alchemy/rika-dev-stage with mode 0600. Keep it and the matching
.alchemy/state/Rika/<stage> state after failed deploys or destroys so Alchemy can retry cleanup. The destroy
command accepts only the generated dev-<UUIDv4> identity and refuses production, staging, and pr-* stages.
Interrupted deploys reuse that identity and adopt only its random-named project resources. Destroy also requires the
matching Alchemy Railway.Project state, so missing state fails closed instead of reporting a false cleanup.
Global settings live at ~/.config/rika/settings.json. A workspace can override them with .rika/settings.json. Model-provider credentials belong to the selected Personal or Organization owner, are encrypted by the API, and are never returned by read APIs. Local, Runner, and Orb execution use that hosted owner; executors never receive model credentials.
{
"subagents": {
"maxDepth": 4,
"maxSubagents": 4
},
"keymap": {
"submit": "enter",
"newline": "shift+enter"
}
}rika auth login
rika provider login codex
# Or configure a hosted API-key provider:
rika credential set openrouter
rika config list
rika doctor
rikaRead PRODUCT.md for product direction and CONTEXT.md for the vocabulary and ownership model.