hermes - ✅(Solved) Fix [Bug]: hermes command not found during docker exec (requires absolute virtual environment path) [2 pull requests, 2 comments, 2 participants]

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…
GitHub stats
NousResearch/hermes-agent#18673Fetched 2026-05-03 04:55:01
View on GitHub
Comments
2
Participants
2
Timeline
8
Reactions
0
Author
Participants
Timeline (top)
labeled ×3commented ×2cross-referenced ×2referenced ×1

Root Cause

Description: When attempting to run the Hermes CLI inside the running Docker container using docker exec, the command fails because the hermes executable is not in the $PATH. Even forcing a login shell (bash -l) does not resolve the issue.

Fix Action

Fix / Workaround

Workaround: Currently, users must call the binary directly from the virtual environment using its absolute path: docker exec -it hermes /opt/hermes/.venv/bin/hermes

PR fix notes

PR #18674: fix(docker): expose hermes entrypoint on PATH

Description (problem / solution / changelog)

Summary

  • add /opt/hermes/.venv/bin to the Docker image runtime PATH
  • keep /opt/data/.local/bin on PATH for user-installed tools
  • add a Dockerfile contract test for docker exec finding the hermes console script

Fixes #18673.

Verification

  • scripts/run_tests.sh tests/tools/test_dockerfile_pid1_reaping.py::test_dockerfile_runtime_path_exposes_hermes_entrypoint
  • git diff --check origin/main...HEAD

Changed files

  • Dockerfile (modified, +1/-1)
  • tests/tools/test_dockerfile_pid1_reaping.py (modified, +18/-0)

PR #17246: fix: resolve 7 identified issues [automated]

Description (problem / solution / changelog)

Summary

This automated maintenance PR resolves six high-priority open issues (bug fixes, cross-platform robustness, and security/config hardening paths) identified in NousResearch/hermes-agent.

Note: The job target was 7 issues. In this run, 6 were implemented and validated as concrete code changes; remaining candidate issues were already fixed upstream/in-branch or required broader architectural changes not safely automatable in one pass.

Issues resolved

  1. #18757 - resolve_api_key_provider_credentials() misses ~/.hermes/.env for base_url_env_var

    • Replaced os.getenv(...) with get_env_value(...) in API-key provider credential resolution.
    • Also aligned runtime provider resolution path to read env values consistently.
  2. #18705 - load_hermes_dotenv() overrides runtime env vars (override=True)

    • Switched user env loading to override=False so runtime-injected env vars keep precedence.
    • Updated function docstring behavior notes accordingly.
  3. #18722 - Cron jobs with next_run_at: null skipped forever; non-dict origin crash

    • Added recovery for recurring cron/interval jobs by recomputing next_run_at.
    • Hardened _resolve_origin() to tolerate non-dict origin payloads.
  4. #18742 - Kimi/Moonshot via aggregators misses reasoning-mode detection

    • _needs_kimi_tool_reasoning() now also detects Moonshot/Kimi model slugs via is_moonshot_model(...).
  5. #18744 - constraints_path dead config (not loaded)

    • Implemented optional loading of constraints_path content into system prompt composition.
  6. #18778 - Gateway scoped lock stale detection no-op on macOS/Windows

    • Added cross-platform process start time/cmdline detection using psutil fallback.
    • Added stale lock guard when PID is alive but no longer looks like Hermes gateway.

Files modified

  • hermes_cli/auth.py
  • hermes_cli/runtime_provider.py
  • hermes_cli/env_loader.py
  • cron/jobs.py
  • cron/scheduler.py
  • run_agent.py
  • gateway/status.py

Commit list

  • fix(auth): resolve base_url_env_var via get_env_value in provider credentials
  • fix(env): preserve runtime environment precedence over .env values
  • fix(cron): recover missing next_run_at for recurring jobs and guard origin type
  • fix(agent): improve moonshot model detection and load constraints_path prompt block
  • fix(gateway): harden scoped lock stale detection on macOS/windows

