In 5 minutes, you will know what OpenHuman is, how its memory works, how it compares to OpenClaw and Hermes Agent, and you will have it running locally with Gmail, Notion, or Slack connected.


OpenHuman crossed +20k GitHub stars in days.

Most of those stars came during a GitHub Trending run the founder marked at seven days at #1 on May 18, 2026, when he also posted that the project had hit #1 on Product Hunt’s daily, weekly, and monthly leaderboards.

Steven Enamakel, the founder, tried to set up an open-source AI agent for his dad earlier this year. Three hours of API keys, YAML, and a terminal his dad had never opened later, they both gave up. OpenHuman is what came out of that.

OpenClaw (+373k stars, MIT) and Hermes Agent (+157k stars, MIT) are the two open-source agents OpenHuman is now compared with. Both are great. Neither walks your tools and writes the memory before you start prompting.

This morning at 07:17 UTC, v0.54.0 shipped, with fully-local voice and a shared-memory bridge to Claude Code, Cursor, Codex, and OpenCode.


OpenHuman is an open-source (GPL-3.0) desktop AI agent from TinyHumans AI.

It is written in Rust (65.2% of the codebase) with a TypeScript + React 19 frontend, packaged as a native Tauri v2 desktop app. It ships on macOS, Windows, and Linux. No mobile.

The pitch in one line: most agents start cold, OpenHuman walks your tools every 20 minutes and writes the memory into Markdown files you can open and edit.

Five things ship in the box:

  • A clean desktop UI with a mascot that can speak, react, and join Google Meet as a real participant.

  • A 118+ Composio toolkit catalog for one-click OAuth integrations.

  • A Memory Tree plus an Obsidian-compatible Markdown vault as the local knowledge base.

  • Batteries-included native tools: web search, web-fetch scraper, full coder toolset, native voice.

  • TokenJuice, a token compression layer that runs on every tool result before it touches an LLM.

The whole project is three months old. The public repo was created on February 18, 2026.


Most open-source agents bet on the wrong half of the problem.

They get smarter at planning. They add more tools. They wire up more channels. They still know nothing about you until you paste your week into the prompt.

OpenHuman is betting the other way. Structured local memory beats embedding-bag retrieval when the agent needs to navigate your day, not similar text. The founder’s framing, from the Product Hunt launch:

“Every powerful AI agent today is built for the 0.01% who can spin up their own runtime. The other 99.99% are watching the agent revolution from the sidelines.

Early traction tracks that bet. 5,000+ users in the first 7 days and 150% week-over-week growth, per the founder’s Product Hunt post.

OpenClaw and Hermes Agent take different bets. OpenClaw is a multi-channel gateway across 20+ messaging surfaces. Hermes Agent is a self-improving runtime with a closed learning loop. Neither tries to walk your tools and write the memory before you prompt. Full head-to-head comparison further down.


Not here for the internals? Skip to How to Get Started below.

Nine pieces. The memory pipeline is the spine. Everything else hangs off it.

A deterministic, bucket-sealed pipeline, not a vector-store wrapper.

source adapters → canonicalize → chunker → content_store → store → score → source/topic/global trees → retrieval

Data is canonicalized to Markdown, split into ≤ 3,000-token chunks with deterministic IDs, scored, and folded into three trees: source (one per source, L0 → L1 → L2 cascade), topic (one per high-hotness entity), global (one node per UTC day). Three background workers run heavy work behind a semaphore. A daily scheduler at 00:00 UTC enqueues the global digest and stale-flush.

Storage layout:

  • <workspace>/memory_tree/chunks.db: SQLite, holds chunks, scores, summaries, entity index, jobs, hotness.

  • <workspace>/wiki/: the Obsidian-compatible Markdown vault.

<workspace> defaults to ~/.openhuman, overridable with OPENHUMAN_WORKSPACE. The vault is the point: you can open it in Obsidian, edit a wrong line, and the next retrieval is correct.

