Skip to main content
Glama
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