The Problem

Mac users who want a fully local voice‑assistant must piece together separate STT, LLM, TTS, and RAG components, often relying on cloud APIs, API keys, and fragile glue code. The result is high latency, privacy concerns, and a maintenance burden.

What This Does

RCLI delivers an end‑to‑end on‑device voice AI pipeline for macOS 13+ on Apple Silicon. The repository contains a native C++/Objective‑C++ codebase that stitches together:

Speech‑to‑Text (src/engines/sttengine)

LLM inference (src/engines/llmengine, src/engines/metalrtengine) using the proprietary MetalRT GPU backend Text‑to‑Speech (src/engines/ttsengine) Vision‑Language (src/engines/vlmengine) for image analysis RAG (src/rag/) with BM25 + vector hybrid retrieval

The command‑line interface lives in src/cli/main.cpp. A TUI (src/cli/tuiapp.h, src/cli/tuidashboard.h) presents push‑to‑talk, continuous listening, and a text prompt. Over 40 macOS actions (e.g., Spotify control, window management) are exposed via src/actions/ modules.

How To Use It

Setup / Build

Clone and bootstrap the build git clone https://github.com/RunanywhereAI/RCLI.git cd RCLI Install Xcode command‑line tools if not present xcode-select --install Build with CMake (produces the rcli binary) cmake -S . -B build -DCMAKEBUILDTYPE=Release cmake --build build --target rcli

The repository also ships a Homebrew formula (Formula/rcli.rb) and a one‑liner installer (install.sh). For most users the preferred path is:

curl -fsSL https://raw.githubusercontent.com/RunanywhereAI/RCLI/main/install.sh | bash Homebrew alternative brew tap RunanywhereAI/rcli https://github.com/RunanywhereAI/RCLI.git brew install rcli rcli setup # downloads ~1 GB of model files (once)

Configuration

Running rcli setup creates a hidden ~/.rcli/models/ directory and writes a config.yaml (generated by the setup script) that stores model paths and hardware preferences. No API keys are required.

Running

Interactive TUI: rcli Single command: rcli ask "open Safari" Continuous voice mode: rcli listen Vision query: rcli vlm photo.jpg "what's in this image?"

All commands invoke the binary built from src/cli/main.cpp.

Real‑World Use

A knowledge‑worker can index their project folder with:

rcli rag index /Users/me/Projects/MyApp

Then ask, via voice, “What does the authentication module export?” and receive a synthesized answer drawn from the indexed documents, all without leaving the laptop or exposing data to external services.

Code Health & Issues

Severity – High – Platform lock‑in – Code uses Apple‑specific APIs (.mm files, MetalRT) and CMakeLists.txt enforces macOS 13+; it will not compile on Linux/Windows. Severity – Medium – Test coverage – Only one test file (src/test/testpipeline.cpp) exists; core engines (STT, LLM, TTS) lack unit tests. Severity – Medium – Error handling – Several action modules (e.g., src/actions/browser_actions.cpp) call system APIs without checking return codes, risking silent failures. Severity – Low – Documentation gaps – The README shows usage examples, but there is no API reference for the RAG layer or model‑selection flags; developers must read source headers. Severity – Low – Dependency hygiene – No explicit third‑party dependency lockfile; the build pulls MetalRT binaries at runtime via rcli setup, which could complicate reproducible builds.

Positive signals: MIT license present, CI pipeline (.github/workflows/ci.yml) runs on each PR, and the Homebrew formula automates versioning and checksum verification.

The Bottom Line

RCLI is a well‑structured, fully on‑device voice assistant for Apple Silicon, suitable for privacy‑focused macOS power users or teams that can ship a macOS‑only binary. The codebase is clean and builds reliably, but limited testing and strict platform dependence mean it’s best adopted where macOS is the guaranteed target and internal QA can cover the uncovered engine paths.