feat(cli): add /reasoning slash command to manage reasoning effort

Cherry-picked from PR #789 by Aum08Desai, rebased onto current main
with conflict resolution and improvements:

- Added /reasoning command: view current level or set to none|low|medium|high|xhigh
- Persists to config via save_config_value, forces agent re-init
- Resolved conflict with COMMANDS_BY_CATEGORY refactor (added to Configuration category)
- Restricted valid levels to none, low, medium, high, xhigh (removed 'minimal')
- Updated _parse_reasoning_config in cli.py and _load_reasoning_config in gateway/run.py
- Improved display messages (show all valid options, clearer defaults/disabled state)
- Added EXPECTED_COMMANDS entry for regression guard
- Expanded test suite: 16 tests covering all levels, rejection, display, case insensitivity,
  config save failure

Co-authored-by: Aum08Desai <145567217+Aum08Desai@users.noreply.github.com>
This commit is contained in:
Aum08Desai 2026-03-11 06:11:53 -07:00 committed by teknium1
parent c837ef949d
commit e6b325cc24
5 changed files with 176 additions and 5 deletions

View file

@ -366,7 +366,7 @@ class GatewayRunner:
"""Load reasoning effort from config or env var.
Checks HERMES_REASONING_EFFORT env var first, then agent.reasoning_effort
in config.yaml. Valid: "xhigh", "high", "medium", "low", "minimal", "none".
in config.yaml. Valid: "none", "low", "medium", "high", "xhigh".
Returns None to use default (medium).
"""
effort = os.getenv("HERMES_REASONING_EFFORT", "")
@ -385,7 +385,7 @@ class GatewayRunner:
effort = effort.lower().strip()
if effort == "none":
return {"enabled": False}
valid = ("xhigh", "high", "medium", "low", "minimal")
valid = ("low", "medium", "high", "xhigh")
if effort in valid:
return {"enabled": True, "effort": effort}
logger.warning("Unknown reasoning_effort '%s', using default (medium)", effort)