Перейти к содержимому

Субагенты

Субагент получает тот же системный промпт, что и основной агент, написанный для модели самого субагента: общие инструкции, правила Git, включённые ограничения защищённого содержимого, инструкции проекта, правила, воспоминания и навыки. Вместо режима он получает раздел Role: что он выполняет одно задание для основного агента и считает его пользователем, а затем инструкции своего профиля и выбранный язык ответов. Редактор профиля в Настройки → Sub Agents по-прежнему показывает только инструкции профиля. Независимый отчёт служит доказательством для родителя, а не гарантией выполнения всех требований: недоступные проверки и оставшаяся работа должны быть явно отмечены.

Субагенты — специализированные агенты, которым любой родительский режим Kodik может делегировать сфокусированную дочернюю задачу. Каждый субагент работает в собственном контекстном окне и возвращает результат родителю. В режиме Orchestrator Orchestrator отвечает за цель пользователя, выдаёт каждому субагенту одну ограниченную задачу и объединяет полученные доказательства. Субагенты не общаются с пользователем и не делегируют работу дальше.

В чате субагента поручение родительского агента показывает исходное время отправки — как во время работы субагента, так и после перезагрузки окна.

Родитель выдаёт субагенту ограниченную задачу, нужный контекст и конкретный критерий завершения. Перед итоговым отчётом субагент сверяет всё задание, включая поздние сообщения родителя, с актуальными доказательствами и заканчивает доступную ему работу. Блокер означает незавершённую работу, а не успех. Родитель оценивает доказательства перед тем, как принять результат.

Родитель выбирает делегирование и независимую проверку, когда они помогают выполнить запрос. Постоянного требования запускать Reviewer нет. Инструмент sub_agent появляется только при наличии пригодного профиля; Orchestrator может работать напрямую, если профилей нет. Права, ограничения инструментов и правила проекта сохраняются.

Встроенные профили получают короткие инструкции о своей цели и доступных инструментах. Сохранённые инструкции пользовательских и плагинных профилей сохраняются.

Kodik поставляется с четырьмя профилями по умолчанию:

Профиль Для чего использовать
Researcher Исследование незнакомого кода или источников: где что находится и как связано, с указанием файлов и строк; обоснованные планы и архитектура.
Implementer Ограниченная реализация, отладка, тесты и документация.
Reviewer Независимая проверка требований, корректности, безопасности и доказательств тестирования.
QA Критерии приёмки в запущенном приложении, включая сбои и восстановление.

Каждый профиль получает короткие инструкции о своей цели. Субагент продолжает доступную работу и сообщает результат и ограничения; родитель оценивает доказательства.

Сохранённые настройки прежних профилей продолжают действовать: инструкции, инструменты, модель и остальные параметры не теряются. Reset to default удаляет такой сохранённый профиль. Старые ссылки без собственных настроек разрешаются в доступную замену: Planner и Architect → Researcher; Debugger, Test Engineer и Documentation Writer → Implementer; Security Reviewer → Reviewer. Отключённые или исключённые профили остаются недоступными. QA сохраняет прежний ID qa-engineer.

Каждый встроенный профиль читает файлы через read_file, а ищет и выполняет команды через терминал (shell, get_terminal_output, kill_terminal). У Researcher есть ещё web_search, у Implementer — edit_file, create_file и delete_file, у QA — browser. Субагент на модели OpenAI, у профиля которого есть все три файловых инструмента, получает вместо них apply_patch, как и основной агент. Инструменты любого профиля можно добавить или убрать в Настройки → Sub Agents.

Встроенные профили нельзя удалить. Их можно изменять или отключать в Настройки → Sub Agents, а также создавать полные пользовательские профили. Можно отключить все профили: Orchestrator продолжит работу напрямую с доступными инструментами.

При запуске Kodik обновляет рекомендуемую модель каждого встроенного профиля из каталога моделей. Сохранённый выбор уровня Workspace или Global имеет приоритет над рекомендацией.

Каждый профиль содержит:

  • имя, описание для маршрутизации и инструкции субагента;
  • точную модель с указанием провайдера Kodik, Ollama или Custom Provider;
  • необязательный уровень reasoning (если он не задан, действует значение модели или провайдера по умолчанию);
  • список инструментов субагента и настройку автоматического поиска навыков;
  • состояние включения.

Родитель видит только id, имя, описание для маршрутизации и теги возможностей каждого пригодного профиля. Он не видит назначенную модель, уровень reasoning, полные инструкции и настройку инструментов. Поэтому политика субагента для задачи определяется выбранным профилем, а не режимом родителя.

Субагент получает встроенные и MCP-инструменты, перечисленные в его профиле, независимо от переключателей инструментов Harness родительского режима. Глобальные ограничения функции и провайдера, подтверждения, доверие рабочей области, хуки и границы worktree по-прежнему действуют, а недоступные настроенные инструменты пропускаются. Работающий субагент сверяет каждую команду с текущим списком запрещённых команд, поэтому команда, которую вы запретили во время его работы, не выполнится. Родительские инструменты координации — sub_agent, agent_status, ask_questions, todo_write, team_board, память и инструменты целей — нельзя назначить субагенту. Kodik во время выполнения добавляет каждому субагенту с поддержкой инструментов системный инструмент send_message; это не настройка профиля.

Делегировать может каждый родительский режим. В Settings → Harness выберите режим и настройте список Sub-agents in this mode. Эти переключатели влияют только на видимость профиля для родителя и не меняют сам профиль.

Если при проверке статуса или попытке остановки субагент не найден, в чате появляется короткое нейтральное сообщение Агент не найден — без красной карточки ошибки и технических идентификаторов.

Если провайдер завершает ход субагента с повторяемой ошибкой сети или сервиса, Kodik оставляет этого исполнителя активным и после короткой паузы запускает восстановительный ход в той же дочерней сессии. Восстановительный ход продолжает работу с места остановки и не получает задание повторно. Остановка исполнителя отменяет ожидающую повторную попытку. Ошибки аутентификации, конфигурации и другие окончательные ошибки по-прежнему завершают работу субагента со статусом ошибки.

Фоновый отчёт поступает родителю вместе со следующим результатом инструмента или пока финальный ответ ожидает завершения субагента. Kodik сохраняет отчёт и подтверждение доставки одной операцией: после повторного открытия сессии уже полученный отчёт не остаётся в ожидании.

После запуска в чате остаётся неизменяемая строка «Запущен субагент Researcher · название». Она входит в обычную группу инструментов с заголовком «Запущен агент» или «Запущены агенты». Раскройте строку, чтобы увидеть профиль, модель, уровень рассуждений, инструменты и полный исходный промпт родительского агента. Кнопки отмены и текущего состояния в этой строке нет.

Team Board сохраняет выбранный раздел Agents, когда сведения о плане заканчивают загружаться: статусы субагентов и кнопки остановки остаются доступны.

Панель Agents над полем ввода остаётся доступной после новых сообщений. Пока панель свёрнута, переливается только счётчик работающих субагентов (например, 1 в работе); в раскрытой панели счётчик неподвижен, а статус работы виден в карточке агента. Разверните панель над полем ввода, чтобы увидеть модель, прошедшее время, расход токенов и ход работы. Нажатие на всю карточку открывает Session субагента в отдельной панели чата. Завершённые запуски сохраняют тот же вид карточки, а остановка выполняется отдельным элементом управления, а кнопка в заголовке открывает всю Team Board. Цвета статусов: зелёный — работает, оранжевый — остановлен, красный — ошибка, синий — завершён; карточка отчёта в чате окрашивает исход так же. Счётчик свёрнутой строки считает ровно те запуски, которые перечислены в панели. Если тот же чат открыт в другом окне, панель показывает и субагентов, которых выполняет то окно, с пометкой В другом окне, а их кнопка Stop останавливает их там. При наведении на заголовок подсвечивается только строка раскрытия; у карточек отдельная подсветка на всю ширину. В узких панелях сведения переносятся на новые строки, а кнопка остановки остаётся внутри карточки. Под счётчиками работающего субагента виден последний вызов инструмента, например Read main.js; для файлов показывается последняя часть пути, а полный путь остаётся в Session субагента. Для командной оболочки показывается описание действия из параметра description, а при его отсутствии — имя исполняемого файла; полная команда остаётся в Session субагента. После завершения эта строка скрывается. Время и расход токенов сохраняются в записи завершения и восстанавливаются после перезагрузки окна — в том числе у запуска, отчёт которого родитель прочитал через agent_status. При возобновлении сохранённого запуска время считается от исходного запуска, а расход токенов суммируется по всем циклам. В карточке сначала показано имя, затем роль и статус, после них модель и счётчики. Текст о возможности продолжения и обратный отсчёт не отображаются. Работающие субагенты идут первыми; высота списка ограничена с учётом размера окна, а длинный список прокручивается. У старых записей без сохранённых счётчиков значения могут остаться неизвестными. Цвет наведения совпадает с карточками сессий в боковой панели. Ссылки на завершённые и прерванные запуски сохраняются после перезагрузки окна.

В конце системного промпта каждый субагент получает рабочую папку, операционную систему и выбранную оболочку терминала; текущая дата приходит вместе с заданием. Оболочка определяется через Terminal: Select Default Profile, в том числе настройкой terminal.integrated.defaultProfile.windows: при выборе Git Bash субагент ещё до первой команды знает, что команды выполняются в Bash.

Родитель вызывает sub_agent с точным id профиля и одной ограниченной task, которая содержит нужный контекст, ожидаемые результаты и понятный критерий завершения. Параметр background: true запускает независимую работу без ожидания; agent_status показывает такие запуски или ожидает их, а при отсутствии фоновых субагентов отображает «Фоновые субагенты · Нет». Проверка работающего субагента возвращает родительской модели живые показатели — прошедшее время, расход токенов и счётчики вызовов инструментов с разбивкой на успешные и неуспешные — плюс жёстко ограниченную сводку последней активности: свежие рассуждения и текст субагента и однострочные вызовы инструментов («Read …», «Ran …») с пометкой ok или failed. Выводы инструментов в сводку никогда не попадают, поэтому проверка статуса занимает лишь несколько сотен токенов независимо от того, что субагент читал. Chat не показывает эти координационные данные в переписке: проверка статуса отображается одной компактной строкой с субагентом, целью и состоянием «Выполняется», а текущая работа отображается в панели Agents и Session субагента. После завершения проверку статуса по-прежнему можно развернуть и прочитать итоговый отчёт субагента. Родитель может завершить ответ, пока фоновые субагенты продолжают работу, поэтому вы можете сразу отправить новое сообщение. Завершение субагента автоматически запускает ответ родителя в любом режиме; если родитель уже работает, отчёт добавляется к ближайшему продолжению. Отчёт, ожидающий в очереди родителя, не блокирует новое сообщение: Kodik проверяет типизированный отчёт, доставляет его и продолжает работу из очереди. Сообщения в очереди активного хода передаются вместе со следующим результатом инструмента. Stop останавливает работающих субагентов чата и запущенные ими команды оболочки. Остановка отдельного субагента тоже останавливает выполняемую им команду, а вызов инструмента, который ждёт подтверждения, после остановки не выполняется. Субагент, остановленный ещё при запуске, не запускается, а отчёты субагентов, остановленных вместе с чатом, не доставляются позже — ни после перезапуска, ни после переключения в режим Orchestrator. Восстановление контрольной точки или редактирование сообщения точно так же останавливает работающих субагентов чата — до того, как будут откачены файлы. Пока ответивший родитель ещё ждёт фоновых субагентов, его вкладка и строка на боковой панели показывают статус ожидания, а переписка заканчивается строкой вроде «Ожидание субагентов: 2». Уведомление о завершении задачи приходит только после хода, который отвечает на последний отчёт. Удаление чата также останавливает их.

Каждый вызов sub_agent передаёт короткое уникальное name, которое отличает запуски одного профиля. Имя сохраняется в строке запуска, панели Agents и вкладке дочерней Session.

Разверните строку запуска, чтобы прочитать сохранённые метаданные и полный промпт. Сам разговор субагента открывается по имени запуска в панели Agents, в отдельной Session без поля ввода.

Субагенты всегда автоматически суммаризируют свой контекст на пороге выбранной модели, как и родительские чаты; у неинтерактивного субагента нет ручной команды /compact и инструмента compact. Субагенты восстанавливаются так же, как родительские чаты: ошибка лимита контекста приводит к автоматическому сжатию и повторной отправке, ответ, исчерпавший лимит вывода или зациклившийся, отбрасывается и продолжается, а остановка субагента отменяет идущее резюмирование. Во вкладке субагента карточки резюмирования и готового резюме появляются сразу. Экспорт родительской сессии в Markdown включает каждый вложенный чат субагента: задание, фактическую модель и инструменты, токены и время, рассуждения, текст, вызовы инструментов и их результаты. Если ответ субагента готов, но его не удалось сохранить в сессию субагента, главный агент всё равно получает этот ответ как завершённый отчёт с пометкой, что история самого субагента может быть неполной.

Команда, которую запустил субагент, принадлежит этому субагенту. Когда она завершается в фоне, её результат получает запустивший её субагент, а не главный агент, и субагент, ответ которого готов, пока одна из его команд ещё работает, ждёт результата этой команды и только потом отчитывается. Команды субагента подчиняются тем же правилам, что и команды главного агента (см. Терминал): команда, которая ещё работает через 5 секунд, переходит в фон, её результат называет вызов, который её запустил, и, если у субагента ещё работают другие команды, заканчивается их списком, а команда, которая только ждёт, остаётся на переднем плане, пока не завершится одна из команд самого субагента. Пока субагенты работают, список, который главный агент получает с результатами своих команд, называет каждого из них и время его работы.

Строка запуска остаётся неизменной. Текущая активность отображается в панели Agents и собственной Session субагента; результат приходит родителю отдельным отчётом.

Любой родительский режим может вызвать send_message с agent_id работающего фонового субагента, чтобы добавить контекст или скорректировать направление работы. Сообщение ставится в очередь до следующей безопасной границы модели дочернего агента и не прерывает уже выполняющийся ответ провайдера. После завершения фонового субагента Kodik пять минут хранит его точный разговор с провайдером. Пока идёт отсчёт, раздел Агенты в Team Board показывает статус Можно продолжить, а новый send_message возобновляет того же субагента с прежними agent_id и контекстом вместо запуска замены. Возобновлённый субагент может повторить команду, которая раньше завершилась ошибкой: новое сообщение обычно и есть причина попробовать снова. Его следующий ответ возвращается как атрибутированное сообщение Agent message. Если продолженного субагента затем остановили, он завершился ошибкой или был прерван, панель Agents и Team Board показывают этот исход, а не то, чем закончился его первый запуск. По истечении отсчёта сохранённый разговор освобождается, а id остаётся только как завершённая запись статуса.

Субагент с поддержкой инструментов может вызвать тот же инструмент с target: "parent", чтобы передать ранний результат, исправление или блокер и продолжить задание. Модель получает сообщение Markdown Inter-agent message с ID отправителя, именем запуска и профилем как фактическими полями, поэтому родитель отличает несколько запусков одного профиля. Идентификатор доставки хранится в записи хоста отдельно от текста. Дочерний агент не может писать другому дочернему агенту или другому чату.

Chat показывает оба направления отдельными атрибутированными строками, которые называют второй запуск по его имени name, а не по профилю, — так два запуска одного профиля отличаются друг от друга: Отправлено сообщение агенту Recovery audit, как только его принимает почтовый ящик получателя, Получено сообщение от агента Recovery audit для входящего и Не удалось отправить сообщение агенту Recovery audit, если доставка не состоялась. Строка с отчётом называет запуск так же. В строке указан только второй агент: та сторона обмена, которую вы читаете, — это уже открытый чат. Строка свёрнута, как и любая другая строка инструмента: раскройте её, чтобы прочитать сообщение — оно отображается с форматированием Markdown. Очень длинное сообщение в строке сокращается. Это не сообщение пользователя: для него нет действий редактирования, восстановления или создания ответвления. Имя агента в строке открывает другую сторону обмена: доставленное сообщение открывает группу чата субагента-получателя только для чтения, чтобы посмотреть его реакцию, а полученный ответ открывает такую же группу для приславшего его субагента. Ответ субагента из очереди не запускает и не будит простаивающий родительский ход; родительская модель получает его ровно один раз при следующем продолжении после инструмента, удержанной финальной границе или сообщении пользователя, и последующие запросы сохраняют его там, где модель его прочитала. Если провайдер отклонил продолжение, сообщение остаётся ожидающим до следующей принятой границы.

Остальное общение идёт через обычный дочерний разговор. Потоковый текст, рассуждения и инструменты показывают ход работы, а обычный итоговый ответ Markdown передаётся родителю и отображается без переписывания. Завершённый запуск сохраняет разговор после перезагрузки IDE. Обычный текст получает оценку задания Unassessed: завершение выполнения не доказывает выполнение всех требований. Корректный прежний отчёт из шести полей может дать отдельную оценку; ошибка, отмена или прерывание выполнения имеют приоритет. Некорректные прежние поля сохраняются как читаемый текст без автоматического запроса переписать отчёт. Пустой итоговый ответ считается ошибкой выполнения. Статус, время и происхождение вызовов принадлежат Kodik. Текстовые субагенты не получают инструменты и межагентные сообщения.

Субагенты на переднем плане и в фоне используют выбранный профиль и его настроенные инструменты. Субагент не наследует Ask, Plan, Code, Debug, Educator или Orchestrator как дочерний режим. Рекурсивное делегирование, интерактивные вопросы и родительские элементы управления todo, plan, goal и Team Board остаются недоступными.

Kodik сохраняет отчёт до его передачи Orchestrator. Результат инструмента содержит непрозрачный id записи и логический URI Team Board, поэтому родитель может сослаться на доказательство или открыть его снова, не удерживая всё содержимое в контексте. Если сохранение отчёта не удалось, встроенный отчёт всё равно возвращается с предупреждением, что он не является долговечным.

Команда Reload Window прерывает незавершённых субагентов, даже если родительский агент уже закончил ответ. Kodik дожидается завершения их ходов и сохранения отчётов перед закрытием соединения окна, поэтому после перезагрузки чат может принять новое задание. Кнопка Stop также дожидается завершения отмены дочерних ходов. Если отчёт завершённого субагента как раз должен был разбудить родительский агент в момент перезагрузки окна, он разбудит его после перезагрузки: родитель получит отчёт, а панель Agents сохранит время работы и расход токенов. Незавершённый субагент, которого прервала перезагрузка, тоже сообщает об этом родителю после перезагрузки, в любом режиме. Так же поступает субагент, прерванный перезапуском, неожиданно закрывшимся окном (после Reopen) или перезапуском agent host (как только он снова доступен); панель Agents показывает его как Interrupted. Session остановленного или прерванного субагента заканчивается там, где остановился запуск, и выглядит одинаково до и после Reload Window или перезапуска; полный отчёт остаётся в родительском чате и в Team Board. Session завершившегося с ошибкой субагента заканчивается этой ошибкой, одинаково до и после перезагрузки или перезапуска.

Если Kodik перезапускается во время работы фонового субагента, субагент помечается как interrupted, а в Team Board записывается один отчёт о прерывании; исходная строка запуска остаётся неизменной. Повторное восстановление использует ту же запись и не создаёт дубликаты. Панель Agents над полем ввода показывает те же запуски, что и Team Board, поэтому прерванный запуск или запуск, остановленный вместе с чатом, остаётся в ней со своим именем и итогом.

Если субагент десять минут не выдаёт ни текста, ни вызова инструмента, ни отчёта, его запуск завершается, а родитель получает об этом отчёт вместе с тем, что успело быть сделано. Время внутри его собственного инструмента в этот лимит не входит: у инструмента есть свой. Ожидание в agent_status ограничено пятью минутами. После этого инструмент возвращает текущий статус: субагент продолжает работу и сам пришлёт отчёт, а родитель может подождать снова. Ограничение сохраняет переписку родителя в кэше промпта у провайдера модели. Если отправить уточнение, пока родительский агент ожидает результат через agent_status, ожидание может завершиться раньше: родитель обработает сообщение, а субагент продолжит работу. После принятия сообщение удаляется из очереди и остаётся в сохранённой переписке. Завершение субагента и последующие сообщения обрабатываются нормально, в том числе после Reload Window.

Чаты в Kodik могут согласовывать работу без того, чтобы вы копировали текст между ними. Агент вызывает agent_status с scope: "sessions" и получает список других чатов — открытых в каком-либо окне или нет. Для каждого чата указаны id, название, статус (running — работает, idle — простаивает, closed — не открыт ни в одном окне), время последней активности и рабочая папка; у открытого чата также режим, первое ваше сообщение, последний прогресс и, пока он работает, несколько последних шагов. Сначала идут работающие чаты, затем недавно активные, по 20 за раз; остальные листаются через limit и offset. Агент сам сужает список: status оставляет чаты с указанными статусами, active_within_minutes — активные за последние N минут, workspace — чаты этой рабочей папки ("current") или папки, в пути которой есть указанный текст, а query ищет текст в названии, id, задаче или последнем прогрессе. Если передать id одного чата в agent_id, выводится более подробная сводка активности; полную историю читает read_session.

