[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81059":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":18,"compositeScore":19,"rankGlobal":9,"rankLanguage":9,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":15,"starSnapshotCount":15,"syncStatus":14,"lastSyncTime":28,"discoverSource":29},81059,"mnemosyne-dashboard","wysie\u002Fmnemosyne-dashboard","wysie","Local-only read-only web dashboard for Mnemosyne memory stores",null,"JavaScript",92,5,50,2,0,14,21,42,2.33,"MIT License",false,"main",true,[],"2026-06-12 02:04:10","# Mnemosyne Dashboard\n\nA local-first web dashboard for browsing, visualising, and safely maintaining a Mnemosyne memory store from Hermes Agent.\n\nIt is intentionally small: Python standard library server, static HTML\u002FCSS\u002FJS frontend, no external JS runtime, no cloud calls, and read-only browsing by default. Optional password-gated maintenance mode supports safe Mnemosyne-style memory supersession\u002Fexpiry without hard deletes or raw overwrite edits.\n\n## Installation as a Hermes plugin\n\nInstall directly from GitHub with the Hermes plugin command:\n\n```bash\nhermes plugins install wysie\u002Fmnemosyne-dashboard --enable\n```\n\nThen restart the running Hermes process so plugin tools are discovered. For the gateway:\n\n```bash\nhermes gateway restart\n```\n\nManual clone is also supported if you are developing the plugin locally:\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fwysie\u002Fmnemosyne-dashboard.git ~\u002F.hermes\u002Fplugins\u002Fmnemosyne-dashboard\nhermes plugins enable mnemosyne-dashboard\nhermes gateway restart\n```\n\nIf the directory already exists and you intentionally want to replace it, use:\n\n```bash\nhermes plugins install wysie\u002Fmnemosyne-dashboard --enable --force\n```\n\n`--force` deletes the existing plugin directory before reinstalling, so back up any plugin-local changes first.\n\n## Updating\n\nIf you installed with the Hermes plugin command, update with:\n\n```bash\nhermes plugins update mnemosyne-dashboard\nhermes gateway restart\n```\n\nIf you want to force a clean reinstall from GitHub instead of pulling into the existing directory:\n\n```bash\nhermes plugins install wysie\u002Fmnemosyne-dashboard --enable --force\nhermes gateway restart\n```\n\nIf you installed or develop the plugin as a manual git clone, update with git directly:\n\n```bash\ncd ~\u002F.hermes\u002Fplugins\u002Fmnemosyne-dashboard\ngit pull --ff-only\nhermes gateway restart\n```\n\nUse the `git pull` path when you want to keep a normal local checkout. Use the `hermes plugins install --force` path when you want Hermes to replace the plugin directory from the remote repo.\n\n## Screenshots\n\nThe screenshots below are generated from a synthetic mock Mnemosyne database. They do not contain private memory data.\n\n| Desktop | Mobile |\n| --- | --- |\n| ![Desktop dark overview](docs\u002Fscreenshots\u002Fdesktop-dark-overview.png) | ![Mobile dark overview](docs\u002Fscreenshots\u002Fmobile-dark-overview.png) |\n| ![Desktop dark Today in memory](docs\u002Fscreenshots\u002Fdesktop-dark-today.png) | ![Mobile light Today in memory](docs\u002Fscreenshots\u002Fmobile-light-today.png) |\n| ![Desktop light Context Bank](docs\u002Fscreenshots\u002Fdesktop-light-profile.png) | ![Mobile dark Context Bank](docs\u002Fscreenshots\u002Fmobile-dark-profile.png) |\n| ![Desktop dark Visualiser constellation](docs\u002Fscreenshots\u002Fdesktop-dark-constellation.png) | ![Mobile light Visualiser constellation](docs\u002Fscreenshots\u002Fmobile-light-constellation.png) |\n| ![Desktop dark Neural Map visualiser](docs\u002Fscreenshots\u002Fdesktop-dark-neural.png) | ![Mobile dark Neural Map visualiser](docs\u002Fscreenshots\u002Fmobile-dark-neural.png) |\n| ![Desktop light overview](docs\u002Fscreenshots\u002Fdesktop-light-overview.png) | ![Mobile light search](docs\u002Fscreenshots\u002Fmobile-light-search.png) |\n| ![Desktop dark global search](docs\u002Fscreenshots\u002Fdesktop-dark-search.png) | ![Mobile dark timeline](docs\u002Fscreenshots\u002Fmobile-dark-timeline.png) |\n| ![Desktop light graph](docs\u002Fscreenshots\u002Fdesktop-light-graph.png) | ![Mobile light graph](docs\u002Fscreenshots\u002Fmobile-light-graph.png) |\n| ![Desktop dark timeline](docs\u002Fscreenshots\u002Fdesktop-dark-timeline.png) | ![Mobile dark settings](docs\u002Fscreenshots\u002Fmobile-dark-settings.png) |\n\nRegenerate the gallery locally with:\n\n```bash\npython3 scripts\u002Fgenerate_mock_screenshots.py\n```\n\nThe generator creates a temporary mock SQLite database, starts the dashboard on a random localhost port, captures desktop\u002Fmobile viewports in dark and light themes, and writes the images to `docs\u002Fscreenshots\u002F`.\n\n## Features\n\n- Read-only Memory Intelligence views:\n  - Today — daily digest of memories added\u002Frecalled, triples, consolidations, entities, sources, and sessions\n  - Context Bank — inferred context sections derived from active memories and triples without writing back\n  - Visualiser — selectable Constellation and Neural Map views with click-through read-only inspectors\n  - Visualiser 3D — separate Three.js\u002FWebGL comparison lab for GPU-rendered Constellation and Neural Map prototypes\n- Nine-section product navigation instead of raw database tabs:\n  - Overview — counts, breakdowns, quick actions, and recent memories\n  - Today — read-only daily memory digest\n  - Context Bank — inferred context from active memory\n  - Visualiser — Constellation and Neural Map memory visualisers\n  - Visualiser 3D — Three.js\u002FWebGL Constellation and Neural Map comparison page\n  - Explore — global search, memory browser, and recall debugger\n  - Activity — timeline and consolidation history\n  - Graph — relationship graph and triples table\n  - Settings — optional password authentication and server\u002Fdatabase config\n- Overview counts for working memory, episodic memory, triples, and consolidations\n- Recent memory cards with raw JSON detail drawer\n- Clickable overview breakdown rows and quick actions that jump into filtered workflows\n- Explore section:\n  - Global search across memories, triples, and consolidations\n  - Memory browser with query, tier\u002Fsource\u002Fscope\u002Fsession\u002Fstatus filters, sorting, URL deep links, bulk selection, and safe bulk maintenance\n  - Recall debugger with approximate ranking explanations\n- Activity section:\n  - Mini timeline grouped by day or session\n  - Consolidation history with filtering, JSON inspection, and jump-to-session memories\n- Graph section:\n  - Interactive relationship graph with query filtering, mouse-wheel zoom, drag-to-pan, and reset view\n  - Clickable nodes and edges\n  - Inspector panel with jumps into Triples and Memories\n  - Triples table with clickable row details\n- Optional password authentication, configurable from the Settings tab\n- Password-gated memory maintenance mode with supersede, expire\u002Finvalidate, and importance update actions\n- Automatic SQLite backups and JSONL audit log for admin memory mutations\n- Editable Settings fields for bind address, port, and Mnemosyne database path\n- Database diagnostics for install health: path, readability, file size, modified time, tables, row counts, and copyable diagnostics\n- Unified session detail drawer from top sessions, consolidation entries, and timeline session chips\n- Desktop and mobile responsive layouts\n- Dark and light themes\n- Mnemosyne-inspired light theme with self-hosted fonts\u002Fassets\n- `\u002Fapi\u002Fhealth` endpoint for smoke checks and uptime probes\n- Baseline browser security headers and hardened static asset serving\n\n## Safety model\n\n- Binds to `0.0.0.0` by default so the dashboard is reachable on your LAN\n- Reports a localhost URL for same-machine access and a LAN URL when one is detectable\n- Browsing opens the Mnemosyne SQLite database with `mode=ro`\n- Localhost-only memory admin can be enabled without password for developer convenience; LAN\u002Fnon-local admin mode requires password auth before mutation endpoints work\n- Admin actions are limited to Mnemosyne-aligned supersede, expire\u002Finvalidate, and importance updates\n- Raw memory content overwrite and hard delete endpoints are intentionally not exposed\n- Admin mutations create a SQLite backup by default and append to `audit.jsonl`\n- Optional password auth is disabled by default and can be enabled from Settings\n- No external JavaScript or CSS dependencies\n- Runtime state lives under `~\u002F.hermes\u002Fplugin-data\u002Fmnemosyne-dashboard\u002F`\n- On macOS, run it as a separate LaunchAgent with `KeepAlive=true` if you want the dashboard to survive Hermes gateway restarts\n- Static assets are resolved under `static\u002F` before serving; path escapes are rejected\n- Browser responses include CSP, no-sniff, frame-deny, and no-referrer headers\n\nBy default, the dashboard is reachable from your LAN. Treat that as exposing local memory metadata to your network. Memory admin\u002Fediting remains disabled by default; if you expose admin mode on LAN\u002Fnon-local hosts, password auth is required before mutation endpoints work. Put the dashboard behind a firewall\u002FVPN\u002Freverse proxy auth if needed.\n\n## Hermes tools\n\nThe plugin registers:\n\n- `mnemosyne_dashboard_start`\n- `mnemosyne_dashboard_stop`\n- `mnemosyne_dashboard_status`\n- `mnemosyne_dashboard_config`\n\nExample tool arguments:\n\n```json\n{\n  \"host\": \"0.0.0.0\",\n  \"port\": 9876,\n  \"db_path\": \"\u002FUsers\u002Fyou\u002F.hermes\u002Fmnemosyne\u002Fdata\u002Fmnemosyne.db\"\n}\n```\n\nChanging host\u002Fport\u002Fdb_path requires stopping and starting the dashboard process again.\n\n## Configuration\n\nDefault config file:\n\n```text\n~\u002F.hermes\u002Fplugin-data\u002Fmnemosyne-dashboard\u002Fconfig.json\n```\n\nDefault config:\n\n```json\n{\n  \"host\": \"0.0.0.0\",\n  \"port\": 8765,\n  \"db_path\": \"~\u002F.hermes\u002Fmnemosyne\u002Fdata\u002Fmnemosyne.db\",\n  \"auth_enabled\": false,\n  \"memory_admin_enabled\": false\n}\n```\n\nOn first config creation, the dashboard auto-detects the Mnemosyne SQLite database path by checking `MNEMOSYNE_DASHBOARD_DB`, `MNEMOSYNE_DB_PATH`, `MNEMOSYNE_DB`, then the standard Hermes path `~\u002F.hermes\u002Fmnemosyne\u002Fdata\u002Fmnemosyne.db`.\n\nYou can update it through the Hermes tool:\n\n```json\n{\n  \"host\": \"0.0.0.0\",\n  \"port\": 9876\n}\n```\n\nOr edit JSON directly, then restart the dashboard.\n\nEnvironment overrides are also supported:\n\n- `MNEMOSYNE_DASHBOARD_CONFIG` — alternate config file path\n- `MNEMOSYNE_DASHBOARD_HOST` — bind address\n- `MNEMOSYNE_DASHBOARD_PORT` — bind port\n- `MNEMOSYNE_DASHBOARD_DB` — SQLite DB path\n- `MNEMOSYNE_DB_PATH` \u002F `MNEMOSYNE_DB` — also considered during first-run DB auto-detection\n\n## Manual run\n\n```bash\npython server.py --host 0.0.0.0 --port 8765\n```\n\nBind to localhost only:\n\n```bash\npython server.py --host 127.0.0.1 --port 8765\n```\n\nOpen locally:\n\n```text\nhttp:\u002F\u002F127.0.0.1:8765\u002F\n```\n\nIf bound to `0.0.0.0`, use your machine’s LAN IP from another device, e.g.:\n\n```text\nhttp:\u002F\u002F192.168.1.10:8765\u002F\n```\n\n## Optional macOS launchd auto-restart\n\nIf you want the dashboard to survive Hermes gateway restarts or plugin-owned process shutdowns, run it as a separate macOS LaunchAgent instead of starting it from inside the Hermes gateway process.\n\nThe helper below writes `~\u002FLibrary\u002FLaunchAgents\u002F\u003Clabel>.plist` with `RunAtLoad=true` and `KeepAlive=true`, then bootstraps it into the current GUI session:\n\n```bash\ncd ~\u002F.hermes\u002Fplugins\u002Fmnemosyne-dashboard\nMNEMOSYNE_DASHBOARD_LAUNCHD_LABEL=io.example.mnemosyne-dashboard \\\nMNEMOSYNE_DASHBOARD_HOST=127.0.0.1 \\\nMNEMOSYNE_DASHBOARD_PORT=8765 \\\nbash scripts\u002Finstall_launchd_macos.sh\n```\n\nUseful service commands:\n\n```bash\nLABEL=io.example.mnemosyne-dashboard\nPLIST=~\u002FLibrary\u002FLaunchAgents\u002F$LABEL.plist\n\n# Restart without unloading the service\nlaunchctl kickstart -k gui\u002F$(id -u)\u002F$LABEL\n\n# Full reload after changing the plist\nlaunchctl bootout gui\u002F$(id -u) \"$PLIST\" 2>\u002Fdev\u002Fnull || true\nlaunchctl bootstrap gui\u002F$(id -u) \"$PLIST\"\nlaunchctl kickstart -k gui\u002F$(id -u)\u002F$LABEL\n\n# Status, listener, and smoke check\nlaunchctl print gui\u002F$(id -u)\u002F$LABEL | head -80\nlsof -nP -iTCP:8765 -sTCP:LISTEN\ncurl -fsSI http:\u002F\u002F127.0.0.1:8765\u002F | head\n```\n\nKeep the bind host as `127.0.0.1` unless you explicitly want LAN access to memory metadata.\n\n## Development\n\n```bash\ncd ~\u002F.hermes\u002Fplugins\u002Fmnemosyne-dashboard\n~\u002F.hermes\u002Fhermes-agent\u002Fvenv\u002Fbin\u002Fpython -m ruff check .\n~\u002F.hermes\u002Fhermes-agent\u002Fvenv\u002Fbin\u002Fpython -m pytest -q\n~\u002F.hermes\u002Fhermes-agent\u002Fvenv\u002Fbin\u002Fpython -m compileall -q .\nnode --check static\u002Fapp.js\n```\n\nRestart the dashboard after backend\u002Fserver changes:\n\n```bash\n~\u002F.hermes\u002Fhermes-agent\u002Fvenv\u002Fbin\u002Fpython - \u003C\u003C'PY'\nimport importlib.util, pathlib\np=pathlib.Path.home()\u002F'.hermes\u002Fplugins\u002Fmnemosyne-dashboard\u002F__init__.py'\nspec=importlib.util.spec_from_file_location('mnemo_dash', p)\nmod=importlib.util.module_from_spec(spec); spec.loader.exec_module(mod)\nprint(mod._stop({}))\nprint(mod._start({}))\nPY\n```\n\n## Repository layout\n\n```text\nplugin.yaml\n__init__.py              # Hermes tool registration + process lifecycle\nconfig.py                # Config file\u002Fenv\u002Fdefault resolution\nserver.py                # ThreadingHTTPServer + API\u002Fstatic routes\ndashboard_core.py        # Read-only SQLite access\ntests\u002F                   # pytest coverage for core\u002Fconfig behavior\nstatic\u002F                  # HTML\u002FCSS\u002FJS\u002Ffonts\n.github\u002Fworkflows\u002Fci.yml # GitHub Actions smoke tests\n```\n\n## Font\u002Fassets note\n\nThe light theme uses locally hosted Playfair Display, Great Vibes, and Cormorant Garamond font assets. These font families are available under the SIL Open Font License from Google Fonts. Keep font licensing notices intact if replacing or redistributing assets.\n","Mnemosyne Dashboard 是一个本地化的只读网页仪表盘，用于浏览、可视化和安全维护Hermes Agent中的Mnemosyne记忆存储。项目的核心功能包括通过Python标准库服务器与静态HTML\u002FCSS\u002FJS前端实现的轻量级架构，不依赖外部JS运行环境或云服务，并默认支持只读访问；此外还提供了密码保护的维护模式，允许用户以Mnemosyne风格进行记忆更新而无需执行硬删除或直接覆盖编辑。此工具特别适用于需要在本地环境中查看及管理记忆数据的应用场景，如个人知识管理系统或私密信息存储解决方案中，确保了数据的安全性和隐私性。","2026-06-11 04:03:21","CREATED_QUERY"]