Convert AI chat exports (Claude, Grok, ChatGPT, Gemini) into an Obsidian-friendly Markdown vault.
Project description
obsivault
Convert your AI chat exports into a tidy Obsidian Markdown vault. One note per conversation, YAML frontmatter, attachments copied into a sibling folder, and an idempotent state file so re-running only touches what changed.
Supported sources (v0.1):
- Claude (Settings -> Privacy -> Export). Reads
conversations.json. - Grok (Settings -> Data controls -> Export). Reads
prod-grok-backend.json. - ChatGPT (Settings -> Data controls -> Export). Reads the
conversations.jsontree. - Gemini via Google Takeout (My Activity -> Gemini Apps and Gemini in Workspace). Reads the Workspace transcripts and, optionally, NotebookLM.
Install
From PyPI:
pip install obsivault
Or with uv:
uv tool install obsivault
From source (for development):
uv sync
Usage
uv run obsivault providers
uv run obsivault convert ./data/claude ./vault --provider claude
uv run obsivault convert ./data/grok ./vault --provider grok
uv run obsivault convert ./data/google ./vault --provider gemini
Useful flags:
--include-toolsshow tool calls as collapsible callouts--include-thinkingshow Claude thinking blocks as collapsible callouts--branchesrender alternate branches as> [!example]-callouts--no-copy-attachmentsskip the attachment copy step--dry-runplan-only, no writes--forcerewrite even when content hash is unchanged
Layout
vault/
claude/2026-04/<slug>.md
grok/2026-05/<slug>.md
gemini/2026-03/<slug>.md
_attachments/<provider>/<conv-id>/...
.obsivault/state.json
Adding a provider
Drop a module under src/obsivault/providers/<name>.py with a class that
implements Provider and is decorated with @register. The CLI auto-detects
sources by calling each provider's discover().
Licence
AGPL-3.0-or-later. PRs welcome.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file obsivault-0.2.0.tar.gz.
File metadata
- Download URL: obsivault-0.2.0.tar.gz
- Upload date:
- Size: 92.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9979381ae717aff83e8112bb5979ed366c03262f75b0c0bf5d2fa1e0106160e1
|
|
| MD5 |
ce750a935b7a2c1351a79d69186837fc
|
|
| BLAKE2b-256 |
2d7cbcabfb4d8aeebb43cf237b7b94ecf9376544f5b49fc22bebe3761d6c89e0
|
Provenance
The following attestation bundles were made for obsivault-0.2.0.tar.gz:
Publisher:
publish.yml on andrijdavid/obsivault
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
obsivault-0.2.0.tar.gz -
Subject digest:
9979381ae717aff83e8112bb5979ed366c03262f75b0c0bf5d2fa1e0106160e1 - Sigstore transparency entry: 1746711979
- Sigstore integration time:
-
Permalink:
andrijdavid/obsivault@7305e712ea7ab54bc3e68306f2dc5d720ef51507 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/andrijdavid
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7305e712ea7ab54bc3e68306f2dc5d720ef51507 -
Trigger Event:
release
-
Statement type:
File details
Details for the file obsivault-0.2.0-py3-none-any.whl.
File metadata
- Download URL: obsivault-0.2.0-py3-none-any.whl
- Upload date:
- Size: 40.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
12166848916aa6d7d6fce83b8e1166c708d36026aec7dc2ae544b9cf55320caf
|
|
| MD5 |
bc7c4c0f76c33f2d935c4b662c29604b
|
|
| BLAKE2b-256 |
c01906015a85edb00141c4faab0e925e90490115920a3f543f7bc0ebc52a1453
|
Provenance
The following attestation bundles were made for obsivault-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on andrijdavid/obsivault
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
obsivault-0.2.0-py3-none-any.whl -
Subject digest:
12166848916aa6d7d6fce83b8e1166c708d36026aec7dc2ae544b9cf55320caf - Sigstore transparency entry: 1746712111
- Sigstore integration time:
-
Permalink:
andrijdavid/obsivault@7305e712ea7ab54bc3e68306f2dc5d720ef51507 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/andrijdavid
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7305e712ea7ab54bc3e68306f2dc5d720ef51507 -
Trigger Event:
release
-
Statement type: