# Hermes Agent OS Audit

Last verified: 2026-07-07. Evidence comes from current source files, `/api/*` runtime shape, and `npm run build`. In the current restricted sandbox, `npm test` passes non-listener tests but 19 mock-server tests fail with `listen EPERM` when binding `127.0.0.1`.

## Summary

- Implemented and verified: internal Kernel API, module registry, sanitized public status, focused dashboard navigation, provider-router-backed Goals planning loop with per-goal run history, scheduled Goals loop jobs with approval gates, Kanban workflow task cards, Kanban workflow approval cards, Kanban scheduler approval cards, real event logs, elizaOS runtime load check, upstream Firecrawl builder source/proxy, builder process supervisor, builder config diagnostics, guided Convex/Clerk builder bootstrap, builder readiness smoke test, builder boot logs, upstream builder replay overlay injection, setup wizard state, guided provider setup, Ollama model pull dry-run helper, Ollama local model inventory, provider router dry-run, safe no-completion provider health checks, automatic usage credits, OpenRouter/OpenAI billing reconciliation adapters, CSV/JSON billing import preview/import with dedupe and safety rejection, real local scheduler with approval gates, Kanban approval cards, and leader lock/stale-lock recovery, local long-term memory with lexical/vector/hybrid search, optional Ollama/OpenAI embeddings, optional Qdrant remote vector collection sync/search, structured CLI adapters for Claude Code/Codex/OpenCode/OpenClaw with explicit run gate, workspace policy, timeout, redacted stdout/stderr, and execution logs, skill registry with signed Ed25519 external bundle import/update checks, signed skill dependency enforcement, signed dependency install suggestions, signed update-channel metadata, curated release notes, trusted marketplace update action, remote signed skill marketplace feeds, publisher trust policy, publisher reputation metadata, optional publisher allowlists/blocklists, workflow graph execution, branch routing, parallel branch fan-out, loop guards, workflow event replay, visual workflow replay API/dashboard graph, workflow node retry/approval resume with Kanban cards, admin-token public-mode guard, Docker files, Docker smoke command, clean export audit.
- Partial by design: self modules are local OS records, not full domain automations; builder replay overlay anchors to real upstream DOM nodes when selectors are available and falls back to saved workflow coordinates.
- Config required: providers, CLIs, Firecrawl/Convex/Clerk, Hermes profiles, and real builder execution.
- Missing next: Hermes task follow-up/status controls after dispatch, provider-specific live-key smoke tests, optional upstream builder account automation where provider APIs allow it, optional long-catalog skill search/filter UI, deeper VPS hardening appendix, Kanban drag/drop and external issue sync, additional remote vector backends beyond Qdrant if users need them.

