Overview
Build, run, test and ship OpenHuman from source.
OpenHuman is open source under GPLv3 at github.com/tinyhumansai/openhuman. This section is for contributors and anyone running OpenHuman from source.
If you just want to use the app, start with Getting started. If you want to read the architecture, build a feature or land a PR, you are in the right place.
Why the harness is light
The core is a Rust library, not a set of services talking over sockets. Agents run in-process, so a turn costs a function call instead of a process boundary or an RPC hop. We measured 500 agents alive at once in one process at roughly 1.77 MiB of marginal memory each. A cold agent turn takes about 100 ms, and a stripped build with only the domains you need can be as small as 51 MiB. Performance has the numbers and how we got them. The rig that produces them is public at tinyhumansai/openhuman-benchmarks.
Everything above that floor is modular. Cargo feature gates decide what compiles in, loadable native modules carry the heavier engines, and config chooses the engines themselves: model providers, embeddings, memory and search. Pluggable engines, Loadable modules and Jev cover that.
Where things live
app/
The pnpm workspace openhuman-app: the Vite and React frontend (app/src/) and the Tauri desktop host (crates/openhuman-app/).
crates/
Rust crates (overview). Six are workspace members. openhuman-core (package openhuman) is the core library, with domains under src/<domain>/ and the controller contract and in-process dispatch under src/core/. It has no binary and no JSON-RPC server. openhuman-rpc is JSON-RPC 2.0 over the core: envelopes, HTTP client and server. openhuman-embed is the typed library facade. openhuman-tinyhumans is the only crate that may depend on tinyhumans-sdk, and holds the backend transport, hosted RPC proxies and host-side session owner. Every host installs it first. openhuman-cli is the openhuman-core binary plus every root tests/ and examples/ target. openhuman-tui is the terminal frontend. The Tauri host, openhuman-app, is excluded from the root workspace and builds from its own manifest.
docs/gitbooks/en/
This site, the public docs (source).
docs/
Internal maintainer docs: test-coverage matrix, release smoke checklist, library benchmarking and minimal-recipe notes, translated READMEs and community/ (docs/).
AGENTS.md at the repo root is the source of truth for AI agents working on the codebase. CLAUDE.md points to it. The same rules apply to humans.
Start here
If this is your first time in the repo:
Getting set up: toolchain, dependencies, the Tauri CLI and everything
pnpm devneeds.Building the Rust core: setup for the Rust workspace only, with the pinned toolchain, OS packages and exact
cargocommands.Architecture and its overview: how the desktop app, the in-process Rust core, the JSON-RPC bridge and the dual sockets fit together. Read this before non-trivial changes.
Frontend and Tauri shell: the React app and the desktop host that wraps it.
MCP server: the opt-in stdio MCP mode that exposes OpenHuman search, memory and sub-agent tools to local clients.
The core in depth
Performance: memory per agent, cold-start timing, binary size and how the benchmarks run. The raw rigs and results are in the public openhuman-benchmarks repo.
Pluggable engines: how config chooses the LLM, embeddings, memory and web search layers, and what is available for each.
Jev: the fast probability model behind tool selection and routine browser decisions.
Embedding OpenHuman (see also
crates/openhuman-embed): usingopenhuman-embedto run the core, and any number of agents on it, inside another Rust product. The Rust quickstart walks through it.SaaS profiles: running the core as a multi-user service behind a gateway, one profile per user, on one node or a cluster with leased profiles.
One TinyHumans API key: what a single key unlocks, including managed inference, embeddings, web search, media, integrations, voice and Jev.
Testing
OpenHuman has three test layers. Know which one your change belongs in. The Rust integration targets are described in tests/README.md and the helper scripts in scripts/README.md.
Testing strategy: when to write Vitest, cargo or WDIO tests.
E2E testing: WDIO and Appium specs, the Linux and macOS setups, and how to run a single spec locally.
Agent observability: the artifact capture that makes E2E and agent runs debuggable after the fact.
PRs must reach at least 80% coverage on changed lines. Add tests for new behavior, not just the happy path.
Shipping
Release policy: versioning, release cadence, OAuth and installer rules.
Cloud deploy: deployment when a change crosses the desktop boundary.
Going deeper
Agent harness: the tinyagents turn loop (checkpointing, circuit breakers, sub-agent handback, journals and replay) and how to extend the tool surface.
Workflows: the tinyflows-backed
flowsdomain, with triggers, trust origins, approval-gated runs and theflows_*RPC surface.Loadable modules: native
cdylibmodules the core loads at runtime, and how they are admitted.Hooks: scripts you own that run before a tool executes, after a file edit or when a turn finishes.
Chromium Embedded Framework: design notes from the CEF era. The shell now runs on stock Tauri (Wry).
Contributing
Open issues and PRs at tinyhumansai/openhuman. The
vendor/submodules (tinyagents, tinymemory and others) have their own repos under tinyhumansai.PRs target
main. Push to your fork, not upstream.Follow
CONTRIBUTING.mdand the issue and PR templates.Keep changes focused. A bug fix does not need surrounding cleanup.
Building toward AGI does not have to mean shipping a kernel. Bug fixes, docs, integrations and tests all move the bar.
Last updated