Задача — это то, что нужно сделать. Запуск — одна попытка это сделать. Здесь объясняется, как устроено и то и другое и как Istok замечает, что агент бросил попытку на полпути.
Зачем две сущности
Работа редко заканчивается за один заход. Сессия обрывается, проверка падает, сначала нужно влить другое изменение или работу подхватывает другой агент. Если бы задача и попытка были одной записью, каждый такой перерыв терял бы историю или оставлял беспорядок.
Поэтому Istok хранит их отдельно:
Задача #12 "Return 404 for missing orders"
├── Запуск A Claude Code abandoned (сессию закрыли)
├── Запуск B Codex failed (упали тесты)
└── Запуск C Codex succeeded → задача выполнена
Задача остаётся открытой, сколько бы попыток ни понадобилось. Каждый запуск хранит свою запись о том, что произошло.
Задачи
В задаче есть заголовок, описание, критерии приёмки, заметки и история всего, что с ней происходило: комментарии, обновления прогресса, изменения зависимостей и запуски.
Агенты создают задачи для существенной работы — новых функций, исправлений, рефакторинга, исследований, — предварительно проверив, что подходящей задачи ещё нет. Вопросы, чтение кода и мелкие правки задачи не требуют.
Задача всегда находится в одном из состояний:
- Готова (ready) — открыта, не заблокирована, и никто над ней не работает.
- Заблокирована (blocked) — зависит от другой незавершённой задачи или помечена как заблокированная.
- В работе (in progress) — у неё есть активный запуск, аренда которого ещё не истекла.
- Выполнена (done) — завершена, обычно с подтверждением проверки. См. Проверки.
Зависимости показывают агентам, какую работу можно начать сейчас, а какой придётся подождать. Обновления прогресса фиксируют значимые шаги — принятое решение, найденный блокер, законченную часть, — а не каждую мелкую правку.


Запуски
Когда агент приступает к реализации, он берёт задачу в работу. При этом создаётся запуск, и в нём сохраняется снимок контекста, который агент получил для этой попытки (см. Контекст и знания).
Запуск записывает:
- какой агент делал попытку (его идентификатор исполнителя);
- ветку Git и коммит, с которых он начал;
- выполненные команды и их вывод;
- проверки и артефакты;
- итоговый статус и сводку:
succeeded,failed,blockedилиcancelled.
Запуск, закрытый без завершения, получает статус abandoned — «прерван». Завершённые и прерванные запуски остаются в истории задачи.
Аренда и зависшие запуски
Пока запуск активен, он держит аренду. Агент продлевает её, отправляя сигналы активности (heartbeat) по ходу работы. Выполнять команды в запуске или завершать его может только агент, у которого текущая аренда.
Если сессия упала или её закрыли, сигналы прекращаются и аренда истекает. Запуск становится зависшим: формально он ещё активен, но над ним никто не работает.
Зависший запуск не блокирует задачу навсегда:
- тот же агент может восстановить запуск и продолжить с новой арендой;
- следующая попытка взять задачу закроет зависший запуск как
abandonedи начнёт новую; - вы можете прервать его сами — в веб-интерфейсе или командой
istok run abandon.
Прерванный запуск остаётся в истории, а задача — открытой.
Работа переживает сессию
Задачи и запуски живут в проекте, а не в чате. Поэтому новая сессия может спросить у Istok, что открыто, прочитать прогресс задачи и прошлые запуски и продолжить. Другой агент может сделать то же самое: агенты делят состояние проекта, а не историю разговора.
Как об этом попросить и как безопасно передать работу между Claude Code и Codex, рассказано в разделах Работа с агентом и Несколько агентов в одном проекте.
Ревизии
У задач и запусков есть номер ревизии. Изменение с устаревшей ревизией отклоняется, а не перезаписывает более новое состояние, — так два агента не могут незаметно отменить правки друг друга. Сталкиваться с этим придётся, только если вы работаете с CLI напрямую; где это применяется, показано в справке по istok task и istok run.