Camada 1: temporário local
Dados de sessão em .git/agentnote/sessions/. Arquivos JSONL para prompts, mudanças e blob hashes. Rotacionados após cada commit. Nunca são enviados.
Esta página explica a mecânica por trás do report: o que é capturado localmente, o que vira git note e como esses dados chegam ao PR Report e ao Dashboard. Você não precisa memorizar tudo para usar o Agent Note, mas este é o modelo para consultar quando algo parecer inesperado.
Os hooks capturam o prompt e o turn id.
Hooks ou transcripts registram arquivos tocados e sinais de attribution.
Quando houver dados de sessão registráveis, git commit injeta o trailer e escreve a git note.
git push envia refs/notes/agentnote para o remote.
Quando os git hooks gerados estão instalados, na maioria dos repositórios basta continuar usando git commit e git push. O Cursor também recupera pares de prompt / response a partir de transcripts locais e consegue continuar registrando commits quando os git hooks não estão disponíveis.
Camada 1: temporário local
Dados de sessão em .git/agentnote/sessions/. Arquivos JSONL para prompts, mudanças e blob hashes. Rotacionados após cada commit. Nunca são enviados.
Camada 2: Git Notes
Registro permanente em refs/notes/agentnote. Um JSON por commit. Pode ser enviado, buscado e compartilhado com o time.
| Arquivo | Finalidade |
|---|---|
prompts.jsonl | Um prompt por linha com número de turn |
changes.jsonl | Arquivos tocados pela IA com post-edit blob hashes |
pre_blobs.jsonl | Estado do arquivo antes de cada edição da IA |
heartbeat | Timestamp de atividade da sessão |
turn | Contador monotônico incrementado a cada prompt |
{ "v": 1, "agent": "claude", "session_id": "a1b2c3d4-...", "timestamp": "2026-04-02T10:30:00Z", "model": "claude-sonnet-4-20250514", "interactions": [ { "prompt": "Implementar middleware de autenticação JWT", "contexts": [ { "kind": "reference", "source": "previous_response", "text": "A response anterior explica por que esse middleware precisa mudar." } ], "selection": { "schema": 1, "source": "primary", "signals": ["primary_edit_turn"] }, "response": "Vou criar o middleware...", "files_touched": ["src/auth.ts"], "tools": ["Edit"] } ], "files": [ { "path": "src/auth.ts", "by_ai": true }, { "path": "CHANGELOG.md", "by_ai": false } ], "attribution": { "ai_ratio": 73, "method": "line", "lines": { "ai_added": 146, "total_added": 200, "deleted": 12 } }}
O padrão é line-level. O Agent Note salva o estado do arquivo antes e depois de cada edição da IA e remove do diff final as edições humanas que vieram depois.
Começa como file-level. Só sobe para line-level quando as contagens de patch do transcript batem com o diff final do commit.
Começa como file-level. Só sobe para line-level quando as contagens de edição batem e o arquivo final ainda corresponde à última edição da IA.
Registra prompt / response e atribuição em nível de arquivo via hooks e parsing de transcript. O modo line-level ainda não está disponível.
📝 Context é coletado📝 Context é uma nota apenas visual para prompts curtos como “continue” ou “faça o próximo”. Ela ajuda a entender o prompt sem mudar a attribution.
reference context vem da response imediatamente anterior quando ela menciona um caminho de arquivo alterado, nome de arquivo ou code identifier do diff final.scope context vem da response atual quando as primeiras linhas explicam claramente o trabalho em andamento.yes, continue ou お願いします como regra de seleção. Se não houver uma pista concreta de arquivo ou código, ele omite Context.files_touched, prompt ownership, AI Ratio, attribution method ou se uma git note será gravada.Agent Note e Entire resolvem problemas relacionados, mas diferentes.
refs/notes/agentnote; arquivos temporários da sessão ficam em .git/agentnote/. Entire é centrado em checkpoint metadata e uma hosted web application.| Evento | O que acontece |
|---|---|
| SessionStart | Cria o diretório da sessão e grava o heartbeat |
| UserPromptSubmit | Acrescenta o prompt, incrementa o contador de turn e rotaciona os logs |
| PreToolUse Edit/Write | Captura o pre-edit blob hash de forma síncrona |
| PostToolUse Edit/Write | Captura o post-edit blob hash e o caminho do arquivo |
| Stop | Registra o evento stop (o heartbeat continua ativo — Stop = fim da response, não fim da sessão) |
Git notes são invisíveis em listas de branches, na UI do GitHub e no CI, mas podem ser pushadas e fetchadas.
# Compartilhar com o timegit push origin refs/notes/agentnote
# Buscar do remotegit fetch origin refs/notes/agentnote:refs/notes/agentnote
# Ver uma notegit notes --ref=agentnote show <commit>