mrkeyoor.com_
Sun 16 Aug 14:44 UTC
Dataevaluationupdated 16 Aug 2026

ai-data-extraction

AI Data Extraction is a set of local Python scripts that turns conversation history from Cursor, Claude Code, Codex, Gemini CLI, OpenCode, Continue, Trae, and Windsurf into JSONL files. It solves the awkward job of recovering prompts, responses, code context, diffs, and tool results from several undocumented storage layouts for personal analysis or model training.

Verdict

Use this toolkit as a transparent starting point for a personal, offline recovery job, not as proof that you now have a complete training corpus. Its breadth and dependency-free scripts are useful, especially for Cursor's changing stores, but the absence of tests, releases, built-in redaction, and stable format contracts demands manual sampling. Copy the repository, pin the commit, secure the output, and validate every source separately before training or deleting the originals.

Setup4/5Standard-library scripts run directly, with hard-coded paths
Docs4/5Detailed formats and warnings, but claims outrun verification
Community3/5Useful contributor interest, slow integration into the main branch
Maturity2/5No releases or tests for parsers tied to changing private stores

Who it’s for

Developers who need a one-time personal archive from several AI coding assistants.
Researchers prepared to inspect parser output before building a private training dataset.
Teams migrating away from a coding client and willing to handle sensitive JSONL securely.
Python users who can patch hard-coded search paths when a client stores data somewhere unusual.

Who it’s NOT for

Anyone expecting a verified lossless backup: the README concedes that deleted, corrupted, response-less, or otherwise partial conversations may be missing, and the repository has no test suite.
Security teams needing sanitized output by default: the scripts deliberately export prompts, code, paths, tool results, and possible secrets to plain JSONL, with redaction left as a later manual step.
Users who rerun the all-tools script without cleaning its output directory: it concatenates every existing JSONL file, including earlier timestamped exports and prior combined files, so repeated runs can multiply duplicates.
Organizations requiring clear packaged licensing: the README says MIT, but the repository contains no LICENSE file and GitHub reports no detected license.
Teams needing guaranteed compatibility with current client formats: the parsers depend on private local schemas, the main branch's last commit was January 21, 2026, and an open pull request adds support for OpenCode's newer SQLite store.

Setup reality

There are no third-party runtime dependencies, so cloning the repository and running one Python script is easier than most data tools. The cost moves into preparation and verification: close clients that hold SQLite locks, grant macOS file access if needed, run from a directory whose extracted_data folder can be secured, and budget disk space for duplicated code and tool output. The scripts offer no shared CLI for choosing input, output, date range, redaction, or deduplication, so nonstandard paths and repeatable pipelines require editing code or adding a wrapper.

A practical recovery kit for scattered histories

AI coding assistants accumulate valuable records in incompatible places. Claude Code and Codex use event-oriented JSONL, Cursor and Windsurf keep important state in SQLite, Gemini CLI uses project-hash directories, and OpenCode spreads sessions, messages, and parts across files. AI Data Extraction collects dedicated scripts for eight clients and writes a more approachable JSONL record for each conversation.

The appeal is breadth. Exports can include prompts, assistant answers, models, timestamps, working directories, selected code, proposed diffs, tool calls, and command results. That is more useful than a text-only transcript when the goal is auditing past work, moving personal history, or preparing examples for a private experiment. Each conversation becomes one JSON line, making the result easy to stream, filter, compress, or load into common dataset software.

This is extraction code, not a training pipeline. The README includes a small fine-tuning example, but it does not normalize every client's events into a strict common schema, remove secrets, decide data rights, score answer quality, or create train and evaluation splits. That separation is healthy if users understand it.

The scripts are refreshingly direct

Installation is little more than a clone and Python 3.6 or newer. The individual extractors use the standard library, including json, pathlib, and sqlite3, so there is no environment resolver or service to operate. Each script discovers likely client directories by operating system and saves a timestamped file under extracted_data. The shell wrapper runs all eight in sequence and creates a combined file.

