First off, thank you for publishing this script! It’s been really useful for exporting Claude chats. While using version 4.1, I ran into a couple of issues and worked on fixes. Here’s a summary:
Issues observed
React error spam (Minified React error #418)
Cause: The export buttons were being injected inside Claude’s React-managed DOM (.flex-row.items-center.gap-2).
Effect: This triggered hydration mismatches and filled the console with React errors.
Chat titles not meaningful
Often the exported filename was just Claude.md.
This happened when the app didn’t expose a conversation title via h1 or document.title.
Fixes applied
Shadow DOM mount
The export buttons are now mounted in a floating widget attached to <body> with its own Shadow DOM.
→ No more React reconciliation errors, and UI is isolated.
Better title extraction getChatTitle() was extended:
Tries standard selectors.
Falls back to document.title.
If still generic, derives a title from the first user message snippet (up to 60 chars).
→ Filenames like 20250918214001_Random_walk_image_generation_in_C.md instead of just Claude.md.
Next steps
If you’re open to merging these improvements, I’d be glad to share the full patched code.
Alternatively, I can maintain a fork and keep attribution to your original project.
Feedback & Suggested Improvements
Hi Ivan 👋,
First off, thank you for publishing this script! It’s been really useful for exporting Claude chats. While using version 4.1, I ran into a couple of issues and worked on fixes. Here’s a summary:
Issues observed
React error spam (
Minified React error #418
).flex-row.items-center.gap-2
).Chat titles not meaningful
Claude.md
.h1
ordocument.title
.Fixes applied
Shadow DOM mount
The export buttons are now mounted in a floating widget attached to
<body>
with its own Shadow DOM.→ No more React reconciliation errors, and UI is isolated.
Better title extraction
getChatTitle()
was extended:document.title
.→ Filenames like
20250918214001_Random_walk_image_generation_in_C.md
instead of justClaude.md
.Next steps
Thanks again for maintaining this script!
— Foad S. Farimani (@fsfarimani)