hermes - ✅(Solved) Fix 0.10.0 wheel missing hermes_cli/web_dist/ — dashboard 401s on every /api/* request (pip-install vector) [1 pull requests, 1 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#14880Fetched 2026-04-24 10:44:33
View on GitHub
Comments
0
Participants
1
Timeline
5
Reactions
0
Participants
Timeline (top)
labeled ×4cross-referenced ×1

After upgrading from v0.9.0 (v2026.4.13) to v0.10.0 (v2026.4.16) via pip install --upgrade 'hermes-agent @ git+https://github.com/NousResearch/[email protected]', every Hermes dashboard /api/* request returns {"detail":"Unauthorized"} (HTTP 401), making the entire dashboard UI unusable (Sessions, Logs, Cron, Skills, Analytics tabs all empty/error).

This is the pip-install equivalent of #12177 (Docker, CLOSED) and is related to #12243 (Docker overlayfs blocks the runtime fallback build). The Dockerfile fix from #12177 doesn't help wheel users — the wheel itself still ships only the backend.

Error Message

unusable (Sessions, Logs, Cron, Skills, Analytics tabs all empty/error).

Root Cause

The 0.10.0 wheel does not include hermes_cli/web_dist/ files in its RECORD. After install, only two hermes_cli files touch the web area:

$ grep -i "hermes_cli/web" hermes_agent-0.10.0.dist-info/RECORD
hermes_cli/web_server.py,sha256=...,89621
hermes_cli/webhook.py,sha256=...,7606

So:

  1. Fresh installs have no web_dist/ at all → page itself 404s.
  2. Upgrade installs keep whatever web_dist/ was there from the previous version. In my case the v0.9.0 SPA from a previous install (index-CqypI-we.js dated Apr 14) survived. v0.10.0's new web_server.py introduces ephemeral session-token auth on every /api/* route via window.__HERMES_SESSION_TOKEN__ injection into index.html, but the old SPA bundle has no code that reads that token or sets the Authorization: Bearer ... header. Result: every API request → 401.

There's also no hermes_cli/web/ source directory in the wheel, so the runtime "Building web UI..." fallback path mentioned in #12243 can't fire on pip-install hosts either — there's nothing to build from. (And many production hosts won't have npm/Node installed at all.)

Fix Action

Workaround

Until fixed: stop hermes-dashboard.service and use Telegram / MCP / CLI access for everything. Backend functionality is unaffected. Downgrading to v0.9.0 (v2026.4.13) restores the matched backend+frontend pair.

PR fix notes

PR #14918: fix(packaging): include web_dist assets in sdist and improve missing-frontend error

Description (problem / solution / changelog)

Summary

Fixes #14880

The built wheel/sdist is missing hermes_cli/web_dist/ frontend assets, causing the dashboard to return a 404 with an unhelpful error message when accessed.

Root Cause

MANIFEST.in only grafts skills and optional-skills directories. While pyproject.toml declares hermes_cli = ["web_dist/**/*"] in [tool.setuptools.package-data], the sdist tarball itself doesn't include the web_dist directory because MANIFEST.in doesn't graft it. When a wheel is built from the sdist (e.g. in CI/CD pipelines or downstream packagers), the assets are silently excluded.

Changes

MANIFEST.in:

  • Added graft hermes_cli/web_dist to ensure the frontend assets are included in sdist builds

hermes_cli/web_server.pymount_spa():

  • Improved the no-frontend error message to suggest pip install hermes-agent[web] for pip users alongside the existing dev build command

Testing

  • MANIFEST.in graft is additive — if web_dist/ doesn't exist at build time, the graft is a no-op (no build failure)
  • The pyproject.toml package-data glob (web_dist/**/*) already handles wheel inclusion; the MANIFEST.in graft covers the sdist path
  • Error message change is cosmetic — no functional regression

Checklist

  • Follows Conventional Commits format
  • Single logical change
  • No breaking changes
  • Existing tests unaffected

Changed files

  • MANIFEST.in (modified, +1/-0)
  • hermes_cli/web_server.py (modified, +3/-1)

Code Example

$ grep -i "hermes_cli/web" hermes_agent-0.10.0.dist-info/RECORD
hermes_cli/web_server.py,sha256=...,89621
hermes_cli/webhook.py,sha256=...,7606

---

TOKEN=$(curl -s http://localhost:9119/ | grep -oE '__HERMES_SESSION_TOKEN__="[^"]+"' | sed 's/.*="//;s/"//')
for ep in /api/sessions /api/cron/jobs /api/skills /api/tools/toolsets /api/logs /api/analytics/usage; do
  curl -s -o /dev/null -w "%{http_code} $ep\n" -H "Authorization: Bearer $TOKEN" "http://localhost:9119$ep"
done
# 200 /api/sessions
# 200 /api/cron/jobs
# 200 /api/skills
# 200 /api/tools/toolsets
# 200 /api/logs
# 200 /api/analytics/usage

---

python -m venv /tmp/herm-test
/tmp/herm-test/bin/pip install 'hermes-agent @ git+https://github.com/NousResearch/[email protected]'
ls /tmp/herm-test/lib/python*/site-packages/hermes_cli/web_dist/ 2>&1
# → No such file or directory
ls /tmp/herm-test/lib/python*/site-packages/hermes_cli/web/ 2>&1
# → No such file or directory
RAW_BUFFERClick to expand / collapse

Summary

After upgrading from v0.9.0 (v2026.4.13) to v0.10.0 (v2026.4.16) via pip install --upgrade 'hermes-agent @ git+https://github.com/NousResearch/[email protected]', every Hermes dashboard /api/* request returns {"detail":"Unauthorized"} (HTTP 401), making the entire dashboard UI unusable (Sessions, Logs, Cron, Skills, Analytics tabs all empty/error).

This is the pip-install equivalent of #12177 (Docker, CLOSED) and is related to #12243 (Docker overlayfs blocks the runtime fallback build). The Dockerfile fix from #12177 doesn't help wheel users — the wheel itself still ships only the backend.

Root cause

The 0.10.0 wheel does not include hermes_cli/web_dist/ files in its RECORD. After install, only two hermes_cli files touch the web area:

$ grep -i "hermes_cli/web" hermes_agent-0.10.0.dist-info/RECORD
hermes_cli/web_server.py,sha256=...,89621
hermes_cli/webhook.py,sha256=...,7606

So:

  1. Fresh installs have no web_dist/ at all → page itself 404s.
  2. Upgrade installs keep whatever web_dist/ was there from the previous version. In my case the v0.9.0 SPA from a previous install (index-CqypI-we.js dated Apr 14) survived. v0.10.0's new web_server.py introduces ephemeral session-token auth on every /api/* route via window.__HERMES_SESSION_TOKEN__ injection into index.html, but the old SPA bundle has no code that reads that token or sets the Authorization: Bearer ... header. Result: every API request → 401.

There's also no hermes_cli/web/ source directory in the wheel, so the runtime "Building web UI..." fallback path mentioned in #12243 can't fire on pip-install hosts either — there's nothing to build from. (And many production hosts won't have npm/Node installed at all.)

Verification (server side is fine)

With a valid token extracted from index.html, every endpoint works:

TOKEN=$(curl -s http://localhost:9119/ | grep -oE '__HERMES_SESSION_TOKEN__="[^"]+"' | sed 's/.*="//;s/"//')
for ep in /api/sessions /api/cron/jobs /api/skills /api/tools/toolsets /api/logs /api/analytics/usage; do
  curl -s -o /dev/null -w "%{http_code} $ep\n" -H "Authorization: Bearer $TOKEN" "http://localhost:9119$ep"
done
# 200 /api/sessions
# 200 /api/cron/jobs
# 200 /api/skills
# 200 /api/tools/toolsets
# 200 /api/logs
# 200 /api/analytics/usage

So web_server.py + auth middleware are correct — the gap is purely that the SPA dist files needed for the new auth scheme were left out of the wheel.

Repro (clean install)

python -m venv /tmp/herm-test
/tmp/herm-test/bin/pip install 'hermes-agent @ git+https://github.com/NousResearch/[email protected]'
ls /tmp/herm-test/lib/python*/site-packages/hermes_cli/web_dist/ 2>&1
# → No such file or directory
ls /tmp/herm-test/lib/python*/site-packages/hermes_cli/web/ 2>&1
# → No such file or directory

Suggested fix

Either:

  1. Build SPA at wheel-build time and ship the web_dist/ artifacts in the wheel (likely a missing MANIFEST.in or pyproject.toml tool.hatch.build.targets.wheel.force-include / package-data entry). This is the simplest path for end users — pip install just works.
  2. Or ship hermes_cli/web/ source in the wheel and document that end users need Node/npm + a manual hermes dashboard --build step on first run. (Less friendly; many production hosts don't have Node.)
  3. Or split the SPA into a separate hermes-agent-web package on PyPI with the prebuilt artifacts.

Workaround

Until fixed: stop hermes-dashboard.service and use Telegram / MCP / CLI access for everything. Backend functionality is unaffected. Downgrading to v0.9.0 (v2026.4.13) restores the matched backend+frontend pair.

Environment

  • Hermes Agent: v0.10.0 (v2026.4.16)
  • Install: pip install --upgrade 'hermes-agent @ git+https://github.com/NousResearch/[email protected]'
  • Python: 3.12.3
  • OS: Ubuntu 24.04
  • Dashboard service: hermes dashboard --no-open --host <Tailscale IP> --port 9119 --insecure

Happy to test a patch.

extent analysis

TL;DR

The most likely fix is to include the missing web_dist/ files in the wheel by modifying the MANIFEST.in or pyproject.toml file.

Guidance

  • Verify that the web_dist/ directory is missing from the wheel by checking the RECORD file in the hermes_agent-0.10.0.dist-info/ directory.
  • Consider building the SPA at wheel-build time and shipping the web_dist/ artifacts in the wheel for a seamless user experience.
  • As a temporary workaround, stop the hermes-dashboard.service and use alternative access methods like Telegram, MCP, or CLI until a fix is available.
  • Downgrading to v0.9.0 (v2026.4.13) can restore the matched backend+frontend pair, but this may not be a long-term solution.

Example

No code snippet is provided as the issue is related to the packaging and distribution of the hermes-agent package rather than a specific code error.

Notes

The root cause of the issue is the missing web_dist/ files in the wheel, which prevents the new authentication scheme from working correctly. The suggested fixes involve modifying the build process to include these files or providing alternative solutions for users.

Recommendation

Apply the workaround of stopping the hermes-dashboard.service and using alternative access methods until a patch is available that includes the missing web_dist/ files in the wheel.

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 0.10.0 wheel missing hermes_cli/web_dist/ — dashboard 401s on every /api/* request (pip-install vector) [1 pull requests, 1 participants]