The source is readable enough to audit. Cursor's extractor accounts for several generations of its storage, including old chat records, inline Composer conversations, separate bubble records, and later agent data. The OpenCode extractor understands both CLI and desktop locations. The Claude Code and Codex scripts walk project or date-based session trees. Read-only SQLite mode is used in the Cursor paths, reducing the chance that extraction interferes with the original database.

There is no common command-line interface, however. You cannot pass an output directory, custom source root, date range, client selection, or redaction policy as normal flags. The README tells users with unusual paths to edit a function. That is tolerable for a one-off recovery and awkward for a repeatable internal process. Some parsers also catch malformed JSON or broad exceptions and continue, which helps salvage a damaged collection but can turn missing records into a warning or silence rather than a failed job.

Complete is an ambition, not a guarantee

The README repeatedly describes complete extraction, then correctly lists partial and deleted conversations among data that may be missing. The second statement is the one to plan around. These clients do not publish a stable shared archive format. A client update can rename a key, split messages differently, move a database, or add an event the parser ignores.

Current project history illustrates that maintenance burden. OpenCode support landed in January 2026, while an open pull request later proposed support for its newer SQLite storage. Other open contributions add more assistants and packaging changes. Those patches show continued demand, but they do not help users of the main branch until reviewed and merged. There are no fixtures or automated tests in the repository to demonstrate that old and current formats still produce equivalent conversations.

The combined shell script has a concrete repeat-run trap. It counts and concatenates every *.jsonl already in extracted_data. Because individual exports are timestamped and earlier combined exports remain there, a second run can include yesterday's records alongside today's and can fold a prior combined file into the next one. Anyone creating a dataset should start with an empty output directory or deduplicate by stable session identity afterward.

Privacy work begins after extraction

The value of the result is also its main risk. Coding transcripts can contain unreleased source, internal paths, customer data, pasted credentials, environment output, and tool results. The scripts write that material as ordinary JSONL using the process's default file permissions. They do not scan, redact, encrypt, or separate especially sensitive fields.

The README does warn users to scan with detect-secrets, review paths and proprietary code, keep exports on encrypted storage, and avoid committing them. Follow that advice before copying the data anywhere. Secret scanning alone is insufficient: it will not decide whether a client name, database row, source excerpt, or customer request is lawful training material. Employers should establish ownership and retention rules before running a home-directory-wide collector.

Licensing deserves a pause as well. The README labels the project MIT, yet the repository tree has no LICENSE file and GitHub exposes no detected license. That may be an omission rather than intent, but organizations that need a clean license record should ask for a conventional license file before redistributing modified scripts.

Health and the right way to use it

The main branch's last commit was January 21, 2026, and there is no published GitHub release. Contributor issues and pull requests remained active through August 2026, including work on new clients and safer export ideas. The combined open count is ten and includes pull requests, so it does not mean ten confirmed bugs. Still, the gap between community proposals and main-branch updates matters for software coupled to fast-changing private schemas.

Use the toolkit like a collection of forensic adapters. Pin a commit, run one extractor at a time against a copied or closed client store, inspect counts and random sessions against the original interface, and record known omissions. Then redact and deduplicate before analysis. For an ongoing application you control, an observability system such as Langfuse or Phoenix will create a more stable record at capture time. For recovering yesterday's local assistant history, this small repository is a useful head start, provided you do not mistake a successful exit for a complete or safe dataset.

Alternatives

ProjectWhat it isPick it when
LangfuseAn open-source tracing and evaluation platform that records LLM application activity as it happens.pick this instead when you can instrument future calls and need searchable traces, evaluation, and team controls rather than recovering old desktop-client data.
Arize PhoenixAn open-source AI observability and evaluation system built around application traces and datasets.pick this instead when analysis, experiments, and trace inspection matter more than scraping proprietary local stores.
OpenLITAn OpenTelemetry-based observability platform for collecting and inspecting generative AI activity.pick this instead when you want structured collection from applications you control, with an ongoing monitoring workflow.

What people are saying

  1. [github-trending] 0xSero/ai-data-extraction

Sources

  1. AI Data Extraction README
  2. All-tools extraction script
  3. Codex extraction script
  4. Newer OpenCode SQLite support pull request
  5. Repository commit history