Skip to content

feat(dashboard): full administration panel — MCP, pairing, webhooks, credentials, memory, gateway, ops#36704

Merged
teknium1 merged 5 commits into
mainfrom
hermes/hermes-a963c25d
Jun 1, 2026
Merged

feat(dashboard): full administration panel — MCP, pairing, webhooks, credentials, memory, gateway, ops#36704
teknium1 merged 5 commits into
mainfrom
hermes/hermes-a963c25d

Conversation

@teknium1

@teknium1 teknium1 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Summary

The web dashboard is now a complete administration panel — a remote operator with no shell access to the host can manage MCP servers, messaging pairing, webhooks, the credential pool, the memory provider, the gateway lifecycle, and run diagnostics/backups, all from the browser.

Previously the dashboard could edit config/keys and view sessions/logs/analytics/cron/skills, but every other admin surface (hermes mcp, hermes pairing, hermes webhook, hermes auth, hermes memory, gateway start/stop, doctor, security audit, backup/import, checkpoints, hooks, skills hub) required CLI access. This closes that gap.

What's new

Four new dashboard pages + nav entries:

  • MCP — list / add / remove / test MCP servers (writes the same mcp_servers block the CLI reads)
  • Webhooks — list / create / delete subscriptions, with one-time HMAC secret reveal
  • Pairing — approve / revoke / clear messaging pairing codes (how a remote admin onboards Telegram/Discord/etc. users)
  • System — gateway start/stop/restart, memory provider select + reset, credential-pool add/remove, ops (doctor / security audit / backup / import / skills update) with a live action-log viewer, checkpoints prune, and shell-hooks status

Changes

  • hermes_cli/web_server.py: ~25 new REST endpoints wrapping the existing CLI data layers (mcp_config, PairingStore, webhook, CredentialPool, memory providers, gateway action-spawn). Secrets redacted on read; usable values only ever reach the agent at session start. Long-running ops (doctor/audit/backup/import/skills) spawn background actions tailed via the existing /api/actions/{name}/status.
  • web/src/lib/api.ts: typed client methods + interfaces for every new endpoint.
  • web/src/pages/{McpPage,PairingPage,WebhooksPage,SystemPage}.tsx: new pages, matching CronPage conventions.
  • web/src/App.tsx: routes + sidebar nav (plain labels, no i18n key required).
  • website/docs/.../web-dashboard.md: Pages sections + Admin-endpoints API table.

Design notes

  • All new endpoints sit behind the existing dashboard auth-gate middleware (no new public paths).
  • Credential pool uses the proper CredentialPool/PooledCredential API — keys are stored usable (verified raw key round-trips), not run through the borrowed-credential sanitizer.
  • Gateway start/stop and the ops commands reuse the established _spawn_hermes_action + action-log pattern (same as the existing restart/update), so behaviour matches the CLI exactly.
  • Host-bound installers (computer-use, LSP, secrets bw binary) were intentionally left CLI-only — they need host-side binaries a web panel can't meaningfully drive.

Validation

Result
Backend tests (tests/hermes_cli/test_dashboard_admin_endpoints.py) 20/20 pass — contract + CLI-config parity + auth-gate
Live HTTP smoke test (real uvicorn) All endpoints 200, MCP add persists to config.yaml, secrets redacted, no-token → 401
Frontend tsc -b clean
npm run build succeeds
New pages eslint clean (0 new errors in App.tsx)

Infographic

hermes-dashboard-admin-panel

teknium1 added 5 commits June 1, 2026 01:57
…ool, memory, gateway lifecycle

Adds REST endpoints so a remote admin can manage these without CLI access:
- MCP servers: list/add/remove/test (config.yaml parity with hermes mcp)
- Pairing: list/approve/revoke/clear-pending messaging codes
- Webhooks: list/subscribe/remove (hot-reloaded JSON store)
- Credential pool: list/add/remove rotation keys (via CredentialPool API)
- Memory provider: status/select/disable/reset
- Gateway lifecycle: start/stop (restart+update already existed)

Secrets redacted on read; usable values only reach the agent at session start.
All endpoints sit behind the existing dashboard auth gate.
- Ops actions (spawned, log-tailed via /api/actions): doctor, security audit,
  backup, import, checkpoints prune
- Ops reads (structured JSON): hooks list + allowlist status, checkpoints list
  with per-session size
- Skills hub actions (spawned): install / uninstall / update
- Registers new action log files for all spawn-based endpoints

All gated by the existing dashboard auth middleware.
Adds four new dashboard pages + nav entries so a remote admin can manage
Hermes without CLI access:
- MCP: list/add/remove/test MCP servers
- Webhooks: list/create/delete subscriptions (one-time secret reveal)
- Pairing: approve/revoke/clear messaging pairing codes
- System: gateway start/stop/restart, memory provider + reset, credential
  pool add/remove, ops (doctor/audit/backup/import/skills update) with a
  live action-log viewer, checkpoints prune, shell-hooks status