The constant lives in src/openhuman/composio/periodic.rs:

One global tick walks every active connection. Per-(toolkit, connection_id) state holds the cursor, last-sync, dedup set, and daily budget. Errors are swallowed so the loop never panics out.

The native registry today (src/openhuman/composio/providers/registry.rs::init_default_providers):

Auto-ingest covers Gmail, Notion, Slack only. The 118+ figure is the Composio catalog reach as proxied tools. Tool calls work everywhere, memory ingest fires on the three.

Every connected service surfaces four ways: agent tool, memory source (native only), profile signal, trigger source (HMAC-verified webhooks).

23 toolkits ship as curated proxied tool sets without auto-ingest yet:

Shopify, Stripe, HubSpot, Salesforce, Airtable, Figma, GoogleCalendar, GoogleDrive, GoogleDocs, GoogleSheets, Discord, Telegram, WhatsApp, Microsoft Teams, Outlook, Linear, Jira, Trello, Asana, Dropbox, Twitter, Spotify, YouTube.

Three channels talk back: Telegram (two-way, 80+ actions), Discord (send/receive), Web (in-app local chat).

A Rust port of vincentkoc/tokenjuice in the tool-execution path. Every tool result hits a rule overlay before it reaches an LLM. Three layers, later layers override earlier ones:

  • Builtin (shipped with the binary): git, npm, cargo, docker, kubectl, ls defaults.

  • User (~/.config/tokenjuice/rules/): personal overrides across every project.

  • Project (.tokenjuice/rules/): repo-specific overrides, checked in.

HTML → Markdown. Long URLs shortened. CJK and emoji preserved grapheme-by-grapheme. Project claim: up to 80% reduction in cost and latency. PrimeAIcenter measured ~70%. Realistic range: 70–80%, biggest wins on log-heavy and HTML-heavy payloads.

One subscription brokers 30+ providers. The agent loop emits a hint: prefix per task. The router resolves it.

Top five hints:

  • hint:reasoning: strong reasoning model.

  • hint:fast: fast / cheap model.

  • hint:vision: vision-capable model.

  • hint:summarize: compression model.

  • hint:code: code-tuned model.

Lighter hints (hint:reaction, hint:classify, hint:sentiment, hint:medium, hint:tool_lite) prefer the local provider when Local AI is on. Heavy hints stay cloud. The task picks the model, not the user. Full hint reference in the appendix.

Two flags switch it on:

Defaults: all-minilm:latest (~23 MB) for embeddings, gemma3:1b-it-qat (~700 MB) for summary-tree building. Heartbeat, learning, and subconscious can also move on-device. Chat, vision, STT, TTS, and web search stay cloud. “Local-first” means memory, not the whole stack.

The mascot lip-syncs to TTS and shifts through six mood states (idle, thinking, listening, talking, surprised, dreaming). The Meet agent joins Google Meet through an embedded CEF webview as a real participant: a name, a face, a tile in the grid.

Mid-meeting it can:

  • Listen. Inbound audio streams through STT, diarized per speaker, into the Memory Tree live.

  • Speak. Replies stream into the call as an outbound mic feed, not bounced through your speakers.

  • Animate. The mascot canvas is piped as the outbound camera, lip-synced to the TTS audio everyone else hears.

  • Use tools. Memory recall, auto-fetch, native tools, subconscious outputs, all reachable mid-call.

v0.54.0 added fully-local STT and TTS via Whisper and Piper. Prior path required ElevenLabs cloud for TTS.

A background tick (default 5 min, minimum 5 min) that loads due tasks, builds a situation report from memory plus workspace state, and returns one of three decisions:

Local model evaluates, cloud agent escalates. Write tasks you asked for need no approval. Unsolicited writes open an approval card.

The QuickJS / rquickjs runtime that executed skill packages was removed. Today’s skills surface is metadata-only:

  • Discover and parse SKILL.md files.

  • Resolve scope (User / Project / Legacy) and trust markers.

  • Install from URL (HTTPS only, no private hosts, .md only, max 1 MiB body).

  • Read resources (cap 128 KiB), uninstall, per-turn prompt injection (cap 8 KiB).

