Представь, что каждый раз, когда твой AI-помощник пишет код, он оставляет за собой крошки. Ценные, уникальные крошки, которые показывают, как он думает, где ошибается, как исправляет себя. А ты их просто сметаешь в мусорное ведро.
Так работает большинство coding-агентов в 2026 году. Мы используем Claude Code, Codex CLI, Kilo Code, но все их размышления, все цепочки мыслей (reasoning traces) исчезают в черной дыре терминала. Это как сжигать библиотеку после прочтения одной книги.
А ведь эти данные — цифровое золото для следующего поколения AI. Особенно для обучения с подкреплением (RL) и тонкой настройки (fine-tuning) агентных моделей. Без реальных траекторий мы тренируем модели на синтетике, и они продолжают тупить на элементарных задачах.
Почему все потеряли миллиарды токенов
Проблема в дизайне. Инструменты создавались для скорости, а не для наблюдаемости (observability). По умолчанию логи пишутся в stdout и исчезают. Настройки логгирования спрятаны за флагами или переменными окружения, о которых никто не знает.
Типичная ошибка: разработчик неделями использует агента, решает сложные задачи, а потом понимает, что не сохранил ни одной сессии для анализа. Все диалоги, все промежуточные шаги улетели в /dev/null.
Вторая проблема — приватность. Многие боятся логировать, потому что в сессиях может быть корпоративный код. Но решение есть: анонимизация и фильтрация чувствительных данных перед публикацией.
Третья — отсутствие стандартного формата. Каждый агент пишет логи по-своему. Нет единой схемы для хранения траекторий: промпт, ответ, инструменты (tools), выполнение кода, результат.
Инструменты, которые уже умеют логировать (но вы об этом не знали)
Начнем с самых популярных. Актуально на февраль 2026.
1Claude Code: ищем скрытый флаг
Claude Code к 2026 году оброс фичами, но логирование так и осталось полускрытым. По умолчанию он не сохраняет детальные сессии. Но есть флаг --log-level и переменная окружения ANTHROPIC_LOG.
Как НЕ надо делать: запускать просто claude-code generate. Все улетает в эфир.
Правильный способ — установить уровень логирования и направить вывод в файл:
# Устанавливаем максимально детальное логирование
export ANTHROPIC_LOG=debug
# Запускаем сессию и пишем логи в файл
claude-code generate --task "напиши функцию на Python" 2>&1 | tee claude_session_$(date +%s).log
# Или используем встроенный флаг (появился в версии 2.1)
claude-code --log-file ./sessions/ --log-format json generate --task "рефакторинг кода"claude-code --version. Если ниже 2.1, обнови через pip install --upgrade claude-code.Что сохраняется в логах? Промпты, полные ответы модели (включая reasoning), вызовы инструментов, временные метки. Золотая жила для анализа.
2Codex CLI и открытые альтернативы
С Codex CLI история похожая. Утилита от OpenAI (которая к 2026-му все еще жива, но сильно изменилась) имеет флаг --verbose, но он не сохраняет логи в файл. Придется использовать shell.
# Захват всей сессии с временными метками
codex --verbose --model gpt-4o-reasoning solve problem.py 2>&1 | awk '{print strftime("%Y-%m-%d %H:%M:%S"), $0}' > codex_session.logНо если ты читал нашу статью про локальные альтернативы Cursor, то знаешь про Kilo Code. У него с логированием проще: в конфиге ~/.kilo-code/config.yaml можно включить сохранение сессий.
# ~/.kilo-code/config.yaml
observability:
enable_session_logging: true
log_directory: "~/kilo_logs"
format: jsonl # каждая сессия — отдельная строка JSONKilo Code, кстати, хранит не только диалог, но и контекст проекта (через LSP), что бесценно для исследований.
3Универсальный перехватчик: логируем любого агента
А если у агента нет встроенного логирования? Используем script или tee. Старо, но работает.
# Записываем ВСЕ, что происходит в терминале
script -q -c "your-ai-agent command" session.log
# Более современный вариант с timestamp
powershell -Command "Start-Transcript -Path session.log -IncludeInvocationHeader; your-ai-agent; Stop-Transcript" # для WindowsНо это сырые логи. Их еще нужно распарсить. Для этого есть инструменты вроде Tapes.dev, который умеет структурировать потоки разных агентов.
От сырых логов к структурированному датасету
Собрать логи — полдела. Теперь нужно превратить их в датасет, которым смогут пользоваться другие исследователи.
Формат имеет значение. Я предлагаю использовать схему, вдохновленную OpenAI Evals, но расширенную для агентов.
| Поле | Описание | Пример |
|---|---|---|
| session_id | Уникальный идентификатор сессии | claude_1740499200_abc123 |
| timestamp | Время начала сессии | 2026-02-25T10:30:00Z |
| agent_info | Версия агента, модель | { "name": "Claude Code", "version": "2.1", "model": "claude-3.7-sonnet" } |
| trajectory | Массив шагов (промпт, ответ, действия) | [ { "step": 1, "type": "prompt", "content": "..." } ] |
| outcome | Результат сессии (успех/неудача) | "success_with_edits" |
| metadata | Язык, домен, сложность | { "language": "python", "domain": "web", "difficulty": "medium" } |
Теперь пишем скрипт-конвертер, который берет наши логи и выдает JSONL-файл.
#!/usr/bin/env python3
# convert_logs.py
import json
import sys
from datetime import datetime
def parse_claude_log(raw_log: str) -> dict:
"""Парсит лог Claude Code версии 2.1"""
# Здесь твоя логика парсинга
# Простейший пример:
lines = raw_log.split('\n')
trajectory = []
for line in lines:
if line.startswith('PROMPT:'):
trajectory.append({'step': len(trajectory)+1, 'type': 'prompt', 'content': line[7:]})
elif line.startswith('REASONING:'):
trajectory.append({'step': len(trajectory)+1, 'type': 'reasoning', 'content': line[10:]})
return {
'session_id': f"claude_{int(datetime.now().timestamp())}",
'timestamp': datetime.utcnow().isoformat() + 'Z',
'agent_info': {
'name': 'Claude Code',
'version': '2.1',
'model': 'claude-3.7-sonnet' # уточни по логам
},
'trajectory': trajectory,
'outcome': 'unknown', # нужно определить эвристиками
'metadata': {
'language': 'python',
'domain': 'general',
'difficulty': 'unknown'
}
}
if __name__ == '__main__':
with open('raw_session.log', 'r') as f:
raw = f.read()
parsed = parse_claude_log(raw)
with open('dataset.jsonl', 'a') as out:
out.write(json.dumps(parsed, ensure_ascii=False) + '\n')Это базовая структура. В реальности парсинг будет сложнее, но идея ясна.
Очистка и анонимизация: не сливай продакшен
Самая опасная часть. В логах могут быть ключи API, пароли, имена переменных из корпоративного кода.
Никогда не публикуй логи без проверки. Одна ошибка — и твой датасет станет учебником по взлому твоей компании.
Что нужно удалять или заменять на хеши:
- Ключи API (паттерны вроде
sk-,ghp_) - Пароли и токены
- IP-адреса, домены внутренних сервисов
- Имена реальных людей, клиентов
- Фрагменты кода, которые могут быть коммерческой тайной
Используй инструменты вроде ggshield (от GitGuardian) или самописные скрипты с регулярными выражениями.
# Простой скрипт для санитации
def sanitize_log_content(text: str) -> str:
import re
# Удаляем ключи OpenAI
text = re.sub(r'sk-[a-zA-Z0-9]{48}', '[API_KEY_REDACTED]', text)
# Удаляем emails
text = re.sub(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}', '[EMAIL_REDACTED]', text)
# Заменяем имена доменов на примерные
text = re.sub(r'\b(?:api\.|internal\.)?mycompany\.com\b', '[INTERNAL_DOMAIN]', text)
return textПотом проверь логи через гайд по observability — там есть дополнительные методы анализа.
Публикация: делаем датасет полезным для сообщества
Собрал, почистил, структурировал. Теперь выкладывай. Лучшая платформа — Hugging Face Datasets. Заведи аккаунт (если нет) и создай новый датасет.
Создай хорошее README с описанием:
- Размер датасета (количество сессий, токенов)
- Источники (какие агенты, модели, периоды)
- Схему данных
- Примеры использования (например, для обучения reward-моделей)
- Ограничения (языки, домены, возможные смещения)
Загрузи данные в формате JSONL или Parquet (для эффективности). Добавь скрипты для загрузки через datasets библиотеку.
# Пример кода для загрузки твоего датасета
from datasets import load_dataset
ds = load_dataset("your-username/coding-agent-trajectories", split="train")
print(ds[0]) # первая сессияИ вот ты уже создал ценный ресурс для сообщества. Теперь другие исследователи могут тренировать на твоих данных RL-агентов или анализировать паттерны ошибок.
Что дальше? Неочевидные применения
Собранные траектории — не просто архив. Это сырье для инноваций.
Обучение reward-моделей: Разметить сессии по успешности (например, код прошел тесты) и обучить модель, которая оценивает качество действий агента. Это ключ к RLHF для coding-агентов.
Анализ слабых мест: Сгруппируй ошибки. Может, все агенты тупят на работе с асинхронностью в Python? Значит, нужно улучшить тренировочные данные именно в этой области.
Бенчмаркинг: Создай реалистичные тесты на основе реальных сессий. Вместо синтетических задач из LeetCode — настоящие проблемные ситуации из логов.
И помни: следующий прорыв в AI-ассистентах произойдет не из-за новой архитектуры модели, а из-за качества данных для их обучения. Твои логи могут стать тем самым недостающим звеном.
Начни сегодня. Поставь скрипт, который логирует каждую сессию с Claude Code. Через месяц у тебя будет уникальная коллекция. Через полгода — датасет, который захотят использовать в Anthropic или OpenAI. (Шучу, они скорее всего соберут свои. Но твой будет открытым.)
И последний совет: не пытайся собрать все и сразу. Начни с малого — со своих личных проектов. Постепенно добавляй логи от коллег (с их согласия). Качество важнее количества. Одна хорошо размеченная сессия стоит сотни сырых логов.
Удачи. И не теряй цифровое золото.