Simplify CLI with Verb-First Commands #99
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.

This PR implements a major UX improvement to the VoiceMode CLI by introducing a consistent, verb-first command structure.
🔍 Problem
The current CLI has inconsistent command patterns that create confusion:
This inconsistency makes commands hard to remember and creates a sometimes difficult UX.
✨ Solution
Introduced a unified, verb-first command structure that works consistently across all services:
Why Verb-First?
voicemode start whisper--help📊 Changes
File Modified
voice_mode/cli.py: +240 lines (8 new commands + deprecation warnings)New Commands Added (8)
All commands accept
whisper,kokoro, orlivekitas the service argument:voicemode start <service>- Start a voice servicevoicemode stop <service>- Stop a voice servicevoicemode restart <service>- Restart a voice servicevoicemode status [service]- Show all services or specific servicevoicemode enable <service>- Enable service at boot/loginvoicemode disable <service>- Disable service from boot/loginvoicemode logs <service>- View service logs with optional line count (--lines/-n)voicemode health <service>- Check service health endpointSpecial Features
statuscommand enhancement: Can now show all services at once!# New capability: see all services $ voicemode status VoiceMode Service Status ================================================== WHISPER: ✅ Whisper is running locally PID: 93773 KOKORO: ✅ Kokoro is running locally PID: 93805 LIVEKIT: ✅ Livekit is running locally PID: 984healthcommand: Direct health endpoint checks with detailed outputImplementation Details
['whisper', 'kokoro', 'livekit'])-h/--helpflagsasyncio.run()for async tool functionsBackward Compatibility
All old commands still work with helpful deprecation warnings:
$ voicemode kokoro start ⚠️ Deprecated: Use 'voicemode start kokoro' instead ✅ Kokoro service started23 commands updated with deprecation warnings:
voicemode kokoro <action>)voicemode whisper service <action>)voicemode livekit <action>)Each warning uses
click.secho()with yellow text output to stderr, making it visible but non-intrusive.Unchanged Commands
Service-specific commands remain under their service groups:
voicemode whisper model <name>- Whisper model managementvoicemode whisper install- Whisper installationvoicemode whisper uninstall- Whisper uninstallationvoicemode kokoro install- Kokoro installation (with unique options)voicemode kokoro uninstall- Kokoro uninstallationvoicemode livekit frontend ...- LiveKit frontend managementvoicemode livekit install- LiveKit installationvoicemode livekit uninstall- LiveKit uninstallation🎬 Before/After Comparison
Before
After
📈 Impact
User Experience Improvements
--helpoutputstatuscommand can now show all services at onceCode Changes
🔄 Migration Path
Users can migrate gradually:
🧪 Testing
All commands tested and verified:
🚀 Next Steps
After this PR is merged:
📸 Command Examples
New Help Output
Deprecation Warning Example
$ voicemode kokoro start ⚠️ Deprecated: Use 'voicemode start kokoro' instead ✅ Kokoro service startedNew Status Command (All Services)
Review Focus Areas: