{"id":50687724,"url":"https://github.com/klarlabs-studio/nomi","last_synced_at":"2026-06-09T00:04:18.820Z","repository":{"id":355110897,"uuid":"1226813578","full_name":"klarlabs-studio/nomi","owner":"klarlabs-studio","description":"Local-first, state-driven AI agent platform. Plan-review before execution, capability-gated tools, BYO LLM (Ollama / Anthropic / OpenAI). Tauri desktop + Go runtime.","archived":false,"fork":false,"pushed_at":"2026-06-05T05:16:53.000Z","size":20348,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-06T21:14:56.885Z","etag":null,"topics":["agent-framework","agents","ai","ai-agents","anthropic","golang","llm","local-first","mcp","ollama","openai","permission-system","plugin-architecture","privacy","react","sqlite","tauri","wasm"],"latest_commit_sha":null,"homepage":"https://klarlabs-studio.github.io/nomi/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/klarlabs-studio.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/security-consistency-review.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-01T21:34:35.000Z","updated_at":"2026-06-06T18:46:37.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/klarlabs-studio/nomi","commit_stats":null,"previous_names":["felixgeelhaar/nomi","klarlabs-studio/nomi"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/klarlabs-studio/nomi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klarlabs-studio%2Fnomi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klarlabs-studio%2Fnomi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klarlabs-studio%2Fnomi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klarlabs-studio%2Fnomi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/klarlabs-studio","download_url":"https://codeload.github.com/klarlabs-studio/nomi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klarlabs-studio%2Fnomi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34085334,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent-framework","agents","ai","ai-agents","anthropic","golang","llm","local-first","mcp","ollama","openai","permission-system","plugin-architecture","privacy","react","sqlite","tauri","wasm"],"created_at":"2026-06-09T00:04:15.939Z","updated_at":"2026-06-09T00:04:18.793Z","avatar_url":"https://github.com/klarlabs-studio.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eNomi\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eAgents that ask before they act.\u003c/strong\u003e\u003cbr /\u003e\n  Configure in a UI, preview the plan, approve. Multi-step automation\n  across Telegram / Slack / Discord / WhatsApp / files / shell — gated\n  by capability, sandboxed in containers or gVisor, audited end-to-end.\n  No CLI required.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/klarlabs-studio/nomi/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/klarlabs-studio/nomi?include_prereleases\u0026color=blue\" alt=\"release\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/klarlabs-studio/nomi/actions/workflows/release.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/klarlabs-studio/nomi/release.yml?branch=main\" alt=\"build\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/klarlabs-studio/nomi\" alt=\"license\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/local--first-yes-green\" alt=\"local-first\"\u003e\n  \u003ca href=\"https://github.com/klarlabs-studio/nomi/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/klarlabs-studio/nomi?style=social\" alt=\"stars\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#compared-to\"\u003eCompared to\u003c/a\u003e •\n  \u003ca href=\"#install\"\u003eInstall\u003c/a\u003e •\n  \u003ca href=\"#quickstart\"\u003eQuickstart\u003c/a\u003e •\n  \u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e •\n  \u003ca href=\"#powered-by\"\u003eStack\u003c/a\u003e •\n  \u003ca href=\"#roadmap\"\u003eRoadmap\u003c/a\u003e •\n  \u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cvideo src=\"https://github.com/klarlabs-studio/nomi/raw/main/docs/media/hero.mp4\"\n         poster=\"docs/media/hero-poster.jpg\"\n         width=\"900\"\n         controls\n         muted\n         playsinline\u003e\n    \u003ca href=\"https://github.com/klarlabs-studio/nomi/blob/main/docs/media/hero.mp4\"\u003e\n      \u003cimg src=\"docs/media/hero-poster.jpg\" alt=\"Plan → Approve → Run — 90s demo\" width=\"900\" /\u003e\n    \u003c/a\u003e\n  \u003c/video\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\u003csub\u003e\u003cstrong\u003e90s demo.\u003c/strong\u003e Type a goal · review the plan · approve · run. Recorded against a local Ollama.\u003c/sub\u003e\u003c/p\u003e\n\n---\n\n## Why Nomi\n\nToday's agents are split between two failure modes. Autonomous ones\n(Hermes, OpenClaw) act first and explain later — sometimes never.\nCLI-only ones (Claude Code, Pi) demand a terminal and yaml. Neither\nshows you what the agent is *about* to do.\n\nNomi is **reviewable agents**: a desktop platform that always surfaces\nthe plan before any tool fires, gates every call through a capability\nengine, sandboxes execution in containers or gVisor, schedules runs\nin plain English, and learns with your approval. Set up an agent in a\nform, install a recipe with one click, or watch Nomi propose a new\nskill from your own runs. For team-scale structured knowledge,\n[Mnemos](https://github.com/klarlabs-studio/mnemos) drops in as an\noptional plugin.\n\n- **Local-first by default — self-hosted by choice.** On a laptop the\n  data, conversations, and secrets stay on your machine (SQLite, OS\n  keyring, no telemetry, no account). On a homelab box or a cloud VM\n  the same `nomid` daemon runs headless behind your reverse proxy —\n  see [`docs/headless.md`](docs/headless.md).\n- **Plan review before execution.** Every multi-step task is laid out\n  in full before any tool runs. You see the plan; you approve the plan.\n  Inspectable, editable, replayable.\n- **Capability engine, not a coding-safety knob.** `filesystem.write`,\n  `command.exec`, `network.outgoing`, custom capabilities from plugins\n  — every tool is bound by an explicit permission rule. Allow, confirm,\n  or deny. Per-assistant. Same primitive whether you're writing code,\n  triaging email, or driving a browser.\n- **Persistent memory you can read.** Workspace-scoped SQLite next to\n  your runs. Queryable, exportable, inspectable — a real database, not\n  a vector blob. The agent accumulates context across runs so the next\n  task starts with the last one's lineage. For team-scale structured\n  knowledge (decisions / claims / evidence / contradictions), the\n  [Mnemos](https://github.com/klarlabs-studio/mnemos) plugin is one\n  capability grant away.\n- **Bring any LLM.** Ollama for free + private. Anthropic / OpenAI when\n  you want frontier models. LM Studio, vLLM, Together — anything that\n  speaks the OpenAI or Anthropic wire format. Per-assistant overrides\n  ship out of the box.\n- **Daemon-not-IDE-plugin.** `nomid` is a long-running runtime, not a\n  sidecar. Desktop UI, CLI, headless server — all clients of the same\n  daemon. Real plugins (Telegram today, WASM marketplace next), real\n  isolation, no bypass paths.\n\n## Compared to\n\nNomi is a **runtime + interaction model**, not another coding-agent.\nThe coding wedge today is **Claude Code with local Ollama** — but the\nsame daemon, capability engine, and persistent memory underneath every\nother workflow you'll run next.\n\n| Alternative | What's different about Nomi |\n|---|---|\n| **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 to a hash-chained audit log. Point it at Ollama and your repo never leaves your laptop. |\n| **Goose / OpenInterpreter / Aider** | Same local-first stance, but with a real state machine (`Run → Plan → Step`), a real permission engine, real multi-step plans the user can edit, and a desktop UI built around the approval moment instead of around the chat box. |\n| **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. |\n| **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. |\n| **Pi (Inflection AI)** | Category boundary. Pi is a thoughtful conversational companion — cloud-only, closed, no tool execution. Use Pi when you want an AI to talk to. Use Nomi when you want an AI that takes action you approved. |\n| **LangChain / AutoGPT / CrewAI** | Those are kits — you assemble the agent. Nomi is the finished product: a working state machine, a permission engine, a memory subsystem, a Tauri shell, all wired up. |\n| **Bespoke agent stacks** | Stop reinventing scaffolding. The runtime, the audit trail, the approval workflow, and the plugin model all ship today. Bring your assistants and your prompts. |\n\nFull feature-by-feature breakdown:\n[`docs/comparison.md`](docs/comparison.md).\n\n## Install\n\n**Desktop app (Tauri shell + bundled `nomid` daemon):**\n\n| Channel | Command |\n|---|---|\n| **Homebrew Cask (macOS)** | `brew install --cask felixgeelhaar/tap/nomi` |\n| **DMG / MSI / AppImage / DEB** | [Releases page](https://github.com/klarlabs-studio/nomi/releases/latest) |\n\n**CLI (`nomi` — drives a local or remote daemon over REST):**\n\n| Channel | Command |\n|---|---|\n| **Homebrew (macOS / Linux)** | `brew install felixgeelhaar/tap/nomi` |\n| **Direct download (Windows)** | [Releases page](https://github.com/klarlabs-studio/nomi/releases/latest) — `nomi-*-windows-amd64.zip` |\n| **`go install`** | `go install go.klarlabs.de/nomi/cmd/nomi@latest` |\n\n**Headless daemon (`nomid`):**\n\n| Channel | Command |\n|---|---|\n| **Docker** | `docker run -p 8080:8080 -v nomi-data:/data ghcr.io/klarlabs-studio/nomi` |\n| **`go install`** | `go install go.klarlabs.de/nomi/cmd/nomid@latest` |\n\nThe desktop bundle ships the `nomid` runtime as a Tauri sidecar — one\ninstaller, both binaries. **Docker / `go install` give you just the\ndaemon** — drop it on a homelab box, a VPS, a Kubernetes pod, anywhere\nthat runs Linux. Configure via a YAML seed manifest at first boot, or\ndrive the REST API directly. Full guide:\n[`docs/headless.md`](docs/headless.md).\n\nFor headless interaction without the desktop UI, the **`nomi` CLI**\ntalks to the daemon over the same REST surface:\n\n```bash\nnomi status                              # health + version + active default LLM\nnomi run \"summarize notes.md\"            # submit, drive, print output\nnomi list runs                           # most recent runs as a table\nnomi list approvals                      # pending approval cards\nnomi tail                                # follow the SSE event stream live\nnomi seed examples/seed.yaml             # apply a YAML manifest\nnomi export -o nomi.yaml                 # snapshot full config (commit to git)\nnomi import nomi.yaml                    # reproduce that config on another box\n\n# Drive a remote daemon over SSH-fetched token\nNOMI_TOKEN=$(ssh server 'docker exec nomi cat /data/auth.token') \\\n    nomi --url=https://nomi.example.com run \"what changed today?\"\n```\n\nThe CLI auto-resolves URL + token from `$NOMI_DATA_DIR/api.endpoint`\nand `$NOMI_DATA_DIR/auth.token` when it runs on the same host as the\ndaemon.\n\n```yaml\n# examples/seed.yaml — mounted at /data/seed.yaml or pointed at via NOMI_SEED.\n# Idempotent: edit + restart picks up the diff.\nprovider:\n  name: Ollama\n  type: local\n  endpoint: http://host.docker.internal:11434\n  model_ids: [qwen2.5:14b]\nassistants:\n  - template_id: research-assistant\n    workspace: /data/workspace\nsettings:\n  safety_profile: balanced\n  onboarding_complete: true\n```\n\n## Who this is for\n\nYou're a developer who works on code your security team doesn't want\nin someone else's cloud. You'd use Claude Code or Cursor agents if the\nmodel ran on your machine. Ollama on a 14B model is enough for the\nedits you actually make; you just want a real agent surface — plans,\napprovals, audit log — wrapped around it.\n\nIf that's not you, Nomi probably still runs your inbox, your research\nfolder, or a Telegram bot — see [`examples/`](examples/) for other\nrecipes — but the wedge it's built around is the dev who won't paste\nsource into a remote LLM.\n\n## Quickstart\n\n```bash\n# 1. Local LLM (or skip and use Anthropic / OpenAI from the wizard)\n#    qwen2.5-coder is the recommended model for the Coding Agent\n#    flagship recipe; swap in qwen2.5 for general-purpose chat.\nbrew install ollama\nollama serve \u0026\nollama pull qwen2.5-coder:7b\n\n# 2. Install Nomi\nbrew install --cask felixgeelhaar/tap/nomi\n\n# 3. Open Nomi → wizard sets provider + assistant + workspace in \u003c60s\n# 4. Type a goal in chat → review the plan → approve → watch it run\n```\n\n### Your first 5 minutes\n\n```text\n$ nomi run \"Add a JSON tag to the User struct in models.go\"\n\n✓ run.created            id=r_8a2  goal=\"Add a JSON tag to the User struct in models.go\"\n✓ plan.proposed          steps=3\n   1. filesystem.read    path=models.go\n   2. filesystem.patch   path=models.go      ← needs your approval\n   3. command.exec       cmd=\"go test ./...\" ← needs your approval\n\n[plan-review] Approve? [y/n/edit]: y\n✓ approval.granted       step=2  by=user\n✓ step.completed         tool=filesystem.patch  diff=+1 -1\n✓ approval.granted       step=3  by=user\n✓ step.completed         tool=command.exec      exit=0\n✓ run.completed          duration=11s\n```\n\nThree places to land next:\n\n1. **Try the flagship recipe** — [`examples/coding-agent/`](examples/coding-agent/) walks the read → unified-diff preview → approve → `go test` loop above against a tiny sample repo. [`examples/code-reviewer/`](examples/code-reviewer/) is the read-only sibling.\n2. **Talk to other people** — [GitHub Discussions](https://github.com/klarlabs-studio/nomi/discussions) for questions, [issues](https://github.com/klarlabs-studio/nomi/issues) for bugs.\n3. **Watch where v0.2 lands** — the v0.2 flagship is real LLM-backed multi-step plans + Anthropic streaming; subscribe via [GitHub Releases](https://github.com/klarlabs-studio/nomi/releases) → Watch → Custom → Releases.\n\n## Features\n\n### Plan, review, execute\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"docs/images/02-plan-review.png\" width=\"900\" alt=\"A multi-step plan with each tool call laid out before execution starts\"\u003e\u003c/p\u003e\n\nEvery task becomes a plan with explicit tool calls. Edit the plan,\nbranch from any step, or reject it entirely.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eMore features (click to expand)\u003c/strong\u003e\u003c/summary\u003e\n\n### Approvals as a first-class flow\n\u003cp align=\"center\"\u003e\u003cimg src=\"docs/images/09-approvals.png\" width=\"900\" alt=\"Approval card\"\u003e\u003c/p\u003e\n\nConfirm-mode capabilities pause the run and surface a plain-language\ncard. \"Remember this choice for 24 hours\" if the same kind of action\nkeeps coming up.\n\n### Memory you can see and edit\n\u003cp align=\"center\"\u003e\u003cimg src=\"docs/images/04-memory.png\" width=\"900\" alt=\"Memory inspector\"\u003e\u003c/p\u003e\n\nWorkspace, profile, and preferences scopes. The agent saves what it\nlearns; you keep control of what's there.\n\n### Plugins, not integrations\n\u003cp align=\"center\"\u003e\u003cimg src=\"docs/images/06-plugins.png\" width=\"900\" alt=\"Plugins tab\"\u003e\u003c/p\u003e\n\nEach plugin declares its capabilities and runs through the same\npermission engine as the core tools. Connect what you need; nothing\nelse loads.\n\n### Bring your own model\n\u003cp align=\"center\"\u003e\u003cimg src=\"docs/images/07-providers.png\" width=\"900\" alt=\"AI providers tab\"\u003e\u003c/p\u003e\n\nOllama, Anthropic, OpenAI, vLLM, LM Studio, Together, Groq — anything\non the OpenAI or Anthropic wire format. Set a global default; override\nper assistant.\n\n### Safety profiles\n\u003cp align=\"center\"\u003e\u003cimg src=\"docs/images/08-safety.png\" width=\"900\" alt=\"Safety profile picker\"\u003e\u003c/p\u003e\n\nThree profiles for the default permission stance on new assistants.\nBalanced is recommended; Cautious confirms everything; Fast trades\nsafety for iteration speed.\n\n### Sandboxed execution backends\n\nPick `local`, `docker` (rootless, capped memory + CPU + PIDs,\n`--network=none` by default), or `gvisor` (runsc — user-space kernel\nboundary) per assistant from the UI. Boot-time probe; only registered\nbackends appear in the dropdown.\n\n### Recipes — shareable assistant bundles\n\nVersioned, SHA-256-signed YAML bundles: assistant config + permission\npolicy + executor backend. Built-in catalog ships `coding-agent`,\n`research-assistant`, `ops-runbook`. One-click install; export-as-recipe\nbutton on every assistant. No other agent tool ships shareable bundles.\n\n### Schedules in plain English\n\nType \"every weekday at 8am\" or \"first Monday of the month\"; the\nconfigured LLM translates to cron, the parser validates before save,\nand the background ticker fires Runs on cadence through the same\nplan-review + approval surface as any manual run.\n\n### Learns with your approval\n\nAfter successful runs, Nomi extracts short preference statements\n(\"Run tests before committing\") into a Preferences memory the planner\nreads on the next plan. Embedding-based clustering surfaces candidate\nskills from your past runs; LLM synthesis proposes a Recipe shape;\nyou review and promote. Every learned preference and proposed skill\nis visible — and deletable — in the Memory tab.\n\n### Audit log\n\u003cp align=\"center\"\u003e\u003cimg src=\"docs/images/05-events.png\" width=\"900\" alt=\"Event log\"\u003e\u003c/p\u003e\n\nEvery state transition emits an event. Hash-chained, exportable,\nqueryable by run id. The runtime is observable without any external\nintegration.\n\n### Assistants\n\u003cp align=\"center\"\u003e\u003cimg src=\"docs/images/03-assistants.png\" width=\"900\" alt=\"Assistants tab\"\u003e\u003c/p\u003e\n\nEach assistant carries its own persona, capability ceiling, permission\npolicy, folder context, model override, and bound plugin connections.\n\n\u003c/details\u003e\n\n## Powered by\n\nNomi is built from composable cognitive-stack libraries you can use\nindependently. Each is Apache-2.0, documented, releasable on its own:\n\n- **[`statekit`](https://github.com/klarlabs-studio/statekit)** — finite\n  state machines for Go (powers every `Run` / `Plan` / `Step`).\n- **[`mnemos`](https://github.com/klarlabs-studio/mnemos)** — knowledge\n  graph for agent organizations (events, claims, evidence,\n  relationships). Reachable from Nomi via an optional plugin\n  *(plugin in flight)*.\n- **[`scout`](https://github.com/klarlabs-studio/scout)** — browser\n  automation built for agents.\n- **[`roady`](https://github.com/felixgeelhaar/roady)** — spec-driven\n  planning + task tracking with hash-chained audit log.\n\nFull architecture and the case for each library:\n[`docs/architecture.md`](docs/architecture.md).\n\n## Architecture\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│                  Nomi.app (Tauri shell)                     │\n│  React 19 + shadcn/ui · IPC bridge · macOS menu-bar tray    │\n└──────────────────────────┬──────────────────────────────────┘\n                           │  REST + SSE (Authorization: Bearer …)\n┌──────────────────────────▼──────────────────────────────────┐\n│                 nomid (Go runtime daemon)                   │\n│  ┌────────────────────────────────────────────────────┐     │\n│  │  Run / Plan / Step state machines  →  statekit     │     │\n│  ├────────────────────────────────────────────────────┤     │\n│  │  Permission engine + approval workflow             │     │\n│  ├────────────────────────────────────────────────────┤     │\n│  │  Tool registry  ·  LLM resolver  ·  Local memory   │     │\n│  ├────────────────────────────────────────────────────┤     │\n│  │  Plugin registry  ·  Browser  →  scout             │     │\n│  │  WASM host (wazero)                                │     │\n│  ├────────────────────────────────────────────────────┤     │\n│  │  Event bus  →  SSE stream  +  hash-chained audit   │     │\n│  ├────────────────────────────────────────────────────┤     │\n│  │  SQLite (WAL) · embedded migrations · OS keyring   │     │\n│  └────────────────────────────────────────────────────┘     │\n└──────────────────────────┬──────────────────────────────────┘\n                           │  OpenAI-compat / Anthropic / Ollama\n                           ▼\n                    LLM provider(s)\n```\n\nADRs under [`docs/adr/`](docs/adr/) cover the big decisions\n(plugin architecture, permission engine, state machine).\n\n## Development\n\n```bash\n# Backend (Go)\nmake build          # builds bin/nomid\nmake test           # go test -race ./...\nmake sidecar        # builds bin/nomid-\u003chost-target-triple\u003e for Tauri bundling\nmake migrate-up     # runs embedded migrations against ~/.config/Nomi/nomi.db\n\n# Desktop app (Tauri + Vite)\nmake app-dev        # dev server at :5173, daemon spawned automatically\nmake app-build      # produces a signed DMG / MSI / AppImage / DEB\n\n# End-to-end user-journey tests (real Ollama required)\ntest/journeys/run.sh    # 22 journeys; pass j1 j7 j20 to scope\n```\n\nThe full developer surface — including the user-journey definitions\nevery release ships against — is in\n[`docs/user-journeys.md`](docs/user-journeys.md).\n\n## Roadmap\n\n**v0.2.3 (current) — \"Reviewable agents + hard sandboxing.\"**\nShipped: plan-review-before-execute state machine, capability-gated\ntools, hash-chained audit log, sandboxed execution backends (local +\nDocker + gVisor), three-layer network egress isolation\n(`--network=none` default → DNS allowlist via docker `--add-host` +\n`--dns=127.255.255.255` → optional eBPF cgroup_skb filter, IPv4 +\nIPv6, both docker cgroup drivers), browser automation as a first-\nparty plugin via [Scout](https://github.com/klarlabs-studio/scout)\nover MCP, signed Recipe registry with built-in catalog, scheduled\nruns with natural-language cron, auto-extracted preference learning\nloop, skill induction with embedding clustering + LLM synthesis,\nfour messaging channels (Telegram + Slack + Discord + WhatsApp),\nGmail / Calendar / GitHub / Obsidian / Mnemos plugins, markdown\nchat rendering with Shiki per-hunk diff highlighting, OS push\nnotifications for pending approvals, macOS menu bar integration\n(new chat / pause all / quit), SQLite FTS5 memory search,\nPrometheus `/metrics` for plan / step / executor / replan\nattribution per provider, `make eval-live-providers` matrix\nagainst real LLM providers.\n\nBacklog (post-v0.2.3, in priority order — not committed):\n\n- Generic any-MCP-server plugin (Scout-style client glue\n  generalised — config-driven, not code-driven, per server).\n- Quick-approval inline in the menu bar (don't open main window\n  for trivial confirms).\n- Cross-machine recipe sync (opt-in, end-to-end-encrypted).\n- Hosted Mnemos for visibility-scoped team memory.\n- Approval delegation across devices.\n- WASM plugin marketplace catalog growth (signing + verification\n  already shipped).\n\nLive spec, plan, and task state in [`.roady/`](.roady/) (142\nfeatures, 267 tasks closed at release). Ideas and bug reports on\nthe [issues page](https://github.com/klarlabs-studio/nomi/issues).\n\n## Contributing\n\nPull requests welcome. Read the [`docs/adr/`](docs/adr/) entries before\nchanging a load-bearing subsystem (permission engine, plugin\narchitecture, runtime state machine), then open an issue to discuss.\nSmaller fixes — typos, doc edits, plugin polish — can land straight as\na PR.\n\nLook for [`good first issue`](https://github.com/klarlabs-studio/nomi/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)\nlabels on the issues board.\n\nThe project follows the [Contributor Covenant Code of\nConduct](https://www.contributor-covenant.org/version/2/1/code_of_conduct/).\n\n## License\n\nApache-2.0. See [`LICENSE`](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fklarlabs-studio%2Fnomi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fklarlabs-studio%2Fnomi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fklarlabs-studio%2Fnomi/lists"}