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.
Reviewable agents.
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.
Type a goal. Review the plan. Approve. Run. This is the actual product, recorded against a local Ollama.
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.
A state machine runs every task. You see exactly what the agent will do before it does anything.
The agent decomposes your goal into discrete steps. Each step is a tool call with a capability tag — filesystem.write, command.exec, llm.chat.
Anything beyond the assistant's permission ceiling pauses the run. Approve once, approve always, or deny — your call, on your terms.
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.
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.
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.
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.
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.
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.
"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.
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.
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.
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.
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.
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.
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.
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.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.nomid inside a NanoClaw container and stack both defenses. NanoClaw is Anthropic-SDK-biased; Nomi is provider-agnostic.Full feature-by-feature breakdown: docs/comparison.md.
Tauri shell + bundled nomid daemon. Menu-bar tray. Auto-updates.
brew install --cask felixgeelhaar/tap/nomi
or download DMG / MSI / AppImage / DEB
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
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
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
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.
Type-safe finite state machines for Go. Every Nomi run, plan and step transition is a statekit machine — including the approval pause/resume loop. If you're tired of bool-flag state, start here.
cognitionKnowledge graph for agent organizations. Events, claims (fact / hypothesis / decision / test_result), evidence links, contradicts/supports relationships, visibility scopes. HTTP service with a typed Go client. Reachable from Nomi via an optional plugin.
Browser automation built for agents — observable DOM, semantic selectors, deterministic E2E.
Spec-driven planning + task tracking with hash-chained audit log.
Reviewable execution + sandboxed runtime + auto-learning are shipping today. The next horizons are explicit so you can plan against them.
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.
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.
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.
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.