Nora — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Nora (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<div align="center"> <img src=".github/readme-assets/nora-logo.png" alt="Nora" width="112" height="112" /> <h1>Nora</h1> <p><strong>Run OpenClaw and Hermes fleets on your own infrastructure — from one control plane.</strong></p> </div>
<p align="center"> <strong>OpenClaw + Hermes</strong> · <strong>Docker + Kubernetes GA</strong> · <strong>69 provider connections</strong> · <strong>Apache-2.0</strong> </p>
<p align="center"> <a href="https://github.com/solomon2773/nora"><img src="https://img.shields.io/badge/%E2%98%85-Star_Nora-f2d7a1?style=for-the-badge&labelColor=071018" alt="Star Nora on GitHub" /></a> <a href="https://docs.norafleet.ai/quickstart"><img src="https://img.shields.io/badge/%E2%86%92-Quick_Start-8ae6ff?style=for-the-badge&labelColor=071018" alt="Quick Start" /></a> </p>
<p align="center"> <a href="https://github.com/solomon2773/nora/releases"><img src="https://img.shields.io/github/v/release/solomon2773/nora?color=6d28d9&label=release" alt="Latest release" /></a> <a href="https://github.com/solomon2773/nora/actions/workflows/ci-quality.yml"><img src="https://img.shields.io/github/actions/workflow/status/solomon2773/nora/ci-quality.yml?branch=master&label=CI" alt="CI status" /></a> <a href="https://www.npmjs.com/package/@noraai/cli"><img src="https://img.shields.io/npm/v/%40noraai%2Fcli?label=%40noraai%2Fcli&color=cb3837" alt="@noraai/cli on npm" /></a> <a href="https://www.npmjs.com/package/@noraai/mcp-server"><img src="https://img.shields.io/npm/v/%40noraai%2Fmcp-server?label=%40noraai%2Fmcp-server&color=cb3837" alt="@noraai/mcp-server on npm" /></a> </p>
<p align="center"> <a href="https://docs.norafleet.ai">📚 Documentation</a> · <a href="https://docs.norafleet.ai/self-hosting">Self-Hosting</a> · <a href="https://docs.norafleet.ai/concepts/architecture">Architecture</a> · <a href="https://docs.norafleet.ai/compare">How Nora Compares</a> · <a href=".github/press-kit/README.md">Press Kit</a> · <a href="CHANGELOG.md">Changelog</a> </p>
<p align="center"> <a href="https://norafleet.ai/walkthrough.mp4"> <img src=".github/readme-assets/walkthrough.gif" alt="Watch the Nora walkthrough" width="900" /> </a> </p> <p align="center"> <sub>▶ <b><a href="https://norafleet.ai/walkthrough.mp4">Watch the walkthrough</a></b></sub> </p>
Nora is the self-hosted AI agent ops platform for running autonomous agent fleets on infrastructure you control — whether you standardize on OpenClaw, Hermes, or keep both available in the same operator surface.
Most teams running agents in production eventually rebuild the same layer around the runtime itself: deploy workflows, secrets, monitoring, logs, terminal, templates, and a separate admin surface. Nora exists so that layer doesn't have to be rewritten every time the runtime conversation changes. Operator workflows live under /app; platform-wide admin lives under /admin.
→ Why Nora · Runtime model · Deployment footprint
local by default, or S3/R2), with search, export, per-workspace retention, a changeable storage destination, and a three-lens Runtime/Traces/Operator view on /app/logs — see the logging guide.@noraai/cli, and the @noraai/mcp-server for Claude Code, Gemini CLI, Claude Desktop, and Cursor.<table> <tr> <td align="center" width="50%"> <img src=".github/readme-assets/proof-operator-dashboard.png" alt="Operator dashboard" /><br /> <sub><b>Operator dashboard</b></sub> </td> <td align="center" width="50%"> <img src=".github/readme-assets/proof-operator-fleet.png" alt="Fleet monitoring" /><br /> <sub><b>Fleet monitoring & needs-attention triage</b></sub> </td> </tr> <tr> <td align="center" width="50%"> <img src=".github/readme-assets/proof-operator-agent-detail.png" alt="Nora agent detail and operations view" /><br /> <sub><b>Agent detail & lifecycle operations</b></sub> </td> <td align="center" width="50%"> <img src=".github/readme-assets/proof-operator-hermes-webui-tab.png" alt="Embedded Hermes WebUI" /><br /> <sub><b>Hermes WebUI embedded in Nora</b></sub> </td> </tr> <tr> <td align="center" colspan="2"> <img src=".github/readme-assets/proof-operator-deploy-flow.png" alt="Agent deploy flow" /><br /> <sub><b>Agent deploy flow</b></sub> </td> </tr> </table>
Requirements: macOS 12+, Linux, or Windows 10+ (WSL2), with Docker Engine + Compose v2. The installer checks for Docker, Git, and OpenSSL and installs anything missing.
macOS / Linux / WSL2:
curl -fsSL https://raw.githubusercontent.com/solomon2773/nora/master/setup.sh | bash<details> <summary><strong>Prefer to inspect the installer first?</strong></summary>
git clone https://github.com/solomon2773/nora.git
cd nora
less setup.sh
bash setup.sh</details>
Windows (PowerShell):
iwr -useb https://raw.githubusercontent.com/solomon2773/nora/master/setup.ps1 | iexWindows requires [PowerShell 7+](https://learn.microsoft.com/powershell/scripting/install/installing-powershell-on-windows). The default Windows PowerShell 5.1 is not supported — run the command above from a pwsh 7 session.Kubernetes (Helm):
helm show chart oci://ghcr.io/solomon2773/noraThe command resolves the latest published chart; pin the reported version for reproducible production installs. The public OCI chart installs the full Nora control plane. See the Helm instructions for the required secrets and Ingress options.
The installer verifies prerequisites, generates or preserves secrets, optionally creates a bootstrap admin, picks free local ports when the defaults are busy, and starts the stack. Once it finishes, open the URL printed by setup. Local mode defaults to http://localhost:8080, but setup may select another port such as 8081 on a busy workstation. Then follow the first-15-minutes walkthrough.
No API key yet? On installations with the local Docker target enabled, choose Launch local Docker demo on the Getting Started page. Nora deploys a working agent against its built-in deterministic demo provider, so you can validate chat and the operator workflow with zero keys and zero model-usage cost. Kubernetes-only installations start by adding a model provider and deploying to an enabled cluster target.
For manual setup, environment variables, public-domain mode, TLS, Remote Docker, Kubernetes, NemoClaw, and experimental Proxmox LXC configuration, see the docs:
Full docs live at [docs.norafleet.ai](https://docs.norafleet.ai). The MDX source is in docs/.
| Section | What's there |
|---|---|
| Quick Start | Install and validate your first agent in 15 minutes |
| Concepts | Architecture, agents, runtimes, workspaces, LLM providers, Agent Hub |
| Configuration | Platform modes, env vars, provisioner backends, TLS / public domains |
| Guides | Deploy agent, providers, integrations, channels, monitoring, alert rules, backups, Agent Hub, NemoClaw |
| API Reference | Auth, workspaces, agents, channels, integrations, providers, monitoring, alert rules |
| Support | FAQ, troubleshooting |
Nginx
├── / → frontend-marketing (Next.js)
├── /app/* → frontend-dashboard (Next.js)
├── /admin/* → admin-dashboard (Next.js)
└── /api/* → backend-api (Express.js)
├── PostgreSQL
├── Redis + BullMQ (deployments, clawhub-jobs, backups, alert-deliveries)
├── worker-provisioner
├── worker-backup
├── deploy-target adapters (Docker + k3s/k8s GA · Remote Docker + Proxmox experimental)
└── sandbox profiles (standard · NemoClaw experimental)Full architecture write-up — system map, queue/worker boundaries, RBAC, migration contract, deployment topologies — is in docs/concepts/architecture.
| Layer | Technology |
|---|---|
| Reverse proxy | Nginx |
| Frontends | Next.js 16, React 19, Tailwind CSS |
| Backend API | Express.js 5, Node.js 24 LTS |
| Auth | JWT, HttpOnly cookies, bcryptjs, provider OAuth bridge |
| Database | PostgreSQL 15 |
| Queue | BullMQ + Redis 7 |
| Runtime families | OpenClaw, Hermes |
| Deployment targets | Docker and k3s/Kubernetes (GA); Remote Docker BYOC and Proxmox unprivileged LXC (experimental) |
| Sandbox profiles | Standard; NemoClaw (experimental, not available on Proxmox) |
| Secrets at rest | AES-256-GCM (provider keys, integrations, backups) |
Workspace-scoped API keys (bearer-only, prefixed nora_, HMAC-hashed at rest, scope-based) drive a stable subset of the REST surface. Issue keys at /app/workspaces/<id>/api-keys.
export NORA_TOKEN="nora_..."
curl -H "Authorization: Bearer $NORA_TOKEN" https://your-nora.example.com/api/agentsA small CLI lives in cli/ (@noraai/cli): run nora login once to save your host and API token, then nora workspaces, nora agents, and nora monitoring wrap the same REST surface. nora doctor runs an admin-only control-plane health check, and nora mcp launches the MCP stdio server. See the API reference for the supported endpoints and scopes.
Operate Nora from Claude Code, Gemini CLI, Claude Desktop, or Cursor: the mcp-server/ package (@noraai/mcp-server) exposes the same API as Model Context Protocol tools — deploy agents, control their lifecycle, and read fleet metrics, events, and per-agent cost from any MCP client. Destructive deletion stays disabled unless explicitly opted in.
claude mcp add nora \
--env NORA_API_URL=https://your-nora.example.com \
--env NORA_API_KEY=nora_... \
-- npx -y @noraai/mcp-serverGemini CLI users can install the repository extension directly. The installer prompts for the Nora API URL and stores the workspace API key as a sensitive extension setting:
gemini extensions install https://github.com/solomon2773/noraSee the MCP guide for Gemini CLI, Claude Desktop, and Cursor configuration, the tool list, and security notes.
@noraai/mcp-server, published to the official MCP Registry) plus per-agent MCP server management — operate the fleet from Claude Code, Gemini CLI, Claude Desktop, or Cursor, and wire MCP tools into individual agents.gen_ai.* semantic conventions — per-exchange chat spans plus token/cost/resource metrics flow into the Grafana / Datadog / Langfuse stack you already run. (Per-tool-call sub-spans are a separate, OpenClaw-only capability — agents push real traces into Nora's own OTLP receiver, viewable in the Traces lens on /app/logs.)disk_gb is metadata and operators must monitor Docker storage. Kubernetes adds workload resource limits and provisioned storage requests. The experimental NemoClaw profile hardens untrusted code with a non-root user, all Linux capabilities dropped, no-new-privileges, Landlock + seccomp, and default-deny egress. Experimental Proxmox placement uses unprivileged LXC, which remains a shared-kernel boundary and is not presented as VM-grade isolation. See the isolation model.# Docker (recommended)
docker compose up -d
docker compose logs -f backend-api
# Tests
cd backend-api && npx jest --no-watchman
cd e2e && npm testStart with CONTRIBUTING.md for contributor guidance. CLAUDE.md documents the repo layout, development commands, and subtree ownership for humans and AI coding agents alike.
New here? Browse good first issues for small, self-contained starting points, then skim CONTRIBUTING.md.
Strong contribution areas: runtime adapter work · operator and admin UX · provisioning and lifecycle orchestration · integrations and channels · test and CI hardening · self-hosted deployment ergonomics.
Typical workflow: fork → branch (feature/...) → commit → pull request.
If Nora is useful to you, a ⭐ on the repo helps other self-hosters find it.
This project is open source under the Apache License 2.0.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.