Registry repo: tinyhumansai/openhuman-skills. Runtime is being rebuilt. Treat skills as catalog + prompt-injection today, not a third-party plugin runtime.


Released 2026-05-19 07:17 UTC, the morning after the Product Hunt #1 post. 230 commits, 1,271 files changed against v0.53.43 six days earlier.

Voice. Fully-local STT and TTS via Whisper / Piper. Configurable mascot voice with ElevenLabs picker.

Memory. Optional agentmemory backend bridge: set memory.backend = “agentmemory” in config.toml and the Memory Tree shares a durable store with Claude Code, Cursor, Codex, and OpenCode. Plus MCP stdio memory server, NotebookLM-style folder ingestion, cross-chat context retrieval, per-(row, model) embedding storage.

Agents. Dedicated crypto_agent for wallet and market ops (#1397). Cursor Cloud Agents parallel workflow. Global tool registry. Task board CRUD. Gmail Unsubscribe Agent.

Integrations. Bring-your-own Composio direct mode (#1710). Seltz as direct-API search. Discord webview transcript ingestion. WeChat embedded webview.

Providers. Unified per-workload routing. LM Studio local provider support. New reasoning-quick-v1 route for low-latency chat.

UX and i18n. Onboarding redesign. Dark mode standardization. ~3,900 strings across nine locales. Italian and Indonesian added.

Security. Path traversal prevention in agent prompt loading. DNS-aware URL validation. Audio base64 max-size check. Self-repair for locked .secret_key on Windows. Linux AppImage NSS fix.

Local main is already past v0.54.0 at 0.54.2. Post-release: Polymarket integration (#2145), explicit user-preference tool (#2150), Ollama context-window gating (#2122).


The May 2026 reviews land in roughly the same spot.

PrimeAIcenter (five-day test, Gmail + Notion + GitHub + Calendar): Memory Tree useful after three days, TokenJuice measured ~70% (not 80%), two sync failures in the window. Read on the Meet mascot: sounds gimmicky, isn’t.

TechTimes (May 16): framed OpenHuman as inverting the playbook, flagged three risks, piped-shell install as a supply-chain vector, OAuth aggregation across email, code, calendar, and payments, and no formal independent audit.

Julian Goldie (three-agent SEO test): OpenHuman wins on UI, setup, and voice. Hermes wins on long autonomous tasks. OpenClaw wins on scheduling.

HackerNoon (OpenClaw context): 138+ disclosed CVEs and 341 malicious ClawHub skills out of 2,857 scanned as of May 2026. Hermes: 3 CVEs. OpenHuman: no published CVEs, no skill marketplace today.

Three different shapes of the same problem. Pick by use case:

  • Pick OpenHuman if you want a desktop agent that reads your email, calendar, Slack, and Notion within minutes, plus a memory you can open as Markdown.

  • Pick Hermes Agent if you want an always-on server-side agent with a self-improving learning loop and six terminal backends (local, Docker, SSH, Daytona, Singularity, Modal) for long-running autonomous workflows.

  • Pick OpenClaw if you want a channel-heavy gateway agent across 20+ messaging surfaces with Git-versioned config. Audit the marketplace and skill set carefully given the recent CVE and ClawHub reporting.


Here is the command you came for:

That single line installs OpenHuman on macOS or Linux. The full hint table, Local AI presets, native vs proxied list, and troubleshooting all live in the Reference Appendix at the end of this piece.

Three options. Pick by tradeoff.

Option A: Download a signed binary (recommended for non-developers).

Go to tinyhumans.ai/openhuman and pick DMG (macOS), MSI or EXE (Windows), or AppImage / .deb (Linux). This avoids the piped-shell install path TechTimes flagged as a supply-chain risk vector.

Option B: One-line installer (recommended for the demo path).

macOS / Linux x64:

Windows PowerShell:

Option C: Build from source (for contributors).

Git, Node.js 24+, pnpm 10.10.0, Rust 1.93.0 + rustfmt + clippy, CMake, Ninja, ripgrep, plus your platform’s desktop build prerequisites.

Six steps. None of them require a terminal after step 1.

  1. Launch the app. Sign in.

  2. Click Connect on Gmail, Notion, or Slack. These are the three native providers that auto-ingest into the Memory Tree today.

  3. Wait one auto-fetch tick (up to 20 minutes) or trigger a manual ingest from the Intelligence tab in the app.

  4. Open the Obsidian vault at ~/.openhuman/wiki/ via the in-app deep link or any file browser.

  5. Ask a context-heavy prompt: “What did I commit to in email last week?”

  6. Open a chunk file in the vault before you trust the answer. The whole point is that the memory is readable. If something is wrong, fix the file, and the next retrieval is correct.

That is the golden path. Five minutes of real time, twenty minutes of wall-clock if you wait for the first sync tick.

Local AI is off by default. Two flags switch it on:

Then go to Settings → AI & Skills → Local AI and pick one of three presets:

  • Embeddings only. all-minilm:latest (~23 MB) for memory embeddings.

  • Memory + reflection. Embeddings + summary-tree building (gemma3:1b-it-qat, ~700 MB) + learning.

  • Everything local. All five workloads: embeddings, summary, heartbeat, learning, subconscious.

Hardware floor: 8 GB RAM minimum, 16 GB+ ideal. LM Studio is supported as the alternative provider with default base URL http://localhost:1234/v1.

Skip Local AI if you only have a few sources connected. The cloud path is faster and the privacy benefit is small in that case.

Hand the mascot a Google Meet link from the desktop app.

It opens the embedded Meet webview, joins with the configured display name, switches its tile to the mascot canvas, and is now in the participant grid. The mic is the TTS injection stream (not your real microphone). The camera is the mascot frame producer (not your real webcam). Mute the agent’s mic from the app the same way you would mute yourself in Meet.

Required OS permissions: Camera, Microphone. On macOS, also Accessibility and Input Monitoring for desktop hotkeys.

If you already self-host agentmemory for Claude Code, Cursor, Codex, or OpenCode, set this in config.toml:

OpenHuman’s Memory Tree now proxies to that store. The same durable memory powers OpenHuman alongside the other four agents. This is new in v0.54.0.

Quality gates before opening a PR: pnpm typecheck, pnpm lint, pnpm format:check, cargo check -p openhuman --lib, pnpm test, pnpm test:rust. PRs need at least 80% coverage on changed lines or the merge gate blocks them.

Save the command. The full Reference Appendix below covers workspace structure, every model routing hint, the Local AI presets matrix, the native vs proxied integration list, and a troubleshooting table.


Auto-fetch covers three integrations today. The 118+ headline is the Composio catalog reach, not the count of toolkits that auto-ingest into the Memory Tree. Today’s native providers: Gmail, Notion, Slack.

Local-first is not fully local. Memory Tree and the Obsidian vault are local. Default chat, vision, web search, integration OAuth proxying, and TTS streaming all go through the OpenHuman backend.

Skill execution is being rebuilt. The QuickJS runtime is gone. Today’s skills surface is metadata-only (discover, parse, install, uninstall, prompt injection). No executable third-party skill packages today.

80% token compression is a project claim. PrimeAIcenter measured around 70% in their five-day independent test. Realistic range: 70 to 80%, biggest wins on log-heavy or HTML-heavy payloads.

No published independent security audit. v0.54.0 adds meaningful hardening (path traversal prevention, DNS rebinding guard, bearer token redaction, Windows ACL self-repair), but the OAuth surface across email, code, calendar, and payments is wide and concentrated.

So the best recommendation is to install it this week if you are evaluating personal-agent UX or memory ingestion patterns, treat it as active beta for anything production-adjacent, and revisit auto-fetch coverage and the skill runtime in 60 days.


Verdict: Worth Watching.

The Memory Tree, the Obsidian vault, the 20-minute auto-fetch, and the v0.54.0 agentmemory bridge are real and source-verifiable. The caveats: only Gmail, Notion, and Slack auto-ingest today (not 118), and “local-first” applies to memory, not to LLM calls or OAuth proxying.

Not production-ready. 148 open issues, no published security audit, a skill runtime in transition, beta-grade onboarding bugs. What would change the verdict: native sync providers across the top ten integrations, a published audit, public pricing, and a stable skill runtime. Watch the v0.55 release.


Full breakdown of recent updates + daily signals in our newsletter (link in bio).

If OpenHuman is the third entrant after OpenClaw and Hermes Agent, which one are you actually running right now, and what made you pick it?


RAM. 4 GB minimum. 8 GB recommended with Local AI. 16 GB+ for large mailboxes or full local AI.

Disk. ~500 MB for the binary. +23 MB for all-minilm, +700 MB for gemma3:1b-it-qat, several GB more for full mailbox memory.

OS. macOS 12+ (Apple Silicon or Intel), Windows 10+ (x64 or ARM64), Linux x64 with libssl.

macOS permissions. Camera and Microphone for the Meet agent. Accessibility and Input Monitoring for desktop hotkeys.

Build-from-source toolchain. Node.js 24+, pnpm 10.10.0, Rust 1.93.0 + rustfmt + clippy, CMake, Ninja, ripgrep.

  • <workspace>/memory_tree/chunks.db: SQLite, holds chunks, scores, summaries, entity index, jobs, hotness.

  • <workspace>/wiki/: Obsidian-compatible Markdown vault.

  • ~/.config/tokenjuice/rules/: User-level TokenJuice rule overrides.

  • .tokenjuice/rules/: Project-level TokenJuice rule overrides.

Defaults: <workspace> is ~/.openhuman. Override with OPENHUMAN_WORKSPACE.

Leaf lifecycle.

The deep score decides admitted vs dropped. Admitted leaves enter a buffer (buffered). When the buffer seals, every leaf inside flips to sealed. Dropped leaves stop, the chunk row stays for provenance.

Job queue kinds.

  • extract_chunk: Deep score + entity extraction. Decides admitted vs dropped.

  • append_buffer: Adds an admitted leaf to the source (or topic) L0 buffer. May trigger a seal.

  • seal: Compresses an L0 buffer into an L1 summary. Cascades up if the parent is full.

  • topic_route: Routes a leaf into per-entity topic trees, gated by a hotness check.

  • digest_daily: Builds the global daily digest node.

  • flush_stale: Force-seals buffers that have been sitting too long.

Three background workers pick jobs. Semaphore caps concurrent LLM-bound calls. On startup, any job whose worker lease has expired (crash, kill) returns to the queue.

  • hint:reasoning: strong reasoning model. Multi-step planning, math, code-heavy turns.

  • hint:fast: fast / cheap model. UI helpers, autocompletes, small classification.

  • hint:vision: vision-capable model. Screenshots, image attachments, OCR.

  • hint:summarize: compression model. Memory tree summary builders.

  • hint:code: code-tuned model. Native coder turns.

  • hint:reaction: lightweight model. Quick reactions.

  • hint:classify: lightweight model. Classification tasks.

  • hint:sentiment: lightweight model. Sentiment analysis.

  • hint:medium: medium model. Medium-complexity tasks.

  • hint:tool_lite: lightweight model. Lightweight tool calls.

Override globally in config.toml. Override per call by passing a concrete model name (no hint: prefix). Override per skill via the manifest.

  • Embeddings only. Memory embeddings run local. Everything else stays cloud.

  • Memory + reflection. Embeddings, summary-tree building, and learning passes run local. Heartbeat and subconscious stay cloud.

  • Everything local. All five workloads run local: embeddings, summary-tree, heartbeat, learning, subconscious.

Models: all-minilm:latest (~23 MB) for embeddings, gemma3:1b-it-qat (~700 MB) for summary-tree building. Provider switch: local_ai.provider = “ollama” or local_ai.provider = “lm_studio”. Base URL override: local_ai.base_url.

Environment variables.

  • OPENHUMAN_WORKSPACE: override default workspace path (default ~/.openhuman).

  • OPENHUMAN_CORE_TOKEN: per-launch bearer for HTTP JSON-RPC to the in-process core.

  • OPENHUMAN_CORE_REUSE_EXISTING=1: attach to an externally-started openhuman-core process.

  • OPENHUMAN_APP_ENV=staging: use the staging workspace at ~/.openhuman-staging/.

  • OPENHUMAN_LM_STUDIO_BASE_URL: override LM Studio endpoint (default http://localhost:1234/v1).

  • LM_STUDIO_BASE_URL: alias for the above.

  • GGML_NATIVE=OFF: disable -mcpu=native on macOS builds that fail.

  • RUST_LOG=openhuman_core::openhuman::tokenjuice=debug: trace TokenJuice rule matches and reductions.

Useful config.toml keys.

  • local_ai.runtime_enabled (default false): master switch for the local provider.

  • local_ai.opt_in_confirmed (default false): explicit opt-in. Bootstrap forces back to false until you re-opt.

  • local_ai.provider (default “ollama”): local provider, “ollama” or “lm_studio”.

  • local_ai.base_url (unset): provider URL override. LM Studio default http://localhost:1234/v1.

  • local_ai.usage.embeddings (default false): use local for memory embeddings.

  • local_ai.usage.heartbeat (default false): use local for the heartbeat loop.

  • local_ai.usage.learning_reflection (default false): use local for learning passes.

  • local_ai.usage.subconscious (default false): use local for the subconscious loop.

  • memory.backend (default “memory_tree”): switch to “agentmemory” to proxy to a self-hosted store.

  • composio.mode (default “tinyhumans”): switch to “direct” to use your own Composio v3 tenant.

Native (auto-ingest into Memory Tree). Gmail, Notion, Slack.

Curated proxied (callable, no auto-ingest). Shopify, Stripe, HubSpot, Salesforce, Airtable, Figma, GoogleCalendar, GoogleDrive, GoogleDocs, GoogleSheets, Discord, Telegram, WhatsApp, Microsoft Teams, Outlook, Linear, Jira, Trello, Asana, Dropbox, Twitter, Spotify, YouTube.

Catalog reach (Composio). 118+ services via OAuth, a subset of the wider catalog.

  • Scheme: HTTPS only.

  • Hosts: private and local hosts rejected.

  • URL shape: GitHub blob URLs normalized, path must end in .md.

  • Max URL length: 2,048 chars.

  • Default fetch timeout: 60 seconds.

  • Max fetch timeout: 600 seconds.

  • Max SKILL.md body: 1 MiB.

  • Per-resource read cap: 128 KiB.

  • Per-turn injection cap: 8 KiB.

  • Writes are atomic.

Source: src/openhuman/skills/ops_install.rs, src/openhuman/skills/inject.rs, src/openhuman/skills/ops.rs.

First sync feels slow. Large mailboxes take hours on first ingest. Watch the Intelligence tab heatmap.

Locked .secret_key on Windows. v0.54.0 ships self-repair plus Windows ACL hints. Restart the app.

Linux AppImage will not launch on Arch or rolling distro. v0.54.0 excluded bundled NSS libs. Re-download.

Onboarding stuck after Google auth on Windows. Tracking as issue #2215, labeled priority: critical. Subscribe to the issue for the fix.

Sync failure on one integration. Per-connection state rebuilds on the next tick. A missed periodic sync is harmless.

macOS build fails with -mcpu=native. Set GGML_NATIVE=OFF before cargo check or cargo test.

Coverage gate on changed lines: ≥ 80%. CI enforces.