cd /news/ai-agents/show-hn-openrmm-open-source-rmm-wher… · home › topics › ai-agents › article
[ARTICLE · art-153680] src=github.com ↗ pub= topic=ai-agents verified=true sentiment=↑ positive

Show HN: OpenRMM – open-source RMM where the AI proposes and a human approves

OpenRMM, an open-source, self-hosted remote monitoring and management (RMM) platform, launched with a native AI assistant that proposes scripts and actions in plain language but requires human approval before anything runs on an endpoint. The project positions itself against closed-SaaS AI-copilot RMMs such as Atera, SuperOps, Acronis and Neo Agent by letting operators connect any OpenAI-compatible endpoint, including local models, so fleet data can stay on their own infrastructure. OpenRMM ships a single cross-platform Go agent for Windows, Linux and macOS, an MCP server with OAuth 2.1 and scoped revocable tokens, and an append-only audit trail backed by triggers, a non-owner database role and a hash chain.

read8 min views1 publishedOct 20, 2026
Show HN: OpenRMM – open-source RMM where the AI proposes and a human approves
Image: Michielbdejong (auto-discovered)

An open-source, self-hosted RMM (Remote Monitoring & Management) with a native AI assistant: a modern console, a chat that connects to any AI model via API (BYO-model, including local/private models), its own cross-platform agent, and pluggable remote access.

Ask the assistant in plain language — "install 7-zip on the finance group", "configure printer model X at IP Y on host Z", "generate a report of offline devices" — and it inspects the fleet, proposes the scripts/actions, and a human approves before anything runs on an endpoint.

