Skip to content

Repository files navigation

Exev

Exev converts Claude Code and Codex sessions into privacy-safe training datasets with review gates, background sync, and MCP memory retrieval.

TL;DR

  • Run exev setup once.
  • Run exev export --no-push to produce a local reviewed dataset.
  • Run exev confirm ... to pass review gates.
  • Run exev export --publish-attestation "..." only after explicit approval.

Default UX

  • Running plain exev opens the full-screen TUI.
  • Running exev export ... keeps the scripted CLI flow.

Why Exev

  • Turn day-to-day coding sessions into structured, reusable training data.
  • Keep privacy controls first-class with redaction and manual review gates.
  • Preserve historical problem-solving context through MCP-accessible session memory.

Core Capabilities

  • Multi-source ingestion:
    • Claude Code and Codex session discovery and parsing.
    • Experimental adapter routing for Cursor, Windsurf, Aider, Continue.dev, Antigravity, VS Code, Zed, and Xcode beta logs.
  • Privacy-aware export:
    • Secret and PII redaction, username anonymization, and project-level exclusions.
    • Layered privacy engine: regex baseline + optional ML NER (exev[pii-ml]).
  • Controlled publishing workflow:
    • Local export, user review attestations, confirm gate, then push.
    • Immutable dataset version snapshots + dedupe index on publish.
  • Continuous mode:
    • Background watch daemon for incremental sync.
  • Memory tooling:
    • MCP server with search, project patterns, trajectory stats, session lookup, graph similarity retrieval, and index refresh.

Install

pip install exev

Optional extras:

pip install "exev[pii-ml]"    # Presidio + spaCy detection layer
pip install "exev[mcp]"       # MCP server runtime
pip install "exev[finetune]"  # Experimental local fine-tune scaffolding

From source:

git clone https://github.com/ychampion/exev.git
cd exev
pip install -e ".[dev]"

Check installed version:

exev --version

Quick Start

# Guided onboarding (HF auth help, repo setup, project scope, MCP, watcher)
exev setup

# Reset local setup for a clean re-test (config/state/MCP entry)
exev reset --all --yes

# Verify environment and connected scope
exev doctor
exev projects --source both
exev stats
exev diff --format json
exev config --encryption status

# Export locally first
exev export --no-push

# Review and confirm
exev confirm \
  --full-name "YOUR FULL NAME" \
  --attest-full-name "Asked for full name and scanned export." \
  --attest-sensitive "Reviewed for company/client/private identifiers." \
  --attest-manual-scan "Manually reviewed representative sessions."

# Publish only after explicit approval
exev export --publish-attestation "User explicitly approved publishing to Hugging Face."

# Optional one-command sharing flow
exev share --publish --publish-attestation "User explicitly approved publishing to Hugging Face."

Commands

Command Description
exev status Show current stage and next steps (JSON)
exev prep Discover projects and auth state
exev setup Guided onboarding (HF, dataset repo, projects, MCP, watcher)
exev doctor Verify logs, HF auth, MCP registration, and runtime PATH/version diagnostics
exev stats Show session, token, redaction, and export metrics
exev stats --skill Include trajectory-based growth metrics
exev diff Preview exactly what would be redacted before confirm
exev projects Manage connected project scope
`exev reset [--all --config
exev list List projects with source, size, and exclusion state
exev config ... Configure repo, sources, exclusions, and redactions
`exev config --encryption on off
exev export --no-push Export locally for review
exev export --dry-run Preview what would be exported/published without writing files
exev confirm ... Run checks and unlock push gate
exev export --publish-attestation "..." Push dataset after approval
exev share [--publish] Fast export flow with optional publish + dataset card update
`exev watch --start --stop
exev watch --logs [--follow] View daemon logs with optional streaming
exev watch --monitor [--follow] Live watch monitor (status + recent activity)
exev watch --switch-project "<name>" Quickly scope watcher to one project
exev watch --set-projects "a,b" Set connected project scope directly
exev console Interactive slash-command terminal (/status, /logs, /scope, /run)
exev tui Full-screen TUI with activity feed, slash commands, jobs, and plugins
exev serve Start MCP server over stdio
exev install-mcp Register MCP server in Claude config
exev finetune --experimental Preview fine-tune scaffold for local experimentation
exev synthesize --project <name> Generate EXEV.md from synced sessions
exev update-skill claude Install/update local Exev skill

Additional source filters are available for adapter-backed ingestion:

  • cursor, windsurf, aider, continue, antigravity, vscode, zed, xcode-beta

Watch transparency examples:

exev watch --status
exev watch --monitor --follow
exev watch --logs --follow
exev watch --pause
exev watch --resume
exev watch --switch-project "codex:exev"

Interactive console mode:

exev console --source codex
# Then inside the prompt:
/status
/projects
/scope codex:exev
/logs 80
/run export --no-push

Full-screen TUI mode:

exev
# equivalent explicit command:
exev tui --source both

If plain exev prints export/confirm JSON instead of opening TUI, you are on an older build. Upgrade and verify:

pip install --upgrade exev
exev --version

Inside the TUI:

/help
/status
/source codex
/watch on
/logs 80
/projects
/scope codex:exev
/export --dry-run
/jobs
/plugins list

Minimal local plugin example (./plugins/echo):

plugins/
  echo/
    plugin.json
    plugin.py

plugin.json:

{
  "name": "echo",
  "version": "0.1.0",
  "entrypoint": "plugin.py",
  "description": "Simple echo command"
}

plugin.py:

from exev.tui.types import CommandResult


def register(ctx):
    def _echo(_app, args):
        return CommandResult(ok=True, message=" ".join(args) if args else "echo")

    ctx.register_command("echo", _echo, "Echo input text", usage="/echo <text>")

MCP Memory Server

Install optional MCP dependency:

pip install "exev[mcp]"
exev install-mcp

Available MCP tools:

  • search_past_solutions(query, max_results=5)
  • get_project_patterns(project=None)
  • get_trajectory_stats()
  • get_session(session_id)
  • find_similar_sessions(context, max_results=5)
  • refresh_index()

Privacy and Safety

Exev is designed for private-by-default workflows:

  • path and username anonymization
  • secret and high-entropy token detection
  • custom redaction lists
  • manual confirmation and attestation gates before publish
  • encryption-at-rest support for local artifacts with keyring-backed key management

Automated redaction is not perfect. Always review local exports before publishing.

Package Distribution

  • Primary: PyPI (pip install exev)
  • Release artifacts: wheel/sdist are attached to each GitHub tag release.
  • Optional: publish to a secondary PyPI-compatible index by setting repository secrets:
    • SECONDARY_PYPI_REPOSITORY_URL
    • SECONDARY_PYPI_USERNAME
    • SECONDARY_PYPI_PASSWORD

README Sync Policy

README command docs are enforced in CI:

  • tests/test_docs_consistency.py validates command naming and branding markers.
  • A CLI help parity test ensures README command rows stay aligned with the real CLI surface.

If commands change, CI fails until README is updated.

Community

License

MIT - see LICENSE.

About

Exev: Turn Agent Experience into Training & Evolving Llm in Loop.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages