A local, branchable research canvas powered by real Hermes Agent sessions.
Project status: Alpha. The core session, branching, selection, persistence and security boundaries are tested, but APIs and installation details may change before
1.0.
Every document node maps to an independent Hermes session. Selecting text, asking a follow-up, or creating a sibling produces a real fork with isolated context—not a decorative frontend branch.
- Infinite visual canvas with persisted layout
- Real Hermes root, child and sibling sessions
- Concurrent branches without cross-talk
- Streaming answers and compact tool progress
- Select text to Explain, ELI5, get an Example, or Go Deeper
- Reader and canvas modes
- Crisp fractional zoom and semantic overview cards
- IBM Plex document typography
- Native card scrolling, header-only dragging and touch containment
- Dark and light themes
- Same-origin security boundary: provider credentials never reach the browser
- Hermes Agent installed and configured
- Hermes API Server listening on
127.0.0.1:8642 - Python 3.11 or newer
- A browser
Node.js is required only for development. The production frontend is committed under web/hermes-dist/.
git clone https://github.com/Nextbasedev/hermes-visual-workspace.git
cd hermes-visual-workspace
./scripts/install.shThe installer never prints or copies model/provider credentials. It looks for the local Hermes API_SERVER_KEY in the active environment or Hermes configuration and validates the loopback API.
./scripts/start.shOpen:
http://127.0.0.1:4180
Defaults can be overridden without editing source:
HERMES_VISUAL_HOST=127.0.0.1 \
HERMES_VISUAL_PORT=4180 \
HERMES_VISUAL_DB="$HOME/.hermes/visual-workspace/workspaces.sqlite3" \
./scripts/start.shKeep the default loopback bind unless you intentionally place the app behind a trusted Tailscale or local reverse proxy. There is no public-network authentication layer.
./scripts/doctor.shIt checks Python, the prebuilt frontend, local API credentials and Hermes API health without displaying secrets.
If the Hermes API is not enabled, run Hermes's setup flow and enable the API Server adapter on 127.0.0.1:8642, then restart the Hermes gateway. See the current Hermes messaging/API documentation.
Generate a service from the included template:
./scripts/install-service.shThen inspect it with:
systemctl --user status hermes-visual-workspace
journalctl --user -u hermes-visual-workspace -fTo survive logout/reboot without an active user session:
loginctl enable-linger "$USER"git pull --ff-only
./scripts/install.sh
systemctl --user restart hermes-visual-workspace # if installed as a serviceBy default, workspace metadata and layout are stored in:
~/.hermes/visual-workspace/workspaces.sqlite3
Hermes remains the canonical store for conversation history. The app database stores only application ownership, node mappings, rendered documents and layout.
Back up the SQLite database before destructive maintenance. Uninstalling the service does not remove data.
Browser → same-origin local backend → Hermes API on 127.0.0.1:8642
- Browser JavaScript never receives
API_SERVER_KEYor provider tokens. - The backend rejects non-loopback Hermes API URLs and redirects.
- Only app-generated
rh_...sessions andrw_...workspaces are exposed. - Unrelated CLI, Telegram, Discord and cron sessions are not listed.
- Static files are contained after path and symlink resolution.
This is a local/trusted-network application. Do not expose it directly to the public Internet.
Please report security vulnerabilities privately through GitHub's Security → Report a vulnerability flow. See SECURITY.md; do not open a public issue for suspected vulnerabilities.
npm ci
npx playwright install chromium
npm run verify
git diff --checkFocused suites cover backend ownership/transactions/SSE behavior, browser branching and concurrency, IBM font loading, semantic zoom, real mouse selection, card-native scrolling, canvas pan/zoom and persisted layout.
backend/— Python stdlib same-origin server, Hermes adapter and SQLite storesrc/hermes-workspace/— application UIsrc/core/— MIT-licensed Rabbithole document renderer and canvas primitives used by the UIweb/hermes-dist/— committed production buildtest/andtests/— browser and backend acceptance suitesdocs/hermes-workspace/— product and API contracts
MIT. The visual workspace reuses portions of Shlok Khemani's MIT-licensed Rabbithole project. IBM Plex fonts are distributed under the SIL Open Font License 1.1. See THIRD_PARTY_NOTICES.md and licenses/.
Contributions are welcome. Read CONTRIBUTING.md before opening a pull request.

