fix: resolve .env and config paths from ~/.hermes/, not project root#48
Merged
Merged
Conversation
The `hermes` CLI entry point (hermes_cli/main.py) and the agent runner (run_agent.py) only loaded .env from the project installation directory. After the standard installer, code lives at ~/.hermes/hermes-agent/ but config lives at ~/.hermes/ — so the .env was never found. Aligns these entry points with the pattern already used by gateway/run.py and rl_cli.py: load ~/.hermes/.env first, fall back to project root .env for dev-mode compatibility. Also fixes: - status.py checking .env existence and API keys at PROJECT_ROOT - doctor.py KeyError on tool availability (missing_vars vs env_vars) - doctor.py checking logs/ and Skills Hub at PROJECT_ROOT instead of HERMES_HOME - doctor.py redundant logs/ check (already covered by subdirectory loop) - mini-swe-agent loading config from platformdirs default instead of ~/.hermes/ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Contributor
|
LGTM |
sudo-yf
pushed a commit
to sudo-yf/hermes-agent
that referenced
this pull request
Apr 5, 2026
fix(ci): use standard version tags for GitHub Actions
angelburgosrosado
pushed a commit
to angelburgosrosado/hermes-agent
that referenced
this pull request
Apr 27, 2026
…lution fix: resolve .env and config paths from ~/.hermes/, not project root
olympus-terminal
pushed a commit
to olympus-terminal/hermes-agent
that referenced
this pull request
May 16, 2026
…lution fix: resolve .env and config paths from ~/.hermes/, not project root
3 tasks
teknium1
added a commit
that referenced
this pull request
May 29, 2026
…kew) (#34475) A process running mismatched module versions — conversation_compression.py re-imported with the post-#34351 lock code while a long-lived hermes_state.SessionDB stays bound to the pre-#34351 class in memory — has the try_acquire_compression_lock call site but not the method. The AttributeError it raises is NOT a sqlite3.Error, so the method's own fail-open guard never runs; the exception escapes to the outer agent loop, which prints the error and retries. Compression never succeeds, the token count never drops, and the loop re-triggers compaction forever (the 'API call #47/#48/#49 ... has no attribute try_acquire_compression_lock' spin a user hit after an update). Wrap the lock acquire so any unexpected exception fails OPEN: skip locking and proceed with compression. Skipping the lock risks a rare concurrent-compression session fork; an infinite no-progress loop that never compresses at all is strictly worse. The remediation hint in the log points at the real fix (restart / hermes update to resync the stale module). Also guards get_compression_lock_holder against the same skew. Adds a regression test simulating the version skew (real SessionDB wrapped so only the lock methods raise AttributeError) — asserts _compress_context proceeds and rotates instead of raising.
KKT-OPT
pushed a commit
to KKT-OPT/hermes-agent
that referenced
this pull request
May 31, 2026
…kew) (NousResearch#34475) A process running mismatched module versions — conversation_compression.py re-imported with the post-NousResearch#34351 lock code while a long-lived hermes_state.SessionDB stays bound to the pre-NousResearch#34351 class in memory — has the try_acquire_compression_lock call site but not the method. The AttributeError it raises is NOT a sqlite3.Error, so the method's own fail-open guard never runs; the exception escapes to the outer agent loop, which prints the error and retries. Compression never succeeds, the token count never drops, and the loop re-triggers compaction forever (the 'API call NousResearch#47/NousResearch#48/NousResearch#49 ... has no attribute try_acquire_compression_lock' spin a user hit after an update). Wrap the lock acquire so any unexpected exception fails OPEN: skip locking and proceed with compression. Skipping the lock risks a rare concurrent-compression session fork; an infinite no-progress loop that never compresses at all is strictly worse. The remediation hint in the log points at the real fix (restart / hermes update to resync the stale module). Also guards get_compression_lock_holder against the same skew. Adds a regression test simulating the version skew (real SessionDB wrapped so only the lock methods raise AttributeError) — asserts _compress_context proceeds and rotates instead of raising.
Benriez
pushed a commit
to Benriez/hermes-agent
that referenced
this pull request
Jun 3, 2026
Adds reusable Kanban operator skill skeletons, Agent Garden as the first project adapter, deterministic workflow gate scripts, Hermes task JSON wrapper compatibility, and issue NousResearch#48 success examples. Includes: - kanban-card-spec - kanban-review - kanban-close-gate - kanban-watch - Agent Garden adapter - adapter schema with Mac and Windows host support - deterministic scripts for parent card validation, review evidence, close gate, and run health Verified: - prism-full available and used - python3 -m py_compile passed - script --help checks passed - smoke-test compatibility gaps fixed
Egavasyug
pushed a commit
to Egavasyug/hermes-agent
that referenced
this pull request
Jun 10, 2026
…lution fix: resolve .env and config paths from ~/.hermes/, not project root
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
.envandconfig.yamlare now loaded from~/.hermes/(HERMES_HOME) as the primary source, with the project root as a dev fallbackmain.py,run_agent.py,doctor.py) use consistent path resolution viahermes_cli.configutilitiesstatusanddoctorcommands now report correct file locations and detect API keys from~/.hermes/.envdoctor.pyskills hub path, GitHub token detection, andmissing_vars/env_varskey handlingContext
The install script places config at
~/.hermes/.envand~/.hermes/config.yaml, but the code was looking for them at the project root (~/.hermes/hermes-agent/.env). This caused API keys to appear missing instatus/doctorand required users to duplicate their.envfile.Test plan
hermes statusshows.env file: ✓ existspointing to~/.hermes/.envhermes configshows correct paths under Paths sectionhermes doctordetects API keys from~/.hermes/.envhermes chatloads API keys and gets a response.envin project root when~/.hermes/.envdoesn't exist🤖 Generated with Claude Code