---
slug: "rhobot-dev-rho"
source_type: "skill_md"
source_url: "https://cdn.jsdelivr.net/gh/mikeyobrien/rho@main/SKILL.md"
repo: "https://github.com/mikeyobrien/rho"
source_file: "SKILL.md"
branch: "main"
---
---
name: install-rho
description: "Install and configure Rho from scratch (Doom-style init.toml + sync). Only prereq: a coding agent that can run shell commands."
---

# Install Rho

Rho is a persistent AI agent framework. It runs in tmux, checks in on a heartbeat, accumulates memory in a single brain.jsonl file, and manages a knowledge vault. This skill installs it from scratch.

**Prerequisites:** A coding agent that can run shell commands. That's it.

**What gets installed:**
- System deps (Node.js 18+, npm, tmux, git)
- [pi coding agent](https://github.com/badlogic/pi-mono) (the runtime rho extends)
- [rho](https://github.com/mikeyobrien/rho) (the agent framework)
- Config files in `~/.rho/` (init.toml, packages.toml, brain.jsonl)

**Time:** ~5 minutes on a decent connection.

## Parameters

- **agent_name** (optional, default: `rho`): Name written into `~/.rho/init.toml`.
- **heartbeat_interval** (optional, default: `30m`): How often the agent checks in. Written to `[settings.heartbeat].interval`.

## Steps

### 1. Detect environment

Print OS, shell, and dependency versions. This determines the install path.

**Constraints:**
- You MUST print OS + shell + node version (if present).
- You MUST NOT assume Termux unless `$TERMUX_VERSION` is set.

```bash
uname -a
printf "SHELL=%s\n" "$SHELL"
command -v node >/dev/null && node -v || echo "node: missing"
command -v npm  >/dev/null && npm -v  || echo "npm: missing"
command -v tmux >/dev/null && tmux -V || echo "tmux: missing"
command -v git  >/dev/null && git --version || echo "git: missing"
command -v pi   >/dev/null && pi --version || echo "pi: missing"
command -v rho  >/dev/null && rho --version || echo "rho: missing"
```

### 2. Install system dependencies

**Constraints:**
- You MUST ensure: Node.js >= 18, npm, tmux, git.
- You MUST detect the platform and use the correct package manager.
- You MUST NOT blindly run `sudo apt install` — detect the package manager first.

#### Android / Termux

```bash
pkg update -y
pkg install -y nodejs-lts tmux git
```

#### macOS

```bash
brew install node tmux git
```

#### Linux

Detect the package manager:

| Distro | Command |
|--------|---------|
| NixOS | Add to `environment.systemPackages` or `nix-shell -p nodejs tmux git` |
| Debian/Ubuntu | `sudo apt update && sudo apt install -y nodejs npm tmux git` |
| Arch | `sudo pacman -S nodejs npm tmux git` |
| Fedora | `sudo dnf install nodejs npm tmux git` |

If Node.js version is < 18, use [NodeSource](https://github.com/nodesource/distributions) or nvm.

### 3. Install pi coding agent

pi is the runtime that rho extends. Install it globally.

**Constraints:**
- You MUST install pi globally if `command -v pi` fails.
- You MUST verify the install succeeded.

```bash
command -v pi >/dev/null || npm install -g @mariozechner/pi-coding-agent
pi --version
```

### 4. Install rho

Clone the repo and run the installer. The installer handles config bootstrapping, CLI setup, and brain initialization.

**Constraints:**
- You MUST clone to `~/.rho/project` (the default path).
- You MUST NOT clone if the repo already exists (pull instead).
- You MUST run `install.sh` from within the repo directory.

```bash
if [ -d ~/.rho/project/.git ]; then
  echo "Rho repo exists, pulling latest..."
  cd ~/.rho/project && git pull --ff-only
else
  git clone https://github.com/mikeyobrien/rho.git ~/.rho/project
fi

cd ~/.rho/project && bash install.sh
```

The installer will:
1. Detect your platform
2. Check/install remaining dependencies
3. Install Node deps for the project
4. Set up the `rho` CLI on your PATH
5. Run `rho init` (generates `~/.rho/init.toml`, `~/.rho/packages.toml`, and brain.jsonl defaults)
6. Run `rho sync` (writes pi's `settings.json` from your config)

### 5. Configure heartbeat interval (optional)

If the user requested a non-default interval, edit `~/.rho/init.toml`:

```bash
# Find the [settings.heartbeat] section and set the interval
sed -i 's/interval = "30m"/interval = "'"${HEARTBEAT_INTERVAL}"'"/' ~/.rho/init.toml
rho sync
```

### 6. Verify installation

**Constraints:**
- You MUST run `rho doctor` and report any failures.
- You MUST NOT declare success if doctor reports errors.

```bash
rho doctor
```

### 7. Authenticate

**Constraints:**
- You MUST tell the user to run `rho login` to set up their LLM provider.
- You MUST NOT run `rho login` automatically (it's interactive).

Tell the user:

> Run `rho login` to authenticate with your LLM provider (Anthropic, OpenAI, etc). This is interactive — you'll need to provide API keys or log in via browser.

### 8. Start rho (optional)

**Constraints:**
- You MUST ask before starting background processes.

```bash
rho
```

This starts the daemon if needed and attaches to the tmux session.

### 9. Post-install orientation

Share these essentials with the user:

**Key files:**
- `~/.rho/init.toml` — Main config (Doom-style: modules, settings)
- `~/.rho/packages.toml` — Third-party pi packages
- `~/.rho/brain/brain.jsonl` — Single source of truth for all memory (behaviors, learnings, preferences, tasks, reminders)

**Memory system:**
- `/brain` or `brain action=list` — View memory stats
- `brain action=add type=learning text="..."` — Add a learning
- `brain action=add type=preference text="..." category=Code` — Add a preference
- `brain action=add type=task description="..." priority=high` — Add a task
- `brain action=add type=reminder text="..." cadence={kind:"daily",at:"08:00"}` — Add a reminder
- `memory-consolidate` — Run consolidation (decay stale entries, mine sessions since last consolidation)

**CLI basics:**
- `rho` — Start and attach
- `rho status` — Show daemon and module status
- `rho doctor` — Health check
- `rho trigger` — Force immediate heartbeat
- `rho stop` — Stop daemon
- `rho upgrade` — Update rho and sync new modules

**Inside a session:**
- `/rho status` — Heartbeat state
- `/rho now` — Trigger check-in
- `/rho interval 30m` — Set check-in interval

**tmux essentials (if unfamiliar):**
- Detach: `Ctrl-b d`
- List sessions: `tmux -L rho ls`
- Attach: `tmux -L rho attach -t rho`

## Troubleshooting

| Problem | Fix |
|---------|-----|
| `rho sync` says pi missing | `npm install -g @mariozechner/pi-coding-agent` |
| `rho doctor` shows settings out of sync | `rho sync` |
| `rho` not found after install | Add `~/.local/bin` to PATH |
| tmux missing | Install with your platform's package manager |
| Node.js < 18 | Upgrade via nvm or NodeSource |
| `install.sh` fails on NixOS | Dependencies must be in your nix config, not installed via apt |
