RCLI Technical Briefing

The Problem

RCLI delivers on-device voice AI for macOS without cloud dependencies, but the codebase contains significant structural issues that increase maintenance risk and hinder future development. Static analysis of 113 code files identified 59 findings across 4 distinct quality categories, with 29 rated high severity.

What This Does

RCLI is a complete STT + LLM + TTS + VLM pipeline running natively on Apple Silicon. The repository contains 135 files across src/ (110 files), assets/, scripts/, and .github/. Core inference engines reside in src/engines/ (llm_engine, stt_engine, tts_engine, vlm_engine, metalrt_engine), with RAG capabilities in src/rag/ (bm25_index, vector_index, hybrid_retriever, document_processor). Forty macOS actions are implemented in src/actions/ covering app control, files, navigation, media, and system functions. The entry point is src/cli/main.cpp, which feeds into src/api/rcli_api.cpp/h (the main API layer) and src/pipeline/orchestrator.cpp (2527 lines, orchestrates the full pipeline). MetalRT, a proprietary GPU inference engine by RunAnywhere, Inc., provides the acceleration layer, with fallback to llama.cpp on M1/M2.

How It Is Wired

Execution begins at src/cli/main.cpp and flows through src/api/rcli_api.cpp (HIGH cognitive load, oversized file with max indentation depth 11) into src/pipeline/orchestrator.cpp (another oversized file at 2527 lines). The call graph analyzed 113 of 113 code files with 0 internal modules, 0 import edges, and 0 circular dependencies. Key hubs with wide blast radius include src/api/rcli_api.cpp, src/pipeline/orchestrator.cpp, and src/cli/model_pickers.h (duplicated code). The action registry in src/actions/action_registry.h exhibits deep nesting patterns. Code outside the process includes macOS system integration via src/actions/, MetalRT GPU inference, and local document indexing. The internal module graph shows no circular dependencies, but the 8 oversized files create high ripple risk for any change.

How To Use It

Setup:

  • Clone via: git clone https://github.com/moses-y/RCLI
  • Homebrew: brew tap RunanywhereAI/rcli https://github.com/RunanywhereAI/RCLI.git && brew install rcli
  • Required: macOS 13+ on Apple Silicon; M3 or later for MetalRT engine (M1/M2 fall back to llama.cpp)
  • One-time model download: rcli setup (~1GB)

Configuration:

  • No API keys or environment variables required—entirely on-device
  • No cloud infrastructure needed

Running it:

  • rcli — interactive TUI (push-to-talk + text)
  • rcli listen — continuous voice mode
  • rcli ask "open Safari" — one-shot command
  • rcli ask "play some jazz on Spotify"

Real-World Use

A user queries their technical documentation repository hands-free. Saying rcli ask "find the section about memory management in my guides" triggers the STT engine, intent routing through the action registry, hybrid retrieval via src/rag/hybrid_retriever.cpp (~4ms), and TTS response—all on-device with no API calls. The local RAG pipeline indexes documents via src/rag/document_processor.cpp and answers queries using the embedding engine without leaving the machine.

Code Health & Issues

Measured static analysis of 59 findings (29 high, 30 medium, 0 low):

  • HIGH - Pin third-party GitHub Actions to commit SHA: .github/workflows evidence: softprops/action-gh-release@v2; tag can move, actions run with tokens at whatever owner last pushed
  • MEDIUM - Declare least-privilege permissions for GITHUB_TOKEN: .github/workflows/ci.yml evidence: 1 workflow(s) declare no permissions; token inherits repository default, allowing injected steps to push or mint releases
  • LOW - Set timeout-minutes on workflow jobs: .github/workflows/release-beta.yml evidence: 2 workflow(s) declare no job timeout; wedged step runs to six-hour platform default

Additional measured findings: deep nesting x39 (src/actions/action_registry.h, src/api/rcli_api.cpp, src/api/rcli_api.h); duplicated code blocks (40 repeated 6-line blocks across 13 files including src/api/rcli_api.cpp, src/cli/main.cpp); oversized files x8 (src/api/rcli_api.cpp, src/cli/tui_app.h, src/pipeline/orchestrator.cpp at 2527 lines); high branching density x11 (install.sh, src/actions/action_helpers.h, src/actions/web_actions.cpp).

Beyond the measured block: repository hygiene shows tests present, CI present (GitHub Actions), Dockerfile absent, license present (MIT), lockfile absent, no committed secrets detected.

The Bottom Line

RCLI delivers capable on-device voice AI for macOS with no cloud dependency—a technically strong foundation. However, the codebase suffers from 8 oversized files exceeding 2500 lines, deep nesting making control flow hard to follow, and duplicated logic across 13 files, creating significant maintenance overhead. CI hygiene issues are straightforward fixes. Suitable for teams needing strict on-device processing with macOS integration, but requires substantial refactoring effort for long-term maintainability.