A local web UI for viewing and managing Claude Code data — memories, plans, project sessions, and settings — all from a single browser tab.
Reads and writes directly from
~/.claude/— no sync, no cloud, no API key required.
Warning
100% vibe coded. This entire project — backend, frontend, and the README you are reading right now — was generated in a single Claude Code session with zero human-written code. It works on the author's machine. It has no tests. The error handling is optimistic at best. The Markdown renderer in the frontend is a pile of regex. The slug-to-path decoder is documented as "best-effort" because it genuinely cannot do better. If something breaks, that's between you and the vibes. PRs welcome.
| Tab | What it does |
|---|---|
| Plans | View, edit, and delete Claude Code plan files (~/.claude/plans/*.md) with live Markdown preview |
| Memory | Browse every project's MEMORY.md, read and edit them in-place |
| Projects | Card grid of all projects with session counts; click into any session to inspect the message history |
| Settings | Pretty-print ~/.claude/settings.json |
- Python 3.10+
- uv (recommended) or pip
- Claude Code installed and used at least once (so
~/.claude/exists)
uvx --from git+https://github.com/OpenVoiceOS/claude-memory-ui claude-memory-uigit clone https://github.com/OpenVoiceOS/claude-memory-ui
cd claude-memory-ui
uv sync
uv run claude-memory-uiThen open http://127.0.0.1:7373 in your browser.
pip install git+https://github.com/OpenVoiceOS/claude-memory-ui
claude-memory-uiclaude-memory-ui [--host HOST] [--port PORT] [--reload] [--claude-dir PATH]
--host Bind address (default: 127.0.0.1)
--port Port to listen on (default: 7373)
--reload Enable hot-reload for development
--claude-dir Override the Claude data directory (default: ~/.claude)
Also reads the CLAUDE_DIR environment variable.
Examples:
# Different port
claude-memory-ui --port 8080
# Expose on LAN (use with caution — no auth)
claude-memory-ui --host 0.0.0.0
# Point at a non-default Claude directory
claude-memory-ui --claude-dir /path/to/other/.claude~/.claude/
├── plans/ ← *.md plan files (read + write)
├── projects/
│ └── <slug>/
│ ├── *.jsonl ← session message logs (read-only)
│ └── memory/
│ └── MEMORY.md ← per-project memory (read + write)
└── settings.json ← Claude settings (read-only)
Project directories are named with a slug where / is replaced by -, e.g.
/home/alice/projects/myrepo → -home-alice-projects-myrepo.
The UI decodes these back to human-readable paths on a best-effort basis.
The server binds to 127.0.0.1 by default — it is localhost-only and not accessible from other machines. Do not expose it on a public interface without adding authentication, as it has full read/write access to your Claude memory and plan files.
git clone https://github.com/OpenVoiceOS/claude-memory-ui
cd claude-memory-ui
uv sync
uv run claude-memory-ui --reloadThe UI is a single vanilla-JS file at static/index.html. The backend is a single FastAPI file at app.py. No build step required.
MIT