Sundowna190 downloadsSync your Proton Lumo, Claude, ChatGPT, Gemini and Hermes agents chats into your vault, including uploads, files & artifacts. (Karpathy LLM Wiki / Second Brain / Project Brain)

All your AI chats in your Obsidian vault. AI ChatBridge mirrors your chats from Claude, ChatGPT, Gemini, Google AI Studio, Proton Lumo and Hermes Agent - plus your Claude Code and Codex sessions - into readable Markdown notes, in the same folders and projects you know from the apps. Files, images and artifacts come along too.
Part of the Sundowna Second Brain Suite - an easy, low-friction second brain in Obsidian, in the spirit of Karpathy's LLM wiki. The other pieces: OneNote Style (the ribbon you already know) and the OneNote Style theme (the look you already know).
[!NOTE] Unofficial and read-only. Not affiliated with, endorsed by, or supported by Anthropic, OpenAI, Google, Proton or Nous Research. Nothing is ever changed or deleted on the provider's side. The plugin reads the same web endpoints your browser uses, which can change without notice.
New in 0.28: Refresh for the Hermes Agent profile list, and profiles that are gone no longer stop the sync. See the changelog for everything else.
(updated …) note next to the old one10 Projects/Thesis)account: in each note tells them apart| From | What | Files |
|---|---|---|
| Claude (claude.ai) | Chats per project, plus Claude Code sessions listed on claude.ai | Artifacts and uploads |
| ChatGPT | Chats per project, archived chats optional; custom GPT chats go to Recent |
Generated files and uploads |
| Gemini | Chats | Pictures as links |
| Google AI Studio | Chats and prompts | - |
| Proton Lumo | Chats and projects, decrypted on your computer | Coming |
| Claude Code (desktop app and CLI) | Sessions on this computer, in the same groups as the Code sidebar | Stay on your computer |
| Codex (ChatGPT desktop app and CLI) | Threads on this computer, per project | Stay on your computer |
| Hermes Agent | Chats on this computer, per Hermes profile, with every tool step | Stay on your computer |
AI Chats/, or choose your own[!TIP] Max chats per run starts at 3, so the first sync is a quick test. Set it to
0(General tab) to sync everything.
Want local sessions too? Turn on the Desktop app side of a Claude or ChatGPT account for Claude Code and Codex, or a profile on the Hermes tab for Hermes Agent.
AI Chats/
├── Claude/
│ ├── Chat/ ← claude.ai chats, all accounts
│ │ ├── Recent/
│ │ │ └── 2026-11-05 Trip to Lisbon.md
│ │ └── Thesis/ ← a claude.ai project
│ │ ├── Artifacts/… ← files Claude made
│ │ └── Attachments/… ← files you uploaded
│ ├── Code-Cloud/<repo>/ ← Claude Code sessions from claude.ai/code (cloud)
│ └── Code-Local/
│ └── Tower/ ← this computer's name
│ └── my-repo/ ← sidebar group or working folder
│ ├── Artifacts/… ← files Claude Code wrote or sent you
│ └── Attachments/… ← images and files you attached
├── ChatGPT/
│ ├── Chat/
│ └── Codex-Local/
│ └── Tower/
├── Gemini/
│ ├── Chat/
│ └── AI Studio/
├── Lumo/
│ └── Chat/
└── Hermes/
└── coder/ ← one folder per Hermes profile
80 Archive/raw/ ← the raw .json files, same paths as above
└── AI Chats/Claude/Chat/Recent/2026-11-05 Trip to Lisbon.json
Each transcript starts with properties (handy for Dataview or Bases), then the chat:
---
account: "Main"
uuid: c_1a2b3c4d5e6f7a8b
created: 2026-09-03T09:14:54.888Z
updated: 2026-09-03T09:16:06.168Z
raw: "[[80 Archive/raw/AI Chats/Gemini/Chat/2026-09-03 Sourdough starter tips.json]]"
unread: true
---
## You · 2026-09-03 11:14
My sourdough starter smells like nail polish. Is it ruined?
## Gemini (3.6 Flash)
**No, it's just hungry.** That smell means it has used up its food. Feed it…
Coming from an older version? General → Move into the new layout shows what would move where and moves it with Obsidian's own move, so links, the sync history and the raw files follow. Folders you picked yourself stay where they are.
.json files in one place (80 Archive/raw by default), mirroring the transcript folders; switch it off to keep them next to the transcriptsOn any provider tab select Add account and give it a name, e.g. Work. Each account gets its own login and saves into the same folders as your other accounts, so a project you use in both ends up in one folder. Each note has account: "Work" in its properties.
Two accounts can share one desktop app without anything being saved twice. A session goes:
CLAUDE_CONFIG_DIR or CODEX_HOME)A session that's already saved stays with the account that saved it.
Some chats only live on your computer: Claude Code sessions from the Claude desktop app and CLI (~/.claude/projects) and Codex threads from the ChatGPT/Codex desktop app and CLI (~/.codex/sessions). AI ChatBridge saves those too, one note per session.
RecentAttachments/, and documents Claude or Codex wrote or sent you (Markdown, HTML, PDF, Office files, images) go to Artifacts/, next to the note. Each file is copied in its latest version. Source code and the assistants' own scratch files are left out, and notes already in your vault are linked, not copied. Artifacts and Claude Docs published on claude.ai are listed as links. Turn this off with General → Save session filesHermes Agent by Nous Research keeps every chat in a SQLite database, one per profile: state.db in your Hermes home folder, and profiles/<name>/state.db for each named profile. Chats can come from any model - Claude, GPT, a local Qwen - and each note records which one.
HERMES_HOME, else the default Hermes folder) and listed turned offstate.db, or select Refresh after adding a profile in HermesDeleted a profile in Hermes? It moves to No longer found at the bottom of the list and the sync skips it. Its notes stay in the vault. Leave it on if it may come back, or select Remove.
Each chat lands in AI Chats/Hermes/<profile>/ with source: hermes, hermes_profile, model and session_id in its properties, dates as YYYY-MM-DD. Tool calls appear as a collapsed callout you can open:
## Hermes · 2026-11-10 21:49
> [!example]- 3 tool steps
> **1. read_file**
> ~~~json
> { "path": "notes/garden.md" }
> ~~~
> Result:
> ~~~
> # Garden plan …
> ~~~
Lettuce, spinach and chard do well in the shade.
Long arguments and results are shortened (600 and 1,200 characters), so notes stay readable.
Left out: helper (subagent) sessions unless Include helper sessions is on, sessions active in the last few minutes (they come with the next sync), and anything run in - or mentioning - a folder named Private.
How it reads, safely: Hermes may be writing while you sync, and its newest messages can still sit in state.db-wal. So the plugin never copies the files or opens them for writing. Each sync opens state.db read-only, takes a consistent snapshot with SQLite's backup function into a temporary file, reads that copy and deletes it. It uses Obsidian's built-in SQLite; if your Obsidian has none, it uses Python instead - Hermes' own, or one on your computer (set it under Hermes → Advanced → Python).
| Command | What it does |
|---|---|
| Sync all chats | Every account you're logged in to, then the desktop apps and Hermes profiles that are on |
| Sync Claude chats | All claude.ai accounts you're logged in to |
| Sync ChatGPT chats | All ChatGPT accounts you're logged in to |
| Sync Gemini and AI Studio chats | All Google accounts you're logged in to - Gemini chats, then AI Studio prompts |
| Sync Lumo chats | All Proton Lumo accounts you're logged in to |
| Sync desktop app chats (Claude, Codex) | Local Claude Code and Codex sessions |
| Sync Hermes Agent chats | The Hermes profiles that are on |
| Reconcile all ChatGPT chats | Check all ChatGPT chats again, not just recent changes |
| Stop the running sync | Stops after the current chat - so do Stop all on the Overview, the ribbon icon, the status bar text and Stop in the settings |
| Cancel pending chat sync retry | Stop a waiting retry after a 429 pause |
| Refresh index: find synced notes moved outside the app | Finds notes you moved in the file manager (or while the plugin was off) by their chat ID, so the next sync doesn't save them twice |
| Move synced chats into the new folder layout | Moves folders from older versions into Claude/…, ChatGPT/… - links, the sync index and the raw files follow |
| Diagnose: save claude.ai answers for the open chat | Saves the raw answers of the open chat, for bug reports |
This is one of three pieces of the Sundowna Second Brain Suite (SSBS). Together they turn Obsidian into a second brain that feels like home: your knowledge in plain Markdown that you own, with tools that work like the ones you already use.
| Piece | Kind | What it does |
|---|---|---|
| AI ChatBridge (you are here) | Plugin | Brings your chats from Claude, ChatGPT, Gemini and others into the vault as Markdown |
| OneNote Style | Plugin | The ribbon you already know: Office-style tabs, groups and buttons for any command, plus note tags and subpages. Its AI group runs AI ChatBridge's sync commands with one click |
| OneNote Style theme | Theme | OneNote's look: white pages, Calibri, OneNote's heading styles, light and dark |
Each works on its own. Together they are low friction from the first minute.
This plugin needs network access for the web providers. Please read this before using it.
claude.ai, chatgpt.com, gemini.google.com, aistudio.google.com (with its API host alkalimakersuite-pa.clients6.google.com) and lumo.proton.me, plus their login pages, e.g. auth.openai.com, accounts.google.com and account.proton.me - only when you log in or sync. Nothing is sent anywhere else. No telemetrydata.json, notes or logs. Log out and Remove in the settings clear themdata.json - these are not secretsdata.json, notes or logs - and the login window wins if both are set. Google's cookies only go into a separate hidden window kept in memory, which is emptied after each sync. Lumo has no fallback: unlocking its encrypted chats needs keys only its login window holdsdata.json holds chat IDs and paths, no chat content and no secrets~/.claude/projects, the Claude desktop app's session list and Local Storage (for titles and sidebar groups), ~/.codex/.codex-global-state.json, ~/.codex/sessions, ~/.codex/archived_sessions, ~/.codex/session_index.jsonl and any extra folders you add; for Hermes: the state.db of each profile that is on. It never changes them and sends nothing over the network. Hermes snapshots are written to your system's temporary folder and deleted right after reading; if Obsidian has no built-in SQLite, a Python on your computer is started to make them. Hermes tool results can contain file contents, so they are shortened in the notes and steps mentioning a Private folder are left outFrom Community plugins (once accepted into the directory): Settings → Community plugins → Browse, search for AI ChatBridge, then Install and Enable.
Manually:
main.js, manifest.json and styles.css from the latest release<your vault>/.obsidian/plugins/ai-chatbridge/My first sync is taking forever?
That's the 429s: with 1,000+ chats the providers start saying "too many requests". The plugin pauses, shows a countdown in the status bar and carries on by itself. Still a lot faster than waiting for a data export.
The login window doesn't work for me?
Use the pasted login fallback. Sign in to the site in your browser and open DevTools (F12), then:
sessionKey__Secure-next-auth.session-token - or, if ChatGPT split it into .0 and .1, go to Network, select a chatgpt.com request and copy its whole Cookie headergemini.google.com request and copy its whole Cookie headerPaste it under the account's advanced settings in the plugin. Pasted cookies run out sooner than a login - Google's especially - so paste a fresh one when the sync says it expired.
Can I edit the synced notes?
Better not - treat them as the originals. Delete one and the next sync puts it back, under the same name. Write your own notes elsewhere and link to the transcript.
Hermes says "No way to read SQLite here"?
Your Obsidian has no built-in SQLite and no Python was found. Install Python 3 or point Hermes → Advanced → Python at one (Hermes ships its own in its tools folder).
A sync stopped with "could not be verified"?
The provider changed how its site answers, so the plugin stopped rather than save something wrong. Please open an issue with the line from the sync log.
Requires Node.js 20 or newer.
npm install
npm run dev # watch build to main.js
npm run build # type check + production build
npm run lint # eslint with eslint-plugin-obsidianmd
For live testing, clone the repo into <vault>/.obsidian/plugins/ai-chatbridge/ (or copy the build output there) and reload Obsidian.
Tests run offline with made-up samples: npm run test:gemini, test:lumo, test:desktop, test:hermes, test:inventory and test:sync. test:hermes builds a small SQLite database in a temporary folder (set HERMES_PYTHON to also test the Python reader with a specific interpreter). npm run test:offline also reads chat exports from samples/, which is git-ignored because it holds real chats - add your own exports to run it.
minAppVersion in manifest.json if needed## x.y.z - YYYY-MM-DD section to CHANGELOG.md - it becomes the release notesnpm version patch (or minor / major). This bumps package.json, manifest.json and versions.json, commits, and creates a tag without a v prefixgit push --follow-tagsmain.js, manifest.json and styles.css, and this version's changelog as notes. Review it and publishFound a bug or have an idea? Open an issue. What changed in each version is in the changelog.