Save Claude conversations to Obsidian automatically
Copying a Claude chat into Obsidian works fine once. You paste it, fix the formatting and file it. By the tenth chat most people have stopped, and the ones worth keeping stay in Claude’s sidebar. A post on r/ObsidianMD put it plainly: “Right now the only way I know how to do that is downloading each chat one by one, or copying and pasting, and that is not sustainable long term.”
Long chats add a second problem. With code execution on, Claude summarizes earlier messages when a chat nears its context limit. Anthropic says the full history is kept, but one r/ObsidianMD post describes what people run into anyway: long chats get “compacted” and “lose details. Decisions, file names, where we left off.” Copying by hand doesn’t rescue a long chat either: one user found that select-all in the desktop app only grabbed about two pages.
A lot of “Claude Obsidian” searches are about the other direction: letting Claude read and write your notes. That’s done with an MCP server, for example Claude Desktop with the filesystem server pointed at your vault. We cover that side in making your vault work with AI. This post is about saving the chats themselves as notes.
Four ways to get Claude chats into Obsidian
| Method | What it takes | Updates when the chat continues? | Good for |
|---|---|---|---|
| Copy and paste | Every chat, by hand | No | One answer you need right now |
| Obsidian Web Clipper | A click per chat, with the chat open | No, you clip it again | The odd chat, using Obsidian’s own free extension |
| Claude’s export + an importer plugin | Request the export, wait for the email, import | Only when you export again | Pulling in your history once |
| A tool that saves on its own, like Carry | Set up once | Yes | Keeping every chat without thinking about it |
Claude’s export lives in Settings → Privacy → Export data. The download link arrives by email and expires 24 hours after delivery, and the help page doesn’t mention projects or uploaded files. Nexus AI Chat Importer is a community plugin that turns chat exports, Claude’s included, into notes. Re-import a newer export and it appends only the new messages.
You may also see setups built on the Local REST API plugin. It runs inside Obsidian behind an API key and its own HTTPS certificate, so there’s setup on both ends and Obsidian has to be running when a chat is sent.
The same r/ObsidianMD post asked: “Is this ever going to be truly automatic, or is one click per chat just as good as it gets right now?” It can be automatic. That’s the last row. We make Carry, so read the rest with that in mind. Most of the advice below works whatever tool writes the notes.
How to organize Claude chats in your vault
Once chats arrive, the question changes from getting them in to what to do with them. The setup that holds up keeps two kinds of note apart:
- Chat notes
- The raw conversation, one file per chat, in a folder of their own. A tool writes them and you leave them alone. They’re the receipt.
- Your notes
- One note per project: where it stands, decisions and why, the next step. You write these, or ask Claude to draft them. They’re the memory.
Links between the two are what make it work. When you write down a decision, link the chat it came from:
## Decisions
- 2026-06-12: Move Atlas to Postgres before touching search, because the
new index needs the new schema.
[[2026-06-12-planning-the-atlas-migration|Planning the Atlas migration]]
You don’t type that filename. Type [[Planning and Obsidian suggests the chat by its title, because Carry puts the title in the note’s aliases. Pick it and Obsidian writes the link for you. Six months later, when nobody remembers why Postgres came first, the answer is one click away, in the words that were actually used.
Three searches help once the folder fills up, no plugin needed:
[project:Atlas]finds every saved chat from your Atlas project in Claude.path:carry-backup "connection pool"searches only your chats. If you also save ChatGPT or Grok, they’re in the same folder, so one search covers all of them.-path:carry-backupin the graph view’s search filter hides the transcripts from your graph.
Carry rewrites a chat note when the chat continues in Claude. If you edit the note’s body, Carry stops updating it: your edit is safe, but new messages won’t arrive. Tags you add to its frontmatter are replaced on the next update (aliases you add are kept). Renaming is fine, but moving a chat note out of carry-backup/ makes Carry save the chat again. Highlights, tags and summaries belong in your own notes.
Do you even want raw Claude chats in your vault?
Plenty of Obsidian users say no. One reply to the post asking about automatic saving: “I don’t think that a full AI conversation should go into an Obsidian vault.” For them the conversation is the thinking, and the vault gets the conclusion. In the compaction thread, the best advice the poster had heard was “The chat is disposable, the vault is the memory.”
They’re right about what you read day to day. Nobody rereads an 80-message transcript, and the summary is what you’ll use. The case for keeping the chat anyway is that summaries drift. When Claude writes your project note, it’s summarizing its own work, and a dropped detail reads just as confidently as a correct one. The raw chat is how you check, and it does no harm in a folder you rarely open.
So keep both, with different jobs. Carry only handles the receipt. It doesn’t summarize chats or write project notes. That part is yours, or Claude’s if you ask it for one at the end of a session.
Save Claude projects to Obsidian
A project is more than its chats. The instructions you wrote and the files you added are often the part you’d miss most. Carry saves each project as a folder with an index note, instructions.md, a files/ folder and the project’s chats. Here’s a sample, written by Carry, with one chat outside any project:
- carry-backup
- claude
- 2026-09-07-pomodoro-timer-page.md7 Sep
- files
- Pomodoro timer.html7 Sep
- projects
- Thesis researchproject
- 2026-10-03-chapter-2-reading-plan.md3 Oct
- files
- district-heat-map.png3 Oct
- interview-notes.md3 Oct
- instructions.md3 Oct
- Thesis research.md3 Oct
2026-09-07-pomodoro-timer-page.md1 KB
A chat with an artifact
---
conversation_id: "3f6a9c2e-8b14-4d7a-9e05-6c1b2d4f8a13"
source: claude
type: conversation
title: "Pomodoro timer page"
aliases:
- "Pomodoro timer page"
tags:
- capture/claude
created: 2026-09-07T13:02:18
updated: "2026-09-07T13:09:44.617Z"
verified_list_token: "2026-09-07T13:09:44.617Z"
conversation_files_fetched: true
synced: 2026-09-07T13:30:05
url: "https://claude.ai/chat/3f6a9c2e-8b14-4d7a-9e05-6c1b2d4f8a13"
documents:
- "Pomodoro timer"
message_count: 4
capture_version: 2
content_hash: sha256:fe6ae9c9c99d81890177ba2d7dc46718cee5e2ec0a6fb7eb33d14d2b4592ccc8
---
**Human**
Make me a simple pomodoro timer I can open in a browser. 25 minutes of focus, 5 minutes of break, and one start/pause button.
**Assistant**
> [!note]- Thought for 6s
> Planning a single-file page with a countdown and one button
Here is a single-file timer page. It counts down 25 minutes of focus, then a 5-minute break, and the tab title shows the time left so you can see it from another tab.
Open it in any browser. Press Space to start or pause.
**Human**
Can it play a sound when the timer ends?
**Assistant**
Yes. It now plays a short beep from the Web Audio API, so there is no sound file to load.
Browsers only allow sound after a click on the page, so the first beep needs one press of Start, which you do anyway.
### 📄 Pomodoro timer
[Pomodoro timer](files/Pomodoro%20timer.html)
<!doctype html>
<html lang="en">
<head>- title
- Pomodoro timer page
- tags
- capture/claude
- created
- 2026-09-07T13:02:18
- url
- Open in Claude
+12 more fieldsHide 12 fields
- conversation_
id - 3f6a9c2e-8b14-4d7a-9e05-6c1b2d4f8a13
- source
- claude
- type
- conversation
- aliases
- Pomodoro timer page
- updated
- 2026-09-07T13:09:44.617Z
- verified_
list_ token - 2026-09-07T13:09:44.617Z
- conversation_
files_ fetched - true
- synced
- 2026-09-07T13:30:05
- documents
- Pomodoro timer
- message_
count - 4
- capture_
version - 2
- content_
hash - sha256:fe6ae9c9c99d81890177ba2d7dc46718cee5e2ec0a6fb7eb33d14d2b4592ccc8
Human
Make me a simple pomodoro timer I can open in a browser. 25 minutes of focus, 5 minutes of break, and one start/pause button.
Assistant
Thought for 6s
Planning a single-file page with a countdown and one button
Here is a single-file timer page. It counts down 25 minutes of focus, then a 5-minute break, and the tab title shows the time left so you can see it from another tab.
Open it in any browser. Press Space to start or pause.
Human
Can it play a sound when the timer ends?
Assistant
Yes. It now plays a short beep from the Web Audio API, so there is no sound file to load.
Browsers only allow sound after a click on the page, so the first beep needs one press of Start, which you do anyway.
📄 Pomodoro timer
<!doctype html> <html lang="en"> <head>
Pomodoro timer.html2 KB
The artifact itself, a page you can open in any browser
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Pomodoro timer</title>
<style>
body { margin: 0; min-height: 100vh; display: grid; place-items: center;
font-family: system-ui, sans-serif; background: #f7f4ee; color: #222; }
main { text-align: center; }
.mode { letter-spacing: 0.08em; text-transform: uppercase; color: #777; }
.time { margin: 0.2em 0; font-size: 5rem; font-variant-numeric: tabular-nums; }
button { font: inherit; padding: 0.6rem 1.6rem; border-radius: 8px;
border: 1px solid #ccc; background: #fff; cursor: pointer; }
</style>
</head>
<body>
<main>
<p class="mode" id="mode">Focus</p>
<p class="time" id="time">25:00</p>
<button id="toggle">Start</button>
</main>
<script>
const FOCUS = 25 * 60;
const BREAK = 5 * 60;
let left = FOCUS;
let onBreak = false;
let tick = null;
const time = document.getElementById('time');
const mode = document.getElementById('mode');
const toggle = document.getElementById('toggle');
function show() {
const m = String(Math.floor(left / 60)).padStart(2, '0');
const s = String(left % 60).padStart(2, '0');
time.textContent = m + ':' + s;
document.title = m + ':' + s + ' · ' + (onBreak ? 'Break' : 'Focus');
}
function beep() {
const audio = new AudioContext();
const tone = audio.createOscillator();
tone.frequency.value = 880;
tone.connect(audio.destination);
tone.start();
tone.stop(audio.currentTime + 0.4);
}
function step() {
left -= 1;
if (left < 0) {
beep();
onBreak = !onBreak;
left = onBreak ? BREAK : FOCUS;
mode.textContent = onBreak ? 'Break' : 'Focus';
}
show();
}
toggle.addEventListener('click', () => {
if (tick) {
clearInterval(tick);
tick = null;
toggle.textContent = 'Start';
} else {
tick = setInterval(step, 1000);
toggle.textContent = 'Pause';
}
});
document.addEventListener('keydown', (e) => {
if (e.code === 'Space') { e.preventDefault(); toggle.click(); }
});
show();
</script>
</body>
</html>
2026-10-03-chapter-2-reading-plan.md2 KB
A project chat
---
conversation_id: "b18d4e07-6a3c-4f92-8d15-0e7c9a2b4f61"
source: claude
type: conversation
title: "Chapter 2 reading plan"
aliases:
- "Chapter 2 reading plan"
tags:
- capture/claude
created: 2026-10-03T09:12:40
updated: "2026-10-03T09:14:02.905Z"
verified_list_token: "2026-10-03T09:14:02.905Z"
conversation_files_fetched: true
synced: 2026-10-03T09:40:21
url: "https://claude.ai/chat/b18d4e07-6a3c-4f92-8d15-0e7c9a2b4f61"
project: "Thesis research"
documents:
- "Chapter 2 reading plan"
document_versions:
- document_index: 0
artifact_id: "chapter-2-reading-plan"
version_id: "e4b0c2d1-7f3a-4c86-9b25-1a6d8e0f3c74"
message_count: 2
capture_version: 2
content_hash: sha256:534938903b3ebc1e898b4f4e823f46428e246770a0cf8e6832eb79bd1c452462
---
**Human**
Draft a two-week reading plan for chapter 2. Mostly measurement first, then policy. Use my interview notes.
**Assistant**
> [!note]- Thought for 9s
> Ordering the reading from measurement to policy
> Fitting the interview notes into week 2
Here is a plan that moves from measurement to policy, with your interview notes in week 2. The district heat map from interview 3 makes a good baseline for week 1.
### 📄 Chapter 2 reading plan
# Chapter 2 reading plan
## Week 1: measuring the heat island
- Day 1–2: urban climate basics, then how surface and air temperature differ
- Day 3–4: two satellite studies of land surface temperature
- Day 5: compare their methods with the district heat map
## Week 2: what cities do about it
- Day 1–2: tree canopy and cool-roof programmes
- Day 3: your interview notes, coded by theme
- Day 4–5: write a two-page synthesis for the chapter outline- title
- Chapter 2 reading plan
- tags
- capture/claude
- created
- 2026-10-03T09:12:40
- url
- Open in Claude
- project
- Thesis research
+13 more fieldsHide 13 fields
- conversation_
id - b18d4e07-6a3c-4f92-8d15-0e7c9a2b4f61
- source
- claude
- type
- conversation
- aliases
- Chapter 2 reading plan
- updated
- 2026-10-03T09:14:02.905Z
- verified_
list_ token - 2026-10-03T09:14:02.905Z
- conversation_
files_ fetched - true
- synced
- 2026-10-03T09:40:21
- documents
- Chapter 2 reading plan
- document_
versions - document_index: 0 artifact_id: "chapter-2-reading-plan" version_id: "e4b0c2d1-7f3a-4c86-9b25-1a6d8e0f3c74"
- message_
count - 2
- capture_
version - 2
- content_
hash - sha256:534938903b3ebc1e898b4f4e823f46428e246770a0cf8e6832eb79bd1c452462
Human
Draft a two-week reading plan for chapter 2. Mostly measurement first, then policy. Use my interview notes.
Assistant
Thought for 9s
Ordering the reading from measurement to policy
Fitting the interview notes into week 2
Here is a plan that moves from measurement to policy, with your interview notes in week 2. The district heat map from interview 3 makes a good baseline for week 1.
📄 Chapter 2 reading plan
Chapter 2 reading plan
Week 1: measuring the heat island
- Day 1–2: urban climate basics, then how surface and air temperature differ
- Day 3–4: two satellite studies of land surface temperature
- Day 5: compare their methods with the district heat map
Week 2: what cities do about it
- Day 1–2: tree canopy and cool-roof programmes
- Day 3: your interview notes, coded by theme
- Day 4–5: write a two-page synthesis for the chapter outline
district-heat-map.png418 KB
An image uploaded to the project, saved as the original file.
interview-notes.md228 bytes
A project document, saved as Markdown
# Interview 3, city planning office
- Tree canopy targets slipped two years.
- Cool-roof rebates: popular, underfunded.
- Wants data on night-time temperatures by district.
- Suggested the 2019 district heat map as a baseline.Interview 3, city planning office
- Tree canopy targets slipped two years.
- Cool-roof rebates: popular, underfunded.
- Wants data on night-time temperatures by district.
- Suggested the 2019 district heat map as a baseline.
instructions.md181 bytes
The project’s instructions, as written in Claude
You are helping me write a master's thesis on urban heat islands.
- Cite sources in APA style.
- Keep answers short unless I ask for detail.
- Flag any claim you are unsure about.You are helping me write a master's thesis on urban heat islands.
- Cite sources in APA style.
- Keep answers short unless I ask for detail.
- Flag any claim you are unsure about.
Thesis research.md504 bytes
The project’s index note
---
source: claude
project_id: "7c2e9a41-3b5d-4f0e-9c1a-2d8e6f4b1a37"
url: "https://claude.ai/project/7c2e9a41-3b5d-4f0e-9c1a-2d8e6f4b1a37"
archived: false
---# Thesis research
- **Provider**: Claude
- **Project ID**: `7c2e9a41-3b5d-4f0e-9c1a-2d8e6f4b1a37`
- **Link**: https://claude.ai/project/7c2e9a41-3b5d-4f0e-9c1a-2d8e6f4b1a37
- **Instructions**: [instructions.md](instructions.md)
## Files
- [district-heat-map.png](files/district-heat-map.png)
- [interview-notes.md](files/interview-notes.md)- url
- Open in Claude
+3 more fieldsHide 3 fields
- source
- claude
- project_
id - 7c2e9a41-3b5d-4f0e-9c1a-2d8e6f4b1a37
- archived
- false
Thesis research
- Provider: Claude
- Project ID:
7c2e9a41-3b5d-4f0e-9c1a-2d8e6f4b1a37 - Link: https://claude.ai/project/7c2e9a41-3b5d-4f0e-9c1a-2d8e6f4b1a37
- Instructions: instructions.md
Files
Project files download when you click Save all, and projects in Claude’s newer threads view don’t include their file library yet. Links inside the folder are plain relative links, so it still works if you copy it somewhere else. Carry rewrites instructions.md and the index note, so keep your own project note outside carry-backup/.
Where Carry fits
Carry is the browser extension we make for the “without doing it by hand” part. Pick your vault folder, connect Claude, and it saves each chat as a Markdown note on its own, every couple of hours while your browser is open. Chats from the Claude desktop or phone app are in the same account, so they save too.
It reads chats through Claude’s internal API, the same data the Claude app loads, not by scraping the page. So the middle of a long chat is saved, not only what’s on screen. One chat is one file, matched by its conversation_id and rewritten in place when the chat continues. Files from a chat go in a files/ folder next to it, and any Carry couldn’t save are marked in the note.
It runs in Chrome, Edge and other Chromium browsers on a computer, and saves ChatGPT chats into the same vault (Grok too, when you click Save all), but not Gemini or Perplexity. The 14-day trial starts with your latest 5 chats, saves new ones as you go, and saves instructions and files for a couple of projects. Your full history needs a one-time $59 license.
Pick your folder
Connect providers
Then it’s automatic
Before you trust a tool with your vault
“Wouldn’t generally recommend random 3rd party extensions that can read your whole DOM,” one r/ObsidianMD commenter warned. Fair. Whatever you use, check:
- Where the chats go. If a tool uploads them, its privacy policy should say so. Your browser’s DevTools Network tab shows you either way.
- What it asks for. Access to claude.ai makes sense. Your tabs, your history or every site you visit doesn’t.
- Where it writes. Its own folder, not over your notes. Back up the vault before the first run anyway.
Carry asks for claude.ai access when you connect Claude, and doesn’t ask for your tabs, history or cookies. Chats go from Claude to your folder and are never uploaded. There’s no Carry account or API key. Its notes go in carry-backup/, it leaves your own notes alone, and it doesn’t delete your files. It’s closed source, so the Network tab is the real check. Besides claude.ai, you’ll see compatibility settings and anonymous usage counts (numbers, never titles or text) going to carry.md, and you can switch both off.
Common questions
Do I need an Obsidian plugin or API key?
Do chats from the Claude desktop or phone app save?
Can I save just part of a chat?
Will it create duplicates if I run it twice?
conversation_id in its frontmatter and updated in place, even if you renamed the file.What happens to my notes if I stop using Carry?
Carry never uploads your chats. It downloads compatibility settings from carry.md and sends anonymous usage counts, and both can be switched off. See privacy details.
Save every conversation.
Sync your ChatGPT, Claude, and Grok conversations into your own folder — as clean Markdown, processed on your device.