Open source · Apache 2.0 · v0.2.3

Reviewable agents.

Agents that ask
before they act.

Configure in a UI, preview the plan, approve. Nomi is a desktop agent platform that always shows you what it's about to do — and learns with your approval. Multi-step automation across Telegram, Slack, Discord, WhatsApp, files, and shell, gated by capability and audited end-to-end. No CLI required.

GitHub →
macOS Linux Windows Docker

Type a goal. Review the plan. Approve. Run. This is the actual product, recorded against a local Ollama.

0:00 Plan 0:22 Approve 0:49 Run

Watch 90s demo file →

Today's agents act first and explain later. Or never.

Hermes, OpenClaw, the autonomous-agent crowd — they read your inbox, run shell commands, send messages the moment the model decides, then "learn" in ways you can't inspect. Most prosumers and small teams looked at that and quietly backed away. The agent that does what you want without asking is also the one that doesn't ask before doing what you don't.

Nomi flips four defaults: every multi-step task surfaces its plan before any tool fires, every tool call is gated by an explicit capability, every learned preference + auto-generated skill goes through your review, and the entire run is hash-chain audited. Ollama for fully offline, OpenAI / Anthropic / any OpenAI-compatible API when you want a frontier model. Set up your agent in the desktop UI — no YAML, no CLI. Schedule it with "every weekday at 8am" instead of cron. Install pre-built skills with one click, or watch Nomi propose new ones from your own runs.

Plan. Approve. Run.

A state machine runs every task. You see exactly what the agent will do before it does anything.

1

Plan

The agent decomposes your goal into discrete steps. Each step is a tool call with a capability tag — filesystem.write, command.exec, llm.chat.

Plan review with approve/edit/cancel
2

Approve

Anything beyond the assistant's permission ceiling pauses the run. Approve once, approve always, or deny — your call, on your terms.

Approval queue with pending tool calls
3

Run

Tools execute against your files, your shell, your APIs. Every event is persisted and streamed live so you can audit what happened or replay it.

Live event stream of run execution

Six primitives. Every one of them reviewable.

Plan → Approve → Run

Every multi-step task is a finite-state machine. The agent proposes the plan; you approve, edit or reject it. Nothing dangerous fires without your sign-off. The wedge no autonomous-agent tool ships.

Capability engine, not a vibes-based safety knob

One assistant gets filesystem.read. Another gets command.exec with confirm. Plugins declare what they need; the runtime enforces it — rules can't be talked around with prompt-engineering. Same primitive whether you're writing code, triaging email, or driving a browser.

Sandboxed execution backends

Pick local for speed, docker for rootless containers with network policy and CPU/mem caps, or gvisor for a user-space kernel boundary. Per-assistant, picked from a UI dropdown — not a config file. Untrusted scripts run in a box.

Recipes — one-click skills, shareable

Versioned, SHA-256-signed YAML bundles: assistant config + permission policy + executor backend, all in one shareable file. Built-in catalog ships coding-agent, research-assistant, ops-runbook. Install in a click; export any of your own. No other agent tool ships shareable bundles.

Learns with your approval

After successful runs, Nomi extracts short preference statements ("Run tests before committing") into a Preferences memory the planner reads. Looks for repeated work and proposes new Recipes via embedding-based clustering + LLM synthesis. Every learned preference and proposed skill is visible — and deletable — in the Memory tab. Self-improving without going opaque.

Schedules in plain English

"Every weekday at 8am." "First Monday of the month." The configured LLM translates to cron; the parser validates before save; the ticker fires Runs through the same audit + approval surface as any manual run. Hermes flagship feature, ours by way of the same review pipeline.

Bring any model

Ollama for fully offline. OpenAI, Anthropic, Mistral, Groq, vLLM, LM Studio — anything OpenAI-compatible. Embeddings via the same providers. Per-assistant model override; no provider lock.

Four messaging channels (and counting)

Telegram, Slack, Discord, WhatsApp — all first-party plugins. Send a message, your assistant replies. The full plan-review + approval surface works inside the chat thread.

Persistent memory you can read

Workspace-scoped SQLite next to your runs — exportable, inspectable, queryable. The agent accumulates context across runs so the next task starts with the last one's lineage. For team-scale structured knowledge (claims, evidence, relationships), Mnemos drops in as an optional plugin.

Daemon-not-IDE-plugin

nomid is a long-running local runtime, not a sidecar. Desktop UI, CLI, browser tab, headless server — all clients of the same daemon. Your workflows live on your machine, not in one editor's plugin tab.

Your data stays on disk

SQLite at ~/Library/Application Support/Nomi. Runs, plans, approvals, memory — local files, your backups, your encryption. Hash-chained audit log via GET /audit/verify; reasoning is replayable. No telemetry, ever.

One command. No login. No telemetry.

Compared to

Nomi is a runtime + interaction model, not another coding-agent. The coding wedge today is Claude Code with local Ollama — but the same daemon, capability engine, and memory layer underneath every other workflow you'll run next.

Claude Code · Cursor agents · Cline
Same goal-driven coding flow (read repo, plan changes, write files, run commands), but every step is laid out as an approveable plan first, every tool call is gated by an explicit capability, and every event is persisted. Point it at Ollama and your repo never leaves your laptop.
Goose · OpenInterpreter · Aider
Same local-first stance, but with a real state machine (Run → Plan → Step), a real permission engine, multi-step plans the user can edit, persistent local memory, and a desktop UI built around the approval moment.
OpenClaw · Hermes Agent
Same personal-AI-with-memory framing, broader connector list shipping today. Both act the moment the model decides; Nomi inserts a plan_review state before any tool runs and gates every tool through an explicit capability rule. Nomi's memory is SQLite you can read, edit, and export — Hermes's "self-improving" memory is opaque by design. Nomi trades connector breadth today for inspectability everywhere.
NanoClaw · container-isolation products
NanoClaw isolates agents with Docker / micro-VM / Apple Container — the wall is around the process. Nomi gates at the capability layer — the agent never reaches the tool it shouldn't because the rule blocked the call. The two compose: you could run nomid inside a NanoClaw container and stack both defenses. NanoClaw is Anthropic-SDK-biased; Nomi is provider-agnostic.
Pi (Inflection AI) — category boundary
Pi is a kind, conversational AI companion. Cloud-only, closed, no tool execution. If you want a thoughtful AI to talk to, Pi is the better tool. Nomi is a workflow runtime that takes action with your approval — different problem, different shape.
LangChain · AutoGPT · CrewAI
Those are kits — you assemble the agent. Nomi is the finished product: state machine, permission engine, memory, Tauri shell, all wired up.

Full feature-by-feature breakdown: docs/comparison.md.

Chat tab with assistant conversations
Chats — multi-turn dialogue with any assistant
Assistant configuration
Assistants — per-role personas with permission scopes
Memory inspector
Memory — workspace-scoped, queryable, exportable
Plugin management
Plugins — WASM sandbox, install or build your own
LLM provider profiles
Providers — Ollama, OpenAI, Anthropic, anything compatible
Safety profile configuration
Safety profiles — strict, balanced, permissive

Three ways to install

Desktop

Tauri shell + bundled nomid daemon. Menu-bar tray. Auto-updates.

brew install --cask felixgeelhaar/tap/nomi

or download DMG / MSI / AppImage / DEB

CLI

Drives a local or remote daemon over REST. Tail runs, approve from terminal, export config.

brew install felixgeelhaar/tap/nomi

or go install go.klarlabs.de/nomi/cmd/nomi@latest

Headless daemon

Just nomid. Drop it on a VPS, a Kubernetes pod, anywhere. Configure with a YAML seed.

docker run -p 8080:8080 -v nomi-data:/data \
  ghcr.io/klarlabs-studio/nomi

full guide: docs/headless.md

Your first 5 minutes

After install, point Nomi at a repo and run a real goal. The plan-review surface and the approvals are the entire feature.

$ nomi run "Add a JSON tag to the User struct in models.go"

 run.created       id=r_8a2  goal="Add a JSON tag to the User struct..."
 plan.proposed     steps=3
   1. filesystem.read    path=models.go
   2. filesystem.patch   path=models.go      ← needs your approval
   3. command.exec       cmd="go test ./..." ← needs your approval

[plan-review] Approve? [y/n/edit]: y
 step.completed    tool=filesystem.patch  diff=+1 -1
 step.completed    tool=command.exec      exit=0
 run.completed     duration=11s

Try a recipe → Ask in Discussions → Watch releases →

Built on infrastructure you can use too

Nomi rides four small, focused libraries. Each is independent, Apache 2.0, and worth a look on its own — especially if you're shipping anything agentic.

Where this goes next

Reviewable execution + sandboxed runtime + auto-learning are shipping today. The next horizons are explicit so you can plan against them.

Now · shipping (v0.2.3)

Reviewable agents + hard sandboxing

Plan-review-before-execute, capability-gated tools, hash-chained audit log, sandboxed exec (local + Docker + gVisor), recipe registry with signed YAML bundles, scheduled runs with natural-language cron, auto-extracted preferences your planner reads, skill induction with embedding clustering + LLM synthesis. Three-layer egress isolation — --network=none default, DNS allowlist for accidental egress, optional eBPF cgroup_skb/egress filter (Linux, IPv4 + IPv6, cgroupfs + systemd cgroup drivers) for hardcoded-IP bypass. Browser automation as a first-party plugin via Scout over MCP. Diff-review UI does whole-hunk Shiki tokenisation so multi-line scope survives. Four messaging channels — Telegram, Slack, Discord, WhatsApp — plus Gmail, Calendar, GitHub, Obsidian, Mnemos (optional) connectors. Bring any OpenAI-compatible model.

Next

Reach

Generic any-MCP-server plugin so connecting to a new MCP source (Linear MCP, GitHub MCP, filesystem MCP) is config, not code. macOS menu bar polish — quick-approval inline rather than via main window. WASM plugin marketplace catalog growth — signing + verification already exist (ed25519). Live-provider eval matrix expanded across more model families.

Later

Team + organizational

Cross-machine recipe sync. Visibility-scoped Mnemos (personal / team / org) for institutional memory shared across agents. Approval delegation across devices. Hosted Mnemos as an opt-in, never a forced cloud.

Backlog of record: .roady/spec.yaml (142 features, 267 tasks closed at release). Plan / state / events are hash-chained — no roadmap edits in the dark.

The agent that asks first. The one you can actually trust.

Install Nomi, point it at a local Ollama or any OpenAI-compatible API, set up an assistant in a form. Give it a goal. Review the plan. Approve. Watch every preference and proposed skill before it ships — never opaque, always inspectable.

Star on GitHub →