Hermes LoopHermes Loop
Hermes runtime · parity

Hermes Agent feature parityWhat ships today, what's partial, what's on the roadmap.

Hermes Agent (Nous Research) is the autonomous runtime. Agent Hermes Loop is the operator + governance layer around Hermes-powered workflows. This board is the source of truth on which engine features are actually wired up here. Hermes Loop is not trying to replace Hermes Agent; it's the control room around it.

Hermes Agent docs ↗
Total
42
8 categories
Shipped
22
52%
Partial
14
33%
Missing
6
14%

Runtime + model

4 features

Memory + skills

4 features

Scheduling + jobs

4 features

Agents + delegation

5 features

Tools + sandbox

8 features
Tool execution layer
SHIPPED
What exists today
Registry + executor with SSRF guards, per-run audit, approval-gated tools, Zod-validated I/O.
Gap / next step
Browser automation (Playwright QA)
SHIPPED
What exists today
browser_qa_audit: real Chromium crawl with screenshots, accessibility checks, console capture.
Gap / next step
Read-only. No clicks, no typing, no form submission.
Web search
PARTIAL
What exists today
web_search is wired through Tavily, Brave, or SerpAPI when a provider key exists. /media/web-search lets operators test the same tool agents call.
Gap / next step
Needs TAVILY_API_KEY, BRAVE_SEARCH_API_KEY, or SERPAPI_API_KEY. Without one, it returns a setup error instead of fake results.
Terminal tool
PARTIAL
What exists today
terminal_exec: workspace-scoped, timeout 30s (cap 120s), 8KB output cap, allow/risky/block policy, approval gating, secrets stripped from child env. Available to crews via toolsAllowed.
Gap / next step
Defense-in-depth only — runs in the host Node process. No container backend.
Docker sandbox backend
PARTIAL
What exists today
RUNTIME_BACKEND=docker spawns terminal_exec AND python_rpc inside ephemeral containers (workspace ro mount, --network=none, --read-only root, --cap-drop=ALL, no-new-privileges, CPU/memory limits, --stop-timeout). Auto-falls-back to local with `fallback:true` when `docker version` is unavailable. Receipts and trust ledger break out docker vs local counts.
Gap / next step
Active backend depends on the host. Modal/SSH/Singularity remain roadmap.
SSH sandbox backend
MISSING
What exists today
Not wired.
Gap / next step
Remote-host execution for missions that touch a target box.
Singularity backend
MISSING
What exists today
Not wired.
Gap / next step
HPC / scientific-computing sandbox. Niche but listed by Hermes Agent.
Modal backend
MISSING
What exists today
Not wired.
Gap / next step
Serverless GPU/CPU execution for heavy missions.

Channels

9 features
Web app UI
SHIPPED
What exists today
Next.js operator surface — every page is a database view.
Gap / next step
Generic inbound webhook
SHIPPED
What exists today
POST /api/integrations/webhook accepts channel/sender/text, verifies INTEGRATIONS_WEBHOOK_SECRET when configured, creates InboxItem, and queues triage.
Gap / next step
Only the generic webhook is shipped; branded Slack/Discord/Telegram bots still need platform-specific auth.
CLI
PARTIAL
What exists today
`npm run foundry -- <cmd>` ships: health · jobs run-due · jobs list · receipts list · mission create · evals (mission|tools). All commands hit the local Prisma + tool runtime — no global install needed.
Gap / next step
No global `foundry` binary on PATH; no streaming `jobs tail` / `missions watch` yet.
Discord
PARTIAL
What exists today
Inbound: POST /api/integrations/discord with optional DISCORD_WEBHOOK_SECRET HMAC creates InboxItem + queued triage. Outbound: DISCORD_WEBHOOK_URL or DISCORD_BOT_TOKEN+DISCORD_CHANNEL_ID posts approval decisions as embeds.
Gap / next step
No long-lived gateway connection — inbound is webhook-shaped, not slash-command-driven.
Slack
PARTIAL
What exists today
POST /api/integrations/slack accepts Slack slash-command POSTs (form-encoded) and JSON test calls. Verifies X-Slack-Signature (HMAC of v0:<ts>:<body>) when SLACK_SIGNING_SECRET is set. /foundry → InboxItem + queued triage + ephemeral ack.
Gap / next step
No outbound DMs for approvals yet (use Discord webhook for that today).
Email
PARTIAL
What exists today
POST /api/integrations/email accepts SendGrid Inbound Parse (form-data), Mailgun Routes (form-data), Postmark Inbound (JSON), or generic JSON. Normalizes from/to/subject/text/html, drops InboxItem, queues triage. Optional EMAIL_WEBHOOK_SECRET HMAC.
Gap / next step
Outbound SMTP for approved drafts still roadmap. Direct IMAP polling roadmap.
Telegram
MISSING
What exists today
Not wired.
Gap / next step
Inbound webhook → InboxItem; outbound notify on approval.
WhatsApp
MISSING
What exists today
Not wired.
Gap / next step
WhatsApp Business API integration.
Signal
MISSING
What exists today
Not wired.
Gap / next step
Signal-cli bridge.

Media

3 features

Governance + proof (Hermes Loop's contribution)

5 features
Honesty note

The model layer only provides inference. It does not provide memory, channels, sandboxing, or any of the engine-side Hermes Agent features. Anything tagged MISSING on this board is genuinely missing in this codebase — it is not provided implicitly by the model layer.

Most valuable next engine gaps
  1. 1
    Slack / GitHub / Gmail integration

    Two-way channels: inbound triggers a mission, outbound notifies on approvals.

  2. 2
    Docker / Modal sandbox backends

    Hard per-mission isolation beyond the current policy-gated local runtime.

  3. 3
    Platform-native channel bots

    Slack slash command, Discord bot, Telegram bot, Gmail/SMTP inbox and outbound approval notices.

  4. 4
    Vision uploads + artifact storage

    Operator file upload, stored media records, and durable generated audio/image artifacts.

  5. 5
    Autonomous model escalation

    Judge-triggered retry on a stronger model when schema repair or quality checks fail.