Skip to main content

Gateway command parity (local sessions)

Every local client (classic CLI, Ink TUI, Desktop, ACP) attaches to the one gateway that owns the session. A slash command either runs in the client against a canonical verb (session.mutate, session.create, prompt.receipt, ...), or goes to the owner as slash.exec, where gateway/session_commands.py runs only the reviewed reads below and refuses the rest (unsupported_command). The classic CLI (hermes chat) is main's HermesCLI with a gateway-backed agent and session store: its column names the main handler it runs in-process (turns, tools and session writes go to the gateway through hermes_cli/gateway_agent.py / gateway_session_store.py). The --stream-json / safe-mode transport client keeps its own narrower routes (hermes_cli/gateway_chat_commands.py).

Gateway (slash.exec): read = the real handler runs for a local session (proved by tests/gateway/test_session_read_commands.py); control = admission-fenced write (/approve /deny resolve this session's waiting approval, tests/gateway/test_session_approval_commands.py); refused. Notes: per-session setting (gateway handler) = the messaging handler runs and applies the setting to this local session (its next turn and config.get), saving config.yaml only where the handler does; client-local (cli_only) commands are terminal/UI features of a client.

102 registry commands: 28 control, 18 read, 56 refused.

CommandGateway (slash.exec)Classic CLIInkDesktopACPNotes
/agents (/tasks)refusedHermesCLI._handle_agents_commanddelegation.pauseslash.exec: refusedrefusedgateway-wide: lists every chat's running agents and the process's async jobs
/approvalscontrolHermesCLI._handle_approvals_commandslash.execslash.execrefusedper-session setting (gateway handler)
/approvecontrolmessaging-only: unknown commandslash.execslash.execrefusedmessaging-only
/batteryrefusedHermesCLI._handle_battery_commandsidecar: system.battery (preference not saved)slash.exec: refusedrefusedclient-local (cli_only)
/bgrefusedHermesCLI._handle_background_commandprompt.backgroundaction: backgroundrefused
/blueprint (/bp)controlHermesCLI._handle_blueprint_commandslash.execslash.execrefused
/branch (/fork)refusedHermesCLI._handle_branch_commandcanonical routeaction: branchACP fork_session
/browserrefusedHermesCLI._handle_browser_commandsidecar: browser.manageaction: browserrefusedclient-local (cli_only)
/btwrefusedHermesCLI._handle_btw_commandprompt.btwaction: btwrefused
/bundlesreadHermesCLI._handle_bundles_commandslash.execslash.execrefused
/busycontrolHermesCLI._handle_busy_commandcanonical routeunavailable: terminalrefusedper-session setting (gateway handler)
/clearrefusedHermesCLI._cmd_clearlocalaction: newrefusedclient-local (cli_only)
/codex-runtime (/codex_runtime)controlHermesCLI._handle_codex_runtimeslash.execslash.execrefusedper-session setting (gateway handler)
/commandsreadmessaging-only: unknown commandslash.execaction: helprefusedmessaging-only
/compress (/compact)refusedHermesCLI._manual_compresscanonical routeaction: compresssession.mutate compress
/configrefusedHermesCLI.show_configslash.exec: refusedunavailable: terminalrefusedclient-local (cli_only)
/context (/ctx)readHermesCLI._show_context_breakdownslash.execslash.execrefusedTUI session: main's live /context with the category table
/copyrefusedHermesCLI._handle_copy_commandlocalunavailable: terminalrefusedclient-local (cli_only)
/cronrefusedHermesCLI._handle_cron_commandslash.execunavailable: terminalrefusedTUI session: bare /cron and /cron list [--all] read the profile's jobs; client-local (cli_only)
/curatorcontrolHermesCLI._handle_curator_commandslash.execunavailable: advancedrefused
/debugcontrolHermesCLI._handle_debug_commandslash.execslash.execrefuseduploads logs to a public paste
/denycontrolmessaging-only: unknown commandslash.execslash.execrefusedmessaging-only
/diffreadHermesCLI._handle_diff_commandslash.execslash.execrefused
/egresscontrolHermesCLI._cmd_egressslash.execslash.execrefused
/exportrefusedHermesCLI._handle_export_commandslash.exec: refusedslash.exec: refusedrefusedclient-local (cli_only)
/fastcontrolHermesCLI._handle_fast_commandconfig.get, config.setunavailable: advancedrefusedper-session setting (gateway handler)
/focusrefusedHermesCLI._handle_focus_commandlocal (preference not saved)slash.exec: refusedrefusedclient-local (cli_only)
/footercontrolHermesCLI._handle_footer_commandslash.execunavailable: terminalrefusedper-session setting (gateway handler)
/goalcontrolHermesCLI._handle_goal_commandslash.execslash.execrefused
/handoffrefusedHermesCLI._handle_handoff_commandslash.exec: refusedaction: handoffrefusedclient-local (cli_only)
/hatch (/generate-pet)refusedHermesCLI._handle_hatch_commandslash.exec: refusedaction: hatchrefusedclient-local (cli_only)
/heartbeat (/hb)controlHermesCLI._handle_heartbeat_commandslash.execslash.execrefused
/helpreadHermesCLI._cmd_helplocalaction: helprefused
/historyrefusedHermesCLI.show_historylocalunavailable: terminalrefusedclient-local (cli_only)
/imagerefusedHermesCLI._handle_image_commandlocalunavailable: terminalrefusedclient-local (cli_only)
/importrefusedHermesCLI._handle_import_commandslash.exec: refusedslash.exec: refusedrefusedclient-local (cli_only)
/indicatorrefusedHermesCLI._handle_indicator_commandconfig.get, config.setunavailable: terminalrefusedclient-local (cli_only)
/initcontrolHermesCLI._handle_init_commandslash.execslash.execrefused
/insightsreadHermesCLI._show_insightsslash.execunavailable: advancedrefused
/journey (/learning, /memory-graph)refusedHermesCLI._handle_journey_commandlocalaction: journeyrefusedclient-local (cli_only)
/kanbanread (list/show/stats/assignees/context/runs/log/diagnostics)HermesCLI._handle_kanban_commandslash.execunavailable: advancedrefused
/learncontrolHermesCLI._handle_learn_commandslash.execslash.execrefused
/logincontrolHermesCLI._handle_login_commandslash.execunavailable: settingsrefused
/loop (/proactive)controlHermesCLI._handle_loop_commandslash.execslash.execrefused
/memoryread (bare / pending)HermesCLI._handle_memory_commandslash.execslash.execrefused
/moacontrolHermesCLI._cmd_moaslash.execslash.execrefused
/modelrefusedHermesCLI._handle_model_switchcanonical routepicker: modelsession.mutate model
/new (/reset)refusedHermesCLI._cmd_newlocalaction: newrefused
/paletterefusedHermesCLI._open_command_paletteslash.exec: refusedslash.exec: refusedrefusedclient-local (cli_only)
/pasterefusedHermesCLI._handle_paste_commandlocalunavailable: terminalrefusedclient-local (cli_only)
/pauserefusedmessaging-only: unknown commandslash.exec: refusedslash.exec: refusedrefusedmessaging-only
/personalitycontrolHermesCLI._handle_personality_commandcanonical routeslash.execrefusedper-session setting (gateway handler)
/petrefusedHermesCLI._handle_pet_commandslash.execaction: petrefusedclient-local (cli_only)
/plancontrolHermesCLI._handle_plan_commandslash.execslash.execrefused
/platformrefusedmessaging-only: unknown commandslash.exec: refusedslash.exec: refusedrefusedmessaging adapters; pause/resume mutate them
/platforms (/gateway)readHermesCLI._show_gateway_statusslash.execunavailable: terminalrefusedclient-local (cli_only)
/pluginsrefusedHermesCLI._cmd_pluginsslash.execunavailable: terminalrefusedclient-local (cli_only)
/profilereadHermesCLI._handle_profile_commandslash.execaction: profilerefused
/prompt (/compose)refusedHermesCLI._handle_prompt_compose_commandlocalslash.exec: refusedrefusedclient-local (cli_only)
/queue (/q)refusedHermesCLI._cmd_queuelocalaction: queuerefused
/quit (/exit)refusedHermesCLI._cmd_exitlocalunavailable: terminalrefusedclient-local (cli_only)
/reasoningcontrolHermesCLI._handle_reasoning_commandcanonical routeaction: reasoningrefusedper-session setting (gateway handler)
/redrawrefusedHermesCLI._cmd_redrawlocalunavailable: terminalrefusedclient-local (cli_only)
/refinecontrolHermesCLI._handle_refine_commandslash.execslash.execrefused
/reloadrefusedHermesCLI._cmd_reloadcanonical routeunavailable: terminalrefusedclient-local (cli_only)
/reload-mcp (/reload_mcp)refusedHermesCLI._confirm_and_reload_mcprefused: not available yetunavailable: advancedrefused
/reload-skills (/reload_skills)refusedHermesCLI._cmd_reload_skillscommands.catalog, skills.reloadunavailable: advancedrefused
/restartrefusedmessaging-only: unknown commandslash.exec: refusedunavailable: terminalrefusedmessaging-only
/resumerefusedHermesCLI._handle_resume_commandlocalpicker: sessionrefusedswitches the messaging chat's session; local clients resume by id
/retryrefusedHermesCLI._cmd_retrycanonical routeaction: retryrefused
/reviewcontrolHermesCLI._handle_review_commandslash.execslash.execrefused
/rollbackrefusedHermesCLI._handle_rollback_commandrollback.diff, rollback.list, rollback.restoreslash.exec: refusedrefusedrestores filesystem checkpoints
/saverefusedHermesCLI.save_conversationsession.saverpc session.saverefusedwrites an export file on the gateway host
/sessionsrefusedHermesCLI._handle_sessions_commandlocalpicker: sessionrefusedmessaging origin-scoped listing (/sessions all needs a messaging admin)
/sethome (/set-home)refusedmessaging-only: unknown commandslash.exec: refusedunavailable: terminalrefusedmessaging-only
/skillsread (bare/pending/diff; approve/reject/approval control; hub refused)HermesCLI._cmd_skillsslash.exec; sidecar: skills.manageslash.execrefusedclient-local (cli_only)
/skinrefusedHermesCLI._handle_skin_commandconfig.get, config.setaction: skinrefusedclient-local (cli_only)
/snapshot (/snap)refusedHermesCLI._handle_snapshot_commandslash.exec: refusedunavailable: terminalrefusedclient-local (cli_only)
/startrefusedmessaging-only: unknown commandslash.exec: refusedslash.exec: refusedrefusedmessaging-only
/statusreadHermesCLI._show_session_statuscanonical routeslash.exec (rpc fallback)refusedTUI session: main's Hermes TUI Status
/statusbar (/sb)refusedHermesCLI._cmd_statusbarlocal (preference not saved)unavailable: terminalrefusedclient-local (cli_only)
/steer (/s)refusedHermesCLI._cmd_steercanonical routeaction: steerrefused
/stoprefusedHermesCLI._handle_stop_commandcanonical routeaction: stoprefused
/subgoalcontrolHermesCLI._handle_subgoal_commandslash.execslash.execrefused
/subscription (/upgrade)refusedHermesCLI._show_subscriptionsidecar: subscription.stateslash.exec: refusedrefusedclient-local (cli_only)
/suggestions (/suggest)read (bare only)HermesCLI._handle_suggestions_commandslash.execslash.execrefused
/timestamps (/ts)refusedHermesCLI._handle_timestamps_commandslash.exec: refusedslash.exec: refusedrefusedclient-local (cli_only)
/titlecontrolHermesCLI._cmd_titlecanonical routeaction: titlerefused
/toolsrefusedHermesCLI._handle_tools_commandcanonical routeslash.exec: refusedrefusedclient-local (cli_only)
/toolsetsreadHermesCLI.show_toolsetsslash.execunavailable: terminalrefusedclient-local (cli_only)
/topicrefusedmessaging-only: unknown commandslash.exec: refusedslash.exec: refusedrefusedmessaging-only
/topupreadHermesCLI._show_billingsidecar: billing.stateslash.execrefused
/undorefusedHermesCLI._cmd_undocanonical routeaction: undorefused
/updaterefusedHermesCLI._cmd_updatelocalunavailable: terminalrefused
/usageread (bare only (reset refused))HermesCLI._handle_usage_commandcanonical routeslash.execrefused
/verbosecontrolHermesCLI._toggle_verboseconfig.setunavailable: terminalrefusedper-session setting (gateway handler)
/version (/v)readHermesCLI._cmd_versionslash.execslash.execrefused
/voicecontrolHermesCLI._handle_voice_commandcanonical routeunavailable: composer-voicerefusedper-session setting (gateway handler)
/wakerefusedHermesCLI._handle_wake_commandlocalaction: wakerefusedclient-local (cli_only)
/whoamireadHermesCLI._handle_whoami_commandslash.execslash.execrefused
/worktreerefusedHermesCLI._handle_worktree_commandslash.exec: refusedslash.exec: refusedrefusedclient-local (cli_only)
/yolocontrolHermesCLI._toggle_yoloconfig.setaction: yolorefusedper-session setting (gateway handler)