hermes-agent/tests/hermes_cli
Teknium a2a8092e90 feat(cli): add --ignore-user-config and --ignore-rules flags
Port from openai/codex#18646.

Adds two flags to 'hermes chat' that fully isolate a run from user-level
configuration and rules:

* --ignore-user-config: skip ~/.hermes/config.yaml and fall back to
  built-in defaults. Credentials in .env are still loaded so the agent
  can actually call a provider.
* --ignore-rules: skip auto-injection of AGENTS.md, SOUL.md,
  .cursorrules, and persistent memory (maps to AIAgent(skip_context_files=True,
  skip_memory=True)).

Primary use cases:
- Reproducible CI runs that should not pick up developer-local config
- Third-party integrations (e.g. Chronicle in Codex) that bring their
  own config and don't want user preferences leaking in
- Bug-report reproduction without the reporter's personal overrides
- Debugging: bisect 'was it my config?' vs 'real bug' in one command

Both flags are registered on the parent parser AND the 'chat' subparser
(with argparse.SUPPRESS on the subparser to avoid overwriting the parent
value when the flag is placed before the subcommand, matching the
existing --yolo/--worktree/--pass-session-id pattern).

Env vars HERMES_IGNORE_USER_CONFIG=1 and HERMES_IGNORE_RULES=1 are set
by cmd_chat BEFORE 'from cli import main' runs, which is critical
because cli.py evaluates CLI_CONFIG = load_cli_config() at module import
time. The cli.py / hermes_cli.config.load_cli_config() function checks
the env var and skips ~/.hermes/config.yaml when set.

Tests: 11 new tests in tests/hermes_cli/test_ignore_user_config_flags.py
covering the env gate, constructor wiring, cmd_chat simulation, and
argparse flag registration. All pass; existing hermes_cli + cli suites
unaffected (3005 pass, 2 pre-existing unrelated failures).
2026-04-22 19:58:42 -07:00
..
__init__.py
test_ai_gateway_models.py refactor(ai-gateway): single source of truth for model catalog (#13304) 2026-04-20 22:21:21 -07:00
test_anthropic_oauth_flow.py
test_anthropic_provider_persistence.py
test_api_key_providers.py feat: add Step Plan provider support (salvage #6005) 2026-04-22 02:59:58 -07:00
test_arcee_provider.py test: stop testing mutable data — convert change-detectors to invariants (#13363) 2026-04-20 23:20:33 -07:00
test_argparse_flag_propagation.py feat: shell hooks — wire shell scripts as Hermes hook callbacks 2026-04-20 20:53:51 -07:00
test_at_context_completion_filter.py fix(tui): @folder: only yields directories, @file: only yields files 2026-04-21 14:31:48 -05:00
test_atomic_json_write.py
test_atomic_yaml_write.py
test_auth_codex_provider.py fix(codex): Hermes owns its own Codex auth; stop touching ~/.codex/auth.json (#12360) 2026-04-18 19:19:46 -07:00
test_auth_commands.py fix(auth): unify credential source removal — every source sticks (#13427) 2026-04-21 01:52:49 -07:00
test_auth_nous_provider.py remove Nous Portal free-model allowlist 2026-04-21 20:35:16 -07:00
test_auth_provider_gate.py
test_auth_qwen_provider.py
test_aux_config.py fix(aux): add session_search extra_body and concurrency controls 2026-04-20 00:47:39 -07:00
test_backup.py fix(backup): handle files with pre-1980 timestamps 2026-04-20 00:47:40 -07:00
test_banner_git_state.py
test_banner_skills.py
test_banner.py
test_chat_skills_flag.py
test_claw.py
test_clear_stale_base_url.py
test_cmd_update.py test: update stale tests to match current code (#11963) 2026-04-17 21:35:30 -07:00
test_coalesce_session_args.py
test_codex_cli_model_picker.py fix(tests): unstick CI — sweep stale tests from recent merges (#12670) 2026-04-19 12:39:58 -07:00
test_codex_models.py fix: remove codex spark model support 2026-04-20 04:51:44 -07:00
test_commands.py feat(gateway): expose plugin slash commands natively on all platforms + decision-capable command hook 2026-04-22 16:23:21 -07:00
test_completion.py
test_config_drift.py feat(delegate): orchestrator role and configurable spawn depth (default flat) 2026-04-21 14:23:45 -07:00
test_config_env_expansion.py
test_config_env_refs.py fix(config): preserve env refs when save_config rewrites config (#11892) 2026-04-17 19:03:26 -07:00
test_config_validation.py fix(gemini): tighten native routing and streaming replay 2026-04-19 12:40:08 -07:00
test_config.py test: stop testing mutable data — convert change-detectors to invariants (#13363) 2026-04-20 23:20:33 -07:00
test_container_aware_cli.py
test_copilot_auth.py
test_cron.py feat(skills): consolidate find-nearby into maps as a single location skill 2026-04-19 05:19:22 -07:00
test_custom_provider_model_switch.py
test_debug.py fix(debug): distinguish empty-log from missing-log in report placeholder 2026-04-22 15:27:54 -05:00
test_deprecated_cwd_warning.py
test_detect_api_mode_for_url.py fix: restrict provider URL detection to exact hostname matches 2026-04-20 22:14:29 -07:00
test_determine_api_mode_hostname.py fix: extend hostname-match provider detection across remaining call sites 2026-04-20 22:14:29 -07:00
test_dingtalk_auth.py test(dingtalk): cover QR device-flow auth + OpenClaw branding disclosure 2026-04-17 05:08:07 -07:00
test_doctor_command_install.py
test_doctor.py
test_env_loader.py fix(cli): ensure project .env is sanitized before loading 2026-04-22 05:51:44 -07:00
test_env_sanitize_on_load.py
test_gateway_linger.py
test_gateway_runtime_health.py
test_gateway_service.py fix(gateway): recover stale pid and planned restart state 2026-04-22 16:33:46 -07:00
test_gateway_wsl.py
test_gateway.py fix(gateway): recover stale pid and planned restart state 2026-04-22 16:33:46 -07:00
test_gemini_provider.py test: stop testing mutable data — convert change-detectors to invariants (#13363) 2026-04-20 23:20:33 -07:00
test_hooks_cli.py feat: shell hooks — wire shell scripts as Hermes hook callbacks 2026-04-20 20:53:51 -07:00
test_ignore_user_config_flags.py feat(cli): add --ignore-user-config and --ignore-rules flags 2026-04-22 19:58:42 -07:00
test_image_gen_picker.py feat(plugins): pluggable image_gen backends + OpenAI provider (#13799) 2026-04-21 21:30:10 -07:00
test_launcher.py
test_logs.py
test_managed_installs.py
test_mcp_config.py fix(mcp): consolidate OAuth handling, pick up external token refreshes (#11383) 2026-04-16 21:57:10 -07:00
test_mcp_tools_config.py
test_memory_reset.py
test_model_normalize.py fix(copilot): normalize vendor-prefixed and dash-notation model IDs (#6879) (#11561) 2026-04-17 04:19:36 -07:00
test_model_picker_viewport.py refactor(cli): align model picker viewport with PR #11260 vocabulary 2026-04-17 06:33:21 -07:00
test_model_provider_persistence.py feat: add Step Plan provider support (salvage #6005) 2026-04-22 02:59:58 -07:00
test_model_switch_copilot_api_mode.py
test_model_switch_custom_providers.py fix(model_switch): enumerate dict-format models in /model picker 2026-04-19 11:07:29 -07:00
test_model_switch_opencode_anthropic.py feat(providers): extend request_timeout_seconds to all client paths 2026-04-19 11:23:00 -07:00
test_model_switch_variant_tags.py
test_model_validation.py feat: add Step Plan provider support (salvage #6005) 2026-04-22 02:59:58 -07:00
test_models_dev_preferred_merge.py feat(/model): merge models.dev entries for lesser-loved providers (#14221) 2026-04-22 17:33:42 -07:00
test_models.py feat(aux): use Portal /api/nous/recommended-models for auxiliary models 2026-04-21 20:35:16 -07:00
test_non_ascii_credential.py fix(env_loader): warn when non-ASCII stripped from credential env vars (#13300) 2026-04-20 22:14:03 -07:00
test_nous_hermes_non_agentic.py
test_nous_subscription.py
test_ollama_cloud_auth.py
test_ollama_cloud_provider.py
test_opencode_go_in_model_list.py feat(/model): merge models.dev entries for lesser-loved providers (#14221) 2026-04-22 17:33:42 -07:00
test_opencode_go_validation_fallback.py fix(/model): accept provider switches when /models is unreachable 2026-04-21 05:19:43 -07:00
test_overlay_slug_resolution.py
test_path_completion.py
test_placeholder_usage.py
test_plugin_cli_registration.py test: remove 169 change-detector tests across 21 files (#11472) 2026-04-17 01:05:09 -07:00
test_plugin_scanner_recursion.py feat(plugins): pluggable image_gen backends + OpenAI provider (#13799) 2026-04-21 21:30:10 -07:00
test_plugins_cmd.py test: remove 169 change-detector tests across 21 files (#11472) 2026-04-17 01:05:09 -07:00
test_plugins.py feat(gateway): expose plugin slash commands natively on all platforms + decision-capable command hook 2026-04-22 16:23:21 -07:00
test_profile_export_credentials.py
test_profiles.py fix(gateway): fix discrepancies in gateway status 2026-04-17 18:58:29 -07:00
test_provider_config_validation.py fix(config): validate providers config entries — reject non-URL base, accept camelCase aliases (#9332) 2026-04-20 04:52:50 -07:00
test_reasoning_effort_menu.py
test_runtime_provider_resolution.py security(runtime_provider): close OLLAMA_API_KEY substring-leak sweep miss (#13522) 2026-04-21 06:06:16 -07:00
test_session_browse.py
test_sessions_delete.py
test_set_config_value.py
test_setup_agent_settings.py fix(setup): stop hardcoding max-iterations copy 2026-04-19 00:28:25 -07:00
test_setup_hermes_script.py
test_setup_matrix_e2ee.py
test_setup_model_provider.py
test_setup_noninteractive.py
test_setup_openclaw_migration.py Update env vars for openclaw migration 2026-04-20 14:56:04 -07:00
test_setup_prompt_menus.py fix(ci): resolve 4 pre-existing main failures (docs lint + 3 stale tests) (#11373) 2026-04-16 20:43:41 -07:00
test_setup.py
test_skills_config.py
test_skills_hub.py
test_skills_install_flags.py
test_skills_skip_confirm.py
test_skills_subparser.py
test_skin_engine.py fix: align status bar skin tests with upstream main 2026-04-22 13:20:02 -07:00
test_status_model_provider.py
test_status.py
test_subparser_routing_fallback.py test: remove 169 change-detector tests across 21 files (#11472) 2026-04-17 01:05:09 -07:00
test_subprocess_timeouts.py
test_terminal_menu_fallbacks.py
test_timeouts.py fix(config): add stale timeout settings 2026-04-20 00:52:50 -07:00
test_tips.py
test_tool_token_estimation.py
test_tools_config.py fix(tools): keep default-off toolsets disabled 2026-04-20 20:52:50 -07:00
test_tools_disable_enable.py
test_tui_npm_install.py
test_tui_resume_flow.py
test_update_autostash.py
test_update_check.py test: remove 8 flaky tests that fail under parallel xdist scheduling (#12784) 2026-04-19 19:38:02 -07:00
test_update_config_clears_custom_fields.py fix(anthropic): complete third-party Anthropic-compatible provider support (#12846) 2026-04-19 22:43:09 -07:00
test_update_gateway_restart.py feat(update): warn about legacy hermes.service units during hermes update (#11918) 2026-04-17 19:35:12 -07:00
test_update_hangup_protection.py fix(update): survive mid-update terminal disconnect (#11960) 2026-04-17 21:29:24 -07:00
test_user_providers_model_switch.py fix(model-picker): dedup overlapping providers: dict and custom_providers: list entries 2026-04-19 22:15:49 -07:00
test_web_server_host_header.py fix(web_server,whatsapp-bridge): validate Host header against bound interface (#13530) 2026-04-21 06:26:35 -07:00
test_web_server.py feat(dashboard): track real API call count per session 2026-04-22 05:51:58 -07:00
test_webhook_cli.py
test_xiaomi_provider.py test: stop testing mutable data — convert change-detectors to invariants (#13363) 2026-04-20 23:20:33 -07:00