great that hermes agent is now available on Cloudron. But I have some issues with dashboard.
With help of my local AI i have drafter this message...
OPEN QUESTION TO THE MAINTAINER (setting the scene)
Is the browser-side dashboard (including the Chat and System pages) an intended
surface for this Cloudron package? Or is the dashboard primarily meant for Kanban
- the /v1 API, with chat/sessions hosted on the local desktop/CLI and via the
gateway's platform channels? This determines whether the report below is a bug you
want to fix or an intentional scope decision.
If web pages ARE in scope: the Hermes codebase ships full hosted-web-chat support
and first-class subpath-reverse-proxy support (X-Forwarded-Prefix handling and
/assets rewriting in _serve_index), so the failure below looks like a small,
easy-to-ship nginx routing gap in the package rather than deliberate design. The
proposed one-block fix resolves every affected page at once.
The bug:
I run the Hermes Agent package on Cloudron. The dashboard shell loads fine;
/kanban, the left nav, and the Files page all work. But every dynamically-loaded
page is blank: clicking "Chat" and clicking "System" both give a completely empty
screen, with the browser console showing 403 (Forbidden, net::ERR_ABORTED) on
their lazy-loaded asset chunks:
/assets/ChatPage-*.js
/assets/SystemPage-*.js
/assets/xterm-BrP-ENHg.css and /assets/xterm-*.js
/assets/themes-*.js
/assets/useProfileScope-*.js
/assets/chat-activation-*.js
/assets/ModelReloadConfirm-*.js
ROOT CAUSE (confirmed, not speculation)
The package's nginx only routes /kanban/* to the dashboard backend
(127.0.0.1:9119), rewriting the prefix and setting X-Forwarded-Prefix: /kanban.
Hermes's _serve_index then rewrites the statically-referenced asset URLs in the
HTML to /kanban/assets/... -- which is exactly why the shell, the Files page, and
the Kanban page all work.
But pages like Chat and System are loaded at runtime via dynamic import() with
build-time absolute paths (/assets/...). The browser therefore requests their
chunks WITHOUT the /kanban prefix. Those requests land on 'location /' -> the
front landing page's try_files -> fall through to the headless API server (port
8642), which has no SPA assets and returns 403/404. The dashboard backend itself
serves every chunk fine (returns 200), so this is purely a reverse-proxy routing
gap in the package, not a Hermes bug.
Quick repro that isolates it (from a Cloudron terminal):
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8000/kanban/assets/ChatPage-*.js # 200
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8000/assets/ChatPage-*.js # 403/403
PROPOSED FIX (in the package's nginx.conf)
Add a location /assets/ block that proxies to the same dashboard backend with the
same headers as /kanban/, including X-Forwarded-Prefix: /kanban so the CSS route
keeps rewriting url(/fonts/...) references correctly:
location /assets/ {
proxy_pass http://127.0.0.1:9119;
proxy_http_version 1.1;
proxy_set_header Host 127.0.0.1:9119;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Prefix /kanban;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
}
This single block fixes every lazy-loaded page at once (Chat, System, and any
future dynamically-imported route).
Environment: Hermes Agent v0.20.0 (2026.8.3), Cloudron deployment, dashboard bound
to 127.0.0.1:9119, SPA mounted under /kanban.