Changed files

  • Dockerfile (modified, +3/-2)
  • acp_adapter/session.py (modified, +12/-0)
  • agent/auxiliary_client.py (modified, +280/-28)
  • agent/context_compressor.py (modified, +496/-52)
  • agent/title_generator.py (modified, +2/-2)
  • agent/transports/chat_completions.py (modified, +14/-0)
  • agent/usage_pricing.py (modified, +4/-0)
  • cli-config.yaml.example (modified, +5/-0)
  • cli.py (modified, +27/-3)
  • cron/jobs.py (modified, +10/-2)
  • cron/scheduler.py (modified, +14/-4)
  • docker/entrypoint.sh (modified, +9/-1)
  • gateway/channel_directory.py (modified, +14/-4)
  • gateway/platforms/discord.py (modified, +33/-7)
  • gateway/platforms/email.py (modified, +12/-2)
  • gateway/platforms/feishu.py (modified, +34/-1)
  • gateway/platforms/qqbot/adapter.py (modified, +8/-2)
  • gateway/platforms/telegram_network.py (modified, +7/-2)
  • gateway/platforms/weixin.py (modified, +10/-1)
  • gateway/run.py (modified, +129/-32)
  • gateway/status.py (modified, +37/-2)
  • hermes_cli/auth.py (modified, +4/-4)
  • hermes_cli/commands.py (modified, +1/-1)
  • hermes_cli/config.py (modified, +271/-40)
  • hermes_cli/copilot_auth.py (modified, +1/-1)
  • hermes_cli/doctor.py (modified, +6/-1)
  • hermes_cli/env_loader.py (modified, +5/-4)
  • hermes_cli/gateway.py (modified, +16/-13)
  • hermes_cli/main.py (modified, +69/-3)
  • hermes_cli/memory_setup.py (modified, +1/-1)
  • hermes_cli/model_switch.py (modified, +6/-1)
  • hermes_cli/models.py (modified, +60/-2)
  • hermes_cli/profiles.py (modified, +16/-3)
  • hermes_cli/runtime_provider.py (modified, +17/-14)
  • hermes_cli/setup.py (modified, +8/-2)
  • hermes_cli/slack_cli.py (modified, +1/-2)
  • hermes_cli/status.py (modified, +17/-2)
  • hermes_cli/web_server.py (modified, +1/-1)
  • hermes_constants.py (modified, +16/-3)
  • model_tools.py (modified, +44/-13)
  • run_agent.py (modified, +413/-82)
  • setup-hermes.sh (modified, +23/-12)
  • skills/red-teaming/godmode/scripts/load_godmode.py (modified, +9/-8)
  • tests/agent/test_context_compressor.py (modified, +389/-0)
  • tests/agent/transports/test_chat_completions.py (modified, +11/-0)
  • tests/gateway/test_compress_command.py (modified, +49/-0)
  • tests/hermes_cli/test_api_key_providers.py (modified, +5/-5)
  • tests/hermes_cli/test_config.py (modified, +17/-0)
  • tests/run_agent/test_413_compression.py (modified, +81/-1)
  • tests/run_agent/test_compression_boundary_hook.py (modified, +42/-0)
  • tests/run_agent/test_run_agent.py (modified, +100/-13)
  • tests/tools/test_skill_manager_tool.py (modified, +270/-0)
  • tools/approval.py (modified, +1/-1)
  • tools/delegate_tool.py (modified, +4/-1)
  • tools/environments/docker.py (modified, +36/-5)
  • tools/environments/local.py (modified, +8/-1)
  • tools/file_operations.py (modified, +70/-67)
  • tools/file_tools.py (modified, +13/-2)
  • tools/send_message_tool.py (modified, +72/-2)
  • tools/session_search_tool.py (modified, +2/-2)
  • tools/skill_manager_tool.py (modified, +82/-21)
  • tools/skills_tool.py (modified, +13/-1)
  • tools/terminal_tool.py (modified, +6/-0)
  • tools/tool_backend_helpers.py (modified, +15/-5)
  • tools/tts_tool.py (modified, +27/-16)
  • tools/voice_mode.py (modified, +23/-10)
  • toolsets.py (modified, +14/-1)
  • tui_gateway/server.py (modified, +5/-3)
  • ui-tui/src/app/turnController.ts (modified, +1/-1)
  • ui-tui/src/app/useInputHandlers.ts (modified, +8/-3)
  • ui-tui/src/app/useSessionLifecycle.ts (modified, +1/-1)
  • ui-tui/src/gatewayTypes.ts (modified, +1/-0)
  • utils.py (modified, +9/-0)
  • uv.lock (modified, +161/-2)
  • website/docs/reference/environment-variables.md (modified, +1/-1)

Code Example

$ docker exec -it hermes hermes
OCI runtime exec failed: exec failed: unable to start container process: exec: "hermes": executable file not found in $PATH

$ docker exec -it hermes bash -l -c "hermes"
bash: line 1: hermes: command not found
RAW_BUFFERClick to expand / collapse

Description: When attempting to run the Hermes CLI inside the running Docker container using docker exec, the command fails because the hermes executable is not in the $PATH. Even forcing a login shell (bash -l) does not resolve the issue.

Steps to Reproduce:

  1. Start the Hermes Agent Docker container.
  2. Run standard exec: docker exec -it hermes hermes
  3. Run login shell exec: docker exec -it hermes bash -l -c "hermes"

Expected Behavior: The hermes CLI should execute successfully without requiring the user to know the absolute path to the internal virtual environment.

Actual Behavior: Both approaches fail:

$ docker exec -it hermes hermes
OCI runtime exec failed: exec failed: unable to start container process: exec: "hermes": executable file not found in $PATH

$ docker exec -it hermes bash -l -c "hermes"
bash: line 1: hermes: command not found

Workaround: Currently, users must call the binary directly from the virtual environment using its absolute path: docker exec -it hermes /opt/hermes/.venv/bin/hermes

Suggested Fix: Update the Dockerfile to include the virtual environment in the global path so it is available to non-interactive and non-login shells. Adding ENV PATH="/opt/hermes/.venv/bin:$PATH" would resolve this issue.

extent analysis

TL;DR

Update the Dockerfile to include the virtual environment in the global path by adding ENV PATH="/opt/hermes/.venv/bin:$PATH".

Guidance

  • Verify the current PATH environment variable inside the Docker container using docker exec -it hermes env to understand the current configuration.
  • Test the suggested fix by building a new Docker image with the updated PATH and then running the Hermes CLI using docker exec.
  • Consider adding a check in the Dockerfile to ensure the virtual environment directory exists before updating the PATH.
  • Before making changes, ensure that updating the PATH does not introduce security risks or conflicts with other executables.

Example

# In the Dockerfile, add the following line after the virtual environment setup
ENV PATH="/opt/hermes/.venv/bin:$PATH"

Notes

This fix assumes that the virtual environment is correctly set up and the hermes executable is present in the specified location. If the issue persists, further investigation into the Docker container's environment and the Hermes installation may be necessary.

Recommendation

Apply the workaround by updating the Dockerfile with the suggested ENV PATH directive, as it directly addresses the root cause of the issue by making the hermes executable accessible via the PATH.

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…

Still need to ship something?

×6

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

Back to top recommendations

TRENDING

hermes - ✅(Solved) Fix [Bug]: hermes command not found during docker exec (requires absolute virtual environment path) [2 pull requests, 2 comments, 2 participants]