---
**NomiFun** is everything you imagine an AI workstation to be — and it runs on your terms. One React frontend and one Rust backend give you an evolving desktop companion, an unattended automation platform, a unified knowledge base, native computer- and browser-use, and an open capability bus that any agent can drive. No cloud account. No telemetry. No subscription. Your data never leaves your machine except for the LLM calls **you** configure.
> The product name is **NomiFun**. Lowercase `nomifun` is used only for code identifiers, crate names, environment variables, and repository paths.
---
## ✨ Why NomiFun
| | |
|---|---|
| 🔓 **Open & local** | Source fully open, no reservations. Data lives on your machine and is never sent out on its own. Free for personal **and** commercial use. Open to audit. |
| 🐾 **Evolving companions** | The most complete companion-growth system we know of — it learns how you work and gets better over time. Not just a buddy, a genuine productivity partner. |
| 🤖 **Unattended automation** | Manage requirements, then just give the order. AutoWork + IDMM keep your sessions alive and working reliably while you're away. |
| 🌐 **Open capability ecosystem** | Everything is here, everything connects, everything cooperates — and *any* agent can borrow NomiFun's powers over MCP / REST. |
| 🧩 **Config once, use anywhere** | Unified management of knowledge bases, skills, agents, MCP servers, and models — defined once, reused across every surface. |
| 🖥️ **Truly native** | In-process, self-built **computer use** and **browser use** as native tools — more capable, faster, and cheaper on tokens. |
| 🚀 **Built for productivity** | Designed from real needs, with a lot of inventive capabilities. And many delightful features are still on the way. |
---
## 🔒 Local-first, by design
Data security is not a setting in NomiFun — it is the architecture.
- **All data is local.** NomiFun never proactively sends your data anywhere. The **only** outbound network calls are the LLM requests you explicitly configure to your chosen model provider. There is no other third-party service integration phoning home.
- **Safe for anyone who cares about data.** Individuals and enterprises with strict data-handling requirements can use it with confidence. The code is **fully open and open to audit**.
- **We cut features to keep this promise.** To guarantee your data stays yours, we deliberately dropped several advanced, genuinely fun feature designs. Everything here is in service of letting users — and developers — relax.
- **No ads. No commercialization. No membership tiers.** We promise to *never* charge for any feature of this project. The only thing that costs money is your LLM provider's tokens, which is outside our control. (If finding/serving models is painful, [reach out](#-contact--community) — we're happy to help build a unified model gateway.)
See [`SECURITY.md`](SECURITY.md) for the deployment threat model and responsible-disclosure policy.
---
## 🖼️ A look inside
---
## 🚀 Feature highlights
### 🐾 Desktop Companion — it grows with you
> Guide: [`docs/guides/companions.md`](docs/guides/companions.md)
The companion you talk to every day quietly becomes the assistant who *gets* you.
- **Make it yours.** Upload a custom companion figure (DIY), or pick from an independent figure library decoupled from any single companion.
- **One brain, many faces.** Run multiple companions that share a common memory hub, while each keeps its own **private** memory and can mount different domain knowledge bases. Teach *one* companion well, then have it teach the others.
- **It learns you (opt-in, on by default after a one-time consent).** A background learner distills your usage into durable memories; a deterministic evolution engine mines your recurring multi-step tool sequences into **draft skills** it proposes for your review. Memory is fully **visible and editable**.
- **Skills that spread.** Companions generate their own skills, discuss them with you, and can **gift** a skill to another companion (the recipient gets a copy) — opt-in shared learning across your roster.
- **A super gateway, not just a buddy.** Each companion is a complete, independent individual that can connect to multiple IM channels. From anywhere with a network and a chat app, message your companion to drive your computer for you. Each companion can fully operate the desktop's capabilities.
### 🤖 Unattended automation — Requirements + AutoWork + IDMM
> Guides: [`autowork-requirements.md`](docs/guides/autowork-requirements.md) · [`intelligent-decision.md`](docs/guides/intelligent-decision.md)
You give the orders; NomiFun reliably does the work.
- **Requirement platform** — a CRUD store with ordered rotation, a board/kanban, tags, and per-item claim.
- **AutoWork** — claims pending requirements, drives a turn, rotates to the next, and renews leases while a turn is in flight. Targets can be **conversation agents *or* terminal PTYs**.
- **IDMM (Intelligent Decision-Making)** — per-session supervision that keeps agents alive through provider faults and decision stalls, with a no-LLM rule tier and a sidecar backup-model tier, stacking on top of AutoWork.
- **Notify out** — completion notifications to **Lark/Feishu** custom bots, **Slack**, and HTTP webhooks.
### 📚 Unified Knowledge Base
> Guide: [`docs/guides/mcp-and-skills.md`](docs/guides/mcp-and-skills.md)
Pull the knowledge scattered across your system into one managed, trackable place.
- **Centralized management & tracking** — create, mount, and track consumers across conversations, terminals, and companions.
- **Safe write-back** — a code-enforced, per-surface write policy. By default, writes are **staged into a review inbox** with unified-diff preview and merge/discard — so agents never scribble into the wrong place.
- **Real-time URL snapshot** — turn any web page into a knowledge source (SSRF-guarded fetch, HTML→Markdown), in *snapshot* (persisted, re-fetchable) or *live* mode.
- **Scoped retrieval** — agents call a `knowledge_search` tool whose scope is decided server-side and cannot be widened.
### 🖥️ Native Computer Use & Browser Use *(desktop build)*
> Guide: [`docs/guides/computer-browser-use.md`](docs/guides/computer-browser-use.md)
Self-built, **in-process Rust** — no Playwright, no Node, no third-party automation daemon. More capable, faster, and far cheaper on tokens, with fine-grained control and fully open source for you to extend.
- **Computer use** — accessibility tree + Set-of-Marks overlay + OCR, steering the model to act on real UI elements instead of guessing pixels. macOS (AXUIElement + Vision OCR) and Windows (UI Automation) are complete; Linux (AT-SPI2) is partial.
- **Browser use** — an in-process Chromium CDP engine with ARIA observation, an egress **firewall** with out-of-band approval, and an origin-bound secret vault so credentials never reach the LLM.
- **Guarded by design** — every action carries a danger × surface approval matrix; irreversible actions wait for explicit confirmation.
> ℹ️ Computer/browser control ship with the **desktop app**. The headless web/server host omits them by design.
### 🌐 Open capability bus — MCP + REST
> Guides: [`remote-capability-api.md`](docs/guides/remote-capability-api.md) · [`remote-capability-api-examples.md`](docs/guides/remote-capability-api-examples.md)
Every capability NomiFun has is exposed through a single, typed capability registry — **~20 domains and 150+ tools** — so you can wire NomiFun into anything.
- **MCP front door** at `/mcp` (authenticated, Streamable-HTTP). Point **Claude Code, Cursor, or your own agent** at it and they operate NomiFun exactly as the desktop companion does.
- **REST + OpenAPI** at `/v1/tools`, with streaming and an auto-generated `/v1/openapi.json`.
- Adding a capability to the bus makes it appear on MCP **and** REST automatically — no drift.
### 🧩 Bring your own agents — or use the built-in one
> Guide: [`docs/guides/model-routing.md`](docs/guides/model-routing.md)
- **Built-in `nomi` agent** — no extra install. Works with **26+ model providers/presets** (OpenAI, Anthropic, Gemini + Vertex AI, AWS Bedrock, DeepSeek, OpenRouter, Moonshot/Kimi, Qwen/Dashscope, Zhipu/GLM, MiniMax, SiliconFlow, xAI, Volcengine/Doubao, and more) across **4 wire protocols**, plus the **New API** aggregator gateway.
- **~19 external agents over ACP** — connect Claude Code, Codex, Gemini, Qwen, Kimi, Cursor, Copilot, Goose, OpenCode, Droid, and more, and NomiFun feeds them models *and* its native capabilities (computer/browser/knowledge/gateway) over injected MCP bridges.
- **Everywhere** — the native capabilities are available to the built-in agent, to ACP agents, in the chat UI, **and** in the terminal.
### 💻 Terminal mode
> Guide: [`docs/guides/terminal.md`](docs/guides/terminal.md)
Run agent CLIs inside in-app PTY sessions (or the standalone `nomi` CLI). NomiFun injects native capabilities — knowledge search, requirement completion, and lifecycle hooks — into known CLIs through their *own* native config, so you keep full fidelity and OAuth.
### 📱 WebUI remote control — scan, and you're in
> Guide: [`docs/guides/webui-remote-access.md`](docs/guides/webui-remote-access.md)
No social platform required. One-tap **QR pairing** connects your phone or tablet to your computer over the LAN (one-time token, realtime over WebSocket) so you can drive your workstation remotely from the couch.
### ⚙️ Config once, use anywhere
Central hubs for **Knowledge**, **Assistants & Skills**, **MCP**, **Models**, and **Open Capabilities** — define them once, then select per conversation, terminal, channel, or companion. One source of truth, reused everywhere.
### 💬 11 IM channels
> Guide: [`docs/guides/channels.md`](docs/guides/channels.md)
Bind a companion to any of these and drive it from where you already chat:
`Telegram` · `Lark / 飞书` · `DingTalk / 钉钉` · `WeChat / 微信` · `Discord` · `Slack` · `Matrix` · `Mattermost` · `Twitch` · `Nostr` · `QQ Bot`
---
## 🏗️ Architecture
One React frontend, one Rust backend, **two host modes** — and the same backend runs in-process in both.
| | `nomifun-desktop` | `nomifun-web` |
|---|---|---|
| **Shell** | Tauri 2 desktop app | Standalone axum server |
| **Backend** | Embedded in-process, private loopback port | Same backend, in-process |
| **Auth** | Local-trust token injected into the webview | Login required by default |
| **Serves** | Native desktop UI + tray + companion windows | API + `/ws` + built SPA on one port |
| **Computer / browser use** | ✅ Included | ❌ Headless (omitted) |
There is no Electron shell, no Node web host, and no prebuilt backend handoff.
Repository map
```text
apps/
desktop/ Tauri 2 shell and desktop-only commands
web/ standalone web host for API + SPA
crates/
agent/ 15 nomi-* crates: engine, providers, tools, MCP, skills, memory,
browser/computer use, and the standalone nomi CLI
backend/ 29 nomifun-* crates: app composition, auth, database, sessions,
MCP, knowledge, requirements, terminal, companion, gateway, etc.
shared/ 2 cross-layer crates: nomifun-net and nomi-redact
ui/ React 19 + Vite SPA shared by desktop and web
docs/ technical docs, user/operator guides, architecture notes
packaging/ Linux deployment support for the web host
```
Start with [`docs/architecture/overview.md`](docs/architecture/overview.md) for the full system map. The Cargo workspace is defined in [`Cargo.toml`](Cargo.toml).
---
## 🚀 Getting started
> ℹ️ There are **no prebuilt installers yet** — install from source or run the server with Docker. Watch [Releases](https://github.com/nomifun/nomifun-tauri/releases) for binaries.
**Prerequisites**
- [Rust](https://rustup.rs) — stable toolchain, edition 2024
- [Bun](https://bun.sh) ≥ 1.3.13
- Recommended on PATH for full agent tooling: `node` / `npm` / `npx`, `git`, `ripgrep`
**Desktop app (from source)**
```bash
git clone https://github.com/nomifun/nomifun-tauri.git
cd nomifun-tauri
bun install
bun run dev # develop with hot reload
bun run build # build a desktop bundle for your OS
```
**Web server (self-host)**
```bash
bun run build:ui && bun run serve:web
# serves API + SPA on http://127.0.0.1:8787 (login required)
```
**Docker (self-host the server)**
```bash
docker compose up -d --build
# then open http://:8787 — pair with the bundled Caddyfile for TLS
```
See [`docs/getting-started/installation.md`](docs/getting-started/installation.md) and [`docs/guides/web-server-deployment.md`](docs/guides/web-server-deployment.md) for details.
---
## 🛠️ Development
```bash
bun install # install dependencies (one-time)
bun run dev # desktop app development (hot reload)
bun run dev:web # web host + Vite development
bun run build:ui # build the SPA
bun run check # frontend typecheck + i18n + theme + script-registry gate
bun run test # Rust tests (use test:fast for nextest)
```
Prefer the scripted entry points over plain `cargo`/`vite` — they include build-dir pruning and consistency checks. New to the codebase? Read [`CONTRIBUTING.md`](CONTRIBUTING.md) and [`docs/contributing/development.md`](docs/contributing/development.md).
Full script catalog
| 脚本 | 说明 |
| --- | --- |
| **开发(热重载)** | |
| `bun run dev` | 启动桌面应用开发(tauri dev,热重载) |
| `bun run dev:web` | 启动 Web 全栈开发(后端 API + 前端 vite) |
| `bun run dev:ui` | 仅启动前端开发服务器(纯 vite,无后端) |
| **构建(出制品)** | |
| `bun run build` | 为当前操作系统打桌面安装包 |
| `bun run build:signed` | 打桌面包并签名+公证(仅 macOS) |
| `bun run build:updater` | 打桌面包并产出自更新 .sig 制品 |
| `bun run build:ui` | 前端生产构建 → ui/dist |
| **运行(组装好的应用)** | |
| `bun run serve:web` | 启动 Web 服务器,托管已构建的前端 |
| **测试** | |
| `bun run test` | 运行全部 Rust 测试(含 doctest) |
| `bun run test:fast` | 用 nextest 快速跑 Rust 测试(日常) |
| **静态检查 / 门禁** | |
| `bun run check` | 聚合静态门禁:typecheck + i18n + 主题契约 + 脚本登记 |
| `bun run typecheck` | 前端 TypeScript 类型检查(tsc --noEmit) |
| `bun run check:i18n` | 校验 i18n 类型与 locale 键是否一致 |
| `bun run check:theme` | 校验预设 CSS 主题契约 |
| **格式化** | |
| `bun run fmt` | 格式化 Rust 代码(cargo fmt) |
| `bun run fmt:check` | 校验 Rust 代码格式(cargo fmt --check) |
| **代码生成** | |
| `bun run gen:i18n` | 由 locale 重新生成 i18n 类型声明 |
| **维护 / 工具** | |
| `bun run clean` | 深度回收构建空间(debug 产物 + flycheck + 旧安装包) |
| `bun run seed:dev` | 用生产数据目录播种 dev 数据目录 |
| `bun run help` | 打印脚本目录(--check 校验登记 / --readme 生成 README 表) |
---
## 📖 Documentation
- [`docs/README.md`](docs/README.md) — documentation index
- [`docs/getting-started/`](docs/getting-started) — installation and first run
- [`docs/guides/`](docs/guides) — user & operator guides (companions, channels, AutoWork, knowledge, computer/browser use, terminal, remote API, …)
- [`docs/architecture/`](docs/architecture) — technical architecture
- [`docs/reference/`](docs/reference) — configuration, API overview, FAQ, troubleshooting
Docs are bilingual: every page has an English `*.md` and a Simplified-Chinese `*.zh.md` sibling.
---
## 🗺️ Coming soon
NomiFun is **pre-1.0** and built part-time, so there's a lot still in flight. On the horizon: prebuilt installers, inbound issue-tracker / requirement sources, more knowledge connectors (Feishu, and beyond), official desktop binaries — plus a few surprises we're genuinely excited about. **Stay tuned.** ✨
---
## 🤝 Contributing & community
NomiFun very much needs your help to grow — code contributions, community building, and evangelism are all hugely welcome. If you have passion for this project, please [reach out](#-contact--community) and build the NomiFun ecosystem with us.
- Read [`CONTRIBUTING.md`](CONTRIBUTING.md) to get set up and learn the check ladder.
- Be excellent to each other — see [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md).
- Found a vulnerability? Follow [`SECURITY.md`](SECURITY.md).
- Browse [open issues](https://github.com/nomifun/nomifun-tauri/issues) for a place to start.
---
## 💛 A note from the author
> This is a part-time effort with limited bandwidth, and many delightful features are still on the way. If this resonates with you, join in any way you like — a line of code, a suggestion, a reshare all mean a lot.
NomiFun is **completely open source, with nothing held back**. Individuals and enterprises are free to build on it and use it commercially.
- **Forks & commercial use are welcome.** They're also at your own risk — the author and contributors assume no liability for downstream use. Apache-2.0 requires no permission from us.
- **A friendly heads-up is appreciated, not required.** If you fork or commercialize NomiFun, we'd love a note — *not* as a license condition, simply because knowing the project is valued is the kind of recognition that keeps it going.
- **Some features were intentionally left out of the open-source release** to keep the local-data promise airtight — without the people and funding to guarantee everyone's data security, removing them was the responsible choice. As time and resources allow, we hope to bring more of them to you.
Thank you for being here. 🙏
---
## 🔗 Friendly links
Projects and products we appreciate:
| Product | What it does |
|---|---|
| [Saytive](http://saytive.ai/) | **Be Creative, Be Saytive.** A voice input method for creative workers, using strong models and thoughtful product design to sense your work context and deliver fast, accurate, scene-aware transcription. |
| [Fast](https://fast.saien.pro) | **Search, one tap away.** Type, click, and jump straight to search results across RED, Douyin, Meituan, and dozens of mainstream apps. No feed distraction, just search. |
| [AionUi](https://github.com/iOfficeAI/AionUi) | AionUi ships with a complete AI agent engine. Unlike tools that require separate CLI-agent installs, AionUi works the moment you install it. |
---
## 📬 Contact & community
We'd love to hear from you. The fastest way to reach us is GitHub; the social channels below are all official.
| Channel | Where |
|---|---|
| 🌐 **Website** | [www.nomifun.com](https://www.nomifun.com) |
| 🐙 **GitHub** | [nomifun/nomifun-tauri](https://github.com/nomifun/nomifun-tauri) · [Issues](https://github.com/nomifun/nomifun-tauri/issues) · [Releases](https://github.com/nomifun/nomifun-tauri/releases) |
| ✉️ **Email** | `hello@nomifun.com` (provisional — being finalized) |
| 📕 **小红书 / RED** | [NomiFun](https://xhslink.com/m/4x6ti8n6cA1) |
| 📺 **Bilibili** | [NomiFun](https://b23.tv/0UhgKDh) |
| 🎵 **抖音 / Douyin** | [NomiFun](https://v.douyin.com/MDT5QVdYaJk/) |
| ▶️ **YouTube** | [@NomiFun-o2y](https://www.youtube.com/@NomiFun-o2y) |
| 𝕏 **X (Twitter)** | [@colir0](https://x.com/colir0) |
| 🎬 **TikTok** | [@colir0luo](https://www.tiktok.com/@colir0luo) |
**Join the chat groups** — scan to join:
 WeChat group / 微信群 |
 QQ group / QQ 群 |
---
## ⚖️ License
[Apache-2.0](LICENSE) © 2025–2026 NomiFun.
See [`NOTICE`](NOTICE) for third-party attributions, including the [AionUi](https://github.com/iOfficeAI/AionUi) project that NomiFun originally forked from before its current Tauri/Rust architecture.
Built with 💛 for people who want AI on their own terms.
⬆ Back to top