| # | Name | Current status | Evidence checked | What works now | Missing / risk | Exact fix / priority / acceptance |
|---|---|---|---|---|---|---|
| 1 | Dashboard navigation | implemented | `src/App.tsx`, build | Mission, Setup, Workflows, Provider Router, Scheduler, Memory, Skills, Agent Builder, and focused agent/self pages route correctly; Kernel, SEO, and Video are kept out of the normal dashboard. | Mobile-depth testing still limited. | P2: Playwright visual pass for desktop/mobile. |
| 2 | Mission Control | implemented | `src/App.tsx`, `/api/modules` | Shows real module statuses from backend. | Counts depend on local machine tools. | P2: add public/package mode sample toggle. |
| 3 | Agent Builder | config required | `vendor/open-agent-builder`, `/api/builder/status`, `/api/builder/bootstrap`, `/api/builder/smoke-test`, `/api/builder/logs`, `/api/builder/replay-overlay`, supervisor tests | Uses vendored upstream Firecrawl builder through proxy and Hermes theme; supervisor can start/stop the builder, report Convex/Clerk diagnostics, prepare a dry-run bootstrap, smoke-test readiness, return sanitized boot logs, and inject Hermes run replay overlays into the real upstream builder DOM. | Needs user-owned Convex, Clerk, Firecrawl, and LLM keys before execution is real. | P20 done; next: upstream account automation only where provider APIs allow it. |
| 4 | Plugins & Connections | implemented | `src/App.tsx`, `/api/connections` | Lists config templates without secret values. | Public mode needs admin login for writes. | P0 done: protected configure/test routes in public mode. |
| 5 | OS tool audit | implemented | `/api/os/audit`, `server/runtime/modules.js` | Summarizes ok/setup/action states. | Audit is runtime-state focused, not full docs matrix. | P1: export audit report endpoint. |
| 6 | Claude Code | config required | `/api/modules/claude`, `/api/modules/:id/run`, `/api/modules/:id/sessions`, tests | Detects CLI/version, dry-runs by default, can execute through a structured local CLI adapter only when `HERMES_AGENT_OS_ENABLE_EXEC=1` and `dryRun:false` are both present, and can prepare/start/stop sanitized local CLI sessions from the dashboard. Supports CLI arg templates, workspace policy, timeout, redacted stdout/stderr, output tails, and logs. | Requires a real local Claude Code CLI and user-owned Anthropic access where the CLI requires it. | P25/P45 done: structured CLI adapter plus process sessions. Next: provider-specific live smoke only with user CLI/key. |
| 7 | OpenClaw | config required | `/api/modules/openclaw`, `/api/modules/:id/run`, `/api/modules/:id/sessions` | Detects real local CLI/path and shares the structured CLI adapter/session policy for explicit execution, workspace, timeout, redacted logs, output tails, and dashboard stop control. | Manual install/source still user-controlled. | P25/P45 done: structured CLI adapter plus process sessions. Next: trusted OpenClaw setup doc and health probe. |
| 8 | OpenClaude | missing dependency | `/api/os/audit`, tests | Does not falsely claim connected. | No trusted bundled CLI. | P2: support user-provided compatible path only. |
| 9 | Hermes Agent | partial | `/api/modules/hermes`, `/api/modules/hermes/run`, module tests, live localhost check | Detects real local profiles, running gateway count, connected platform count, active profile, profile gateway state, channel counts, launchd labels, dry-run-first gateway restart control, gated Hermes Kanban task creation via the real `hermes` CLI, read-only task refresh via `hermes kanban show <task_id> --json`, and dry-run-first follow-up controls for `reclaim`, `block`, `unblock`, `promote`, `complete`, `reassign`, `archive`, and `runs`. Direct runs write Agent Runner proof, Memory, and Kanban handoffs without leaking home paths, CLI paths, full prompt bodies, private summaries, or secrets. The dashboard exposes the explicit execution checkbox, task refresh, and task control buttons for Hermes runtime runs. | Deeper worker session output, streaming logs, and true retry/decompose controls still need UI depth. Restart/task execution is gated by `HERMES_AGENT_OS_ENABLE_EXEC=1` and `dryRun:false`. | P1/P39/P40/P41 moved forward: gateway inspection/restart dry-run, Hermes-native task dispatch, dashboard execution gate exposure, task status follow-up, and real Kanban task controls. Next: logs/retry/decompose controls. |
| 10 | Gemini | config required | `/api/modules/gemini`, `/api/modules/:id/sessions` | CLI/API key template, dry-run, and the shared CLI session supervisor when a real Gemini CLI path is available. | Real API execution handled by provider router foundation only; session mode needs user-installed CLI. | P45 done: shared CLI sessions. Next: Gemini router execution smoke test with user key. |
| 11 | Codex | config required | `/api/modules/codex`, `/api/modules/:id/run`, `/api/modules/:id/sessions`, tests | CLI path can be configured, dry-runs by default, executes through a structured adapter only with env + request opt-in, and supports dashboard-controlled process sessions. Test coverage verifies path/secret redaction, workspace policy, timeout, logs, workflow retry execution, session start/stop, and sanitized output tails. | Requires the user to install/configure a real Codex CLI. | P25/P45 done: structured CLI adapter plus process sessions. Next: richer Codex task profiles. |
| 12 | OpenCode | config required | `/api/modules/opencode`, `/api/modules/:id/run`, `/api/modules/:id/sessions` | CLI detection/config template and structured adapter/session policy are wired for explicit local execution and dashboard stop control. | Requires user-installed OpenCode CLI. | P25/P45 done: structured CLI adapter plus process sessions. Next: OpenCode-specific task profile docs. |
| 14 | MiniMax M3 | config required | `/api/modules/minimax`, tests | Follows `provider-minimax` config and router model default. | Needs user key and optional request scheduler. | P1: rate limit queue and usage tracking. |
| 15 | Hermes Gateway | partial | `/api/modules/gateway`, `/api/modules/gateway/run`, module tests | Has its own Gateway runtime adapter: detects Hermes profile readiness, inspects local profile gateway/channel/platform state, exposes replayable `channel_status`, dry-run-first `restart_gateway`, and dry-run-first Telegram `getMe` smoke tests. The Telegram test reads the selected profile env locally, executes only with `HERMES_AGENT_OS_ENABLE_EXEC=1` and `dryRun:false`, supports `HERMES_TELEGRAM_API_BASE` for private gateways/tests, and returns sanitized bot/profile evidence without local paths or tokens. | No per-channel send/message control UI yet; gateway restart and Telegram network smoke require explicit local execution gate. | P1 moved forward: gateway inventory, channel status, restart dry-run, and Telegram smoke test. Next: channel send/test UI for Telegram/browser/webhooks. |
| 16 | elizaOS runtime | implemented | `server/runtime/eliza.js`, tests | Loads real `@elizaos/core` and reports exports/version. | Hermes wraps the runtime; full eliza app graph is not exposed. | P1: map modules to eliza services/plugins. |
| 16a | Scheduler | implemented | `server/runtime/scheduler.js`, `/api/scheduler`, tests | Runs due workflow jobs, scheduled focused self-module tasks, scheduled `goal_loop` actions, approval-gated scheduled runs, Kanban approval cards, approve/reject controls, retry delay, pause/resume, history, logs, dashboard, leader lock, and stale-lock recovery for multi-process VPS/Docker installs. | Still a local leader scheduler, not a distributed worker queue. | P29 done; next: add queue/worker mode only if deployments outgrow one local leader. |
| 16b | Memory | implemented | `server/runtime/memory.js`, `/api/memory`, `/api/memory/search`, `/api/memory/vector/config`, `/api/memory/vector/rebuild`, tests | Stores semantic/episodic/procedural records, scopes by agent/namespace, searches with lexical/vector/hybrid ranking, builds a local hash vector index without keys, uses configured Ollama/OpenAI embeddings, syncs/searches optional Qdrant remote collections, reports missing provider dependencies honestly, supports privacy controls, import, and redacted non-private export without raw vectors or Qdrant API keys. | Qdrant is the first remote backend; Chroma/Pinecone are not implemented yet. | P24 done: Qdrant remote vector adapter. Next: add more vector backends only if users need them. |
| 16c | Skill Registry | implemented | `server/runtime/skills.js`, `/api/skills`, `/api/skills/marketplace`, `/api/skills/publishers`, `/api/skills/import`, `/api/skills/:id/dependencies/prepare`, `/api/skills/:id/update`, tests | Lists export-safe sample skills, imports signed Ed25519 external bundles, fetches remote signed skill feeds, redacts feed URLs, rejects tampered feed bundles, requires trusted publisher fingerprints before marketplace import, stores publisher reputation score/tier/website/notes, supports optional allowlist enforcement, blocks disallowed publishers before import, protects publisher rotation, enforces signed dependencies before install/enable, exposes dependency status, prepares dependency install/import/update suggestions, exposes signed update channels and curated release notes, applies trusted marketplace updates, installs/configures/enables/disables/uninstalls skills, reports update availability, stores required-key config locally, and logs per skill without leaking secrets. | Marketplace ergonomics are now functional; next risk is visual density on long catalogs. | P19 done; next: optional catalog filtering/search and release-note generation during export. |
| 16d | Internal Kernel API | implemented | `server/runtime/kernel.js`, `/api/os/kernel`, tests | Single sanitized report proves runtime core, module registry, provider router, graph workflow engine, parallel fan-out/replay, visual replay map, upstream builder replay overlay, scheduler, memory, skill registry, usage ledger, supervised builder adapter, Docker smoke script, and safety/export invariants. The dashboard no longer exposes a Kernel page/card, Kernel is excluded from the normal public module list, and parked SEO/Video modules are excluded from public module discovery and core kernel proof. | Next credibility gap is deeper provider-specific integrations, not core/runtime proof. | P35/P36/P43/P44 done; next: Agent Runner proof loop and provider-specific live smokes. |
| 17 | Firecrawl Agent Builder | config required | `vendor/open-agent-builder`, `/api/modules/firecrawl-builder`, `/api/builder/bootstrap`, `/api/builder/smoke-test`, `/api/builder/start`, `/api/builder/stop`, `/api/builder/logs`, `/api/builder/replay-overlay`, tests | Upstream source present, themed, proxied, and supervised with start/stop/status, provider-card config diagnostics, dry-run setup checklist, credential readiness smoke test, sanitized boot logs, and injected Hermes replay overlays for workflow runs. | Requires user-owned Convex, Clerk, Firecrawl, and LLM keys for real execution. | P20 done; next: optional Convex/Clerk account automation only where provider APIs allow safe local auth. |
| 18 | Anthropic provider | config required | `/api/modules/provider-anthropic`, `/api/modules/provider-anthropic/run`, `/api/modules/:id/sessions`, `/api/router/health`, `/api/usage/reconciliation`, `/api/usage/import/preview`, tests | Key template, forced provider-card run path, provider conversation sessions, Agent Runner proof, Memory/Kanban handoff, router provider, redaction, no-completion model-list health probe, honest unsupported API billing state, and CSV/JSON invoice import through Usage Credits. | User-owned key required for real routing; billing API reconciliation still unsupported unless a provider API appears. | P22/P46 done: invoice import, provider-card proof, and provider sessions. Next: live-key smoke only when user supplies a key. |
| 19 | OpenAI provider | config required | `/api/modules/provider-openai`, `/api/modules/provider-openai/run`, `/api/modules/:id/sessions`, `/api/setup/providers/openai/models`, `/api/router/health`, `/api/usage/reconciliation`, tests | Key template, forced OpenAI-only provider-card run path, no silent fallback, local provider conversation sessions with private transcript state, Agent Runner proof, Memory/Kanban handoff, router provider, redaction, dashboard health check button, no-completion model-list health probe, model inventory/model picker, selected-model router config, and OpenAI organization costs reconciliation via `OPENAI_ADMIN_KEY`. | User-owned routing/admin keys required; org cost endpoint may require admin permissions. Live generation smoke is only possible after a user supplies a real key and enables execution. | P2/P37/P38/P42/P46 done: usage reconciliation, provider-card proof, health button, model picker, and provider sessions. Next: live-key smoke when user supplies a key. |
| 20 | Gemini provider | config required | `/api/modules/provider-gemini`, `/api/modules/provider-gemini/run`, `/api/modules/:id/sessions`, `/api/setup/providers/gemini/models`, `/api/router/health`, `/api/usage/reconciliation`, `/api/usage/import/preview`, tests | Key template, forced provider-card run path, provider conversation sessions, Agent Runner proof, Memory/Kanban handoff, router provider, redaction, no-completion model-list health probe, model inventory/model picker, honest unsupported API billing state, and CSV/JSON invoice import through Usage Credits. | User-owned key required for real routing; billing API reconciliation still unsupported unless a provider API appears. | P22/P38/P46 done: invoice import, provider-card proof, model picker, and provider sessions. Next: live-key smoke only when user supplies a key. |
| 21 | OpenRouter provider | config required | `/api/modules/provider-openrouter`, `/api/modules/provider-openrouter/run`, `/api/modules/:id/sessions`, `/api/setup/providers/openrouter/models`, `/api/router/health`, `/api/usage/reconciliation`, router tests | Forced provider-card dry-runs against configured OpenRouter, provider conversation sessions, Agent Runner proof, Memory/Kanban handoff, health-checks the models endpoint, model inventory/model picker, reconciles key monthly usage with `OPENROUTER_API_KEY`, and reconciles account credits with `OPENROUTER_MANAGEMENT_KEY` without leaking keys. | User-owned key required; account credits require separate management key. | P2/P38/P46 done: usage reconciliation, provider-card proof, model picker, and provider sessions. Next: live-key smoke. |
| 22 | Ollama provider | config required | `/api/modules/provider-ollama`, `/api/modules/provider-ollama/run`, `/api/modules/:id/sessions`, `/api/router/health`, `/api/setup/providers`, `/api/setup/providers/ollama/models`, tests | Local host template, forced provider-card run path, provider conversation sessions, Agent Runner proof, Memory/Kanban handoff, router provider, `/api/tags` health probe, guided setup, dry-run `ollama pull <model>` helper, and real local model inventory with names, sizes, parameter size, quantization, selected-model availability, and honest setup/error states. | Needs reachable local Ollama and pulled model on the user's machine for connected inventory or real generation. | P23/P46 done: local model inventory, provider-card proof, and provider sessions. Next: optional live generation smoke when execution is enabled by the user. |
| 23 | MiniMax provider | config required | `/api/modules/provider-minimax`, `/api/modules/provider-minimax/run`, `/api/modules/:id/sessions`, `/api/setup/providers/minimax/models`, `/api/router/health`, `/api/usage/reconciliation`, `/api/usage/import/preview`, tests | Config propagates to MiniMax M3 and router; forced provider-card run path, provider conversation sessions, Agent Runner proof, Memory/Kanban handoff, model-list health probe validates configured user key, model inventory/model picker; billing API is honestly unsupported, with CSV/JSON invoice import through Usage Credits. | User-owned key required for routing; billing API reconciliation still unsupported unless a provider API appears. | P22/P38/P46 done: invoice import, provider-card proof, model picker, and provider sessions. Next: rate limit queue. |
| 24 | Firecrawl provider | config required | `/api/modules/provider-firecrawl`, `/api/self/seo/:briefId/audit`, `/api/self/seo/:briefId/discover`, `/api/self/seo/:briefId/rank`, Firecrawl docs | Key template, optional scrape/search endpoint overrides, builder dependency, SEO audit scrape action, competitor discovery, and rank snapshot search action with explicit execution gate. | Live Firecrawl execution needs a user-owned key and execution opt-in. | P33 done: Firecrawl search used by SEO discovery/rank snapshots. Next: optional crawl/site-map jobs. |
| 25 | Convex provider | config required | `/api/modules/provider-convex`, `/api/setup/providers`, `/api/builder/bootstrap`, `/api/builder/smoke-test` | Required for upstream builder storage; guided setup captures `NEXT_PUBLIC_CONVEX_URL` without exposing values, and builder bootstrap/smoke report readiness. | No automated Convex account/project creation. | P18 done: guide-assisted bootstrap and smoke test. Next: optional automation only if provider CLI/API permits safe local auth. |
| 26 | Clerk provider | config required | `/api/modules/provider-clerk`, `/api/setup/providers`, `/api/builder/bootstrap`, `/api/builder/smoke-test` | Required for upstream builder auth; guided setup captures Clerk publishable key, secret key, and issuer domain without exposing values, and builder bootstrap/smoke report readiness. | No automated Clerk account/app creation. | P18 done: guide-assisted bootstrap and smoke test. Next: optional automation only if provider CLI/API permits safe local auth. |
| 27 | Goals | implemented | `/api/self/goals`, `/api/self/goals/:goalId/loop`, `runGoalLoop`, scheduler tests, goal-loop tests | Real local CRUD/store/logs; scheduler can create scheduled local tasks; a goal can run a dry-run-first Provider Router planning loop manually or through an approval-gated scheduled `goal_loop`, store plan/next action/history, record `goal_loop` usage, and redact local home paths/key-looking fields from API state. Scheduler approval gates now surface in Kanban. | Goal loop output is not automatically decomposed into multiple Kanban tasks. | P29 done: scheduler approval cards. Next: optional goal-plan-to-task conversion. |
| 28 | SEO | parked | `/api/self/seo`, SEO tests | Backend code remains for a later release, but SEO is intentionally hidden from the normal dashboard while the core Agent OS loop is made credible. | Public docs and dashboard should not present this as a main module now. | Re-enable only after it plugs into Agent Runner proof loop. |
| 29 | Video | parked | `/api/self/video`, video worker tests | Backend code remains for a later release, but Video is intentionally hidden from the normal dashboard while the core Agent OS loop is made credible. | Public docs and dashboard should not present this as a main module now. | Re-enable only after it plugs into Agent Runner proof loop. |
| 30 | Notebook | implemented | `/api/self/notebook`, `/api/memory`, tests | Real local notes/run journal; OS memory now handles semantic/episodic/procedural retrieval. | Notebook does not auto-promote notes into memory. | P2: optional “save note to memory” action. |
| 31 | Kanban | implemented | `/api/self/kanban`, `server/runtime/workflows.js`, `server/runtime/scheduler.js`, tests | Real local cards/columns with priority/status/source metadata; workflow `moduleId:"kanban"` tool nodes create source-linked task cards; workflow approval nodes create pending Kanban cards and update them on resume; scheduler approval gates create/update approve/reject cards. | No drag/drop board controls or external issue sync yet. | P29 done: workflow/scheduler approval/task hooks. Next: drag/drop board and optional GitHub/Linear/Jira sync. |
| 32 | Usage Credits | implemented | `/api/usage`, `/api/usage/import/preview`, `/api/usage/import`, `/api/usage/reconciliation`, `server/runtime/usage.js`, router/reconciliation/import tests | Router dry-runs/executions are auto-recorded, manual records work, daily/monthly limits warn and block real execution before provider calls, OpenRouter key/credits and OpenAI organization costs can reconcile provider-reported billing, unsupported billing APIs are marked honestly, and CSV/JSON invoice imports preview, reject unsafe text, dedupe by source id, and write normalized ledger rows. | Provider-specific live billing APIs remain limited to sources that expose supported endpoints. | P22 done; next: provider-specific live billing APIs only where stable endpoints exist. |
| 33 | Local storage | implemented | `server/runtime/store.js`, tests | Uses `~/.hermes-agent-os` or configured home with public path redaction. | Needs backup/import UI. | P2: backup/restore action. |
| 34 | Logs | implemented | `server/runtime/module-logs.js`, tests | Real module logs, secrets sanitized. | No log search/filter UI yet. | P2: log explorer. |
| 35 | Workflow APIs | implemented | `server/runtime/workflows.js`, `server/runtime/builder-overlay.js`, `/api/workflows/:id/runs/:runId/events`, `/api/workflows/:id/runs/:runId/replay`, `/api/builder/replay-overlay`, workflow tests | Save/list/run state, graph edge traversal, branch labels/source handles/default edges, parallel fan-out for non-routing nodes, branch IDs, parallel group IDs, `parallel_group_started` / `parallel_group_completed` replay events, visual replay maps with node/edge status and layout positions, while-loop iteration guards, max-step guard, provider-router agent nodes, configured CLI nodes, local OS tool nodes, Kanban task cards, retry attempts, human approval pause/resume with Kanban approval cards, blank upstream starter, scheduled workflow runs, and upstream builder overlay payloads/URL injection. | Overlay anchoring depends on upstream builder DOM selectors; it falls back to stored workflow coordinates when direct anchors are unavailable. | P29 done: Kanban task/approval hooks. Next: Playwright visual overlay smoke after authenticated builder boot. |
| 36 | Export/prepare package | implemented | `server/runtime/exporter.js`, `scripts/docker-smoke.js`, tests | Clean zip excludes `.data`, logs, secrets, local paths, profile names, and package docs include a Docker smoke command for clean container boot verification. | Export does not automatically run Docker smoke because Docker may be unavailable in some environments. | P21 done; next: optional CI workflow wrapper for projects that run GitHub Actions. |
| 37 | VPS/deployment docs | implemented | `README.md`, `SETUP-GUIDE.md`, `Dockerfile`, `docker-compose.yml`, `scripts/docker-smoke.js` | Node and Docker paths documented; Docker smoke builds the image, boots a container on a temporary local port, checks `/api/health`, `/api/os/kernel`, `/api/modules`, validates Docker health, uses `/data/hermes-agent-os`, and cleans up. | Nginx/systemd guide can be deeper. | P2: full VPS hardening appendix. |
| 38 | Claude Code/Codex install prompt | implemented | `PROMPT-FOR-CLAUDE-CODE-OR-CODEX.md` | Ready-to-paste local install/verify prompt. | Must stay in sync with zip filename. | P2: generate prompt during export. |
| 39 | Security/admin behavior | partial | `server/runtime/auth.js`, tests | Public mode protects setup/config/run/log/workflow/self routes with token/cookie. | No multi-user accounts or OAuth. | P1: full admin login page and session expiry UI. |
| 40 | First-run setup experience | implemented | `server/runtime/setup.js`, `server/runtime/provider-setup.js`, `src/App.tsx`, `/api/setup/providers`, `/api/setup/providers/ollama/models`, tests | Setup state, mode, preferred provider, readiness steps, starter workflow run, guided provider-specific fields, model overrides, provider health actions, provider-card health buttons, Ollama model pull dry-run helper, and Ollama model inventory UI/API. | No automated account/project creation for external services. | P23/P42 done: Ollama inventory and provider-card health controls. Next: account bootstrap docs/helpers. |

## Next Build Order

1. Hermes task follow-up controls after dispatch: worker session/log link, retry/cancel/reassign controls.
2. Provider live-key smoke tests for OpenAI/Anthropic/Gemini/OpenRouter/Ollama/MiniMax when users provide keys.
3. Extend Agent Runner proof into replay entries and richer execution history tables.
4. Kanban drag/drop board controls and optional external issue sync.
5. Optional Convex/Clerk account automation only if provider APIs allow safe local auth.
6. Skill catalog filtering/search and generated release-note bundle summaries.
