Skip to content
Med34000Public

About

100% local self-profile from your AI chat exports (ChatGPT, Claude). No account, no upload, no telemetry — your prompts become a structured profile you own.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

15 Commits

Folders and files

Repository files navigation

🧠 mindprint

CI License: MIT Python 3.10+

Turn your AI chat exports into a structured self-profile — 100% locally.

Your ChatGPT and Claude histories contain months of your projects, decisions, writing style and priorities — scattered across corporate silos. mindprint merges them into one profile file you own. And unlike cloud alternatives, not a single byte leaves your machine.

mindprint terminal demo

🔍 See a full real-format example: example/mindprint.example.md — generated from a synthetic corpus (fictional user), same pipeline, same output.

Proton's AI Paper Trail proved the demand: people want to see what their AI knows about them. But it uploads your export to their servers, covers one export at a time, and outputs a one-shot report. mindprint is the open-source, fully offline counterpart — and its output is a reusable profile you own.

✨ What you get

  • Topics — the words and phrases you actually use, ranked
  • 🚀 Project signals — conversations carrying project evidence (MVP, pricing, deadline, client…), with Claude project names when available
  • Activity timeline — conversations per month, busiest hours
  • ✍️ Writing style — message length, question ratio, tu/vous usage
  • 🌍 Language mix — EN/FR heuristic
  • 🧠 Memory file (memory-file.md) — the headline output: a compact, dated, AI-ready context block to paste into a system prompt, CLAUDE.md, AGENTS.md, or any assistant's custom instructions. Your AI starts every conversation already knowing your language, style, projects and rhythm — computed from your real history, not self-declared guesses
  • JSON + Markdown outputs: machine-readable profile + human-readable report
  • Multi-source — ChatGPT and Claude in one merged profile, duplicates across overlapping exports deduplicated automatically

🔒 Privacy model

mindprint Cloud tools
Upload of your export ❌ never ✅
Account required ❌ ✅
Network access at runtime ❌ none — enforced by test required
Runtime dependencies 0 —
Code auditable ✅ MIT, this repo ❌

The privacy claim is not a promise, it's a test: the CI runs the full pipeline with socket creation blocked — any future dependency that tries to phone home fails the build.

📦 Install

pip install .          # from a clone of this repo
# or
uv pip install -e ".[dev]"   # development setup

Requires Python ≥ 3.10. Zero runtime dependencies.

🚀 Usage

  1. Export your data from your provider (official export):
    • ChatGPT: Settings → Data controls → Export data → download the ZIP from the email link
    • Claude: Settings → Privacy → Export data → the new flow delivers a manifest JSON with download links — save everything into one folder (conversations, projects, users files, whether as ZIPs or extracted)
  2. Run mindprint — one or several exports, any mix:
mindprint ~/Downloads/chatgpt-export.zip ~/Downloads/claude_export/ -o my-profile
# ✅ Parsed 496 conversations (2536 user messages, 2861 assistant replies)
#   • chatgpt: 394 conversations, 1735 user messages
#   • claude: 102 conversations, 801 user messages
#   JSON: my-profile/mindprint.json
#   Markdown: my-profile/mindprint.md

Extracted the ZIP already? Point mindprint at the directory instead — both work. Output files are written with owner-only permissions (0600).

🗂 Supported formats

Provider Status Notes
ChatGPT (ZIP) ✅ Handles the mapping tree (active thread), legacy flat layouts, and the new sharded conversations-000.json… format
Claude (ZIP or manifest export) ✅ Flat chat_messages, content blocks tolerated (thinking/tool_use skipped), projects.json and per-file projects/<uuid>.json layouts
Hermes (local state.db) 🧪 experimental Reads the SQLite session DB read-only (mode=ro) — user/assistant text from interactive sources only (cli/tui/desktop/discord/telegram), cron & subagent sessions excluded. Message tails are truncated at 4 000 chars (tool-output blobs). Note: Hermes threads carry infrastructure wrappers (task summaries, media notes) that can leak into topic stats — quality is lower than clean chat exports
Claude Code (local) ✅ Reads ~/.claude/projects/<slug>/*.jsonl — pass the directory or a .jsonl file. Sidechains (subagents) and tool payloads excluded
Gemini 🧭 planned via Google Takeout
Grok 🧭 planned via X archive

Providers changed their export formats twice while this tool was being built (sharded ChatGPT, manifest Claude) — both were caught by real-user tests and are now handled. This maintenance burden is exactly why this tool exists.

📔 Vault mode

mindprint <exports> --vault generates an Obsidian-compatible dossier next to the JSON/Markdown outputs:

vault/
├── Dashboard.md       year overview, 6-month activity chart, project index
├── Professionnel/     one note per detected project (status, dated decisions, sources)
├── Personnel/
├── Timeline/          one note per month: what moved
├── Open-loops.md      intentions you stated… and never followed up on
└── Memory-file.md     the AI-injectable block

Plain Markdown — works in Obsidian, any editor, or synced to mobile. Every claim links back to its source conversation. Level-1 heuristics are deliberately conservative; no LLM, no invention.

⚡ Performance

Real-world benchmark (2026-09): a 282 MB ChatGPT export — 394 conversations, 3 677 messages — parses in 0.4 s with ~80 MB RAM.

🧪 Development

uv pip install -e ".[dev]"
python -m pytest tests/          # 30 tests, synthetic fixtures only
python scripts/make_demo_profile.py   # regenerate example/ + docs/terminal.svg

The test-suite generates synthetic export fixtures mimicking the real official formats (tests/make_fixtures.py) — no real personal data is ever committed. The public example is generated from a synthetic corpus too.

🗺 Roadmap

  • v0.1 — ChatGPT + Claude ingestion, statistical profile
  • v0.2 — multi-export merge (ChatGPT + Claude in one profile, dedup across overlapping exports)
  • v0.3 — memory file: compact AI-ready context output (memory-file.md) + Hermes local-DB source (experimental, read-only)
  • v0.4 — optional LLM enrichment (local Ollama, opt-in)
  • v0.7 — change diff: every run reports what moved since the last one (new/dropped projects, message growth)
  • v0.6 — Claude Code source: reads ~/.claude/projects/*.jsonl session logs directly — continuous, no manual export
  • v0.5 — Obsidian-style vault: Dashboard, per-project notes with source citations, monthly timeline, open-loops ledger (stated intentions never followed up)
  • v0.6 — Gemini (Takeout) + Grok (X archive), Claude Code JSONL source
  • v0.5 — timeline diffing: "what changed in my focus this month?"
  • Desktop app packaging

⚠️ Ethics

mindprint is for your own data, on your own machine. Analyzing another person's export without their consent is illegal profiling (GDPR art. 6 and equivalents) — don't, and we won't help.

License

MIT

About

100% local self-profile from your AI chat exports (ChatGPT, Claude). No account, no upload, no telemetry — your prompts become a structured profile you own.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages