# Конспект 2/3 — Долгоживущие агенты: harness, память, сессии (15 минут)

Глубокий разбор тяжёлого блока из `AI-SD-TOPICS.md` §6. Цель: после чтения уметь **на доске** объяснить, почему compaction недостаточно, и нарисовать initializer + coding agent.

---

## 1. Проблема: агент живёт дольше одного контекстного окна

Современные агенты умеют работать часами и днями. Но контекстное окно конечно.

Каждая новая сессия начинается **с нуля**: модель не помнит, что было в прошлой.

Anthropic сравнивают это с командой инженеров, работающих посменно, где каждый новый инженер приходит без памяти о прошлой смене.[31]

Наивное решение — **compaction** (сжатие контекста). Оно есть в Agent SDK и «теоретически» позволяет работать бесконечно.

Практика показала: compaction **недостаточно**.

Даже Opus 4.5 на Claude Agent SDK в цикле проваливает задачу «собери клон claude.ai», если дать только общий промпт.[31]

## 2. Два типичных фейла долгоживущего агента

**Фейл 1: one-shot попытка.** Агент пытается сделать всё за раз, вылетает из контекста на середине, следующая сессия тратит время на «что здесь происходит и как это починить».[31]

**Фейл 2: ложное завершение.** Позже в проекте агент видит, что «что-то уже сделано», и объявляет задачу выполненной, хотя фичи недоделаны и не тестированы.[31]

Оба фейла лечатся структурой harness, а не моделью.

## 3. Решение: двухчастный harness

Anthropic разбили проблему на две части и дали каждой отдельного агента.[31]

### Initializer agent (только первая сессия)

Специальный промпт. Обустраивает окружение так, чтобы любой следующий агент мог продолжить без гаданий:

| Артефакт | Зачем |
|---|---|
| `init.sh` | скрипт запуска dev-окружения — агент не тратит токены на «как это запустить» |
| `claude-progress.txt` | журнал: что сделано, что дальше |
| `features.json` | список фич со статусами `passes: false/true` |
| начальный git commit | точка отката |

**Почему JSON, а не Markdown для списка фич:** модель реже ломает JSON, чем Markdown. Это эмпирическое наблюдение Anthropic — модель «не трогает» структурированный файл, а Markdown может переписать.[31]

Агент меняет только поле `passes` и только после **реальной проверки** фичи.

Промпт жёсткий: «Недопустимо удалять или редактировать тесты — это приведёт к пропущенному или сломанному функционалу».[31]

### Coding agent (каждая следующая сессия)

Обязательный ритуал старта:

1. `pwd` — где я.
2. git log + progress file — что было сделано.
3. features.json — какую фичу брать.
4. Запустить `init.sh` и проверить, что dev-сервер жив.
5. Взять **одну** незакрытую фичу.
6. Сделать, протестировать **как человек** (браузер, curl), только потом `passes: true`.
7. git commit + обновить progress.

Ключевое правило: **оставляй окружение в чистом состоянии** — таком, где следующий агент (или человек) может продолжить без разбора завалов.[31]

## 4. Почему это работает: три инсайта

**Инсайт 1: incremental progress.** Одна фича за сессию — а не «всё сразу». Это устраняет one-shot фейл.[31]

**Инсайт 2: внешняя память важнее внутренней.** Прогресс живёт в git + файлах, а не в контексте. Агент «читает журнал», а не «вспоминает».[31]

**Инсайт 3: тестирование как человек.** Агента надо явно заставлять проверять end-to-end (браузерная автоматизация, curl против dev-сервера), иначе он помечает фичу done без проверки.[31]

## 5. Память и сессии: разные уровни

Проблема «контекст закончился» решается на нескольких уровнях:

**Уровень 1: сессии (sessions).** OpenAI Agents SDK: персистентный слой, который хранит рабочий контекст между запусками агента.[34][54]

**Уровень 2: файловая система.** Anthropic: субагенты пишут артефакты в filesystem, а lead получает ссылку, а не простыню токенов. Это снижает «game of telephone» — искажение при пересказе через контекст.[27]

**Уровень 3: OS-стиль управления памятью.** MemGPT (paper 2023): виртуальный контекст как виртуальная память — paging между «физической» (контекст) и «дисковой» (внешняя память) памятью. LLM сам решает, что выгрузить, что подгрузить.[57]

На собеседовании достаточно назвать уровни 1–2 и знать, что MemGPT — это идея «контекст как виртуальная память», которую потом переизобрели в продакшене.

## 6. Compaction — когда всё-таки годится

Compaction (сжатие истории) — нормальный инструмент для **коротких** сессий: переписка, где надо «пересказать суть диалога».

Не годится для долгоживущих проектов, потому что: сжатие теряет детали, не даёт точки отката, и агент не может «прочитать журнал» — он получает пересказ пересказа.[31]

## 7. Что это значит для Plata-кейса

Долгоживущий агент в банке — это, например, обработка пачки документов OCR или разбор треда из 40 писем.

Паттерн тот же:

- initializer: раскладывает документы, пишет список «что извлечь», создаёт рабочую директорию;
- worker на каждый документ: извлёк поля → записал в structured store → отметил в чеклисте;
- если воркер упал — следующий читает чеклист и продолжает с того места;
- финальный шаг — сверка с заявкой, и только потом «готово».

Ключевая метрика для такого: **outcome в БД, а не слова агента**. Transcript ≠ outcome.[32]

---

## Ссылки по теме

- [Anthropic — Effective harnesses for long-running agents](https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents) — основа конспекта: initializer + coding agent, таблица фейлов и решений[31]
- [Quickstart: autonomous coding (GitHub)](https://github.com/anthropics/claude-quickstarts/tree/main/autonomous-coding) — готовый код harness[63]
- [Claude Agent SDK overview](https://platform.claude.com/docs/en/agents-and-tools/agent-sdk/overview) — контекст-менеджмент, compaction, тулы[62]
- [OpenAI Agents SDK — Sessions/Memory](https://openai.github.io/openai-agents-python/memory/) — персистентный слой контекста, SQLite/encrypted сессии[54]
- [MemGPT paper (arxiv 2310.08560)](https://arxiv.org/abs/2310.08560) — LLM как ОС, виртуальный контекст, paging[57]
- [Anthropic — How we built multi-agent research system](https://www.anthropic.com/engineering/built-multi-agent-research-system) — субагенты пишут в filesystem, «game of telephone», end-state eval[27]
- [Anthropic — Demystifying evals for AI agents](https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents) — transcript vs outcome, end-state evaluation[32]
- [MCP — Model Context Protocol intro](https://modelcontextprotocol.io/docs/getting-started/intro) — стандарт подключения тулов/данных, «USB-C для AI»[58]
- [OpenAI — Practical Guide to Building Agents (PDF)](https://cdn.openai.com/business-guides-and-resources/a-practical-guide-to-building-agents.pdf) — HITL, guardrails, orchestration[33]

## Мини-словарь к конспекту

**Harness** — инфраструктура, которая гоняет агента: даёт тулы, крутит цикл «подумай → вызови тул», записывает трейсы.[32]

**Initializer agent** — первая сессия, настраивает окружение и «память» проекта.[31]

**Coding agent** — каждая следующая сессия: делает инкремент, оставляет чистое состояние.[31]

**Compaction** — автоматическое сжатие истории контекста.[31]

**Session** — персистентный контекст агента между запусками.[34]

**End-state evaluation** — оценивать финальное состояние мира (БД, файл), а не путь, которым агент шёл.[27][32]

**Transcript / outcome** — что агент сказал vs что реально произошло.[32]

**Game of telephone** — искажение информации при передаче субагент → lead → юзер; лечится записью артефактов в filesystem.[27]

**Paging** — (в MemGPT) выгрузка/подгрузка блоков памяти между контекстом и хранилищем.[57]

## Sources

[27] https://www.anthropic.com/engineering/built-multi-agent-research-system
[31] https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents
[32] https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents
[33] https://cdn.openai.com/business-guides-and-resources/a-practical-guide-to-building-agents.pdf
[34] https://openai.github.io/openai-agents-python
[54] https://openai.github.io/openai-agents-python/memory
[57] https://arxiv.org/abs/2310.08560
[58] https://modelcontextprotocol.io/docs/getting-started/intro
[62] https://platform.claude.com/docs/en/agents-and-tools/agent-sdk/overview
[63] https://github.com/anthropics/claude-quickstarts/tree/main/autonomous-coding
