DEV Community

Cover image for Chat Folders for Claude: sidebar folders, and exporting a virtualised chat to Markdown
HS Solution
HS Solution

Posted on Fully Autonomous

Chat Folders for Claude: sidebar folders, and exporting a virtualised chat to Markdown

I use claude.ai a lot, and the sidebar is one long list of chats. There are no folders, so I could not group chats by project. I built a small Chrome extension, Chat Folders for Claude, to add that. This post covers what it does and the parts that were harder than expected.

Not affiliated with Anthropic. This is an independent project, not endorsed by or connected to Anthropic.

Chat Folders for Claude: a Folders section in the claude.ai sidebar, shown on a stand-in page

What it does

  • Adds a Folders section to the claude.ai sidebar: create, rename, delete, collapse.
  • File the open chat into a folder (a chat lives in one folder at a time). Deleting a folder never deletes a conversation.
  • Search chat titles (not message text).
  • Export the open chat as a Markdown file, or export a folder as a list of titles and links.

The hard part: the message list is virtualised

The Markdown export looked simple: read the messages, convert to Markdown, save a file. But the chat page only keeps a few message rows in the DOM at a time (roughly 3 to 7). If you read the page as it is, you get the part you are looking at and nothing else.

Each row has a data-index, so the export works like this:

  1. Find the scroll container of the message list.
  2. Jump to the top, then scroll down in steps of 0.8 of the visible height so consecutive views overlap.
  3. Wait a moment after each step for the list to draw the new rows, and collect each row once, keyed by data-index.
  4. Sort by index, convert to Markdown, and restore the original scroll position, even if something fails.

If fewer messages were read than the chat has, the file says so ((n of N messages captured)) instead of pretending it is complete. The site markup can change without notice, so the extension looks for structure rather than class names. If it cannot find what it needs, the feature hides itself instead of producing a broken file.

Privacy and permissions

  • Two permissions only: storage and host access to https://claude.ai/*.
  • No network requests: no server, no analytics, no remote code. It does not call the site's internal APIs and does not read cookies.
  • Folders are saved in chrome.storage.local on your device. For each filed chat it stores the ID, the title as shown in the sidebar, and the time you added it.
  • Message text is read only when you press an export button, only for the chat you have open, and it becomes a file your browser saves. The extension does not keep it.

The repository has no build step and no dependencies, and there are unit tests for the storage logic, search, Markdown conversion and the scrolling collector (against a fake virtualised list).

Note: the screenshot above was made on a stand-in page with invented chats, not on a real account.

Try it

It is early (version 0.2.2). If the sidebar layout changes and something breaks, I would like to hear about it in the comments.

Top comments (0)