hermes-agent/hermes_cli
Andrew 105fbf6b7d feat(wake): client-capture wake word for remote desktop
Remote headless backends have no PortAudio mic, so "hey hermes" fails even
when openWakeWord is installed. Let the desktop stream 16 kHz int16 PCM via
wake.feed while detection stays server-side.

- wake_word.capture: auto|local|client (+ GUI client_capture prefer)
- WakeWordDetector external_audio queue + feed_audio API
- wake.feed RPC; wake.start/status report capture + frame_length
- Desktop getUserMedia feeder; stop on wake.detected, re-arm after voice
- Docs + unit tests (26 pass in tests/tools/test_wake_word.py)
2026-08-05 10:03:48 -06:00
..
dashboard_auth chore: remove unused imports and dead locals (ruff F401/F841 sweep) 2026-07-29 11:53:39 -07:00
observability Merge branch 'main' into feat/hermes-relay-tool-metrics 2026-08-04 12:43:38 -04:00
proxy rip out brew + pip/PyPI wheel support (#68217) 2026-07-22 16:51:01 -04:00
subcommands fix(pairing): keep GUI approvals off the code brute-force lockout 2026-07-29 17:51:40 -05:00
web_routers feat(profiles): REST export/import + extra_files overlay hook 2026-08-04 12:07:29 -06:00
__init__.py chore: release v0.20.0 (2026.8.3) 2026-08-03 09:57:23 -07:00
_early_recovery.py fix(update): test runs never mutate the live checkout — pytest-guard the marker and repair paths 2026-07-29 21:30:53 -07:00
_parser.py feat(kanban): let a task pin its own thinking depth 2026-08-01 16:09:56 -05:00
_scan_venv_blockers.py fix(desktop): use the canonical gateway matcher for the preflight exemption 2026-07-31 22:34:28 -07:00
_startup_fast.py refactor: single chokepoint for the pre-import version fast path 2026-08-02 21:13:12 +05:30
_subprocess_compat.py chore: suppress windows-footgun false positive on gated killpg 2026-08-04 17:33:36 -07:00
active_sessions.py fix(sessions): claim the cap slot on first turn, not on open 2026-07-28 12:11:52 -05:00
agent_import.py refactor(cli): review follow-ups for the config.yaml import guard 2026-08-02 14:55:32 +05:30
approval_mode.py feat(approvals): add cross-surface mode command 2026-07-26 21:13:03 -07:00
approvals_suggest.py feat(approvals): hermes approvals suggest — mine approval history into allowlist proposals 2026-07-26 17:49:03 -07:00
auth.py fix(minimax-oauth): read streamed error bodies inside the client context + real-transport tests 2026-08-03 17:38:13 +05:30
auth_commands.py fix(auth): make xAI OAuth pools multi-account resilient 2026-07-17 11:37:25 +05:30
azure_detect.py fix(security): secure Azure catalog probes 2026-07-11 12:28:55 +05:30
backup.py fix(backup): serialize and atomically publish snapshots 2026-08-03 23:48:55 +05:30
bang_shell.py feat(cli): ! shell mode — run a command without spending a model turn 2026-07-31 21:21:20 -07:00
banner.py fix(cli): route keyless first run into provider onboarding instead of a broken chat 2026-08-01 15:34:16 -07:00
blueprint_cmd.py
…
browser_connect.py fix(windows): native Windows correctness for CLI, gateway status, banner, and WSL browser paths 2026-07-29 23:16:18 -07:00
build_info.py
…
bundles.py
…
callbacks.py fix(approval): classify CLI/TUI approval timeouts separately from explicit denials 2026-08-02 20:21:59 -07:00
checkpoints.py fix(checkpoints): bind an empty orphan preview to an empty deletion allowlist 2026-07-24 16:01:06 -07:00
claw.py fix: add explicit UTF-8 encoding to all subprocess text=True calls (#53428) 2026-07-24 11:45:57 -07:00
cli_agent_setup_mixin.py fix(cli): persist YOLO mode across --resume 2026-08-02 20:30:06 -07:00
cli_billing_mixin.py chore: remove unused imports and dead locals (ruff F401/F841 sweep) 2026-07-29 11:53:39 -07:00
cli_commands_mixin.py feat(cli): /export and /import slash commands for profile sharing 2026-08-04 12:07:29 -06:00
cli_output.py
…
clipboard.py fix(cli): stop hard-wrapping streamed paragraphs; prefer OSC 52 over SSH 2026-07-29 08:42:16 -07:00
codex_models.py fix(codex): send ChatGPT-Account-Id on /models probes 2026-07-21 05:27:13 -07:00
codex_runtime_plugin_migration.py
…
codex_runtime_switch.py refactor(codex-runtime): tidy reapply-migration control flow 2026-07-01 23:51:54 +05:30
colors.py
…
commands.py feat(cli): /export and /import slash commands for profile sharing 2026-08-04 12:07:29 -06:00
completion.py
…
config.py fix(config): make get_env_value scope-aware — the last scope-blind credential reader 2026-08-01 16:42:51 -07:00
config_defaults.py feat(wake): client-capture wake word for remote desktop 2026-08-05 10:03:48 -06:00
config_migrations.py refactor: config auto-migration support floor at v12 + deprecated shim retirement 2026-07-29 16:44:31 -07:00
console_engine.py fix(console): handle string SystemExit code in _capture_output 2026-08-05 11:48:03 +05:30
container_boot.py fix(install): support non-pid-1 container entrypoints 2026-08-01 10:52:34 -07:00
context_switch_guard.py fix(cli): honor custom_providers in preflight shrink warning 2026-07-22 21:17:21 -07:00
copilot_auth.py test: harden cold-start regression tests + debug-log the env-var skip 2026-08-03 21:16:09 +05:30
credential_lifecycle.py fix(credentials): unified provider key delete/update across .env, auth.json, config.yaml (#67213) 2026-07-19 03:02:21 -07:00
cron.py feat(cron): user-owned model pins + cron.model fleet default 2026-07-28 11:52:47 -07:00
curator.py fix(curator): make the autonomous write policy consistent (#67140) 2026-07-25 19:27:17 -07:00
curses_ui.py fix(models): match bare Kimi Coding k3 when searching kimi 2026-07-26 21:22:40 -07:00
dashboard_procs.py refactor: extract dashboard process-hygiene helpers to dashboard_procs.py 2026-07-29 10:59:54 -07:00
dashboard_register.py fix(cli): correct stale `hermes auth login nous` hints to `hermes auth add nous` (#53929) 2026-06-27 21:30:37 -07:00
debug.py fix(debug): say where a client-side log lives instead of "(file not found)" (#78687) 2026-08-04 11:53:32 -06:00
default_soul.py fix(soul): installers seed the real default persona, upgrade legacy empty templates (#52246) 2026-06-24 18:56:26 -07:00
dep_ensure.py fix(runtime): resolve Hermes-managed Node and uv before bare PATH 2026-08-01 21:17:51 -04:00
diagnostics_upload.py feat(debug): drop dead confirm step from --nous upload (stateless NAS) 2026-06-30 17:29:23 -07:00
dingtalk_auth.py refactor(setup): route dependency installs through the canonical uv→pip→ensurepip ladder 2026-07-07 04:09:35 -07:00
doctor.py fix(cli): stabilize custom provider identities 2026-07-31 17:26:42 +05:30
dump.py feat(gateway): session activity watchdog, stall notify, compress timeout (#72424) 2026-08-02 16:16:36 -07:00
env_loader.py fix(env): make config.yaml authoritative for terminal.backend (#29186) 2026-08-02 18:21:58 -07:00
fallback_cmd.py refactor(fallback): single owner for backend identity and failure-scoped skips 2026-07-26 23:41:54 -07:00
fallback_config.py fix(auth): resolve fallback api keys through secret_scope, not raw env 2026-07-31 22:35:26 -07:00
focus_view.py feat(cli): /focus — reduced-output view with hidden-line recovery and status indicator 2026-07-26 18:10:34 -07:00
gateway.py fix(gateway): defer in-band restart until active turns finish (#77184) 2026-08-03 09:57:58 +05:30
gateway_enroll.py chore: remove unused imports and dead locals (ruff F401/F841 sweep) 2026-07-29 11:53:39 -07:00
gateway_windows.py fix(update): migrate legacy pythonw Windows gateway launchers to the hidden-console design 2026-07-26 17:50:54 -07:00
goals.py fix(goals): auto-pause goal loop on consecutive transport failures 2026-07-20 05:38:25 -07:00
gui_uninstall.py
…
hooks.py feat(hooks): outbound webhooks — push signed lifecycle events to external HTTP endpoints 2026-08-02 15:01:11 -07:00
init_command.py feat(cli): /init — generate or update AGENTS.md from a project scan 2026-07-26 17:46:29 -07:00
input_sanitize.py fix(input): strip bracketed-paste leaks before prompt persistence (#62557) 2026-07-15 07:39:42 -07:00
inventory.py feat(picker): derive a newest-per-lab featured shortlist from models.dev 2026-07-28 03:52:33 -05:00
journey.py fix(cli): render /journey color instead of leaking raw ANSI 2026-07-01 16:25:48 -05:00
kanban.py chore: remove unused imports and dead locals (ruff F401/F841 sweep) 2026-07-29 11:53:39 -07:00
kanban_db.py fix(tui): avoid writable Kanban opens on empty polls 2026-08-03 20:40:28 +05:30
kanban_decompose.py fix(auxiliary): route direct-create aux callers through call_llm (#65029) 2026-07-15 07:39:17 -07:00
kanban_diagnostics.py fix(kanban): clear failure/crash diagnostics while a retry is in flight 2026-07-09 16:13:59 -05:00
kanban_specify.py fix(auxiliary): route direct-create aux callers through call_llm (#65029) 2026-07-15 07:39:17 -07:00
kanban_swarm.py refactor(kanban): fold worker/orchestrator skills into injected guidance (#50473) 2026-06-21 17:06:48 -07:00
lifecycle.py Reapply "feat(observability): integrate NeMo Relay runtime and shared metrics" 2026-07-27 21:10:51 -07:00
logs.py fix: remove dead f-string prefixes via ruff F541 (216 sites) (#52336) 2026-07-05 13:42:46 -07:00
main.py feat(dev-sandbox): support fake installer / fake main / git clones 2026-08-04 17:36:26 -04:00
managed_scope.py fix(managed-scope): honor managed scope in all standalone config loaders 2026-06-19 07:46:33 -07:00
managed_uv.py fix(update): survive a hermes_constants cached from before the update 2026-08-01 23:06:47 -05:00
mcp_catalog.py fix(catalog): validate http+api_key manifests declare the header's env key 2026-08-03 22:55:36 +05:30
mcp_config.py fix(mcp): make Figma remote OAuth work via DCR allowlist defaults 2026-07-28 00:53:16 -05:00
mcp_picker.py
…
mcp_security.py fix(security): close hermes-0day MCP-persistence attack surface 2026-06-21 19:05:27 -07:00
mcp_startup.py fix(mcp): ensure MCP discovery completes before agent build in non-interactive sessions 2026-08-01 12:27:31 +05:30
mem_trim.py fix(mem): 5s force floor so delegate-batch closes don't stack trims 2026-08-02 22:44:38 +05:30
memory_oauth.py feat(memory): Honcho OAuth connect — desktop and CLI flows + token refresh (#44335) 2026-06-22 19:16:47 -05:00
memory_setup.py fix: route memory-provider dep installs through lazy_deps durable target 2026-07-28 22:40:33 -07:00
middleware.py chore: remove unused imports and dead locals (ruff F401/F841 sweep) 2026-07-29 11:53:39 -07:00
migrate.py
…
moa_cmd.py feat(moa): add reference model toggles 2026-07-23 18:11:57 -07:00
moa_config.py feat(moa): default advisor fanout to user_turn — the cheapest cadence 2026-07-23 21:07:18 -07:00
model_catalog.py perf(model-picker): serve stale model caches instantly, refresh in background 2026-08-01 14:52:18 -07:00
model_cost_guard.py
…
model_normalize.py fix(models): a model id missing its vendor prefix says so instead of 404ing (#78856) 2026-08-04 19:35:57 +00:00
model_search.py fix(picker): fold live bare k3 wire id into curated kimi-k3 row 2026-07-26 21:22:40 -07:00
model_setup_flows.py fix(cli): stabilize custom provider identities 2026-07-31 17:26:42 +05:30
model_switch.py fix(model-switch): treat models dict as metadata, not allowlist 2026-08-04 08:52:31 -07:00
models.py feat(models): add qwen3.8-max to Nous portal + OpenRouter catalogs, replacing qwen3.7-max 2026-08-03 17:19:49 -07:00
nous_account.py
…
nous_auth_keepalive.py fix Nous auth refresh for idle agents 2026-06-21 22:43:48 -07:00
nous_billing.py refactor: single shared Retry-After parser 2026-07-29 10:13:50 -07:00
nous_subscription.py chore: remove unused imports and dead locals (ruff F401/F841 sweep) 2026-07-29 11:53:39 -07:00
npm_engine.py Merge branch 'main' into ethie/bundled-node-path-windows-layout 2026-08-01 21:27:26 -05:00
onepassword_secrets_cli.py refactor: single build_subprocess_env() factory for all child-process spawns (profile + secret-scrub single owner) 2026-07-29 10:14:11 -07:00
oneshot.py fix(mcp): ensure MCP discovery completes before agent build in non-interactive sessions 2026-08-01 12:27:31 +05:30
pairing.py fix(pairing): keep GUI approvals off the code brute-force lockout 2026-07-29 17:51:40 -05:00
partial_compress.py feat(commands): /compact alias + --preview/--dry-run flags for /compress (#3243 salvage) 2026-07-02 05:10:31 -07:00
pets.py feat(pets): generation RPCs, non-blocking gallery + gateway plumbing 2026-06-24 13:48:38 -05:00
platforms.py
…
plugins.py feat(observability): aggregate bounded tool metrics 2026-07-29 11:25:55 -07:00
plugins_cmd.py fix(git): never block internal git calls on credential prompts 2026-07-28 17:34:21 -07:00
portal_cli.py fix(auth): use refresh-free Nous status snapshot on read-only display paths 2026-07-28 22:42:19 -07:00
profile_describer.py fix(auxiliary): route direct-create aux callers through call_llm (#65029) 2026-07-15 07:39:17 -07:00
profile_distribution.py fix(distribution): path-aware allowlist; preserve legacy copy-everything when omitted 2026-07-31 22:39:34 -07:00
profiles.py refactor: trim verbose comments + drop redundant default_flow_style kwarg 2026-08-05 11:59:33 +05:30
projects_cmd.py feat(projects): add per-profile project store 2026-06-25 16:40:26 -05:00
projects_db.py feat(desktop): configure repository discovery (supersedes #67630) (#68642) 2026-07-21 10:09:31 -04:00
prompt_size.py fix(prompt_size): search volatile tier for skills block after the stable->volatile move 2026-08-03 23:23:39 +05:30
prompt_stash.py feat(cli): complete the Ctrl+S prompt stash — keybinding, state machine, tests 2026-07-31 21:21:16 -07:00
provider_catalog.py feat(moa): expose MoA presets as selectable virtual models (#46081) 2026-06-25 13:52:06 -07:00
providers.py refactor(providers): delegate is_official_openai_host to base_url_host_matches 2026-07-31 21:31:56 -07:00
proxy_cli.py chore: remove unused imports and dead locals (ruff F401/F841 sweep) 2026-07-29 11:53:39 -07:00
psutil_android.py
…
pt_input_extras.py fix(cli): route Cmd+Backspace and Cmd+ForwardDelete to the kill bindings 2026-07-30 03:39:26 -05:00
pty_bridge.py refactor: single build_subprocess_env() factory for all child-process spawns (profile + secret-scrub single owner) 2026-07-29 10:14:11 -07:00
pty_session.py feat(pty): periodic reaper wired into dashboard lifespan 2026-07-07 15:15:37 -07:00
relaunch.py revert(windows): roll back terminal-popup PRs #53791 #53810 #53829 (#53853) 2026-06-27 15:59:00 -07:00
route_identity.py refactor: fold simplify-code review findings 2026-07-29 17:13:48 +05:30
runtime_provider.py fix(cli): heal a bare custom provider to its config key, not its display name 2026-07-31 22:36:15 -07:00
secret_prompt.py
…
secrets_cli.py refactor: single build_subprocess_env() factory for all child-process spawns (profile + secret-scrub single owner) 2026-07-29 10:14:11 -07:00
security_advisories.py
…
security_audit.py fix(security): cache OSV malware preflight verdicts and stop double component discovery (#75485) 2026-08-01 10:47:20 -07:00
security_audit_startup.py chore: remove unused imports and dead locals (ruff F401/F841 sweep) 2026-07-29 11:53:39 -07:00
send_cmd.py feat(gateway): simplex channel enumeration + show configured platforms in hermes send --list 2026-08-02 15:08:45 -07:00
service_manager.py fix(hermes_cli): drop privileges before clearing s6-log lock 2026-07-27 19:19:01 +05:30
session_export.py feat: add prompt-only session export 2026-07-07 13:29:58 -07:00
session_export_html.py chore: remove unused imports and dead locals (ruff F401/F841 sweep) 2026-07-29 11:53:39 -07:00
session_export_md.py feat(sessions): full prune-filter set + --redact on sessions export 2026-07-07 12:36:41 -07:00
session_filters.py fix(sessions): preserve recently active sessions during pruning 2026-07-26 19:30:21 -07:00
session_listing.py fix(gateway): scope session lists before limiting 2026-07-31 22:36:55 -07:00
session_recap.py fix(cli): sanitize terminal escapes when replaying stored history (/resume recap, /status recap) 2026-07-17 04:53:38 -07:00
session_recovery.py fix(state): deduplicate session system prompts 2026-08-03 20:37:17 +05:30
sessions_cmd.py fix(cli): back up state.db before clean-markers writes by default 2026-08-04 11:26:15 +05:30
setup.py fix(runtime): resolve Hermes-managed Node and uv before bare PATH 2026-08-01 21:17:51 -04:00
setup_hidden_env.py fix(setup): stop asking about self-configuring platform knobs 2026-07-26 08:43:24 -07:00
setup_whatsapp_cloud.py
…
skills_config.py fix(cli): normalize malformed skills config in get_disabled_skills (#61797) 2026-07-09 19:57:54 -07:00
skills_hub.py refactor: share category detection and prune vendored SKILL.md hits 2026-08-02 13:31:16 +05:30
skin_cmd.py refactor: trim verbose comments + drop redundant default_flow_style kwarg 2026-08-05 11:59:33 +05:30
skin_engine.py feat(themes): dedicated code-syntax palette keys 2026-07-21 21:00:43 -05:00
slack_cli.py fix: route stray HERMES_HOME hardcodes through get_hermes_home() (profile + native-Windows safety) 2026-07-29 09:33:48 -07:00
slash_exec.py refactor: registry-owned execute() on CommandDef — informational commands unified (thin slice) 2026-07-29 12:11:24 -07:00
sqlite_runtime.py fix(runtime): repair vulnerable managed SQLite builds (E-949) 2026-07-24 16:00:03 -07:00
sqlite_safe_read.py fix(cli): untrack sqlite connections only after close succeeds 2026-07-31 23:18:12 -07:00
sqlite_util.py feat(projects): add per-profile project store 2026-06-25 16:40:26 -05:00
status.py chore: round-2 review nits (re-review #9) 2026-08-02 16:16:36 -07:00
stdio.py
…
suggestions_cmd.py fix: remove dead f-string prefixes via ruff F541 (216 sites) (#52336) 2026-07-05 13:42:46 -07:00
telegram_managed_bot.py
…
timefmt.py chore: round-2 review nits (re-review #9) 2026-08-02 16:16:36 -07:00
timeouts.py
…
tips.py fix(gateway): defer in-band restart until active turns finish (#77184) 2026-08-03 09:57:58 +05:30
tools_config.py fix(tools): reuse subscription features for toolset listing 2026-08-03 16:07:16 +05:30
toolset_validation.py chore: remove unused imports and dead locals (ruff F401/F841 sweep) 2026-07-29 11:53:39 -07:00
uninstall.py fix(install): expose hermes-agent and hermes-acp launchers on PATH 2026-07-31 22:39:11 -07:00
update_cmd.py perf(cli): add --prefer-offline to npm install during update (#39267) 2026-08-03 17:18:31 +05:30
update_lock.py fix(update): make the ancestor-PID lock handoff cross-platform via psutil 2026-07-31 22:28:46 -07:00
urllib_security.py fix(security): order sanitizer after installed hooks 2026-07-11 12:28:55 +05:30
vercel_auth.py Revert "remove Vercel AI Gateway and Vercel Sandbox (#33067)" 2026-07-29 19:48:37 -07:00
voice.py fix(voice): spoken barge-in works on every TTS playback path (CLI + gateway/desktop backends) 2026-07-29 08:24:00 -07:00
web_deps.py refactor(web): extract sessions/mcp/skills/tools routes to APIRouter modules (wave 2; route-table equality verified) 2026-07-29 16:21:54 -07:00
web_git.py fix(git): never block internal git calls on credential prompts 2026-07-28 17:34:21 -07:00
web_models.py feat(profiles): REST export/import + extra_files overlay hook 2026-08-04 12:07:29 -06:00
web_server.py perf(cold-start): mitigate ~14s GIL stall during backend init (#60800) 2026-08-03 21:16:09 +05:30
webhook.py fix: repair sweep fallout — duplicate encoding kwargs, non-subprocess call sites, kwarg-snapshot tests 2026-07-24 11:45:57 -07:00
win_pty_bridge.py refactor: single build_subprocess_env() factory for all child-process spawns (profile + secret-scrub single owner) 2026-07-29 10:14:11 -07:00
windows_ssh_runtime.py fix(desktop): keep Windows SSH runtime at machine root 2026-08-01 14:30:16 -07:00
write_approval_commands.py
…
xai_retirement.py fix(config): guard xai migration writer + drop gratuitous annotation 2026-07-05 23:00:34 +05:30