Agentic desktop launcher — MCP tools, LLM agents, and embedded scripts behind a global hotkey.
Ho is a Tauri app (React + Rust). Open the launcher, pick a mode, run tools or an agent against connected Model Context Protocol servers.
Headless CLI: same ho binary supports operator subcommands (doctor, agent, runs, …). See CLI.
- Launcher — local keyword tool search and direct MCP execution
- Agent — multi-step runs with guardrails, user approvals, durable event timeline, conversation history
- Vibe — natural language → LLM-generated Python or JavaScript (in-process runtimes)
- MCP — stdio, HTTP, and built-in OS Capabilities; OAuth for remote servers
- LLM — OpenAI, Azure OpenAI, Ollama, Thinkers
- Desktop shell — system tray, transparent always-on-top window, 32 themes, EN/ZH i18n
Default hotkey: cmd+` (macOS) / ctrl+space (Windows, Linux).
- Node.js 18+
- Rust (stable)
- Platform toolchain for Tauri (Xcode on macOS, etc.)
git clone https://github.com/thinkers-cool/Ho.git
cd Ho
npm install
npm run devOptional: copy .env.example → .env for build-time analytics and landing-page footer overrides. Leave unset for OSS builds.
| Variable | Purpose |
|---|---|
APTABASE_APP_KEY, APTABASE_HOST |
Backend product analytics (compile-time) |
VITE_CLARITY_PROJECT_ID |
Microsoft Clarity on landing build only |
VITE_LANDING_COPYRIGHT, VITE_LANDING_LICENSE_URL |
Landing page footer text and license link |
| Command | Purpose |
|---|---|
npm run dev |
Full desktop app with hot reload (Tauri) |
npm run dev:web |
Frontend Vite dev server only |
npm run build |
Production bundle for current OS |
npm run typecheck |
TypeScript check (frontend) |
npm run lint |
Frontend dependency-cruiser + Rust clippy |
npm test |
Frontend Vitest + backend cargo test --lib |
npm run test:e2e:ui |
Browser E2E via Playwright (no LLM) |
npm run test:e2e:cli |
Headless CLI E2E (live LLM, needs API key) |
npm run ci |
typecheck + lint + test (CI gate) |
Frontend-only commands (run from repo root with -w frontend, or cd frontend): dev:landing, test:unit, test:integration, test:watch, dev:e2e.
Ho/
├── backend/ Rust/Tauri backend, prompts, capabilities
├── frontend/ React UI
├── docs/ Documentation
├── test/ CLI E2E scripts and fixtures
├── build/ Platform build scripts
├── scripts/ Version and verify helpers
├── app-data/ Local config, runs, cache, and logs (debug builds)
└── EULA/ End-user license
On first run, settings and local data are created under the app data directory:
| Build | Path |
|---|---|
| Debug | ./app-data/ |
| Release | OS config dir → thinkers/ho/ |
Notable paths under app data: settings.json, split registry JSON files, runs/, events/, conversations/, sessions/, pending-runs/, cancel-requests/, resume-requests/, app_cache.json (App Launcher metadata), token-ledger.jsonl, logs/ho.log.* (rotating trace logs).
Configure LLM providers, MCP servers, agent limits, skills, and guardrails in the in-app Settings panel (or edit JSON directly). API keys support plaintext or env:VAR references.
| Doc | Contents |
|---|---|
| Architecture | System overview, state model, modules |
| Design | Module map and persistence reference |
| Workflow | Startup and runtime flows |
| CLI | Headless operator commands |
| MCP | MCP server setup |
| Agent | Agent settings |
| Authorization | Credentials and approvals |
| Integration | External systems and APIs |
| UI | Frontend structure |
| Test | Test commands and coverage |
| Memory | Conversation and event storage |
| Skills | Skill registry |
| Budget | Token limits |
| Parallelization | Concurrency model |
| Terminology | Glossary |
- Fork the repo
- Create a branch from
main - Make changes; run
npm run ci(ornpm testfor a faster check) - Open a pull request with a clear description
MIT — Copyright (c) 2026 Shanghai Thinkers Technology Co., Ltd.
End-user terms: EULA (English) · EULA (简体中文)
