You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Overhauls the hermes setup wizard to reduce friction for new users. The setup now offers a "Quick setup" path that gets users from zero to chatting in three steps (provider → model → messaging), applies sensible defaults for everything else, and launches directly into hermes chat on completion. Also improves the Nous Portal subscription flow, redesigns the provider selector, and masks API key inputs.
Related Issue
Fixes #
Type of Change
🐛 Bug fix (non-breaking change that fixes an issue)
✨ New feature (non-breaking change that adds functionality)
🔒 Security fix
📝 Documentation update
✅ Tests (adding or improving test coverage)
♻️ Refactor (no behavior change)
🎯 New skill (bundled or hub)
Changes Made
Setup Wizard — Quick/Full split
Added "Quick setup" vs "Full setup" choice for first-time users (hermes_cli/setup.py)
Full setup runs all sections as before (provider, terminal, agent settings, gateway, tools)
Added _run_first_time_quick_setup() orchestrator and _apply_default_agent_settings() helper
Removed redundant "Use recommended defaults / Customize" prompt inside setup_agent_settings (unnecessary now that full setup users have already opted in)
Launch chat after setup
Added _offer_launch_chat() — prompts "Launch hermes chat now? [Y/n]" at the end of both quick and full setup paths (hermes_cli/setup.py)
Launches cmd_chat inline with a clean args namespace so users don't have to re-type hermes chat
Messaging gateway in quick setup
Added optional messaging gateway step to quick setup with "Set up messaging now (recommended)" / "Skip — set up later" choice (hermes_cli/setup.py)
Nous Portal subscription polling
Modified _nous_device_code_login() to catch subscription_required errors and return partial auth state instead of raising (hermes_cli/auth.py)
Added _wait_for_subscription() — polls for subscription activation with a real-time 1-second countdown timer, checks the API every 10 seconds, 5-minute timeout (hermes_cli/auth.py)
Updated _login_nous() to call the subscription poller when the flag is set
Provider selector redesign
Split providers into top_providers (6 items) and extended_providers behind a "More providers..." option (hermes_cli/main.py)
Nous Portal is now the Terminal tool #1 default provider for fresh installs
Changed fallback active from "openrouter" to None so fresh installs don't falsely show a "currently active" provider
Replaced simple_term_menu usage with _curses_prompt_choice for consistent UI
Active providers from the extended list are automatically promoted to the top-level menu
API key masking
Replaced input() with getpass.getpass() for all API key/token prompts across OpenRouter, Anthropic, custom endpoint, Copilot, and generic API key provider flows (hermes_cli/main.py)
Messaging gateway UX
Replaced sequential Y/N prompts with a prompt_checklist multi-select for messaging platforms (hermes_cli/setup.py)
Already-configured platforms are pre-selected and labeled "(configured)"
source .venv/bin/activate activates the Python virtual environment so that hermes commands use this local checkout instead of any globally installed version.
4. Verify installation
hermes doctor
5. Test the setup wizard
For a fresh install experience, remove existing config first:
rm -f ~/.hermes/config.yaml ~/.hermes/.env
Then run:
hermes setup
What to verify
#
Area
What to check
1
Quick/Full choice
First screen asks "Quick setup" (default) vs "Full setup"
2
Provider selector
Nous Portal is first in the list and selected by default (no "currently active" on fresh install)
3
Top 6 + More
Only 6 providers shown initially; "More providers..." expands the rest
4
API key masking
Choosing OpenRouter (or any API key provider) — key input is hidden as you type
5
Nous Portal sub flow
Choose Nous Portal without a subscription — countdown timer ticks every second, checks every ~10s, times out after 5 min
6
Messaging gateway
After provider/model, prompted "Set up messaging now (recommended)" or "Skip"
7
Launch chat
After setup completes, prompted "Launch hermes chat now? [Y/n]" — pressing Enter drops into chat
8
Full setup path
Go back, re-run hermes setup, choose "Full setup" — all sections appear (provider, terminal, agent settings, gateway, tools)
This PR contains patterns commonly associated with supply chain attacks. This does not mean the PR is malicious — but these patterns require careful human review before merging.
⚠️ WARNING: Install hook files modified
These files can execute code during package installation or interpreter startup.
Files:
hermes_cli/setup.py
Automated scan triggered by supply-chain-audit. If this is a false positive, a maintainer can approve after manual review.
This PR contains patterns commonly associated with supply chain attacks. This does not mean the PR is malicious — but these patterns require careful human review before merging.
⚠️ WARNING: Install hook files modified
These files can execute code during package installation or interpreter startup.
Files:
hermes_cli/setup.py
Automated scan triggered by supply-chain-audit. If this is a false positive, a maintainer can approve after manual review.
This PR contains patterns commonly associated with supply chain attacks. This does not mean the PR is malicious — but these patterns require careful human review before merging.
⚠️ WARNING: Install hook files modified
These files can execute code during package installation or interpreter startup.
Files:
hermes_cli/setup.py
Automated scan triggered by supply-chain-audit. If this is a false positive, a maintainer can approve after manual review.
austinpickett
changed the title
fix: re-order providers,Quick Install, subscription polling
fix: re-order providers, Quick Install
Apr 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do?
Overhauls the
hermes setupwizard to reduce friction for new users. The setup now offers a "Quick setup" path that gets users from zero to chatting in three steps (provider → model → messaging), applies sensible defaults for everything else, and launches directly intohermes chaton completion. Also improves the Nous Portal subscription flow, redesigns the provider selector, and masks API key inputs.Related Issue
Fixes #
Type of Change
Changes Made
Setup Wizard — Quick/Full split
hermes_cli/setup.py)_run_first_time_quick_setup()orchestrator and_apply_default_agent_settings()helpersetup_agent_settings(unnecessary now that full setup users have already opted in)Launch chat after setup
_offer_launch_chat()— prompts "Launch hermes chat now? [Y/n]" at the end of both quick and full setup paths (hermes_cli/setup.py)cmd_chatinline with a clean args namespace so users don't have to re-typehermes chatMessaging gateway in quick setup
hermes_cli/setup.py)Nous Portal subscription polling
_nous_device_code_login()to catchsubscription_requirederrors and return partial auth state instead of raising (hermes_cli/auth.py)_wait_for_subscription()— polls for subscription activation with a real-time 1-second countdown timer, checks the API every 10 seconds, 5-minute timeout (hermes_cli/auth.py)_login_nous()to call the subscription poller when the flag is setProvider selector redesign
top_providers(6 items) andextended_providersbehind a "More providers..." option (hermes_cli/main.py)activefrom"openrouter"toNoneso fresh installs don't falsely show a "currently active" providersimple_term_menuusage with_curses_prompt_choicefor consistent UIAPI key masking
input()withgetpass.getpass()for all API key/token prompts across OpenRouter, Anthropic, custom endpoint, Copilot, and generic API key provider flows (hermes_cli/main.py)Messaging gateway UX
prompt_checklistmulti-select for messaging platforms (hermes_cli/setup.py)How to Test
QA Testing: Setup Wizard Improvements
Prerequisites
uvpackage manager (pip install uvorcurl -LsSf https://astral.sh/uv/install.sh | sh)1. Back up existing Hermes config (if you have one)
Skip this if you've never used Hermes before.
2. Clone the branch
git clone -b fix/various-qa https://github.com/NousResearch/hermes-agent.git cd hermes-agentOr if you already have the repo:
cd hermes-agent git fetch origin git checkout fix/various-qa git pull3. Install dependencies
4. Verify installation
5. Test the setup wizard
For a fresh install experience, remove existing config first:
Then run:
What to verify
hermes setup, choose "Full setup" — all sections appear (provider, terminal, agent settings, gateway, tools)6. Restore your config (if you backed up)
Platform
Please note which platform you tested on:
Checklist
Code
fix(scope):,feat(scope):, etc.)pytest tests/ -qand all tests passDocumentation & Housekeeping
docs/, docstrings) — or N/Acli-config.yaml.exampleif I added/changed config keys — or N/ACONTRIBUTING.mdorAGENTS.mdif I changed architecture or workflows — or N/AScreenshots / Logs