Skip to content

feat: modular setup wizard with section subcommands and tool-first UX#567

Closed
teknium1 wants to merge 3 commits intomainfrom
feat/modular-setup-wizard
Closed

feat: modular setup wizard with section subcommands and tool-first UX#567
teknium1 wants to merge 3 commits intomainfrom
feat/modular-setup-wizard

Conversation

@teknium1
Copy link
Contributor

@teknium1 teknium1 commented Mar 7, 2026

Summary

Restructures the monolithic hermes setup wizard into independently-runnable sections with a category-first tool configuration experience.

What Changed

Modular Section Architecture

The wizard is now broken into 5 standalone sections, each runnable independently:

hermes setup           # Full wizard or returning-user menu
hermes setup model     # Model & Provider configuration
hermes setup terminal  # Terminal backend selection
hermes setup gateway   # Messaging platforms (Telegram, Discord, etc.)
hermes setup tools     # Tool configuration (new UX!)
hermes setup agent     # Agent settings (iterations, compression, reset)

Returning User Menu

Existing users now see a menu instead of the flat Quick/Full/Skip choice:

What would you like to do?
  → Quick Setup — configure missing items only
    Full Setup — reconfigure everything
    ─────────────────────────────
    Model & Provider
    Terminal Backend
    Messaging Platforms (Gateway)
    Tools
    Agent Settings
    ─────────────────────────────
    Exit

Tool-First UX (the big change)

Before: Flat checklist showing providers as separate tools:

  • 🎤 Voice Transcription & TTS (OpenAI Whisper + TTS)
  • 🗣️ Premium Text-to-Speech (ElevenLabs)
  • (Edge TTS not shown at all!)

After: Category-first approach — pick a tool type, then choose a provider:

Which tools would you like to enable?
  [✓] 🎤 Text-to-Speech — Convert text to voice messages ✓
  [ ] 🔍 Web Search & Extract — Search the web and extract content
  [ ] 🎨 Image Generation — Generate images from text prompts
  ...

Text-to-Speech — Choose a provider:
  → Microsoft Edge TTS (Free — no API key needed)
    OpenAI TTS (Premium — high quality voices)
    ElevenLabs (Premium — most natural voices)

New Tools Added to Setup

  • Self-hosted Firecrawl — as a separate Web Search provider option
  • Home Assistant — Smart home integration with HASS_TOKEN + HASS_URL

7 Tool Categories with Providers:

Category Providers
Text-to-Speech Edge TTS (Free), OpenAI, ElevenLabs
Web Search & Extract Firecrawl Cloud, Firecrawl Self-Hosted
Image Generation FAL.ai
Browser Automation Browserbase
Smart Home Home Assistant
RL Training Tinker/Atropos
GitHub Integration GitHub PAT

Files Changed

  • hermes_cli/setup.py — Full restructure (+1005, -820)
  • hermes_cli/main.py — Add section positional arg to setup parser

Testing

  • All 2013 tests pass
  • All section functions importable
  • Argparse help shows new subcommands correctly
  • No breaking changes to config.yaml or .env format

teknium1 added 3 commits March 6, 2026 17:46
Restructure the monolithic hermes setup wizard into independently-runnable
sections with a category-first tool configuration experience.

Changes:
- Break setup into 5 sections: model, terminal, gateway, tools, agent
- Each section is a standalone function, runnable individually via
  'hermes setup model', 'hermes setup terminal', etc.
- Returning users get a menu: Quick Setup / Full Setup / individual sections
- First-time users get a guided walkthrough of all sections

Tool Configuration UX overhaul:
- Replace flat API key checklist with category-first approach
- Show tool types (TTS, Web Search, Image Gen, etc.) as top-level items
- Within each category, let users pick a provider:
  - TTS: Microsoft Edge (Free), OpenAI, ElevenLabs
  - Web: Firecrawl Cloud, Firecrawl Self-Hosted
  - Image Gen: FAL.ai
  - Browser: Browserbase
  - Smart Home: Home Assistant
  - RL Training: Tinker/Atropos
  - GitHub: Personal Access Token
- Shows configured status on each tool and provider
- Only prompts for API keys after provider selection

Also:
- Add section argument to setup argparse parser in main.py
- Update summary to show new section commands
- Add self-hosted Firecrawl and Home Assistant to tool setup
- All 2013 tests pass
simple_term_menu miscalculates string widths when labels contain
ANSI escape codes (from color()) or em dashes, causing duplicated
and garbled lines on arrow key navigation.

Replace color() status indicators with plain text [configured]/[active]
and em dashes with regular dashes in all prompt_choice/prompt_checklist
labels.
Both 'hermes tools' and 'hermes setup tools' now use the same unified
flow in tools_config.py:

1. Select platform (CLI, Telegram, Discord, etc.)
2. Toggle all 18 toolsets on/off in checklist
3. Newly enabled tools that need API keys → provider-aware config
   (e.g., TTS shows Edge/OpenAI/ElevenLabs picker)
4. Already-configured tools that stay enabled → silent, no prompts
5. Menu option: 'Reconfigure an existing tool' for updating
   providers or API keys on tools that are already set up

Key changes:
- Move TOOL_CATEGORIES, provider config, and post-setup hooks from
  setup.py to tools_config.py
- Replace flat _check_and_prompt_requirements() with provider-aware
  _configure_toolset() that uses TOOL_CATEGORIES
- Add _reconfigure_tool() flow for updating existing configs
- setup.py's setup_tools() now delegates to tools_command()
- tools_command() menu adds 'Reconfigure' option alongside platforms
- Only prompt for API keys on tools that are NEWLY toggled on AND
  don't already have keys configured

No breaking changes. All 2013 tests pass.
@teknium1 teknium1 closed this in 99bd69b Mar 7, 2026
@teknium1
Copy link
Contributor Author

teknium1 commented Mar 7, 2026

Merged in commit 99bd69b. Modular setup wizard with 5 standalone sections (hermes setup model|terminal|gateway|tools|agent), returning-user menu, tool-first provider UX, unified tools config, and dict-format model config fix. All 2064 tests pass.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant