Myrmex Hive

io.github.olafkfreund由 GitHub 帳號 olafkfreund 發布v1.0.3更新於 Oct 24, 2026

Zero-inbound-port MCP gateway for managing distributed edge servers over reverse SSH tunnels

概覽

AI 產生的概覽

一個 MCP 閘道,讓助理透過僅對外連線的 SSH 通道監控與管理分散式邊緣伺服器、Docker 主機與 Kubernetes 節點。

可以做什麼
Myrmex Hive 執行一個中央閘道,邊緣代理透過對外 SSH 通道連線,因此目標系統不會暴露任何 inbound 管理連接埠。助理可透過閘道列出已連線的代理及其工具、呼叫指標收集與允許清單命令等工具,並執行由 LLM 協調的提示來檢查輸出並採取行動。它也支援跨多個代理的叢集協調、計畫(試跑)模式、排程健康檢查與簽章稽核日誌。
適用情境
當你需要觀察或操作無法接受 inbound 連線的邊緣、Docker 或 Kubernetes 主機叢集,並希望助理在其中執行允許清單內的診斷或服務操作時,值得加入。它適合想要可稽核、需審批的遠端管理而非直接 SSH 存取的維運人員。
執行需求
以本機程序執行,通常透過 Docker 執行閘道容器映像,並需要部署閘道與代理。需要 SSH 金鑰對(帶 agent-id 註解的代理 Ed25519 金鑰、持久化的閘道主機金鑰)、authorized_keys 允許清單,以及包含 bearer 權杖或 OIDC 設定的閘道設定。協調使用本機 Ollama 端點與模型;不需要公開網際網路。
安裝前請注意
閘道持有 bearer 權杖與 SSH 主機金鑰,其設定包含 auth_token 與權杖角色對應,應避免以明文檔案保存。代理可在遠端主機上執行允許清單內的命令與服務控制操作,因此允許清單或審批層級設定不當可能導致非預期變更;請使用計畫模式與審批層級。稽核日誌使用閘道主機金鑰簽章,因此該金鑰必須持久保存。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Myrmex Hive,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Myrmex Hive: Secure Agent Orchestrator & Gateway

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.


1. Architecture & Security Model

Myrmex Hive is designed for zero-trust environments where target edge systems (agents) must remain completely isolated from direct inbound network traffic.

mermaid
flowchart TD    %% Node Definitions    subgraph Edge ["Target Edge Node (Myrmex Agent)"]        Agent["Myrmex Agent<br/>(CPU/Mem/Disk, strict allowlist)"]    end
    subgraph Gateway ["Central Hive Gateway"]        SSHD["Secure SSHD Receiver<br/>(Port 2222)"]        Orch["Myrmex Hive Orchestrator"]        LLM["Ollama LLM<br/>(Gemma 4/2)"]    end
    Client["Client / CLI / Portal<br/>(Stdio / SSE MCP Interface)"]
    %% Connections    Agent -- "SSH Outbound Tunnel" --> SSHD    SSHD -- "JSON-RPC over SSH channel" --> Orch    Orch <--> LLM    Client <--> Orch
    %% Styling / Colors    classDef edgeNode fill:#282828,stroke:#fabd2f,stroke-width:2px,color:#ebdbb2;    classDef gatewayNode fill:#282828,stroke:#fe8019,stroke-width:2px,color:#ebdbb2;    classDef clientNode fill:#282828,stroke:#b8bb26,stroke-width:2px,color:#ebdbb2;
    class Agent edgeNode;    class SSHD,Orch,LLM gatewayNode;    class Client clientNode;

Security Principles (Why We Made These Choices)

  • Zero Inbound Ports: Instead of running an SSH daemon or exposing management ports (like HTTP/gRPC) on your target servers, the Myrmex Agent initiates a secure, outbound connection to the Myrmex Gateway. This eliminates the primary attack vector of public scanner discovery and automated brute-force attacks.
  • OS-Grade Encryption: Outbound tunnels utilize standard SSH protocol channels managed via Go's native crypto/ssh package, enforcing secure Ed25519 signature validation and high-grade ciphers (ChaCha20-Poly1305, AES-GCM).
  • Defense-in-Depth Allowlist: The Agent executes binaries directly via OS process forks (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.
  • Central Token Authorization: Access to the Gateway's control API is guarded via secure bearer token authentication.

2. Quickstart & Installation

Myrmex Hive supports Go, Nix, Linux, macOS, and Windows environments.

Nix / NixOS (Declarative Flake)

Add Myrmex Hive to your flake.nix inputs:

nix
inputs.myrmex-hive.url = "github:olafkfreund/myrmex-hive";

You can then run the CLI tool directly:

bash
nix run github:olafkfreund/myrmex-hive#myrmex -- --help

To deploy a Myrmex Agent or Gateway as a declarative systemd service on NixOS, enable the module in your configuration.nix:

nix
{ inputs, config, pkgs, ... }: {  imports = [ inputs.myrmex-hive.nixosModules.default ];
  services.myrmex-hive = {    enable = true;    role = "agent"; # Or "gateway"    configPath = "/etc/myrmex/agent_config.json";  };}

macOS (Homebrew)

bash
brew tap olafkfreund/myrmexbrew install --cask myrmex-hive

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.

Linux & macOS (Direct Install)

To download, compile, and configure the Agent as a background daemon (systemd on Linux, LaunchDaemon on macOS):

bash
sudo ./install.sh

The installer automatically compiles the agent binary, generates secure Ed25519 keys, writes the config.json, and boots the service.

Windows (PowerShell Script)

To install the Agent on Windows Server or Windows 10/11, launch PowerShell as Administrator and run:

powershell
Set-ExecutionPolicy Bypass -Scope Process -Force.\install.ps1

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.

Kubernetes (Helm)

Versioned container images and a Helm chart are published to GHCR on every release:

bash
helm install hive oci://ghcr.io/olafkfreund/charts/myrmex-hive \  --version 1.2.0 \  --namespace myrmex --create-namespace

--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.


3. Configuration

Agent Configuration (agent_config.json)

Allows you to define a single gateway or a list of multiple gateway addresses for High Availability (HA) failover cycling:

json
{  "agent_id": "agent-nginx",  "gateway_addr": "gateway-1.internal:2222",  "gateway_addrs": [    "gateway-1.internal:2222",    "gateway-2.internal:2222"  ],  "private_key_path": "/etc/mcp-agent/id_ed25519",  "allowed_commands": [    {      "name": "uptime",      "args_regex": "^$"    },    {      "name": "systemctl",      "args_regex": "^(status|restart) (nginx|postgresql)$"    }  ]}

Gateway Configuration (gateway_config.json)

Configures the receiver, TLS certs, OIDC/Tokens RBAC role mapping (admin, operator, read-only), and signed audit log path:

json
{  "listen_addr": ":2222",  "http_addr": ":8080",  "host_key_path": "host_key",  "authorized_keys_path": "authorized_keys",  "ollama_url": "http://localhost:11434",  "ollama_model": "gemma4:e4b",  "auth_token": "fallback_admin_token",  "tokens": {    "admin-token-123": "admin",    "operator-token-456": "operator",    "read-token-789": "read-only"  },  "audit_log_path": "audit.log",  "metrics_enabled": true}

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):

json
{  "risk_tiers": { "run_command": "admin", "service_control": "write" },  "require_approval_tiers": ["write", "admin"],  "rate_limit_per_minute": 30,  "scheduled_tasks": [    { "name": "nightly-disk-check", "agent_id": "agent-nginx",      "prompt": "Report disk usage and flag anything over 85%", "interval_seconds": 3600 }  ]}
  • 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.

Fail-closed defaults

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:

  1. 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:

    bash
    ssh-keygen -t ed25519 -f id_ed25519 -N "" -C "agent-nginx"

    Then the public line in authorized_keys must keep that comment (ssh-ed25519 AAAA... agent-nginx).

  2. 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:

    bash
    ssh-keygen -t ed25519 -f host_key -N "" -C "myrmex-gateway"

    The Gateway also refuses to start without authorized_keys_path (no agent allowlist).

  3. 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:

    json
    { "gateway_host_key": "ssh-ed25519 AAAA... myrmex-gateway" }

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.


4. Local LLM Setup (Ollama & Gemma 4)

Myrmex Hive orchestrates actions and interprets output using local LLMs.

Option A: Running as Docker Side-Services (Recommended)

An optional Docker setup is available via profiles in docker-compose.test.yml preloaded with the gemma4:e4b model (offline-ready):

  • CPU-only mode:
    bash
    docker compose --profile ollama-cpu up -d
  • GPU-accelerated mode (requires NVIDIA Container Toolkit):
    bash
    docker compose --profile ollama-gpu up -d

Option B: Manual Host Setup

  1. Install Ollama on your Gateway server.
  2. Pull the desired model (Gemma 4):
    bash
    ollama pull gemma4:e4b
  3. Ensure Ollama is running and accessible (default http://localhost:11434). Link it in gateway_config.json.

5. Using the Myrmex CLI (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.

Global Options

  • --url: Gateway API base URL (default: https://localhost:8080)
  • --token: Gateway token (or MYRMEX_TOKEN environment variable)
  • -o, --output: Output format (text or json)

CLI Command Reference

  • Status: View connected edge agents and configured upstream servers:
    bash
    myrmex status
  • Agents: List detailed specifications of all connected agents:
    bash
    myrmex agents
  • Tools: List all available tools across the swarm:
    bash
    myrmex tools
  • Call: Execute a tool on a specific agent. Automatically unmasks and un-escapes payloads:
    bash
    myrmex call agent-nginx__get_metrics
  • Call with JSON output: Outputs a clean, raw JSON payload directly to stdout (perfect for piping to jq):
    bash
    myrmex call agent-nginx__get_metrics -o json | jq '.cpu_usage_percent'
  • Ask: Prompt the Myrmex AI assistant to analyze and perform actions. Terminal output is beautifully styled in monospace markdown:
    bash
    myrmex ask "Is nginx running on agent-nginx? If not, restart it."
  • Ask with JSON output: Forward the final AI response directly to other automated tools or agents:
    bash
    myrmex ask "Check system metrics" -o json
  • Ask in plan (dry-run) mode: The model is still consulted at every step, but no tool is executed — the response lists the calls it would have made. Use it to preview an action before trusting the loop:
    bash
    myrmex ask --plan "Restart nginx on agent-nginx if it looks wedged"
  • Fleet-wide orchestration: Run the same orchestration across many agents and aggregate the per-agent summaries. Use --all for every connected agent or --agents for a subset (combine with --plan to preview fleet-wide):
    bash
    myrmex ask --all "Report disk usage and flag anything over 85%"myrmex ask --agents agent-1,agent-2 "How busy are these two?"

6. Real-Life Orchestration Scenarios

Scenario A: Automated Cluster Recovery

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."

  1. The orchestrator calls agent-db__get_metrics.
  2. The orchestrator parses the returned metrics JSON.
  3. If the load is over 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.
  4. The orchestrator executes the tool, parses the logs, and presents a clean, formatted report directly to the terminal.

Scenario B: Integration with Antigravity SDK

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.

Scenario C: Airgapped Gemma 4 Setup & Cryptographic Auditing

An enterprise administrator configures a secure, fully compliance-audited local assistant using the offline-ready Ollama side-service:

  1. Launch Ollama: The administrator starts the preloaded CPU-only Gemma 4 side-service in Docker:
    bash
    docker compose --profile ollama-cpu up -d
  2. Configure Gateway: In gateway_config.json, the gateway is linked to the Ollama endpoint:
    json
    "ollama_url": "http://myrmex-ollama-cpu:11434","ollama_model": "gemma4:e4b"
  3. Execute Operator Request: An operator executes a compliance-audited CLI query:
    bash
    myrmex ask "Verify the nginx server is running on agent-nginx" --token "operator-token-456"
  4. Log & Verify Audit Event: Since the request has write-like evaluation steps, the gateway logs a cryptographically signed entry in 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.

Scenario D: Testing and chaos-testing your own service

A developer wants to run, break, observe and restart a service on a real host without SSHing in.

  1. Allowlist the harness, don't build a feature. Copy the entries from 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.
  2. Verify recovery before breaking anything. Restart the service through the Gateway first — if the restart path doesn't work, you have no business injecting a fault.
  3. Inject and observe. Faults are time-bounded and self-reverting, and return immediately so you can watch the effect while it happens:
    bash
    myrmex call web-1__run_command --arguments '{"name":"/opt/myrmex/chaos.sh","args":["latency","60","250","eth0"]}'# → latency: applied 250 on eth0, auto-reverts in 60s
  4. Get a record. Every injection lands in the signed audit log, so a chaos run leaves tamper-evident evidence of which fault hit which host and when.

Full guide: docs/SERVICE_TESTING.md.


7. GCP Best Practices

For cloud deployments on Google Cloud Platform:

  1. VM Isolation: Deploy the Myrmex Gateway on a secure Compute Engine VM inside a private VPC. Expose the Gateway's control interface (:8080) only through Identity-Aware Proxy (IAP) to enforce IAM roles.
  2. Kubernetes Agents: Deploy Myrmex Agents on Google Kubernetes Engine (GKE) as a DaemonSet to automatically monitor and manage GKE node resources.
  3. Secret Security: Avoid storing the Gateway auth token in config files. Fetch the token dynamically at startup from Google Secret Manager.

8. Airgapped Datacenters

In highly secure, airgapped systems:

  • Myrmex Hive requires no public DNS or external internet access.
  • Deploy Ollama locally on the Gateway server. Since Ollama and the Myrmex Gateway run in the same local network, LLM inference occurs entirely within the airgapped perimeter.
  • Agents establish SSH tunnels internally over local subnets, maintaining a completely airgapped, auditable management plane.

來源:README.md,提交 4416378

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v1.0.3最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分