api.ts: client methods + types for all new endpoints.
App.tsx: routes + sidebar nav (plain labels, no i18n key required).

Verified: tsc -b clean, production build succeeds, new pages lint clean,
zero new eslint errors in App.tsx.
20 tests across MCP, credential pool, memory, pairing, webhooks, ops, plus
an auth-gate parametrize that asserts every admin endpoint requires the
session token. Asserts request contract + CLI-config parity, not catalog
values (per the no-change-detector-tests rule).
Adds Pages sections for the four new admin tabs and an Admin-endpoints table
to the REST API reference. Updates the page description to reflect the
dashboard's expanded role as a full administration panel.
@github-actions

github-actions Bot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

🔎 Lint report: hermes/hermes-a963c25d vs origin/main

ruff

Total: 0 on HEAD, 0 on base (➖ 0)

🆕 New issues: none

✅ Fixed issues: none

Unchanged: 0 pre-existing issues carried over.

ty (type checker)

Total: 9581 on HEAD, 9577 on base (🆕 +4)

🆕 New issues (3):

Rule Count
unresolved-import 2
invalid-assignment 1
First entries
hermes_cli/web_server.py:4663: [invalid-assignment] invalid-assignment: Object of type `list[object]` is not assignable to `list[str]`
tests/hermes_cli/test_dashboard_admin_endpoints.py:10: [unresolved-import] unresolved-import: Cannot resolve imported module `pytest`
tests/hermes_cli/test_dashboard_admin_endpoints.py:208: [unresolved-import] unresolved-import: Cannot resolve imported module `starlette.testclient`

✅ Fixed issues: none

Unchanged: 4962 pre-existing issues carried over.

Diagnostics are surfaced as warnings — this check never fails the build.

@alt-glitch alt-glitch added type/feature New feature or request comp/cli CLI entry point, hermes_cli/, setup wizard P3 Low — cosmetic, nice to have labels Jun 1, 2026
@teknium1 teknium1 merged commit b571ec2 into main Jun 1, 2026
24 checks passed
@teknium1 teknium1 deleted the hermes/hermes-a963c25d branch June 1, 2026 09:58
JoeKowal pushed a commit to JoeKowal/hermes-agent that referenced this pull request Jun 4, 2026
…credentials, memory, gateway, ops (NousResearch#36704)

* feat(dashboard): backend API for MCP, pairing, webhooks, credential pool, memory, gateway lifecycle

Adds REST endpoints so a remote admin can manage these without CLI access:
- MCP servers: list/add/remove/test (config.yaml parity with hermes mcp)
- Pairing: list/approve/revoke/clear-pending messaging codes
- Webhooks: list/subscribe/remove (hot-reloaded JSON store)
- Credential pool: list/add/remove rotation keys (via CredentialPool API)
- Memory provider: status/select/disable/reset
- Gateway lifecycle: start/stop (restart+update already existed)

Secrets redacted on read; usable values only reach the agent at session start.
All endpoints sit behind the existing dashboard auth gate.

* feat(dashboard): backend API for ops + skills hub

- Ops actions (spawned, log-tailed via /api/actions): doctor, security audit,
  backup, import, checkpoints prune
- Ops reads (structured JSON): hooks list + allowlist status, checkpoints list
  with per-session size
- Skills hub actions (spawned): install / uninstall / update
- Registers new action log files for all spawn-based endpoints

All gated by the existing dashboard auth middleware.

* feat(dashboard): admin pages for MCP, pairing, webhooks, and system ops

Adds four new dashboard pages + nav entries so a remote admin can manage
Hermes without CLI access:
- MCP: list/add/remove/test MCP servers
- Webhooks: list/create/delete subscriptions (one-time secret reveal)
- Pairing: approve/revoke/clear messaging pairing codes
- System: gateway start/stop/restart, memory provider + reset, credential
  pool add/remove, ops (doctor/audit/backup/import/skills update) with a
  live action-log viewer, checkpoints prune, shell-hooks status

api.ts: client methods + types for all new endpoints.
App.tsx: routes + sidebar nav (plain labels, no i18n key required).

Verified: tsc -b clean, production build succeeds, new pages lint clean,
zero new eslint errors in App.tsx.

* test(dashboard): cover admin API endpoints

20 tests across MCP, credential pool, memory, pairing, webhooks, ops, plus
an auth-gate parametrize that asserts every admin endpoint requires the
session token. Asserts request contract + CLI-config parity, not catalog
values (per the no-change-detector-tests rule).

* docs(dashboard): document MCP, Webhooks, Pairing, and System admin pages

Adds Pages sections for the four new admin tabs and an Admin-endpoints table
to the REST API reference. Updates the page description to reflect the
dashboard's expanded role as a full administration panel.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/cli CLI entry point, hermes_cli/, setup wizard P3 Low — cosmetic, nice to have type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants