Gormes

Hermes Command Surface Parity Matrix

Operator-visible Hermes CLI command surface, Gormes implementation state, and progress.json ownership for parity backlog planning.

Hermes Command Surface Parity Matrix

This page records the operator-visible Hermes CLI command surface that Gormes must preserve while remaining a native Go runtime. It complements the narrower Hermes Auth CLI Parity Manifest and does not replace the canonical backlog.

Canonical backlog and proof files

  • Canonical backlog: docs/content/building-gormes/architecture_plan/progress.json.
  • CLI parity backlog home: Phase 5, subphase 5.O, Hermes CLI Parity.
  • Provider/auth runtime backlog home: Phase 4, especially subphases 4.A, 4.G, and 4.H for provider bindings, token vault/auth, and provider-error behavior.
  • Executable CLI parity manifest: cmd/gormes/hermes_cli_parity.go.
  • Executable CLI parity tests: cmd/gormes/hermes_cli_parity_test.go.
  • Auth command manifest: docs/content/building-gormes/architecture_plan/hermes-auth-cli-parity.md.
  • Feature map rule: docs/content/building-gormes/architecture_plan/hermes-honcho-feature-map.md says missing P0/P1 Hermes behavior must become or refine a progress.json row, not live as a side-channel TODO.

If this page disagrees with progress.json, fix progress.json first and then update or regenerate derived docs. This page is an operator-readable matrix; the machine-readable work queue remains progress.json.

Audit answer: do we have every command?

For source-backed inventory, yes: the executable manifest now captures every current Hermes top-level argparse command, nested parser command, nested alias, gateway message handler, slash command/alias, dynamic plugin command class, and Gormes-owned divergence that this audit found. This does not mean Gormes implements every handler. Unsupported commands remain visible as Row-backed, Excluded/deprecated, or Gormes-owned so builders can ship them deliberately.

The drift gate is now explicit in cmd/gormes/hermes_cli_parity_test.go: TestHermesCLIParityManifestNestedParserInventoryMatchesHermes locks the current nested parser inventory from ../hermes-agent/hermes_cli/main.py and fails if stale paths such as gateway reset, cron enable, webhook serve, mcp call, profile set, auth login, or auth refresh are advertised as active parser commands.

Source capture

Hermes source paths inspected for this matrix:

  • ../hermes-agent/hermes_cli/main.py
  • ../hermes-agent/hermes_cli/auth.py
  • ../hermes-agent/hermes_cli/auth_commands.py
  • ../hermes-agent/agent/credential_pool.py
  • ../hermes-agent/gateway/run.py

Gormes source and runtime probes inspected for this matrix:

  • cmd/gormes/hermes_cli_parity.go
  • cmd/gormes/hermes_cli_parity_test.go
  • go run ./cmd/gormes --help
  • go run ./cmd/gormes auth --help
  • go run ./cmd/gormes gateway --help
  • go run ./cmd/progress validate

Gormes-reference donor anchors consulted for provider/channel/tool planning:

  • ../references/go-agent-os/GORMES-PROVIDER-PATTERN-REFERENCES.md
  • ../references/go-agent-os/goclaw/internal/oauth/openai.go
  • ../references/go-agent-os/goclaw/internal/oauth/token.go
  • ../references/go-agent-os/goclaw/internal/oauth/openai_quota_transport.go
  • ../references/go-agent-os/nanobot/pkg/tools/service.go
  • ../references/go-agent-os/nanobot/pkg/tools/flows.go
  • ../references/go-agent-os/nanobot/pkg/agents/truncate.go
  • ../references/go-agent-os/trpc-agent-go/agent/callbacks.go
  • ../references/go-agent-os/trpc-agent-go/model/callbacks.go
  • ../references/go-agent-os/engram/internal/mcp/write_queue.go

Provider, channel, and tool-calling guardrails

Command parity is not enough by itself. Gormes also needs source-backed inventories for provider IDs/auth modes, gateway platform IDs, and raw tool-call parser families so unsupported behavior remains visible.

SurfaceCurrent upstream sourceCurrent planner answerProgress action
Provider IDs and aliases../hermes-agent/hermes_cli/providers.py:HERMES_OVERLAYS,ALIASES, ../hermes-agent/agent/models_dev.py:PROVIDER_TO_MODELS_DEV, ../hermes-agent/hermes_cli/main.py:--provider choicesImplemented as a source-backed Go manifest in internal/hermes/provider_registry_manifest.go, with drift tests covering overlays, aliases, models.dev mappings, provider prefixes, auth registry names, and _PROVIDER_MODELS. Unsupported or not-yet-bound providers remain visible as row_backed instead of disappearing from gormes model, auth planning, status, or fallback work.Phase 4.A validated row: Hermes provider registry and alias manifest.
Provider auth commands../hermes-agent/hermes_cli/main.py:auth_subparsers, ../hermes-agent/hermes_cli/auth_commands.pyCurrent non-deprecated provider login is auth add <provider> --type oauth; top-level login, auth login, and auth refresh are not implementation targets. OpenAI Codex is the first native vertical; Anthropic, Nous, Google Gemini CLI, Qwen OAuth, and Spotify remain fixture-ready follow-up adapters.Phase 5.O fixture-ready row: Hermes auth OAuth provider adapters; existing auth command rows remain the command contract.
Gateway platform IDs../hermes-agent/gateway/config.py:Platform, ../hermes-agent/gateway/platforms/*.pyImplemented as a source-backed Go manifest in internal/gateway/platform_manifest.go, with drift tests covering every current Platform enum value and connector file. Unsupported or paused channels remain visible as row_backed or partial, while local, api_server, webhook, and wecom_callback are classified as local/runtime/webhook surfaces instead of being dropped.Phase 2.B.12 validated row: Hermes gateway platform registry manifest.
Raw tool-call parsers../hermes-agent/environments/tool_call_parsers/*.pyValidated manifest tracks the current 11 parser files: deepseek_v3_1, deepseek_v3, glm45, glm47, hermes, kimi_k2, llama, longcat, mistral, qwen3_coder, and qwen. Parser execution and provider-specific malformed-output behavior stay row-backed per family.Phase 5.B validated row: Raw tool-call parser fixture matrix.

Current Gormes visible command surface

The current Gormes root help exposes these top-level commands:

agent, auth, completion, config, doctor, fallback, gateway, goncho, logout, mcp, memory, migrate, model, profile, session, setup, telegram, usage, version.

Current implemented or stubbed subcommand highlights:

  • gormes auth: add, list, logout, remove, reset, status.
  • gormes gateway: status is read-model backed; install, restart, start, stop, and uninstall are explicit unavailable stubs until service restart support lands.
  • gormes config: check, edit, env-path, migrate, path, set, show.
  • gormes session: export.
  • gormes memory: status.
  • gormes goncho: doctor.
  • gormes migrate: hermes, openclaw.
  • gormes telegram: native Telegram bot adapter entry point.
  • gormes usage: provider account usage read model flags.
  • gormes login: intentionally not registered; the unknown-command path emits unknown_command_login_suggested_auth_add and points operators at gormes auth add <provider> --type oauth.

Known absent root commands from current Gormes help include whatsapp, slack, status, cron, webhook, hooks, dump, debug, backup, import, pairing, skills, plugins, tools, sessions, insights, claw, update, uninstall, acp, dashboard, and logs. These absences are not ignored; they are row-backed below.

Current upstream nested parser inventory

This table is the planner guardrail for the new nested-manifest refresh row. It distinguishes real hermes <group> <subcommand> parser paths from gateway message handlers and dynamic plugin commands.

Hermes parser groupCurrent upstream nested commands / aliasesCurrent manifest stateProgress action
fallbacklist/ls, add, remove/rm, clearImplemented in cmd/gormes fallback.Fixtures cover redacted list rendering, picker-delegated add, destructive gating, aliases, duplicate evidence, and picker-unavailable evidence.
gatewayrun, start, stop, restart, status, install, uninstall, setup, migrate-legacyCaptured; gateway message handlers stay separate as gateway-handler entries.Management handlers remain in Gateway, platform, webhook, and cron management CLI.
slackmanifestCaptured.Platform handler work stays row-backed.
authadd, list, remove, reset, status, logout, spotifyCaptured; stale auth login and auth refresh are excluded.Keep non-deprecated provider login through auth add <provider> --type oauth.
cronlist, create/add, edit, pause, resume, run, remove/rm/delete, status, tickCaptured.Handler work remains under Gateway, platform, webhook, and cron management CLI.
webhooksubscribe/add, list/ls, remove/rm, testCaptured; stale serve is not active.Platform/webhook behavior remains row-backed.
hookslist/ls, test, revoke/remove/rm, doctorCaptured; stale run is not active.Hook behavior remains row-backed.
debugshare, deleteCaptured; stale doctor, paste, and sweep are not active parser commands.Diagnostics rows own behavior.
configshow, edit, set, path, env-path, check, migrateCaptured.Config behavior rows own handlers.
pairinglist, approve, revoke, clear-pendingCaptured; stale deny/reset are not active.Platform pairing behavior remains row-backed.
skillsbrowse, search, install, inspect, list, check, update, audit, uninstall, reset, publish, snapshot export, snapshot import, tap list, tap add, tap remove, configCaptured including nested snapshot and tap subcommands.Skill manager/runtime rows own behavior.
pluginsinstall, update, remove/rm/uninstall, list/ls, enable, disableCaptured; stale doctor is not active.Plugin SDK owns behavior.
memorysetup, status, off, resetCaptured; plugin-style memory command discovery remains a dynamic plugin class.Memory/Goncho rows own implementation.
toolslist, disable, enable; bare tools opens interactive config; --summary prints summaryCaptured.Tool runtime/security rows own behavior.
mcpserve, add, remove/rm, list/ls, test, configure/config, loginCaptured; stale call and auth are not active parser commands.ACP/MCP rows own behavior.
sessionslist, export, delete, prune, stats, rename, browseCaptured; stale resume is not active as a parser command.Session rows own handlers.
clawmigrate, cleanup/cleanCaptured.OpenClaw migration rows own behavior.
profilelist, use, create, delete, show, alias, rename, export, importCaptured; stale set is not active.Config/profile rows own behavior.
logsNo subparser; optional log_name argument accepts agent, errors, gateway, or list.Top-level row-backed only.Diagnostics rows own log viewing/filtering behavior.

Hermes top-level parity matrix

Status values:

  • Implemented: visible in Gormes or covered by an equivalent native command.
  • Partial: visible but missing important Hermes behavior.
  • Row-backed: missing or incomplete, with a named progress.json row.
  • Gormes-owned: intentional Go/Goncho extension, not upstream Hermes.
  • Excluded/deprecated: should not perform legacy behavior; keep compatibility or a safe redirect only.
Hermes commandGormes stateBacklog owner / proofNotes
chat / root interactivePartialcmd/gormes root TUI/oneshot; Phase 5.O root flags rowsNative TUI/oneshot exists; full Hermes chat UX is still broader than root help parity.
modelImplementedcmd/gormes model; Phase 5.O: Gormes model interactive provider/model pickerSelection-only provider/model picker is visible; provider auth remains in gormes auth add by Gormes strict-isolation decision.
fallbackImplementedcmd/gormes fallback; Phase 5.O: Hermes fallback provider chain CLI commandsCurrent Hermes subcommands are list/ls, add, remove/rm, and clear; Gormes stores the chain in fallback_providers and delegates add to the shared model picker.
gatewayPartialPhase 5.O: Gateway, platform, webhook, and cron management CLI plus Gateway management CLI read-model closeoutstatus exists; mutating service commands are explicit unavailable stubs.
setupPartialcmd/gormes setup; Phase 5.O: Gormes setup minimal sectioned wizard sliceMinimal section UX is visible; model delegates to the shared picker or noninteractive defaults, while non-model sections return typed unsupported evidence.
whatsappRow-backedPhase 5.O: Gateway, platform, webhook, and cron management CLIPlatform management surface not yet visible as a root command.
slackRow-backedPhase 5.O: Gateway, platform, webhook, and cron management CLICurrent Hermes nested command is slack manifest.
loginExcluded/deprecatedPhase 5.O: Gormes login removed-command typo suggestion contractNot registered as a command; unknown-command output suggests gormes auth add <provider> --type oauth and never runs OAuth.
logoutRow-backedPhase 5.O: Gormes top-level logout provider shortcut; auth rowsgormes auth logout exists; top-level shortcut remains separate parity work.
authPartialPhase 5.O: auth command rows; hermes-auth-cli-parity.mdAPI-key and pool operations exist; Codex device-code OAuth is in progress/native, while Anthropic, Nous, Google Gemini CLI, Qwen, and Spotify remain row-backed.
statusPartialPhase 5.O: Diagnostics, backup, logs, and status CLI; gateway status rowsCurrent equivalent is gormes gateway status, not full Hermes root status.
cronRow-backedPhase 5.O: Gateway, platform, webhook, and cron management CLIRuntime cron exists elsewhere; CLI management parity remains planned.
webhookRow-backedPhase 5.O: Gateway, platform, webhook, and cron management CLICLI management surface remains planned.
doctorImplementedcmd/gormes doctor; Phase 5.O: doctor readiness rowsCurrent command has --offline; parity gaps should become diagnostics rows.
dumpRow-backedPhase 5.O: Diagnostics, backup, logs, and status CLI; CLI dump support-summary helperHelper exists; command surface remains planned.
debugRow-backedPhase 5.O: Diagnostics, backup, logs, and status CLIShare/paste/sweep/doctor helpers remain planned.
backupRow-backedPhase 5.O: Backup/update opt-in and exclusion policyMust keep destructive/update behavior explicit and opt-in.
importRow-backedPhase 5.O: Hermes config migration dry-run manifestCurrent Gormes surface is migrate hermes; preserve operator expectations.
configImplemented/partialPhase 5.O: Gormes config command surface; config closeout rowsRoot command exists with show/set/check/edit/migrate/path/env-path.
pairingRow-backedPhase 5.O: Gateway, platform, webhook, and cron management CLIPairing management CLI remains planned.
skillsRow-backedPhase 5: skills/tooling rows and CLI manifestNot visible in current root help.
pluginsRow-backedPhase 5: Plugin SDK rows and CLI manifestNot visible in current root help.
honchoGormes-owned replacementGoncho/Gormes memory rowsGormes exposes goncho, not honcho; keep Honcho-compatible interfaces but internal branding is Goncho.
memoryPartialPhase 3 memory rows; Phase 5 command surface rowsCurrent visible command has status; Hermes plugin-style search/add/delete/export parity remains row-backed.
toolsRow-backedPhase 5: tool/runtime/security rowsNot visible in current root help.
mcpRow-backedPhase 5.O: Gormes mcp login OAuth re-auth bridge; ACP/MCP rowsNot visible in current root help.
sessionsRow-backedPhase 5: session rowsGormes exposes singular session export; plural Hermes surface remains broader.
insightsRow-backedPhase 4: Self-monitoring telemetry plus diagnostics rowsNot visible in current root help.
clawRow-backedPhase 5.O: OpenClaw migration rowsCurrent equivalent is gormes migrate openclaw.
versionImplementedcmd/gormes versionVisible and help-backed.
updateRow-backedPhase 5.O: Backup/update opt-in and exclusion policySelf-update must remain safe/opt-in.
uninstallRow-backedPhase 5.O: Gormes uninstall dry-run command contractDestructive behavior must have dry-run/confirmation semantics.
acpRow-backedPhase 5: ACP server sideNot visible in current root help.
profileRow-backedPhase 5.O: profile resolver/store rowsNot visible in current root help.
completionImplementedCobra completion command; Phase 5.O: command-tree manifestVisible in current root help.
dashboardRow-backedDashboard API/client rowsNot visible in current root help.
logsRow-backedPhase 5.O: Diagnostics, backup, logs, and status CLI; log redactor rowsNot visible in current root help; redactor/snapshot helpers exist as rows.

Provider/auth parity matrix

The supported operator recipe is:

hermes auth add openai-codex
hermes auth list openai-codex
hermes chat -q 'Reply with exactly: ok' --provider openai-codex --model gpt-5.5

The Gormes parity target is:

gormes auth add openai-codex
gormes auth list openai-codex
gormes -z 'Reply with exactly: ok' --provider openai-codex --model gpt-5.5

Do not document manual JSON editing or ad-hoc token copying as the normal path. Codex CLI token import may exist only as an explicitly labeled emergency bridge.

SurfaceHermes behaviorCurrent Gormes stateBacklog owner
auth add <provider> API-key pathSecurely stores manual pooled credential; redacts secrets.Visible in gormes auth add; API-key path is present.Phase 5.O: Hermes auth credential-pool command surface.
auth add openai-codexFresh Hermes-owned OAuth device-code flow, stored in ~/.hermes/auth.json; separate from Codex CLI / VS Code tokens.Native device-code adapter and credential-pool persistence are in progress; remaining provider OAuth adapters stay row-backed.Phase 5.O: Hermes auth OAuth provider adapters; Gormes auth add openai-codex strict isolation contract.
auth list [provider]Lists redacted credential-pool entries and current selection markers.Implemented as gormes auth list.Phase 5.O: auth command surface rows.
auth status <provider>Provider-specific logged-in/logged-out metadata.Implemented read model; provider-specific OAuth expansions remain adapter work.Phase 5.O: Gormes auth status per-provider aggregator.
auth remove <provider> <target>Removes by index/id/label and runs source cleanup/suppression.Implemented for native pool removal; source-specific cleanup gaps must remain explicit.Phase 5.O: auth command surface rows.
auth reset <provider>Clears credential exhaustion/cooldown/auth-failure state.Implemented.Phase 5.O: auth command surface rows.
auth logout <provider>Clears provider auth and resets matching model provider config.Implemented for native credential pool; top-level shortcut remains row-backed.Phase 5.O: Gormes top-level logout provider shortcut.
auth spotifySeparate Spotify control-plane PKCE, not inference provider selection.Planned.Phase 5.O: Hermes auth Spotify service-provider subcommand.
modelInteractive provider/model picker; upstream invokes provider login as needed.Implemented as selection-only gormes model; use gormes auth add <provider> for auth.Phase 5.O: Gormes model interactive provider/model picker.
setup modelWizard path into provider/model setup.Implemented as gormes setup model, delegating to the shared picker or env/config defaults with --non-interactive.Phase 5.O: Gormes setup minimal sectioned wizard slice.
mcp login <name>OAuth re-auth for OAuth MCP servers only.Planned.Phase 5.O: Gormes mcp login OAuth re-auth bridge.
top-level loginHermes keeps a deprecated shim; Gormes owns the Q1B decision to avoid registering it.Not visible; gormes login exits non-zero through unknown-command suggestion gormes auth add <provider> --type oauth.Phase 5.O: Gormes login removed-command typo suggestion contract.

Runtime parity notes from live Telegram dogfood

Recent live Telegram dogfood found two runtime issues that are now part of the provider/operator parity evidence:

  • Provider errors must be safe for Telegram/operator display. Raw HTML upstream bodies are sanitized to provider returned HTML error body in provider and gateway formatting paths.
  • Provider OpenStream setup failures must return the kernel to idle so the next Telegram turn is admitted. The regression row is covered by internal/kernel/provider_failure_admission_test.go.

The next provider-auth slices should preserve the Hermes path above: native gormes auth add <provider> --type oauth behavior with Hermes-compatible credential storage, not Python Hermes runtime delegation. The OpenAI Codex device-code vertical is the first native adapter; any remaining Forbidden: provider returned HTML error body result should be triaged as auth/entitlement/relogin evidence, not as an admission-control or Telegram wedging blocker.

Validation commands for parity-doc changes

Use this minimum validation set when changing this page or the parity backlog:

go run ./cmd/progress validate
go test ./cmd/gormes -run HermesCLIParity -count=1
go test ./docs -run TestUpstreamCoverageLedgerMatchesSourceClasses -count=1
git diff --check

If progress.json changes, regenerate derived progress surfaces deliberately with the repo’s progress writer before staging any generated file.