hermes - 💡(How to fix) Fix config docs claim TIRITH_ENABLED env var works but cli.py only reads from security_cfg dict (silently ignored)

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

hermes_cli/config.py line 4441 documents:

tirith pre-exec scanning is enabled by default when the tirith binary
is available. Configure via security.tirith_* keys or env vars
(TIRITH_ENABLED, TIRITH_BIN, TIRITH_TIMEOUT, TIRITH_FAIL_OPEN).

But the actual code path at cli.py:12044 reads:

tirith_enabled = security_cfg.get("tirith_enabled", True)

…only from the security config dict. The env var TIRITH_ENABLED is never consulted in the enabled/disabled branch. Setting TIRITH_ENABLED=false in ~/.hermes/.env does not disable tirith.

Root Cause

Low (documentation/UX). Filing because the cost-of-confusion is real and the fix is trivial either way.

Fix Action

Fix / Workaround

Workaround: must set security.tirith_enabled: false in ~/.hermes/config.yaml instead.

Code Example

tirith pre-exec scanning is enabled by default when the tirith binary
is available. Configure via security.tirith_* keys or env vars
(TIRITH_ENABLED, TIRITH_BIN, TIRITH_TIMEOUT, TIRITH_FAIL_OPEN).

---

tirith_enabled = security_cfg.get("tirith_enabled", True)
RAW_BUFFERClick to expand / collapse

Summary

hermes_cli/config.py line 4441 documents:

tirith pre-exec scanning is enabled by default when the tirith binary
is available. Configure via security.tirith_* keys or env vars
(TIRITH_ENABLED, TIRITH_BIN, TIRITH_TIMEOUT, TIRITH_FAIL_OPEN).

But the actual code path at cli.py:12044 reads:

tirith_enabled = security_cfg.get("tirith_enabled", True)

…only from the security config dict. The env var TIRITH_ENABLED is never consulted in the enabled/disabled branch. Setting TIRITH_ENABLED=false in ~/.hermes/.env does not disable tirith.

Reproduction

  1. echo "TIRITH_ENABLED=false" >> ~/.hermes/.env
  2. Restart Hermes gateway
  3. Verify env var is loaded by Hermes (e.g. log output of agent.log shows Loaded environment variables from /home/rkt2/.hermes/.env)
  4. Issue an agent command that would trigger tirith (e.g. curl URL | python3)
  5. Bug: tirith still scans and rejects. Env var ignored.

Workaround: must set security.tirith_enabled: false in ~/.hermes/config.yaml instead.

Expected behavior

Either:

  • (a) Make TIRITH_ENABLED (and TIRITH_BIN, TIRITH_TIMEOUT, TIRITH_FAIL_OPEN) actually work as documented — read env in the config-resolution path.
  • (b) Remove the env-var advertisement from the docstring at config.py:4441 and from cli-config.yaml.example line 4441.

(a) is preferred — operators expect environment variables to override config values, and the rest of Hermes' config system supports this pattern.

Impact

Diagnostic time loss only — no security impact. But operators waste hours assuming the documented config knob works when it doesn't. Encountered during paperclipai/paperclip integration diagnostic 2026-05-20.

Severity

Low (documentation/UX). Filing because the cost-of-confusion is real and the fix is trivial either way.

Submitted with assistance from Claude Opus 4.7 via Claude Code.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

Either:

  • (a) Make TIRITH_ENABLED (and TIRITH_BIN, TIRITH_TIMEOUT, TIRITH_FAIL_OPEN) actually work as documented — read env in the config-resolution path.
  • (b) Remove the env-var advertisement from the docstring at config.py:4441 and from cli-config.yaml.example line 4441.

(a) is preferred — operators expect environment variables to override config values, and the rest of Hermes' config system supports this pattern.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING