mrkeyoor.com_
Tue 01 Sept 17:42 UTC
Dataevaluationupdated 25 Aug 2026

ai-data-extractor review

AI Data Extractor is a Python command-line tool that copies local coding-assistant conversations into a common JSONL format. It covers ten sources, including Claude Code, Codex CLI, Cursor, Windsurf, Cline, Aider, and Gemini CLI, so developers can back up or inspect histories that are otherwise scattered across app folders.

+7stars / 7d
Verdict

Our run installed 35 packages in 21 seconds and found 0 known vulnerabilities, but this 1,707-line extractor has no automated test target. Use it when the alternative is manually spelunking through ten unrelated storage layouts, and treat every generated file as sensitive. For Cursor or Claude Code alone, a dedicated viewer is easier to verify and nicer to browse.

We ran it

Lab card: what happened when we ran ai-data-extractorScreenshot of ai-data-extractor (github.com/bawadou/ai-data-extractor)
Install✓ · 21s35 packages · 37 MB
Build✓ · 8s
Testsn/ano test script
Known vulns0(pip-audit)
Repo29 files~1,707 lines of source · 0.1 MB · 0 CI workflows

Answers from our run

Does ai-data-extractor build from source?

Dependencies installed in 21 seconds (35 packages), and the build succeeded in 8 seconds. We cloned commit 6bcd87e into a clean Debian container with 3 CPUs and no project-specific setup.

Does ai-data-extractor have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Does ai-data-extractor have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use ai-data-extractor?

Anyone expecting guaranteed extraction from Windsurf or Trae: the README says their undocumented SQLite formats are parsed with a heuristic that can return zero conversations after a schema change.

What are the alternatives to ai-data-extractor?

Cursor History, Claude Code History Viewer, claude-history. Our run installed 35 packages in 21 seconds and found 0 known vulnerabilities, but this 1,707-line extractor has no automated test target.

Setup5/5Simple Python CLI, no secrets, and an 8-second build
Docs4/5Clear formats, paths, limits, extension guide, and privacy warnings
Community2/5544 stars and three open PRs, with no issue history yet
Maturity2/5Ten parsers, but no tests, CI, releases, or stable vendor schemas

Who it’s for

Developers moving among several coding assistants who want one local archive format.
Researchers preparing their own conversation data for analysis or model training.
Teams auditing what code, paths, and tool results their local assistants retained.
Python users willing to inspect extractor output and update parsers when vendor storage changes.

Who it’s NOT for

Anyone expecting guaranteed extraction from Windsurf or Trae: the README says their undocumented SQLite formats are parsed with a heuristic that can return zero conversations after a schema change.
Teams that need verified parser accuracy before touching an archive: the repository has no test target, no tests directory, and no CI workflow in our checkout.
Users seeking automatic redaction: the tool can export code, API keys, personal paths, and tool inputs, while the README leaves secret scanning and manual review to the operator.
People who want a browsable archive application: the output is JSONL, and the project provides extraction rather than a search or reading interface.
Anyone extracting data they do not own or cannot lawfully process: the README limits the intended use to your own local histories and places rights and terms compliance on the user.

Setup reality

Our sandbox installed 35 packages in 21 seconds and used 37 MB, then the build step succeeded in 8 seconds. Pip-audit reported 0 known vulnerabilities. The 0.1 MB checkout contained 29 files and about 1,707 source lines. There was no test script or target, so tests were skipped.

The actual extractor requires Python 3.9 or newer and claims standard-library-only operation. It auto-discovers common app-data locations, while Aider often needs explicit project roots through repeated --search-path arguments. No API keys or hosted services are needed because it reads local files and opens supported SQLite databases read-only.

The hard part comes after execution. Cursor has several handled storage shapes, but Windsurf and Trae use an acknowledged heuristic over undocumented schemas. Every export can contain proprietary code, secrets, file paths, and tool inputs, so the JSONL needs restricted storage plus scanning and human review before sharing or training.

Ten local histories become one JSONL shape

AI Data Extractor searches the usual macOS, Linux, and Windows application folders for ten coding assistants. It reads Claude Code and Codex CLI JSONL, several JSON layouts, editor SQLite databases, Cline task folders, and Aider Markdown transcripts. Each conversation becomes one JSON object with messages, a source label, and a session identifier. Optional fields preserve whatever a source recorded, such as project paths, code selections, model names, timestamps, diffs, and tool calls.

This is a small toolkit, not a data platform. Our checkout at commit 6bcd87e was 0.1 MB, with 29 files and about 1,707 source lines. The size makes each extractor approachable for review. A new source implements two functions to find installations and return normalized conversations, then joins a registry in the main script. That is a practical design for developers who expect to repair a parser when an assistant changes its files.

