The Problem

Organizations want to run lightweight, modular AI agents locally without the overhead of large cloud runtimes. Existing solutions either bundle monolithic frameworks or require proprietary back‑ends, which limits customization and raises cost.

What This Does

OpenHuman delivers a Rust‑backed agent harness that plugs into any LLM, memory store or search engine you already operate. The core runner lives in crates/openhuman-core (Rust, 2878 files) and exposes a minimal API. A lightweight React front‑end (app/src/App.tsx) and a Tauri mobile wrapper (app/src-tauri-mobile/src/main.rs) provide UI and native packaging. The project ships Docker images (Dockerfile, .github/Dockerfile) and CI workflows for rapid iteration.

How It Is Wired

Entry point – app/src/main.rs (Tauri) or app/src/App.tsx (React). From main.rs, the Tauri runtime calls lib.rs which bootstraps the Rust core via openhuman-core::run(). openhuman-core::run() loads configuration from crates/openhuman-core/src/config/schema/load/secrets.rs and establishes LLM connections. Control then flows to openhuman-core::agent::run() (in crates/openhuman-core/src/agent.rs), which orchestrates prompt crafting, memory look‑ups, and tool execution. Outputs are emitted back to the UI through Tauri IPC or REST endpoints exposed by the Express server (app/package.json scripts). The React layer consumes these via app/src/components/ai‑elements/index.ts, rendering agent responses and allowing user input.

What this code touches outside itself:

  • File system: reads /etc/openhuman/config.toml and writes logs under ~/.cache/openhuman.
  • Network: sends HTTP requests to configured LLM endpoints and optional external APIs.
  • Database: optional persistence via SQLite when --use-sqlite flag is present (handled in crates/openhuman-core/src/db.rs).

Hub functions – run() and agent::run() are the widest blast radius; any change to them propagates to the UI, memory, and tool layers. No explicit cycles are present in the core graph; the design follows a linear request‑response pipeline.

How To Use It

Setup

# Clone
git clone https://github.com/moses-y/openhuman
cd openhuman

# Build Rust core
cargo build --release

# Build web assets
cd app
npm ci
npm run build

Configuration

Environment variables are defined in .env.example. Required keys: OPENAI_API_KEY, OPENAI_BASE_URL. Place them in .env and reference crates/openhuman-core/src/config/schema/load/secrets.rs.

Running

# Start the Tauri desktop app
cargo tauri dev

# Or run the Node/Express server
cd app
npm run start

The UI launches at http://localhost:5173 (React) or the native desktop window.

Real‑World Use

A startup can host the agent locally by packaging the Docker image (docker build -t openhuman .). Then, in a CI pipeline, run cargo openhuman --model gpt-4o --prompt "Summarize this sprint." to generate sprint reports that are written to a shared SQLite store for later retrieval.

Code Health & Issues

  • Low – Secret‑shaped paths present:
  • crates/openhuman-core/src/config/schema/load/secrets.rs
  • crates/openhuman-core/src/security/credentials/ops/secrets.rs
  • crates/openhuman-core/src/security/secrets.rs (static analysis flagged potential accidental exposure of sensitive files; review file permissions.)

No other measured issues were returned by the analysis tool.

The Bottom Line

OpenHuman offers a well‑structured Rust core with a convenient React/Tauri UI. Its modularity and Docker support make it suitable for teams that need a deploy‑on‑prem AI harness without vendor lock‑in. The main trade‑off is the substantial codebase size (5921 files) and the need to maintain Rust tooling, which may be overkill for very small projects.