The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Myrmex Hive listing page.
Myrmex Hive is a decentralized, secure, and geeky agent orchestration framework built on top of the Model Context Protocol (MCP). It is designed to securely monitor, query, and manage distributed edge servers, Docker hosts, and Kubernetes nodes without exposing any ingress ports on your target systems.
Myrmex Hive is designed for zero-trust environments where target edge systems (agents) must remain completely isolated from direct inbound network traffic.
crypto/ssh package, enforcing secure Ed25519 signature validation and high-grade ciphers (ChaCha20-Poly1305, AES-GCM).os/exec) rather than invoking a shell (like /bin/sh or bash). This completely bypasses shell expansion, neutralizing shell injection vulnerabilities. Arguments are strictly validated against developer-defined regular expressions in config.json.Myrmex Hive supports Go, Nix, Linux, macOS, and Windows environments.
Add Myrmex Hive to your flake.nix inputs:
You can then run the CLI tool directly:
To deploy a Myrmex Agent or Gateway as a declarative systemd service on NixOS, enable the module in your configuration.nix:
Installs all three binaries: myrmex (operator CLI), myrmex-gateway, and myrmex-agent.
macOS only — Homebrew casks are not supported on Linuxbrew. On Linux use the deb/rpm packages from the releases page, the Nix flake, install.sh, or the container images.
To download, compile, and configure the Agent as a background daemon (systemd on Linux, LaunchDaemon on macOS):
The installer automatically compiles the agent binary, generates secure Ed25519 keys, writes the config.json, and boots the service.
To install the Agent on Windows Server or Windows 10/11, launch PowerShell as Administrator and run:
The PowerShell script compiles the binary, registers the agent configuration under C:\ProgramData\mcp-agent\, generates OpenSSH keys, and schedules a background task to launch the agent at system startup.
Versioned container images and a Helm chart are published to GHCR on every release:
--version pins the chart and the images together (v1.0.1+; v1.0.0 predates
image/chart publishing). See
docs/DEPLOYMENT.md for the image list, a working install
with agent keys, and the TLS/Service/agent_id caveats.
agent_config.json)Allows you to define a single gateway or a list of multiple gateway addresses for High Availability (HA) failover cycling:
gateway_config.json)Configures the receiver, TLS certs, OIDC/Tokens RBAC role mapping (admin, operator, read-only), and signed audit log path:
Note: If audit_log_path is set, Myrmex Gateway records all /api/call and /api/chat executions alongside a cryptographic signature generated using the Gateway's private SSH host key.
Note: oidc_issuer enables native OIDC/JWKS validation of real SSO tokens (opt-in; static tokens keep working alongside). See docs/SECRETS.md.
Note: metrics_enabled exposes a Prometheus endpoint at /metrics (opt-in; behind the same bearer-token auth as the rest of the API). Myrmex Gateway can also route threshold alerts to a webhook/Alertmanager and export OpenTelemetry traces over OTLP — all opt-in. See docs/OBSERVABILITY.md for the metric reference, a scrape_config, the Grafana dashboard, alert routing and tracing.
Governance & scheduling (all opt-in, backward-compatible — empty/unset means off):
risk_tiers classifies each tool (read/write/admin). Built-in mutating tools (service_control, run_command) now default to a non-read tier even when unlisted, so they can't slip past gating unclassified; your explicit entries still override.require_approval_tiers makes calls in those tiers wait for a second operator (myrmex approvals), and a new pending approval also pages your configured alert targets so it can't expire unnoticed. 15-minute TTL.rate_limit_per_minute caps tool calls in a sliding 60-second window.scheduled_tasks periodically run an LLM orchestration prompt against an agent and route the summary through the alerting subsystem — unattended fleet health checks. interval_seconds only (no cron).See Golden Path for how these six gates fit together and a staged rollout.
Myrmex Gateway fails closed: it refuses to start (or rejects a connection) rather than run in an insecure state. When preparing configs and keys, three rules are enforced:
authorized_keys comment = agent-id (identity binding). The Gateway takes each connected agent's identity from the comment on its authorized_keys entry, and rejects any key whose comment is empty or does not match the agent_id the agent presents. Generate every agent key with its agent-id as the comment:
Then the public line in authorized_keys must keep that comment (ssh-ed25519 AAAA... agent-nginx).
Persistent host_key_path required when audit_log_path is set. Audit entries are signed with the Gateway's SSH host key, so a transient (regenerated-on-restart) key would make past signatures unverifiable. The Gateway refuses to start if audit_log_path is set but host_key_path is empty. Generate a stable host key once and point host_key_path at it:
The Gateway also refuses to start without authorized_keys_path (no agent allowlist).
Agents verify the Gateway host key. By default agents use trust-on-first-use (TOFU): on first connect they learn and persist the Gateway host key to <private_key_path>.gateway_hostkey (override with known_host_key_path) and require a matching key thereafter — no config change needed. To pin explicitly instead, set gateway_host_key in agent_config.json to the Gateway host public-key line:
The local test fixtures (generate_keys.sh, setup_test_env.sh) already satisfy all three: agent keys are commented with their agent-ids, a persistent test_env/gateway/host_key is generated and mounted, and agents rely on TOFU.
Myrmex Hive orchestrates actions and interprets output using local LLMs.
An optional Docker setup is available via profiles in docker-compose.test.yml preloaded with the gemma4:e4b model (offline-ready):
http://localhost:11434). Link it in gateway_config.json.myrmex)The Go-based Myrmex CLI allows operators to interact with the gateway, view agents, invoke tools, and launch the assistant directly from the terminal.
--url: Gateway API base URL (default: https://localhost:8080)--token: Gateway token (or MYRMEX_TOKEN environment variable)-o, --output: Output format (text or json)jq):
--all for every connected agent or --agents for a subset (combine with --plan to preview fleet-wide):
An operator issues a query:
myrmex ask "Check load average on agent-db. If it's over 4.0, run diagnostic logs and let me know what process is consuming CPU."
agent-db__get_metrics.4.0, the local Gemma model identifies that agent-db__run_command with argument {"cmd":"top"} (or an allowed diagnostics script) is available in the allowlist.You can easily drive Myrmex Hive programmatically from other automated AI systems, such as Antigravity SDK agents.
The gateway exposes standard endpoints (/api/chat and /api/call) protected by the secure bearer token. Your Antigravity agents can query the endpoint, receive structured tool list payloads, and trigger actions over the SSH tunnel.
An enterprise administrator configures a secure, fully compliance-audited local assistant using the offline-ready Ollama side-service:
gateway_config.json, the gateway is linked to the Ollama endpoint:
audit.log showing the timestamp, token role (operator), API route (/api/chat), and base64 signature. The security auditor verifies the log authenticity using the gateway's public SSH host key.A developer wants to run, break, observe and restart a service on a real host without SSHing in.
examples/service-test-harness/: a chaos.sh with a fixed verb set (cpu, mem, latency, loss, kill), probes pinned to hosts you name, and an apply script for config variants.Full guide: docs/SERVICE_TESTING.md.
For cloud deployments on Google Cloud Platform:
:8080) only through Identity-Aware Proxy (IAP) to enforce IAM roles.In highly secure, airgapped systems: