Слой 1: локальные временные данные
Данные сессии в .git/agentnote/sessions/. JSONL-файлы для prompts, changes и blob hashes. Ротируются после каждого commit и никогда не pushатся.
Эта страница объясняет механику отчета: что собирается локально, что превращается в git note и как эти данные попадают в PR Report и Dashboard. Чтобы пользоваться Agent Note, не нужно помнить все детали, но это полезная модель, когда результат выглядит неожиданно.
Hooks захватывают prompt и turn id.
Hooks или transcripts записывают изменённые файлы и сигналы, которые используются для attribution.
Когда в сессии есть данные для записи, git commit вставляет trailer и записывает git note.
git push отправляет refs/notes/agentnote в remote.
Если сгенерированные git hooks установлены, в большинстве репозиториев достаточно продолжать пользоваться обычными git commit и git push. Cursor также восстанавливает пары prompt / response из локальных transcripts и может продолжать отслеживать коммиты, когда git hooks недоступны.
Слой 1: локальные временные данные
Данные сессии в .git/agentnote/sessions/. JSONL-файлы для prompts, changes и blob hashes. Ротируются после каждого commit и никогда не pushатся.
Слой 2: Git Notes
Постоянная запись в refs/notes/agentnote. Один JSON на commit. Можно push, fetch и делиться с командой.
| Файл | Назначение |
|---|---|
prompts.jsonl | Один prompt на строку с номером turn |
changes.jsonl | Файлы, которых коснулась AI, с post-edit blob hashes |
pre_blobs.jsonl | Состояние файла до каждого AI edit |
heartbeat | Timestamp активности сессии |
turn | Монотонный счетчик, увеличивающийся с каждым prompt |
{ "v": 1, "agent": "claude", "session_id": "a1b2c3d4-...", "timestamp": "2026-04-02T10:30:00Z", "model": "claude-sonnet-4-20250514", "interactions": [ { "prompt": "Реализуй JWT auth middleware", "contexts": [ { "kind": "reference", "source": "previous_response", "text": "Предыдущий response объясняет, почему этот middleware нужно изменить." } ], "selection": { "schema": 1, "source": "primary", "signals": ["primary_edit_turn"] }, "response": "Я создам 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 } }}
Обычно это line-level. Agent Note сравнивает состояние файла до и после каждого AI edit и затем вычитает из final diff человеческие edits, которые появились позже.
Начинает как file-level. Переходит на line-level только когда patch counts в transcript совпадают с final commit diff.
Начинает как file-level. Переходит на line-level только когда совпадают counts правок и финальный файл всё ещё соответствует последнему AI edit.
Сохраняет prompt / response и file-level attribution через hooks и парсинг transcript. Перехода на line-level пока нет.
📝 Context📝 Context — это подсказка только для отображения коротких prompt вроде “continue” или “сделай следующий шаг”. Она помогает понять prompt, не меняя attribution.
reference context берётся из непосредственно предыдущего response, если он упоминает путь изменённого файла, имя файла или code identifier из финального diff.scope context берётся из текущего response, если его первые строки ясно описывают текущую работу.yes, continue или お願いします как правила выбора. Если нет конкретной подсказки по файлу или коду, Context не добавляется.files_touched, prompt ownership, AI Ratio, attribution method или факт сохранения git note.Agent Note и Entire решают похожие, но разные задачи.
refs/notes/agentnote; временные файлы сессии остаются в .git/agentnote/. Entire строится вокруг checkpoint metadata и hosted web application.| Событие | Что происходит |
|---|---|
| SessionStart | Создаёт директорию сессии и записывает heartbeat |
| UserPromptSubmit | Добавляет prompt, увеличивает turn counter и ротирует logs |
| PreToolUse Edit/Write | Синхронно захватывает pre-edit blob hash |
| PostToolUse Edit/Write | Захватывает post-edit blob hash и путь к файлу |
| Stop | Логирует событие stop (heartbeat остаётся активным — Stop = конец response, а не конец сессии) |
Git notes невидимы в списках веток, в UI GitHub и в CI, но их можно push и fetch.
# Поделиться с командойgit push origin refs/notes/agentnote
# Забрать из remotegit fetch origin refs/notes/agentnote:refs/notes/agentnote
# Посмотреть notegit notes --ref=agentnote show <commit>