Каждый агент знает id своего чата: первое сообщение чата содержит его как Session ID в коротком блоке Session, который отправляется повторно, только когда он меняется, а задание субагента называет также id родительского чата. Агент может передать этот id другому чату как адрес для ответа. agent_status с scope: "self" сообщает id чата, текущий заголовок, режим, модель, рабочую область, заполненность контекста (использованные токены, размер контекстного окна, процент, совпадающий с индикатором контекста в чате, и сколько токенов осталось до автоматического сжатия) и статус цели. Ответвлённый чат сообщает свой новый id.

send_message с id этого чата или его уникальным префиксом доставляет сообщение. Простаивающий чат сразу начинает над ним работать; работающий чат читает его на следующем шаге, не прерывая выполняющийся инструмент; чат, остановленный после неудачного запроса, сохраняет его до следующего хода. Получивший чат показывает сообщение как Получено из сессии с названием отправителя — никогда как ваше сообщение, — а за ним следует ответ. Модель знает, какой чат прислал сообщение и как ответить.

Чтобы получить сообщение, чат не обязательно должен быть открыт. send_message доставляет сообщение любому чату по его id, в том числе чату, вкладку которого вы закрыли или заменили новым чатом, или чату, папка которого не открыта ни в одном окне. Сообщение работает так же, как ваше: окно отправителя открывает чат в фоне, чат сразу начинает над ним работать и продолжает как обычно. Автоматически ничего не отправляется обратно: чат знает, какой чат прислал сообщение, и отвечает, только если сам вызовет send_message с id этого чата.

Сообщение, пришедшее в работающий чат, сохраняется сразу, поэтому оно будет доставлено один раз, даже если Kodik аварийно завершится до того, как чат его прочитает. Удалённый чат, архивный чат и чат субагента отклоняют сообщения, каждый со своей причиной. Переписка между чатами, включая сохранённые сообщения, ограничена восемью сообщениями без вашего ответа; следующая отправка отклоняется, и агенту предлагается сообщить вам результат.

Если окно чата ненадолго перестаёт обрабатывать обновления, предварительный текст субагентов ждёт его возобновления. Работа продолжается, а чат затем получает актуальный текст без очереди из каждого промежуточного обновления.

Если несколько субагентов завершаются одновременно, их отчёты ждут, пока основной агент начинает обработку предыдущего отчёта. Каждый отчёт остаётся сохранённым в очереди до приёма основным агентом. Отчёт, который предыдущая версия Kodik оставила в очереди чата, доставляется так же — вместе с вашим следующим сообщением.

У каждой chat-сессии есть приватный Team Board для авторитетных планов и отчётов субагентов. Он хранится вне транскрипта, переживает сжатие разговора и перезапуск IDE и удаляется вместе с chat-сессией. При создании ответвления в новую задачу переносятся долговечные отчёты субагентов, существовавшие в выбранной точке разговора, поэтому унаследованная переписка и раздел Агенты не расходятся.

Как только в сессии появляется план, тикет, комментарий, долговечный отчёт или работающий фоновый субагент, прямо над редактором сообщения появляется одна компактная строка Team Board. Она заменяет отдельную панель фоновых субагентов и следует за сессией, а не за режимом. Если есть только агенты или отчёты, строка показывает только сведения об агентах и сразу открывает раздел Агенты без пустого переключателя видов. Когда существует план, тикет или комментарий, строка также показывает статус доски и прогресс тикетов, а диалог предлагает разделы Доска и Агенты. Диалог охватывает всю рабочую область IDE и может разворачиваться на всё окно. Доска содержит план, нумерованные тикеты, комментарии и ленту активности. Агенты показывает одну карточку на агента, сначала работающих. Нажатие на карточку раскрывает отчёт; отчёты следующих запусков той же сессии остаются внутри этой карточки. Отдельная кнопка открывает агента в группе чата только для чтения и закрывает диалог. Поиск по отчётам сохраняется. Оба раздела доступны для чтения в любом режиме; добавлять тикеты по-прежнему можно только в Orchestrator.

Если Orchestrator забыл id записи, он может вывести список или выполнить поиск, а затем прочитать только нужную страницу. Статус записи может быть active, stale, superseded, archived или trashed. Для планов дополнительно отслеживаются состояния решения draft, accepted, user-approved и rejected. Новый авторитетный план заменяет предыдущий активный план. Сам опубликованный план долговечен, как задача в трекере: Orchestrator не может архивировать, удалить или пометить его устаревшим — даже после завершения работы план остаётся на доске на всё время жизни сессии.

Транскрипт чата кратко показывает каждую операцию Team Board в отдельной строке Team Board. В ней показано конкретное действие и полезный контекст — например, название задачи, поисковый запрос или применённый фильтр; причина показывается, только если агент передал её явно. Опубликованный план показывается карточкой, а не одной строкой: заголовок плана и его цель. Маршрут, исполнители, риски и открытые вопросы остаются на доске, которую карточка открывает одним нажатием. Операция не представляется как MCP-интеграция, а сохранённые данные записи не раскрываются.

В режиме Orchestrator нажмите Новый тикет, чтобы добавить рабочую задачу с условием завершения. Тикет сохраняется на доске, и Оркестратор увидит его, когда вы в следующий раз напишете в чат. Комментировать доску нельзя: чтобы попросить Оркестратора о чём-то, напишите в чат — там же появится его ответ. Оркестратор может пересмотреть план или статус тикета и делегирует созданный пользователем тикет по его точному долговечному id. Выбранный субагент становится исполнителем, а его отчёт прикрепляется к тикету. Завершение — проверяемый переход: доска не разрешит закрыть тикет, пока к нему не привязан отчёт и Оркестратор не оставил после него комментарий о проверке. Раздел Агенты сначала показывает долговечные отчёты субагентов; поиск также находит подходящие планы, тикеты, комментарии и отчёты всей сессии. Пока доска открыта, раздел Агенты сразу показывает завершившиеся запуски, а поиск сужает список только после отправки запроса.

История доски команды дописывается только в конец и записывается в одной транзакции с тем изменением записи, которое её вызвало, поэтому она не может разойтись с записями. Для сессий, созданных до появления истории, показывается то, что доказуемо по самим записям: когда создан каждый тикет и когда вернулся каждый отчёт.

По умолчанию одна сессия хранит до 250 записей или 25 МиБ с учётом архива и корзины; размер одной записи — до 1 МиБ. При достижении лимита Kodik не обрезает и не вытесняет доказательства без предупреждения.

Родитель выбирает независимую проверку, когда она помогает выполнить запрос, и оценивает полученные доказательства. Ни одно семейство моделей не требует запуска Reviewer или программного ограничения завершения до ревью. Права, владение задачами и доставка ожидающих отчётов сохраняются.

Создавайте и редактируйте профили в Settings → Sub Agents. Карточки сгруппированы как Default, Workspace, Global и Plugins, а изменения сохраняются автоматически.

Меню карточки с тремя точками остаётся открытым, пока вы не выберете действие, не щёлкнете в другом месте Kodik или не нажмёте Escape. Фоновые обновления каталогов моделей и MCP обновляют карточку на месте, поэтому не прерывают работу меню и не снимают выделение текста на странице.

Параметр Maximum concurrent sub-agents задаёт, сколько субагентов может одновременно работать в одном чате (по умолчанию 10; любое положительное целое число). Текущее количество активных и свободных мест родительская модель видит в результатах sub_agent и agent_status и в отчётах о завершении; системный промпт при запуске и завершении субагентов не меняется, поэтому чат продолжает использовать кэш промпта. Если все места заняты, новый субагент не запускается: Chat показывает понятное сообщение Limit reached, а родительской модели предлагает дождаться завершения активного субагента.

Maximum concurrent sub-agents across chats задаёт общий лимит для всех чатов (по умолчанию 64; любое положительное целое число). Для больших команд увеличьте оба значения. Общий лимит хранится в пользовательской конфигурации как maxConcurrentWorkersAcrossChats; проект может переопределить только лимит на чат maxConcurrentWorkers. Изменения лимита на чат применяются со следующего хода родительской модели, а общего лимита — при следующем запуске субагента. При уменьшении лимита уже работающие субагенты продолжают работу до завершения.