Most AI-copilot RMMs (Atera, SuperOps, Acronis, Neo Agent) are closed SaaS: the fleet's data goes to the vendor's cloud and to the model the vendor picked. OpenRMM is an open-source, self-hosted RMM built around three choices:

  • Any model — any OpenAI-compatible endpoint, including a local one, so command data can stay on your own infrastructure.

  • A human approves every action — the AI reads and proposes; nothing runs on an endpoint until someone approves the job.

  • Privacy first — your server, your database, your audit trail.

  • Own Go agent — single cross-platform binary (Windows/Linux/macOS), no runtime;self-updates from the server (make agent-dist for development; signed, versioned release artifacts are required for production).

  • AI chat with tool-calling — the model reads fleet state and proposes actions.

  • Guardrails by design — AI never executes directly; every action is a job that a human approves, with dry-run preview and an append-only audit log.

  • Pluggable remote access —native (built-in relay + media sidecar, tile-delta codec; Windows and Linux/Xorg including the login screen, and macOS; file transfer, chat with the user, clipboard both ways, display selection, Ctrl+Alt+Del on Windows, and a notice of who else is connected),terminal (anelevated PTY/ConPTY shell in the browser, gated bydevices.terminal ),meshcentral , andrustdesk (opens your own RustDesk client on the device's id, read on demand; off by default) — all behind one interface. Swap freely.

  • BYO AI model — any OpenAI-compatible endpoint (OpenAI, Ollama, vLLM, …).

  • Classic RMM, too — Client→Site→Agent hierarchy, RBAC users, script library, monitoring checks + alerts, scheduled tasks, and inherited policies. The agent installs as a system service and reports rich inventory.

  • Access control — built-inadmin /tech /readonly roles plus custom roles, optionalTOTP 2FA ,single sign-on through any OpenID Connect provider (with MFA requirements checked on the provider's signed claims), andper-user access scope (Company/Site/Department/device) enforced on read, write, remote access, and the AI/MCP surface. AI/MCP tools are filtered by the caller's permissions and scope. AI reports stay in chat with a client-sideCSV download — never written to an endpoint.

  • The built-in readonly role is not purely observational: it includesdevices.remote (remote desktop), but not file transfer or terminal. Create a custom role withoutdevices.remote when screen access is not acceptable.

  • MCP server — connect external AI (Claude, ChatGPT, …) to manage the fleet, reusing the same permission-filtered tools and the same human-approval guardrail. Secured with scoped revocable tokens +mcp.use + an IP allowlist, or with the built-inOAuth 2.1 server so cloud connectors sign in natively (with an applications screen to approve and revoke them); deploy privately (Tailscale) or behind TLS.

  • Alert email — per-user subscriptions, a durable outbox with retries, and your own SMTP relay (or an operator's shared service, to confirmed addresses only).

  • Append-only audit trail — triggers, a non-owner database role and a hash chain; searchable, exportable as CSV, and queryable by the assistant.

  • Six languages — the console is fully translated into English, Portuguese (Brazil), Spanish, German, Japanese and Simplified Chinese.

      bundled React UI ── REST/WS API ── AI chat (tool-calling loop)
                               │
                 ┌─────────────┼──────────────┐
                 │             │              │
            agent hub     job queue      remote relay
              (WS)        (Postgres)    (native provider)
                 │
        ┌────────┴─────────┐
        │   Go agent (endpoint)   │  +  remote client (native / MeshCentral)
        └──────────────────┘

Full detail: docs/01-architecture.md.

Self-host with the published images. Use one Linux server, three DNS names and Docker Compose. Caddy obtains the certificates, and the release images come from ghcr.io/openrmm-project:

git clone https://github.com/openrmm-project/openrmm.git && cd openrmm/deploy
cp .env.example .env            # set the hostnames and the release key
ops/provision-secrets.sh
docker compose up -d

deploy/QUICKSTART.md covers what to put in .env, the first administrator, adding devices and upgrades. The full runbook (backups, point-in-time recovery, standby) is deploy/README-production.md.

Run from source (development):

cp .env.example .env          # replace RMM_ADMIN_TOKEN with a generated value
docker compose up -d          # postgres + server
export RMM_ADMIN_TOKEN="$(openssl rand -hex 32)"
make build && ./bin/rmm-server

Create the first console user (the console signs in with a password or SSO, not with the admin token):

curl -X POST localhost:3005/api/auth/bootstrap \
  -H "Authorization: Bearer $RMM_ADMIN_TOKEN" -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"<12+ characters, an uppercase letter and a symbol>"}'

Then enroll an agent:

curl -X POST localhost:3005/api/enroll-tokens \
  -H "Authorization: Bearer $RMM_ADMIN_TOKEN" -d '{"uses":1}'

./bin/rmm-agent -server ws://localhost:3005/ws/agent -enroll-token <TOKEN> -enroll-only
./bin/rmm-agent -server ws://localhost:3005/ws/agent

The development Compose example uses its frontend/proxy on port 3005; a directly-run server uses port 8080 instead.

Production is intentionally different: provision file-backed secrets with deploy/ops/provision-secrets.sh, terminate TLS at a trusted edge, and keep the three published listeners bound to loopback. Agent installation requires HTTPS, OpenSSL 3, and --update-public-key/-UpdatePublicKey; insecure installation is available only through explicit lab mode. See deploy/README-production.md.

See docs/02-getting-started.md for the full walkthrough.

Read it at docs.openrmm.io, with search and a sidebar by topic. The site is built from the files below on every change to them.

Doc Contents
00-overview Vision, scope, what's built vs planned
01-architecture Components, data flow, package layout
02-getting-started Run the server, enroll an agent, run a job
03-database-schema Tables and relationships
04-api-reference Every REST endpoint
05-agent-protocol The agent WebSocket protocol
06-ai-chat Tool-calling loop, tools, prompts
07-guardrails-security Approval, audit, threat model
08-remote-access The native (desktop + file transfer), terminal, and MeshCentral providers
09-roadmap Phased plan toward a complete RMM
10-monitoring-policies Org hierarchy, RBAC, scripts, checks, tasks, policies, alerts
11-mcp MCP server — connect external AI (Claude, ChatGPT) securely
12-native-remote-fork Historical: the abandoned RustDesk-fork plan (superseded by the homegrown engine in 08)
13-security-rollout Release/signing gates, strict installers, TLS/secrets, enforcing CSP, remaining limits
14-frontend-design-brief Frontend brief: product context, screens, design language, full API contract
15-reports Fleet inventory reports (software/hardware/machines) by client/site/department, scoped, CSV export, AI tool
16-patch-management Patch inventory, approval/classification, policies (windows/auto-approve), reboot orchestration, compliance
17-mcp-oauth MCP OAuth 2.1 — OpenRMM as its own Authorization Server so cloud clients (Claude web, ChatGPT) connect natively
18-update-signing-runbook Operator playbook for signed auto-update: key custody, cutting a signed release, publishing to /dl/ , and staged key rotation via the trusted key set (no reinstall)
19-production-readiness-plan Prioritized remediation plan to reach production: go-live blockers, observability, HA, container scanning, defense-in-depth
20-email-notifications Alert email: scope-enforced recipients, transition-only sending, the durable outbox and retry policy, SMTP setup
21-single-sign-on Single sign-on with an OpenID Connect provider: setup, MFA requirements, account linking, break-glass

For production deployment, see deploy/README-production.md: a split-ingress topology with loopback backend binds and source ACLs at the trusted TLS edge. The supported deployment is one server replica; the in-memory agent hub, relay and scheduler are not distributed or HA.

To build the frontend: docs/14-frontend-design-brief.md.

The native remote engine is a homegrown implementation (CGO-free on Windows and Linux; macOS capture uses CGO) rather than a third-party fork. See docs/08-remote-access.md for platform and maturity limitations.

Report security issues privately, as described in SECURITY.md, not in public channels.

OpenRMM is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-only); see LICENSE. The AGPL's network clause (section 13) means anyone who runs a modified version as a network service must offer that version's source to its users.

Copyright (C) 2026 Miquéias Gonçalves. Contributors retain copyright in their own contributions and license them under the CLA. Third-party components and their licences are listed in THIRD_PARTY_NOTICES.

The AGPL is a real obligation, not a formality: if you modify OpenRMM and offer it to others over a network, you must offer them that modified source. That is fine for most self-hosted use, and deliberately awkward for building a closed product on top of it.

If you need to embed OpenRMM in something you do not want to publish, a separate commercial licence is available — the same code, without the AGPL's source obligations. Write to contact@openrmm.io.

Contributing is unaffected by that: you keep the copyright in your work. The CLA grants a licence broad enough to cover both distributions, because the alternative is a project that can never change its own terms. See CONTRIBUTING.

"OpenRMM" and its logo are trademarks of Miquéias Gonçalves. The AGPL licenses the code, not the name: a fork is welcome under a name of its own. See TRADEMARKS.

── more in #ai-agents 4 stories · sorted by recency
── more on @openrmm 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/show-hn-openrmm-open…] indexed:0 read:8min 2026-10-20 · —