How to view Claude Code project memory

Browse the per-project memory at ~/.claude/projects/<project>/memory/ — MEMORY.md as a clickable index of layers, each linked file expandable inline, and "Open in…" for Finder, Cursor, VS Code, Zed, and more.

Claude Code's agents and skills can write per-project memory to a hidden directory inside ~/.claude/. claude-devtools renders that memory directly in the sidebar — read-only, so you can browse without worrying about edits, and one click away from your editor when you do want to change it.

What lives in memory/

For every project Claude Code has touched, there's a directory at:

~/.claude/projects/<encoded-project-id>/memory/

The encoding is the same one used for session JSONL files: /Users/you/dev/crawler becomes -Users-you-dev-crawler. claude-devtools handles this for you on macOS, Linux, and Windows.

Inside, there's a MEMORY.md index plus one .md file per layer:

~/.claude/projects/-Users-you-dev-crawler/memory/
├── MEMORY.md
├── working-style.md
├── snapshot-is-full-fetch-outcome.md
└── architecture-llm-first.md

MEMORY.md is itself a markdown index — bullet points where each item links to a layer file and adds a one-line hook describing it:

# Memory index

- [Working style](working-style.md) — wants the "why" first, pushes back on architecture
- [Snapshot = full fetch outcome](snapshot-is-full-fetch-outcome.md) — prepare.py captures status/blocks/redirects/raw+rendered HTML/sitemap/XHR
- [Architecture: LLM-first](architecture-llm-first.md) — one structured-output LLM call per site within 30-min budget

How claude-devtools renders it

When you select a project that has a memory/ directory, a single MEMORY row appears in the sidebar directly above SESSIONS — just the header, no inline expansion.

Click the row and claude-devtools opens a dedicated Memory pane as a new tab (same UX class as a session tab). The pane is a master/detail layout:

  • Left: the layer list (everything in MEMORY.md, plus any unlinked .md files under an Unlinked group).
  • Right: the selected layer rendered as markdown — full size, with the same styling as the chat view, plus an in-pane search input and the Open in… launcher in the toolbar.

Because it's a real tab, you can split-view it next to a session, drag it between panes, and switch back to it from the tab bar. Projects with no memory/ directory get no MEMORY row at all.

"Open in…" — hand any layer to your editor

The Memory pane toolbar shows a pill-shaped Open in… trigger with the current filename. Clicking it drops down the icon-driven launcher modeled on the reference screenshot. Available options depend on which apps are installed:

TargetBehaviourShortcut
Finder / Explorer / FilesReveal the file (or the memory/ folder)⌘O / first item
Cursor, VS Code, Zed, Android StudioOpen the file in the IDE25
XcodeOpen the file (macOS only)6
Ghostty, iTerm, TerminalOpen a terminal in the parent directory79
Copy pathCopy the absolute path to the clipboard⌘⇧C

Detection runs once per session: unavailable apps don't appear in the menu, so a Linux user never sees Xcode and a Windows user never sees iTerm. Numeric 19 shortcuts fire while the menu is open.

Standalone / Docker mode

If you run claude-devtools as the headless HTTP server (Docker, remote box), the browser has no display to launch Cursor or Finder. In that mode the Open-in menu collapses to just Copy path, and the MEMORY.md index + layer contents still render normally.

Read-only by design

claude-devtools never writes to memory files. All editing happens via your editor — claude-devtools is a viewer. If you need to update a layer, click Open in Cursor (or your editor of choice) and edit there. The sidebar re-reads the file when you save.

GitHub

On this page