Read-only input does not make the export safe to share

SQLite sources are opened in read-only mode, so a running editor should not be modified by the extraction. Corrupt or locked inputs are handled per reader, allowing a partial result instead of aborting the entire run. The --list command previews detected installations without exporting anything. These are sensible defaults for a utility pointed at years of work history. They protect the source data, which is only half of the privacy problem.

The output may contain API keys, proprietary snippets, personal paths, prompts, and exact tool inputs. A merged file can concentrate material from 10 assistants in one place. The README recommends secret scanning and manual review before sharing or training, and it already excludes the default output directory from Git. There is no built-in redaction policy. Store exports on encrypted, access-controlled storage and inspect them before any upload to a dataset service.

Undocumented editor databases make accuracy conditional

Claude Code, Codex CLI, Continue, Gemini CLI, OpenCode, Cline, and Aider have file structures the project parses directly. Cursor is more complicated: the extractor explicitly handles three known SQLite shapes. Windsurf and Trae are riskier because the README describes their schemas as undocumented and uses a generic search for chat-related keys plus objects resembling role-and-text pairs. A future update can evade that search without producing an obvious crash.

The repository had 0 CI workflow files, no tests directory, and no test command in our measured checkout. That leaves no automated fixture proving that each of the ten parsers recognizes representative source files or normalizes edge cases consistently. The README tells users how to inspect SQLite keys and adjust KEY_HINTS after a zero-result run. That is useful troubleshooting, though it puts validation on the person making the archive.

Aider adds a different discovery risk. Its transcript sits inside each project, so the default search walks the home folder and common project directories as deep as 5 levels while skipping folders such as .git and node_modules. Users with code under another mount or client directory must supply it through --search-path. A successful command can still miss projects, so compare the reported sources and conversation counts with the tools you know you used.

What happened when we ran it

Our run at commit 6bcd87e installed 35 packages in 21 seconds, using 37 MB on disk. The build completed in 8 seconds, and pip-audit reported 0 known vulnerabilities. Tests were skipped because the repository exposes no test script or target. The fresh Python 3.12 Debian container had 3 CPUs, 8 GB of RAM, no secrets, and no privileged access. Nothing in the measured steps failed.

Those results establish that the package setup and build path worked on a clean box. They do not measure extraction correctness because our sandbox result contains no parser test count and no assistant archives. The README's standard-library-only claim refers to running the extractor itself; the lab installation still recorded 35 packages in its build environment. The distinction matters: easy installation lowers friction, while missing fixtures leave the main behavior unverified by the project.

JSONL is useful for analysis and awkward for reading

The normalized output is well chosen for scripts. Each line is independent, merged files work with common dataset tooling, and source-specific metadata can remain attached. Researchers can filter conversations containing assistant turns or convert message arrays through a tokenizer's chat template. Backup users can also keep separate timestamped files per source instead of merging everything. None of this requires a service account or network API.

A JSONL folder is a poor archive browser. There is no full-text interface, session preview, duplicate handling, incremental synchronization contract, or retention policy described in the README. Dedicated projects such as Cursor History or Claude Code History Viewer provide a friendlier route when one assistant is all you use. This extractor wins on breadth and on producing a format other software can consume, not on day-to-day retrieval.

A recent push cannot replace a parser test suite

GitHub recorded 544 stars and a last push on August 20, 2026. The open count was 3, and all three visible items were documentation pull requests opened on August 24. No GitHub release exists. That is enough to show current interest around a young project, but there is little public maintenance history to judge. With 29 files, adding sanitized fixtures for each storage layout would materially improve confidence without requiring a large testing system.

Use AI Data Extractor for a controlled, local export where you can compare results against the original applications. Keep each source file until the normalized archive has been sampled, counted, scanned, and opened by its intended consumer. The 8-second successful build and clean vulnerability audit make the first trial cheap. The missing tests and heuristic parsers mean the export should remain a copy, never the only surviving record.

Alternatives

ProjectWhat it isPick it when
Cursor HistoryA desktop tool for browsing, searching, exporting, and backing up Cursor chats.pick this instead when Cursor is your only source and you want a reading interface.
Claude Code History ViewerA desktop viewer and analytics app for local Claude Code transcripts.pick this instead when you want to inspect Claude Code sessions visually rather than normalize several assistants.
claude-historyA focused terminal tool for fuzzy-searching Claude Code conversation history.pick this instead when fast Claude Code recall matters more than export for training.

What people are saying

  1. [velocity-scout] bawadou/ai-data-extractor

Sources

  1. AI Data Extractor README
  2. AI Data Extractor repository
  3. Open issues and pull requests

More data reviews

turso · TrackersListCollection · dash · getcontact-cli · awesome-zhuiju-free · iggy · the whole board →