No description
Find a file
Mikey O'Brien d727213047
Merge pull request #42 from mikeyobrien/fix/auto-memory-semantic-dedup
feat(rho): add semantic dedup and transient entry blocklist
2026-04-22 17:27:35 -05:00
.agents wip: unstaged web UI, vault routes, planning docs, and task files 2026-03-16 21:23:31 +00:00
.github feat(android): prepare store distribution 2026-03-14 21:34:15 +00:00
apt v0.0.3: Add 'rho' command as main entry point 2026-02-02 22:00:57 -06:00
brain refactor: migrate SOP files to skills and harden telegram worker flows 2026-02-16 01:55:39 +00:00
cli chore(sync): satisfy biome checks 2026-03-09 02:35:26 +00:00
configs feat: iPhone/Termius SSH support 2026-02-05 05:42:06 -06:00
docs fix: update termux keys and telegram background fallback 2026-03-21 10:17:05 -05:00
extensions feat(rho): add semantic dedup and transient entry blocklist 2026-04-21 00:07:48 -05:00
features feat(bootstrap): move to agentic identity bootstrap flow 2026-02-17 01:32:20 +00:00
mobile/rho-android wip: unstaged web UI, vault routes, planning docs, and task files 2026-03-16 21:23:31 +00:00
platforms refactor: decouple repo from runtime directory 2026-02-09 12:50:16 -06:00
scripts chore: server wiring, perf logging, asset gates, UI polish 2026-03-15 02:17:42 +00:00
skills fix(memory): allow longer auto-memory entries 2026-03-20 16:07:46 +00:00
specs docs(specs): add pi-native extensions execution plan 2026-02-07 23:37:57 -06:00
tasker Add Tasker project export 2026-02-02 21:42:09 -06:00
templates feat(memory): unify memory settings under init.toml 2026-03-09 00:56:02 +00:00
tests fix(termux): make node-pty optional 2026-03-21 10:15:52 -05:00
tmp chore: auto-commit before merge (loop primary) 2026-02-10 02:32:57 +00:00
web fix: address issues #39 and #40 — support multi-part model IDs and fix localhost display 2026-04-17 21:50:14 -05:00
.dockerignore ci: add Dockerfile e2e test suite + GitHub Actions workflow 2026-02-09 16:47:09 +00:00
.gitignore chore(nix): add android/java dev shell flake 2026-02-22 04:32:30 +00:00
.npmignore fix(packaging): exclude worktrees from npm pack 2026-03-14 21:08:56 +00:00
AGENTS.md chore(hooks): enforce strict biome and web 500-line pre-commit gates 2026-02-19 19:05:34 +00:00
CHANGELOG.md chore(release): v0.1.12 2026-03-15 02:41:08 +00:00
flake.lock chore(nix): add android/java dev shell flake 2026-02-22 04:32:30 +00:00
flake.nix feat(nix): upgrade Android SDK to 35, add emulator support 2026-03-15 02:15:46 +00:00
install.sh fix: install extension-level npm deps in install.sh 2026-02-11 09:56:05 -06:00
LICENSE chore: add MIT license and FUNDING.yml 2026-02-04 22:54:24 -06:00
package-lock.json fix(termux): make node-pty optional 2026-03-21 10:15:52 -05:00
package.json fix(termux): make node-pty optional 2026-03-21 10:15:52 -05:00
postinst feat: add review extension, simplify brain system, remove legacy templates 2026-02-10 21:17:29 -06:00
ralph-chat-fixes.yml chore: auto-commit before merge (loop primary) 2026-02-10 02:32:57 +00:00
ralph-chat-ux.yml chore: auto-commit before merge (loop primary) 2026-02-10 02:32:57 +00:00
ralph-polish.yml chore: auto-commit before merge (loop primary) 2026-02-10 02:32:57 +00:00
ralph-web-ui.yml chore: auto-commit before merge (loop primary) 2026-02-10 02:32:57 +00:00
ralph.yml chore: auto-commit before merge (loop primary) 2026-02-20 16:52:30 +00:00
README.md fix(termux): make node-pty optional 2026-03-21 10:15:52 -05:00
SKILL.md refactor: migrate SOP files to skills and harden telegram worker flows 2026-02-16 01:55:39 +00:00

rho

Ask DeepWiki @tau_rho_ai

An always-on personal AI operator that:

  • stays running in the background,
  • remembers context across sessions,
  • and checks in proactively on a schedule.

Runs on macOS, Linux, and Android (plus iPhone/iPad via SSH).

rho web ui

Built on pi coding agent.

Terminal demo

Rho demo


Why rho

Most AI tools are stateless chat tabs. rho is built for ongoing operation.

  • Persistent memory: durable context across sessions
  • Memory observability: inspect, search, and edit what the agent has learned
  • Proactive heartbeat: check-ins every 30m by default
  • Local-first state: your memory and config stay on your machine
  • BYO model/provider: use your own pi/provider setup
  • Multi-surface control: terminal, web UI, Telegram, and agent email

Prerequisites: Node.js 18+, tmux, git

npm install -g @rhobot-dev/rho
rho init && rho sync
rho login && rho start
rho

That gives you:

  • initialized config in ~/.rho/
  • authenticated provider access via pi
  • background heartbeat daemon
  • an attached interactive session

First 5 minutes

Run these after install:

rho status                # daemon + module health
/rho status               # heartbeat status (inside session)
/rho now                  # trigger immediate check-in
/brain                    # open memory viewer
/vault inbox              # see captured knowledge items

Web UI (first-class, built in)

