CÓMO FUNCIONA
Sin magia. Solo hooks, git y estándares.
No leemos tu código. No usamos IA para detectar IA. Usamos los hooks que los propios agentes ya proporcionan y git como base de datos.
"Usar un modelo para detectar código generado por IA a partir del diff."
No funciona. La precisión de detección ronda el 60%. Falsos positivos. Falsos negativos. Y en cuanto un desarrollador toca el código IA, la señal se pierde.
El flujo completo
Desde que Claude edita un fichero hasta tu dashboard
- El agente dispara un hook PreToolUse
Antes de que Claude Code (o Cursor, Codex, Windsurf) edite un archivo, llama a un hook registrado con el nombre de la herramienta y el archivo destino. Nosotros capturamos un snapshot.
El agente dispara un hook PreToolUse# ~/.claude/settings.json
$ "PreToolUse": [{ "command": "iria-monitor ai-checkpoint claude-code" }]
- El agente edita el fichero
Comportamiento normal de Claude/Cursor. Sin interceptar nada. El usuario acepta o rechaza en su flujo habitual.
- PostToolUse se dispara — calculamos el diff
El agente llama al post-hook. Comparamos el snapshot con el estado actual. Las líneas nuevas son de la IA. Las que no cambiaron son del humano. Atribuimos, no adivinamos.
PostToolUse se dispara — calculamos el diff# líneas 5-18 ahora se atribuyen a:
$ claude-code/claude-sonnet-4-6 (session abc123)
- Append al working log
La atribución se guarda en
.git/ai/working_logs/a1b2c3d.jsonl. Append-only, con file lock, seguro bajo ediciones concurrentes. - git commit dispara el hook post-commit
Nuestro git post-commit hook lee el working log, construye un Authorship Log y lo almacena como git note en
refs/notes/ai.git commit dispara el hook post-commit# ver la note de cualquier commit
$ git notes --ref=ai show HEAD
- El CLI local funciona al instante
No se necesita red. El CLI local lee la git note y muestra la atribución al instante.
El CLI local funciona al instante# para desarrolladores individuales, con esto basta
$ iria-monitor blame foo.py
$ iria-monitor blame src/auth.py
$ iria-monitor stats --durability
- Opcional: push a tu dashboard de equipo
Si tu organización usa Iria Monitor cloud, el post-commit hook también envía la nota a tu tenant. O instalas nuestra GitHub App y leemos las notas vía GitHub API en los eventos de push.
- Tres vistas de los mismos datos
Personal (privado para el dev), Vendor (el equipo/organización), Enterprise (un comprador comparando varios vendors). Las mismas git notes por debajo. Diferentes vistas por encima.
Qué aspecto tienen los datos
Un único fichero, atribuido línea a línea. Multiplicado por cada commit, cada repo, cada proveedor.
- 1
import oshuman - 2
import hmachuman - 3
from datetime import datetimehuman - 4
- 5
class AuthManager:claude-code - 6
"""Handle authentication lifecycle."""claude-code - 7
def __init__(self, db):claude-code - 8
self.db = dbclaude-code - 9
self.cache = {}claude-code - 10
def create_token(self, user_id):claude-code - 11
return jwt.encode({"sub": user_id}, SECRET)claude-code - 12
- 13
def authenticate(self, email, pwd):human - 14
user = self.db.get_user(email)human - 15
if not user: raise HTTPException(401)human - 16
def validate_token(self, tok):cursor - 17
try: return jwt.decode(tok, SECRET)cursor - 18
except JWTError: return Nonecursor
Agregado hacia arriba — esto es lo que alimenta los dashboards.
Arquitectura
Local-first, cloud opcional
- Claude Code
- Cursor
- Codex
- Windsurf
- Python · solo stdlib
- calcula el diff
- atribuye líneas
JSONL + flock (seguro ante concurrencia)
git notes --ref=ai show HEAD
- iria-monitor-code-metrics
- receptor de webhooks
- orgs · repos
- commits · blame
- Enterprise
- Proveedor
- Personal
El código fuente nunca sale de la máquina del desarrollador. Solo metadatos.
Cosas que quizás te estés preguntando
Pruébalo.
Dos comandos. Sin cuenta para usar el CLI.
Empezar