A standalone, read-only web dashboard for Hermes Agent. Browse your config, sessions, memory, skills, and cron jobs through a clean web UI — without touching the Hermes codebase.
Hermes Agent stores all its state in ~/.hermes/ — config files, SQLite databases, markdown memory files, skill definitions, and cron job schedules. This dashboard reads those files and presents them in a navigable web interface.
Zero coupling to Hermes. This project doesn't import from or depend on the Hermes Agent codebase. It just reads the same files.
🚧 In development — spec and UI design phase.
- Requirements document
- UI design (v0-generated Next.js prototype)
- Technical design document
- Implementation tasks
- FastAPI backend
- Frontend (vanilla HTML/CSS/JS SPA)
| Section | What it shows |
|---|---|
| Overview | Model info, session count, memory usage bars, skill count, cron job count, data file health checks |
| Config | All config.yaml settings as styled cards with raw YAML toggle |
| Environment | API keys with redacted preview (first 4 chars + asterisks) |
| Sessions | Paginated session list with FTS5 search, click-through to full message thread |
| Memory | Agent memory and user profile side-by-side with usage progress bars |
| Soul | Agent persona/personality file rendered as markdown |
| Skills | Card grid with category filter, click to expand skill details |
| Cron Jobs | Scheduled tasks with state badges, schedule, delivery target |
hermes-dashboard/
├── app.py # FastAPI backend (reads ~/.hermes/ files)
├── static/ # Vanilla HTML/CSS/JS frontend (no build step)
│ ├── index.html
│ ├── style.css
│ └── app.js
├── requirements.txt # Python deps: fastapi, uvicorn, pyyaml
├── v0-generated/ # Next.js UI prototype (design reference only)
├── .kiro/specs/ # Spec documents (requirements, design, tasks)
└── README.md
Backend: FastAPI serving JSON API endpoints + static files. Reads all data from ~/.hermes/ in read-only mode. Binds to 127.0.0.1:8787 (localhost only).
Frontend: Vanilla HTML/CSS/JS SPA. No build step, no npm, no framework. Fetches from the JSON API and renders client-side. Dark/light theme with OS auto-detect + manual toggle.
All read from ~/.hermes/ (respects HERMES_HOME env var):
| Source | File | Format |
|---|---|---|
| Config | config.yaml |
YAML |
| API Keys | .env |
Key=value (redacted on display) |
| Sessions & Messages | hermes_state.sqlite |
SQLite (WAL, FTS5) |
| Agent Memory | MEMORY.md |
Markdown (§-delimited entries) |
| User Profile | USER.md |
Markdown (§-delimited entries) |
| Persona | SOUL.md |
Markdown |
| Skills | skills/*/SKILL.md |
YAML frontmatter + Markdown |
| Cron Jobs | cron/jobs.json |
JSON |
| Method | Path | Description |
|---|---|---|
| GET | /api/status |
Health check, file existence, hermes home path |
| GET | /api/config |
Parsed config.yaml contents |
| GET | /api/env |
Redacted environment variables |
| GET | /api/sessions |
Paginated session list (supports ?search= and ?limit=) |
| GET | /api/sessions/{id}/messages |
Messages for a specific session |
| GET | /api/memory |
Memory + user profile content with usage stats |
| GET | /api/soul |
Soul/persona file content |
| GET | /api/skills |
All skills with parsed frontmatter |
| GET | /api/cron |
Cron job list |
- Read-only — never writes to Hermes data files
- Standalone — no imports from or dependencies on the Hermes codebase
- Localhost only — binds to 127.0.0.1, rejects non-localhost origins
- No build step — frontend is vanilla HTML/CSS/JS, backend is a single Python file
- Secrets stay secret — API keys are redacted before leaving the backend, SQLite opened in read-only mode
MIT
Built as a companion tool for Hermes Agent by Nous Research.