rho includes a browser workspace for day-to-day operation:

  • chat with real-time streaming responses
  • session browsing + forking from any message
  • memory management (/brain entries)
  • task management
  • config editing (~/.rho/init.toml)
  • line-level code review at /review

Lightweight + performant by design

  • No-build web split: server logic in web/*.ts, browser runtime in web/public/js/*.js (no frontend bundler/transpile pipeline).
  • Lean server runtime: Hono-based routes with response compression enabled.
  • Low-latency updates: live RPC/WebSocket streaming for chat responses.
  • Push over poll where possible: server emits sessions_changed UI events; client updates immediately.
  • Idle-aware behavior: polling pauses when the tab is hidden or user is idle, then resumes on activity.
  • Render throttling for streams: markdown updates are debounced (150ms) to reduce UI churn during rapid token deltas.
  • Session metadata caching: session info is cached by file mtime to avoid unnecessary re-reads.
rho web
rho web --port 4000
rho web --open

Then open http://localhost:3141 (or your host IP).

Positioning vs OpenClaw / nanobot

Project Web experience emphasis
rho Built-in operator workspace with stronger memory observability and a lightweight no-build stack (chat, learned-memory inspection/editing, tasks, config, review)
OpenClaw Strong Gateway Control UI + WebChat control plane
nanobot README primarily emphasizes CLI + channel gateway flows

Install alternatives

pi package install
pi install npm:@rhobot-dev/rho
rho init && rho sync
rho login && rho start
macOS / Linux (installer script)
git clone https://github.com/mikeyobrien/rho.git ~/.rho/project
cd ~/.rho/project && ./install.sh

The installer checks missing dependencies and supports NixOS.

Android (Termux)

Install Termux and Termux:API from F-Droid, then:

curl -fsSL https://rhobot.dev/install | bash

If Termux can't build the optional node-pty native module, rho still installs and runs. Only the embedded web terminal drawer is disabled until node-pty works on that device.

iPhone / iPad via SSH

Run rho on a server/VPS/home machine, then connect from iOS using Termius (or any SSH client).

Guide: docs/iphone-setup.md


What you can do with rho

Use case What rho does
Daily operator loop Keeps reminders/tasks alive between sessions and runs periodic check-ins
Memory-backed coding copilot Stores durable behavior/preferences/learnings, and lets you inspect/edit that learned state directly
Inbox agent Gets name@rhobot.dev, polls, reads, and replies to email
Telegram-controlled agent Receives prompts from Telegram and responds in-thread
Browser control panel Web UI for chat, memory, tasks, and config

Mobile Live Mode (native Android wrapper)

If you use the native Android wrapper (mobile/rho-android) to run rho-web, background behavior has two explicit modes:

  • Idle Mode (default): best battery behavior. No always-on background socket while the app is backgrounded; reconnect + replay happens when the app becomes active again.
  • Live Mode (GO LIVE): starts an Android foreground service with a persistent notification and lease heartbeats to keep active streams alive while locked/backgrounded.

Use Live Mode when stream continuity matters (for example, long active responses while the phone is locked). Without it, WebView background limits can cause disconnect/orphan behavior around the default orphan window.

Tradeoffs:

  • higher battery/network usage while Live Mode is active,
  • persistent foreground notification,
  • explicit user-controlled lifecycle (GO LIVE / STOP LIVE).

Baseline Live Mode reliability does not require Firebase credentials.


Surfaces and modules

Core runtime

  • Heartbeat: scheduled autonomous check-ins
  • Brain: append-only structured memory (brain.jsonl)
  • Vault: markdown knowledge graph (~/.rho/vault/)

Channels

  • Email: agent inbox at name@rhobot.dev
  • Telegram: polling adapter with allowlist + moderation flow

Interface

  • CLI: rho ... commands
  • Session slash commands: /rho, /brain, /vault, /skill, /telegram, /email
  • Web UI: chat + memory/tasks/config in browser

Security and ownership model

  • Your memory is local (~/.rho/brain/brain.jsonl)
  • Your config is local (~/.rho/init.toml, ~/.rho/packages.toml)
  • Your providers are yours (rho login via pi)
  • Telegram controls: allowlists and mention gating
  • Email controls: sender controls + outbound policy limits

No hosted rho memory backend required.


Command quick reference

rho                      # start and attach
rho init                 # initialize ~/.rho config
rho sync                 # sync rho config to pi
rho doctor               # health + config checks
rho login                # authenticate providers
rho start                # start background daemon
rho stop                 # stop daemon
rho status               # daemon/module status
rho trigger              # force heartbeat now
rho logs                 # recent heartbeat output
rho config               # show effective config
rho calc "2 + 2 * 3"     # quick arithmetic calculator
rho upgrade              # update and resync
rho skills <args>        # skills provider wrapper

Inside a session:

/rho status              heartbeat state
/rho now                 immediate check-in
/rho interval 30m        set check-in interval
/rho enable/disable      toggle heartbeat
/bootstrap status        bootstrap lifecycle state
/brain                   memory operations
/vault inbox             captured vault items
/skill run pdd           planning workflow
/skill run code-assist   implementation workflow

Platform support

Platform Status Notes
Linux Supported Native install + daemon + web UI
macOS Supported Native install + daemon + web UI
Android (Termux) Supported Extra mobile capabilities via platform skills
iPhone/iPad Supported (SSH client) Run rho remotely, connect via SSH

Docs map


For contributors

Project structure and internals are intentionally modular:

  • cli/ for command surface and daemon orchestration
  • extensions/ for runtime tools/modules
  • skills/ for portable markdown runbooks
  • platforms/ for platform-specific installs/capabilities
  • web/ for browser UI + RPC bridge

For full tree + extension/skill details, see current README.md and docs/.