From daa4a5acdd20c3139f51023f46b80fff894891a5 Mon Sep 17 00:00:00 2001 From: Teknium <127238744+teknium1@users.noreply.github.com> Date: Sun, 5 Apr 2026 11:46:13 -0700 Subject: [PATCH] feat: add docs links to setup wizard sections (#5283) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each setup step now shows a link to the relevant docs page: - Model & Provider → integrations/providers - Terminal Backend → developer-guide/environments - Agent Settings → user-guide/configuration - Messaging Platforms → user-guide/messaging (overview) - Telegram, Discord, Matrix, Mattermost, WhatsApp → per-platform guides - Tools → user-guide/features/tools Existing Slack and Webhook URLs migrated to shared _DOCS_BASE constant. --- hermes_cli/setup.py | 20 +++++++++++++++++--- hermes_cli/tools_config.py | 1 + 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/hermes_cli/setup.py b/hermes_cli/setup.py index 201c7b54a..e3b528411 100644 --- a/hermes_cli/setup.py +++ b/hermes_cli/setup.py @@ -31,6 +31,8 @@ logger = logging.getLogger(__name__) PROJECT_ROOT = Path(__file__).parent.parent.resolve() +_DOCS_BASE = "https://hermes-agent.nousresearch.com/docs" + def _model_config_dict(config: Dict[str, Any]) -> Dict[str, Any]: current_model = config.get("model") @@ -900,6 +902,7 @@ def setup_model_provider(config: dict): print_header("Inference Provider") print_info("Choose how to connect to your main chat model.") + print_info(f" Guide: {_DOCS_BASE}/integrations/providers") print() # Delegate to the shared hermes model flow — handles provider picker, @@ -1311,6 +1314,7 @@ def setup_terminal_backend(config: dict): print_header("Terminal Backend") print_info("Choose where Hermes runs shell commands and code.") print_info("This affects tool execution, file access, and isolation.") + print_info(f" Guide: {_DOCS_BASE}/developer-guide/environments") print() current_backend = config.get("terminal", {}).get("backend", "local") @@ -1652,6 +1656,8 @@ def setup_agent_settings(config: dict): # ── Max Iterations ── print_header("Agent Settings") + print_info(f" Guide: {_DOCS_BASE}/user-guide/configuration") + print() current_max = get_env_value("HERMES_MAX_ITERATIONS") or str( config.get("agent", {}).get("max_turns", 90) @@ -1819,6 +1825,7 @@ def setup_gateway(config: dict): """Configure messaging platform integrations.""" print_header("Messaging Platforms") print_info("Connect to messaging platforms to chat with Hermes from anywhere.") + print_info(f" All platforms: {_DOCS_BASE}/user-guide/messaging") print() # ── Telegram ── @@ -1830,6 +1837,8 @@ def setup_gateway(config: dict): if not existing_telegram and prompt_yes_no("Set up Telegram bot?", False): print_info("Create a bot via @BotFather on Telegram") + print_info(f" Full guide: {_DOCS_BASE}/user-guide/messaging/telegram") + print() token = prompt("Telegram bot token", password=True) if token: save_env_value("TELEGRAM_BOT_TOKEN", token) @@ -1914,6 +1923,8 @@ def setup_gateway(config: dict): if not existing_discord and prompt_yes_no("Set up Discord bot?", False): print_info("Create a bot at https://discord.com/developers/applications") + print_info(f" Full guide: {_DOCS_BASE}/user-guide/messaging/discord") + print() token = prompt("Discord bot token", password=True) if token: save_env_value("DISCORD_BOT_TOKEN", token) @@ -2034,7 +2045,7 @@ def setup_gateway(config: dict): ) print() print_info( - " Full guide: https://hermes-agent.nousresearch.com/docs/user-guide/messaging/slack/" + f" Full guide: {_DOCS_BASE}/user-guide/messaging/slack" ) print() bot_token = prompt("Slack Bot Token (xoxb-...)", password=True) @@ -2085,6 +2096,7 @@ def setup_gateway(config: dict): print_info("Works with any Matrix homeserver (Synapse, Conduit, Dendrite, or matrix.org).") print_info(" 1. Create a bot user on your homeserver, or use your own account") print_info(" 2. Get an access token from Element, or provide user ID + password") + print_info(f" Full guide: {_DOCS_BASE}/user-guide/messaging/matrix") print() homeserver = prompt("Homeserver URL (e.g. https://matrix.example.org)") if homeserver: @@ -2189,6 +2201,7 @@ def setup_gateway(config: dict): print_info("Works with any self-hosted Mattermost instance.") print_info(" 1. In Mattermost: Integrations → Bot Accounts → Add Bot Account") print_info(" 2. Copy the bot token") + print_info(f" Full guide: {_DOCS_BASE}/user-guide/messaging/mattermost") print() mm_url = prompt("Mattermost server URL (e.g. https://mm.example.com)") if mm_url: @@ -2238,6 +2251,7 @@ def setup_gateway(config: dict): if not existing_whatsapp and prompt_yes_no("Set up WhatsApp?", False): print_info("WhatsApp connects via a built-in bridge (Baileys).") print_info("Requires Node.js. Run 'hermes whatsapp' for guided setup.") + print_info(f" Full guide: {_DOCS_BASE}/user-guide/messaging/whatsapp") print() if prompt_yes_no("Enable WhatsApp now?", True): save_env_value("WHATSAPP_ENABLED", "true") @@ -2265,7 +2279,7 @@ def setup_gateway(config: dict): ) print() print_info( - " Full guide: https://hermes-agent.nousresearch.com/docs/user-guide/messaging/webhooks/" + f" Full guide: {_DOCS_BASE}/user-guide/messaging/webhooks" ) print() @@ -2296,7 +2310,7 @@ def setup_gateway(config: dict): " Route configuration guide:" ) print_info( - " https://hermes-agent.nousresearch.com/docs/user-guide/messaging/webhooks/#configuring-routes" + f" {_DOCS_BASE}/user-guide/messaging/webhooks#configuring-routes" ) print() print_info(" Open config in your editor: hermes config edit") diff --git a/hermes_cli/tools_config.py b/hermes_cli/tools_config.py index 1a0b30670..9c2088b1d 100644 --- a/hermes_cli/tools_config.py +++ b/hermes_cli/tools_config.py @@ -1336,6 +1336,7 @@ def tools_command(args=None, first_install: bool = False, config: dict = None): print(color("⚕ Hermes Tool Configuration", Colors.CYAN, Colors.BOLD)) print(color(" Enable or disable tools per platform.", Colors.DIM)) print(color(" Tools that need API keys will be configured when enabled.", Colors.DIM)) + print(color(" Guide: https://hermes-agent.nousresearch.com/docs/user-guide/features/tools", Colors.DIM)) print() # ── First-time install: linear flow, no platform menu ──