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 (nedura 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.

104 registry commands: 29 control, 19 read, 56 refused.

CommandGateway (slash.exec)Classic CLIInkDesktopACPNotes
/agents (/tasks)refusedHermesCLI._handle_agents_commanddelegation.pauseaction: agentsslash.exec: refusedgateway-wide: lists every chat's running agents and the process's async jobs
/approvalscontrolHermesCLI._handle_approvals_commandslash.execslash.execslash.execper-session setting (gateway handler)
/approvecontrolmessaging-only: unknown commandslash.execslash.execslash.execmessaging-only
/autoprunecontrolHermesCLI._handle_autoprune_commandslash.execslash.execslash.exec
/batteryrefusedHermesCLI._handle_battery_commandsidecar: system.battery (preference not saved)slash.exec: refusedslash.exec: refusedclient-local (cli_only)
/bgrefusedHermesCLI._handle_background_commandprompt.backgroundaction: backgroundslash.exec: refused
/blueprint (/bp)controlHermesCLI._handle_blueprint_commandslash.execslash.execslash.exec
/branch (/fork)refusedHermesCLI._handle_branch_commandcanonical routeaction: branchACP fork_session
/browserrefusedHermesCLI._handle_browser_commandsidecar: browser.manageaction: browserslash.exec: refusedclient-local (cli_only)
/btwrefusedHermesCLI._handle_btw_commandprompt.btwaction: btwslash.exec: refused
/bundlesreadHermesCLI._handle_bundles_commandslash.execslash.execslash.exec
/busycontrolHermesCLI._handle_busy_commandcanonical routeunavailable: terminalslash.execper-session setting (gateway handler)
/clearrefusedHermesCLI._cmd_clearlocalaction: newsession.mutate resetclient-local (cli_only)
/codex-runtime (/codex_runtime)controlHermesCLI._handle_codex_runtimeslash.execslash.execslash.execper-session setting (gateway handler)
/commandsreadmessaging-only: unknown commandslash.execaction: helpslash.execmessaging-only
/compress (/compact)refusedHermesCLI._manual_compresscanonical routeaction: compresssession.mutate compress
/configrefusedHermesCLI.show_configcanonical routeaction: configslash.exec: refusedclient-local (cli_only)
/context (/ctx)readHermesCLI._show_context_breakdownslash.execslash.execslash.execTUI session: main's live /context with the category table
/copyrefusedHermesCLI._handle_copy_commandlocalunavailable: terminalslash.exec: refusedclient-local (cli_only)
/cronread (bare / list; add/edit/pause/resume/run/remove control, from the classic CLI's own command socket only)HermesCLI._handle_cron_commandslash.execunavailable: terminalslash.execclient-local (cli_only)
/curatorcontrolHermesCLI._handle_curator_commandslash.execunavailable: advancedslash.exec
/debugcontrolHermesCLI._handle_debug_commandslash.execslash.execslash.execuploads logs to a public paste
/denycontrolmessaging-only: unknown commandslash.execslash.execslash.execmessaging-only
/diffreadHermesCLI._handle_diff_commandslash.execslash.execslash.exec
/discardrefusedHermesCLI._handle_discard_commandslash.exec: refusedslash.exec: refusedprompt.resolve_unknown
/egresscontrolHermesCLI._cmd_egressslash.execslash.execslash.exec
/exportrefusedHermesCLI._handle_export_commandslash.exec: refusedaction: exportslash.exec: refusedclient-local (cli_only)
/fastcontrolHermesCLI._handle_fast_commandconfig.get, config.setunavailable: advancedslash.execper-session setting (gateway handler)
/focusrefusedHermesCLI._handle_focus_commandlocal (preference not saved)slash.exec: refusedslash.exec: refusedclient-local (cli_only)
/footercontrolHermesCLI._handle_footer_commandslash.execunavailable: terminalslash.execper-session setting (gateway handler)
/goalcontrolHermesCLI._handle_goal_commandslash.execslash.execslash.exec
/handoffrefusedHermesCLI._handle_handoff_commandslash.exec: refusedaction: handoffslash.exec: refusedclient-local (cli_only)
/hatch (/generate-pet)refusedHermesCLI._handle_hatch_commandslash.exec: refusedaction: hatchslash.exec: refusedclient-local (cli_only)
/heartbeat (/hb)controlHermesCLI._handle_heartbeat_commandslash.execslash.execslash.exec
/helpreadHermesCLI._cmd_helplocalaction: helplocal
/historyrefusedHermesCLI.show_historylocalaction: historyslash.exec: refusedclient-local (cli_only)
/imagerefusedHermesCLI._handle_image_commandlocalunavailable: terminalslash.exec: refusedclient-local (cli_only)
/importrefusedHermesCLI._handle_import_commandslash.exec: refusedaction: importslash.exec: refusedclient-local (cli_only)
/indicatorrefusedHermesCLI._handle_indicator_commandconfig.get, config.setunavailable: terminalslash.exec: refusedclient-local (cli_only)
/initcontrolHermesCLI._handle_init_commandslash.execslash.execslash.exec
/insightsreadHermesCLI._show_insightsslash.execunavailable: advancedslash.exec
/journey (/learning, /memory-graph)refusedHermesCLI._handle_journey_commandlocalaction: journeyslash.exec: refusedclient-local (cli_only)
/kanbanread (list/show/stats/assignees/context/runs/log/diagnostics)HermesCLI._handle_kanban_commandslash.execunavailable: advancedslash.exec
/learncontrolHermesCLI._handle_learn_commandslash.execslash.execslash.exec
/logincontrolHermesCLI._handle_login_commandslash.execunavailable: settingsslash.exec
/loop (/proactive)controlHermesCLI._handle_loop_commandslash.execslash.execslash.exec
/memoryread (bare / pending)HermesCLI._handle_memory_commandslash.execslash.execslash.exec
/moacontrolHermesCLI._cmd_moaslash.execslash.execslash.exec
/modelrefusedHermesCLI._handle_model_switchcanonical routepicker: modelsession.mutate model
/new (/reset)refusedHermesCLI._cmd_newlocalaction: newsession.mutate reset
/paletterefusedHermesCLI._open_command_paletteslash.exec: refusedaction: paletteslash.exec: refusedclient-local (cli_only)
/pasterefusedHermesCLI._handle_paste_commandlocalunavailable: terminalslash.exec: refusedclient-local (cli_only)
/pauserefusedmessaging-only: unknown commandslash.exec: refusedslash.exec: refusedslash.exec: refusedmessaging-only
/personalitycontrolHermesCLI._handle_personality_commandcanonical routeslash.execslash.execper-session setting (gateway handler)
/petrefusedHermesCLI._handle_pet_commandslash.execaction: petslash.exec: refusedclient-local (cli_only)
/plancontrolHermesCLI._handle_plan_commandslash.execslash.execslash.exec
/platformrefusedmessaging-only: unknown commandslash.exec: refusedslash.exec: refusedslash.exec: refusedmessaging adapters; pause/resume mutate them
/platforms (/gateway)readHermesCLI._show_gateway_statusslash.execunavailable: terminalslash.execclient-local (cli_only)
/pluginsrefusedHermesCLI._cmd_pluginsslash.execunavailable: terminalslash.exec: refusedclient-local (cli_only)
/profilereadHermesCLI._handle_profile_commandslash.execaction: profileslash.exec
/prompt (/compose)refusedHermesCLI._handle_prompt_compose_commandlocalslash.exec: refusedslash.exec: refusedclient-local (cli_only)
/queue (/q)refusedHermesCLI._cmd_queuelocalaction: queueprompt.submit
/quit (/exit)refusedHermesCLI._cmd_exitlocalunavailable: terminalslash.exec: refusedclient-local (cli_only)
/reasoningcontrolHermesCLI._handle_reasoning_commandcanonical routeaction: reasoningslash.execper-session setting (gateway handler)
/redrawrefusedHermesCLI._cmd_redrawlocalunavailable: terminalslash.exec: refusedclient-local (cli_only)
/refinecontrolHermesCLI._handle_refine_commandslash.execslash.execslash.exec
/reloadrefusedHermesCLI._cmd_reloadcanonical routeunavailable: terminalslash.exec: refusedclient-local (cli_only)
/reload-mcp (/reload_mcp)refusedHermesCLI._confirm_and_reload_mcpcanonical routeunavailable: advancedslash.exec: refused
/reload-skills (/reload_skills)refusedHermesCLI._cmd_reload_skillscommands.catalog, skills.reloadunavailable: advancedslash.exec: refused
/restartrefusedmessaging-only: unknown commandslash.exec: refusedunavailable: terminalslash.exec: refusedmessaging-only
/resumerefusedHermesCLI._handle_resume_commandlocalpicker: sessionslash.exec: refusedswitches the messaging chat's session; local clients resume by id
/retryrefusedHermesCLI._cmd_retrycanonical routeaction: retrysession.mutate rewind + resubmit
/reviewcontrolHermesCLI._handle_review_commandslash.execslash.execslash.exec
/rollbackrefusedHermesCLI._handle_rollback_commandrollback.diff, rollback.list, rollback.restoreaction: rollbackslash.exec: refusedrestores filesystem checkpoints
/saverefusedHermesCLI.save_conversationcanonical routeaction: saveslash.exec: refusedthe gateway handler writes its file on the gateway host; Desktop saves session.export text through its own dialog
/sessionsrefusedHermesCLI._handle_sessions_commandlocalpicker: sessionslash.exec: refusedmessaging origin-scoped listing (/sessions all needs a messaging admin)
/sethome (/set-home)refusedmessaging-only: unknown commandslash.exec: refusedunavailable: terminalslash.exec: refusedmessaging-only
/skillsread (bare/pending/diff; approve/reject/approval control; hub refused)HermesCLI._cmd_skillsslash.exec; sidecar: skills.manageslash.execslash.execclient-local (cli_only)
/skinrefusedHermesCLI._handle_skin_commandconfig.get, config.setaction: skinslash.exec: refusedclient-local (cli_only)
/snapshot (/snap)refusedHermesCLI._handle_snapshot_commandslash.exec: refusedunavailable: terminalslash.exec: refusedclient-local (cli_only)
/startrefusedmessaging-only: unknown commandslash.exec: refusedslash.exec: refusedslash.exec: refusedmessaging-only
/statusreadHermesCLI._show_session_statuscanonical routeslash.exec (rpc fallback)slash.execTUI session: main's Nedura TUI Status
/statusbar (/sb)refusedHermesCLI._cmd_statusbarlocal (preference not saved)unavailable: terminalslash.exec: refusedclient-local (cli_only)
/steer (/s)refusedHermesCLI._cmd_steercanonical routeaction: steersession.steer
/stoprefusedHermesCLI._handle_stop_commandcanonical routeaction: stopslash.exec: refused
/subgoalcontrolHermesCLI._handle_subgoal_commandslash.execslash.execslash.exec
/subscription (/upgrade)refusedHermesCLI._show_subscriptionsidecar: subscription.stateslash.exec: refusedslash.exec: refusedclient-local (cli_only)
/suggestions (/suggest)read (bare only)HermesCLI._handle_suggestions_commandslash.execslash.execslash.exec
/timestamps (/ts)refusedHermesCLI._handle_timestamps_commandconfig.setaction: timestampsslash.exec: refusedclient-local (cli_only)
/titlecontrolHermesCLI._cmd_titlecanonical routeaction: titlesession.mutate rename (bare: slash.exec)
/toolsrefusedHermesCLI._handle_tools_commandrefused: not available yetslash.exec: refusedsession.infoclient-local (cli_only)
/toolsetsreadHermesCLI.show_toolsetsslash.execunavailable: terminalslash.execclient-local (cli_only)
/topicrefusedmessaging-only: unknown commandslash.exec: refusedslash.exec: refusedslash.exec: refusedmessaging-only
/topupreadHermesCLI._show_billingsidecar: billing.stateslash.execslash.exec
/undorefusedHermesCLI._cmd_undocanonical routeaction: undosession.mutate rewind
/updaterefusedHermesCLI._cmd_updatelocalunavailable: terminalslash.exec: refused
/usageread (bare only (reset refused))HermesCLI._handle_usage_commandcanonical routeslash.execslash.exec
/verbosecontrolHermesCLI._toggle_verboseconfig.setunavailable: terminalslash.execper-session setting (gateway handler)
/version (/v)readHermesCLI._cmd_versionslash.execslash.execslash.exec
/voicecontrolHermesCLI._handle_voice_commandconfig.get, slash.exec; sidecar: voice.toggle; tts refusedunavailable: composer-voiceslash.execper-session setting (gateway handler)
/wakerefusedHermesCLI._handle_wake_commandlocalaction: wakeslash.exec: refusedclient-local (cli_only)
/whoamireadHermesCLI._handle_whoami_commandslash.execslash.execslash.exec
/worktreerefusedHermesCLI._handle_worktree_commandslash.exec: refusedunavailable: terminalslash.exec: refusedclient-local (cli_only)
/yolocontrolHermesCLI._toggle_yoloconfig.setaction: yoloslash.execper-session setting (gateway handler)