Субагенты могут работать одновременно в нескольких чатах. Одновременно могут поступать до сорока ответов моделей субагентов — этого хватает для десяти чатов с четырьмя воркерами в каждом по умолчанию. Для родительских чатов резервируются отдельные соединения, в том числе при использовании HTTP/1.1; дополнительные запросы воркеров ждут свободного соединения. Эти сетевые ограничения отделены от настроенного общего лимита субагентов. Неоткрытые воркеры передают компактные обновления статуса; после завершения и периода бездействия кэш их переписки освобождается. Полная переписка остаётся в хранилище сессий и загружается при открытии воркера. Открытые панели, активные воркеры и воркеры, доступные для продолжения, сохраняют необходимые им данные. Ответы родителя, написанные до получения отчётов субагентов, также сохраняются после Reload Window. Если родитель завершил свой ход, а фоновые субагенты ещё работают, на вкладке сессии и в боковой панели отображается статус ожидания до получения отчётов, остановки воркеров или прерывания при перезагрузке окна; полученные отчёты могут разбудить родительский чат.

Потоковые обновления используют небольшие временные буферы, чтобы снизить расход памяти при одновременной работе нескольких чатов и субагентов, в том числе когда окно чата ненадолго перестаёт обрабатывать обновления.

Если завершение ответа и отчёт воркера одновременно запускают ответ из очереди, чат сначала заканчивает подготовку текущего ответа. Другие чаты продолжают работать независимо. При ошибке подготовки сообщение остаётся в очереди для повторной попытки.

Логическая параллельность субагентов отделена от дорогой локальной работы. Kodik ставит тяжёлые команды оболочки, поиск, операции с блокнотами и изменения файлов в очередь: увеличение лимита воркеров не запускает все локальные инструменты одновременно. Лёгкие инструменты по-прежнему могут выполняться параллельно. Остановка чата отменяет активные тяжёлые инструменты его субагентов и удаляет из очереди ещё не начавшиеся тяжёлые вызовы.

Команды оболочки, запущенные субагентами, выполняются в настоящих интегрированных терминалах и остаются доступными на панели Terminal, но дочерние воркеры не переключают активную панель автоматически. Команды родительского агента сохраняют обычное поведение с показом терминала.

Определения из плагинов остаются собственностью установленного плагина: их нельзя редактировать, сбрасывать или удалять в настройках Sub Agents, и они никогда не выполняют автоматический поиск навыков. Субагент из плагина наследует эффективную модель родительского чата вместо скрытой модели плагина по умолчанию. Профиль плагина можно включить или отключить, а действие Open configuration открывает определение внутри плагина для просмотра исходного файла.

Редактор профилей Default, Workspace и Global содержит разделы Identity, Instructions, Model, Tools и Skills. Пользовательские id имеют пространство имён и передаются в sub_agent дословно. Kodik показывает только включённые, пригодные во время выполнения профили, выбранные для текущего родительского режима, и использует одинаковые точные id в системном промпте и схеме инструмента.

Исходные профили находятся в коде Kodik. Поэтому отсутствие файлов конфигурации означает «использовать исходные и плагинные значения по умолчанию»; Kodik не создаёт файл при запуске.

  • ~/.kodik/sub-agents.json хранит точечные пользовательские переопределения и полные пользовательские профили. Kodik создаёт его при первом изменении пользователем.
  • .kodik/sub-agents.json — необязательная конфигурация проекта. Если файл существует, он полностью заменяет пользовательский слой и может быть добавлен в репозиторий команды.

В Restricted Mode профили рабочей области неактивны. Доверьтесь именно этой рабочей области, чтобы профили из .kodik/sub-agents.json появились в Settings и могли попасть в промпты модели. Kodik также запрещает символические ссылки в пути владельца .kodik и для самого файла конфигурации: Settings показывает проблемный канонический путь, после чего ссылку нужно заменить обычным файлом sub-agents.json по этому пути.

Пользовательские профили хранятся только в JSON. Kodik не обнаруживает глобальные или workspace-файлы .kodik/agents/*.md; существующие файлы остаются неизменными и неактивными. Нужный профиль следует заново создать через New sub-agent — он будет сохранён в выбранном sub-agents.json. Определения агентов внутри установленного плагина остаются собственностью плагина и доступны только для чтения.

Исходные и плагинные профили объединяются с выбранным JSON-слоем. Некорректный файл или файл будущей версии блокирует запуск Orchestrator вместо скрытого отката; Settings показывает точную диагностику и позволяет открыть или сбросить файл.

Формат JSON и поведение доступности моделей описаны в разделе Профили и модели субагентов.

Заголовки отчётов Team Board сохраняют регистр имени профиля. Сводка Agents использует актуальный статус запуска, если он доступен, в том числе после восстановления старого чата.