codeprovenance
by darkm3tter
README.md
# codeprovenance
> **AI-blame: qué agente, sesión y prompt generaron cada cambio de tu código.**
`git blame` te dice quién escribió cada línea. `codeprovenance` te dice **qué IA la escribió y con qué prompt**. Lee los logs de sesión de opencode y Claude Code, los indexa en una base SQLite local, y responde:
- `provenance blame --file src/x.ts` → qué agente/sesión/prompt tocó ese archivo
- `provenance stamp` → añade el trailer `Generated-by:` a tus commits
- `provenance report` → cuánto de tu código lo generó la IA esta semana
## Instalación
```bash
npm install -g @darkm3tter/codeprovenance
```
## Uso
```bash
# 1. Indexa tus sesiones de agente (claude-code + opencode)
provenance capture
# → capturados 1005 eventos nuevos (claude-code + opencode)
# 2. Reporte
provenance report --since 7
# edits por IA: 669
# prompts: 75
# archivos tocados: 241
# sesiones: 27
# agentes: claude-code, opencode
# 3. AI-blame de un archivo
provenance blame --file src/auth.ts
# 2026-07-01T10:00:05Z claude-code · sesión s1 · 3 edits (Write, Edit) · prompt "add an auth flow"
# 4. Sellar tus commits
provenance stamp
# Generated-by: claude-code · session s1 · prompt "add an auth flow" (f52b4493)
```
## Estampado automático de commits (hook opcional)
Instala el hook `prepare-commit-msg` (ejemplo en `examples/prepare-commit-msg`):
```bash
mkdir -p .githooks && cp node_modules/codeprovenance/examples/prepare-commit-msg .githooks/
git config core.hooksPath .githooks
```
Cada commit con archivos que tienen provenance recibe automáticamente:
```
feat: auth flow
Generated-by: claude-code · session 4fd7fc50-... · prompt "add an auth flow" (f52b4493)
```
## Como MCP server
`provenance mcp` expone:
- `ai_blame` — trazabilidad de un archivo (agente, sesión, prompt)
- `provenance_report` — resumen de actividad IA (con ventana en días)
```json
{ "mcpServers": { "codeprovenance": { "command": "provenance", "args": ["mcp"] } } }
```
## Cómo funciona
| Fuente | Formato | Qué extrae |
|---|---|---|
| Claude Code | `~/.claude/projects/**/*.jsonl` | prompts de usuario + `tool_use` (Write/Edit/MultiEdit/Bash) con `file_path` |
| opencode | `~/.local/share/opencode/storage/session_diff/*.json` | diffs por sesión (`{file, patch}`) |
Cada edit queda vinculado al **último prompt de usuario** que lo precedió (con hash). Todo se guarda en `~/.local/share/codeprovenance/db.sqlite` (SQLite vía `bun:sqlite` o `node:sqlite` — cero deps extra). Re-capturar es idempotente (dedupe NULL-safe).
## Transparencia y privacidad
- Todo es **local**: no sale nada de tu máquina
- Los prompts se guardan completos para que el blame sea útil — la DB vive solo en tu `~/.local/share`
- `--json` en todos los comandos para scripting
## Desarrollo
```bash
bun install
bun test # 22+ tests
bun run typecheck # TS estricto
bun run build # binario Node único
```
## Licencia
MIT
This server cannot be deployed
Maintenance
ActivitySlowing
ResponsivenessNo issues