Conversation Exporter
Export AI conversation sessions into a Git repository using a readable, time-based structure.
What it does
- Scans source session files (Codex JSONL, Claude projects, Cursor workspaceStorage, Gemini CLI sessions).
- Normalizes each session into a common model.
- Writes two artifacts per session:
- readable Markdown transcript:
YYYY-MM-DD-HHMM-slug.md - hidden normalized JSON:
.YYYY-MM-DD-HHMM-slug.json
- readable Markdown transcript:
- Organizes history by user and source system:
sync:.ai/history/<user>/<source-system>/(flat — sessions directly inside)backup:history/<user>/<source-system>/<system-name>/<path-relative-to-home>/...
- Runs idempotently (only reprocesses changed or new sessions).
- Cursor: supports both single-folder and multi-root (
.code-workspace) windows — sessions are attributed to the matching repo folder.
TL;DR
No install needed — just run from any project folder:
uvx --from convx-ai convx sync
Install and run
uv add convx-ai
# or: pip install convx-ai
convx --help
From source:
uv sync
uv run convx --help
sync — project-scoped command
Run from inside any Git repo. Syncs conversations for the current folder by default and writes them into the repo itself:
cd /path/to/your/project
uv run convx sync
By default syncs Codex, Claude, Cursor, and Gemini. Use --source-system codex, --source-system claude, --source-system cursor, or --source-system gemini to sync a single source. No --output-path needed — the Git root is used as destination and the current working directory is used as scope filter. Recursive folder matching is enabled by default; use --no-recursive to restrict to the current folder only. Sessions are written flat under .ai/history/<user>/<source-system>/ with no machine name or path nesting.
backup — full backup command
Exports all conversations into a dedicated backup Git repo:
uv run convx backup \
--output-path /path/to/your/backup-git-repo \
--source-system codex
Common options
--source-system: source(s) to sync:all(default),codex,claude,cursor,gemini, or comma-separated.--input-path: source sessions directory override (per source).- default for Codex:
~/.codex/sessions - default for Claude:
~/.claude/projects - default for Cursor:
~/Library/Application Support/Cursor/User/workspaceStorage(macOS) Supports both single-folder and multi-root (.code-workspace) Cursor windows. - default for Gemini:
~/.gemini/tmp
- default for Codex:
--user: user namespace for history path (default: current OS user).--system-name: system namespace for history path (default: hostname).--dry-run: discover and plan without writing files.--history-subpath: folder inside output repo where history is stored (default:sync=.ai/history,backup=history).--recursive/--no-recursive(synconly): include or exclude subdirectories of the current folder (default:--recursive).--output-path(backup only): target Git repository (must already contain.git).
Configuration defaults
Set repo-level defaults in .convx/config.toml. CLI flags override config values.
[sync]
history_subpath = ".ai/history"
skip_if_contains = "CONVX_NO_SYNC"
redact = true
[backup]
history_subpath = "history"
redact = true
[sanitize]
keywords = ["work", "client-x"]
Example output
convx sync (inside a project repo):
history/
pascal/
codex/
2026-02-15-1155-conversation-backup-plan.md
.2026-02-15-1155-conversation-backup-plan.json
claude/
2026-01-15-1000-api-auth-migration-plan/
index.md
agent-abc1234.md
.index.json
convx backup (dedicated backup repo):
history/
pascal/
codex/
macbook-pro/
Code/
my-project/
prototypes/
matrix-heatmap-test/
2026-02-15-1155-conversation-backup-plan.md
.2026-02-15-1155-conversation-backup-plan.json
Idempotency behavior
- Export state is stored at
.convx/index.jsonin the output repo. - A session is skipped when both:
session_keyalready exists, and- source fingerprint (SHA-256 of source file) is unchanged.
- If source content changes, that session is re-rendered in place.
Other commands
stats — index totals and last update time:
uv run convx stats --output-path /path/to/your/backup-git-repo
explore — browse and search exported conversations in a TUI:
uv run convx explore --output-path /path/to/your/repo
hooks — install or remove a pre-commit hook that runs sync before each commit:
uv run convx hooks install
uv run convx hooks uninstall
Secrets
Exports are redacted by default (API keys, tokens, passwords → [REDACTED]). Be mindful of secrets in your history repo. See docs/secrets.md for details and pre-commit scanner options (Gitleaks, TruffleHog, detect-secrets, semgrep).
Metadata
Release files for convx-ai 0.2.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| convx_ai-0.2.7.tar.gz | 2.9 MB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| convx_ai-0.2.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 3.2 MB
Release files / convx_ai-0.2.7.tar.gz
| Download URL | convx_ai-0.2.7.tar.gz |
|---|---|
| Size | 2.9 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bfb943e57dae259320772ff1832777151fb867bc21a28cdfa354b7c9ca86bf81
|
|
BLAKE2b-256 checksum How to use checksums |
beda617ed45665d848806fe0ebbd1c6e4828f7847303834ece778613fcc70618
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / convx_ai-0.2.7-py3-none-any.whl
| Download URL | convx_ai-0.2.7-py3-none-any.whl |
|---|---|
| Size | 295.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
dac08aa9952587159726b56dbc51a4858a131540722f1970b195931deb944b10
|
|
BLAKE2b-256 checksum How to use checksums |
c3de64809a1bef722944c37f328e4fb0313457bbf415544f25ae174dda7f52f8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for convx-ai 0.2.7
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.