{"meta":{"title":"Режим флота","intro":"Режим флота — это параллельная оркестрационная схема Copilot для работы, которую можно разделить между независимыми субагентами. В заметках по исследованию во время выполнения режим флота описывается как «встроенный шаблон среды выполнения для параллельной отправки нескольких субагентов через инструмент task , с SQL-todos в качестве общего координационного состояния». Используйте его, когда одна родительская сессия должна координировать нескольких сотрудников, собирать их результаты и продолжать разговор с объединённым контекстом.","product":"GitHub Copilot","breadcrumbs":[{"href":"/ru/enterprise-cloud@latest/copilot","title":"GitHub Copilot"},{"href":"/ru/enterprise-cloud@latest/copilot/how-tos","title":"Инструкции"},{"href":"/ru/enterprise-cloud@latest/copilot/how-tos/copilot-sdk","title":"Второй пилот SDK"},{"href":"/ru/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features","title":"Возможности"},{"href":"/ru/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features/fleet-mode","title":"Режим флота"}],"documentType":"article"},"body":"# Режим флота\n\nРежим флота — это параллельная оркестрационная схема Copilot для работы, которую можно разделить между независимыми субагентами. В заметках по исследованию во время выполнения режим флота описывается как «встроенный шаблон среды выполнения для параллельной отправки нескольких субагентов через инструмент task , с SQL-todos в качестве общего координационного состояния». Используйте его, когда одна родительская сессия должна координировать нескольких сотрудников, собирать их результаты и продолжать разговор с объединённым контекстом.\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\n## Когда использовать режим флота\n\nРежим флота полезен, когда работу можно разложить до исполнения, и каждый юнит может работать без ожидания предыдущих.\n\nХорошие варианты включают:\n\n* Многофайловые рефакторинги, при которых каждый рабочий владеет определённым файлом, пакетом или языковым SDK.\n* Пакетные обзоры, где каждый работник проверяет отдельный дифференциал, модуль или группу оповещений.\n* Параллельные исследования между независимыми репозиториями, сервисами или тематическими областями.\n* Документация обновляется, когда у каждого сотрудника есть страница или тема.\n* Задачи миграции, где каждый работник может проверить свой срез и отчётиться об этом.\n\nИзбегайте режима флота для:\n\n* Последовательные задачи, где шаг 2 требует конкретного результата из шага 1.\n* Тесно связанные правки, где работники боролись за одни и те же файлы.\n* Небольшие задачи, которые один синхронный субагент или родительский агент может быстро выполнить.\n* Задачи, требующие постоянного совместного мышления, а не чёткого принадлежащего.\n\nРежим автопарка работает лучше всего, когда родительская сессия может создать чёткие единицы работы, назначить одного владельца на единицу и определить, что должен вернуть каждый работник.\n\n## Стартовый режим флота\n\nSDK открывает режим флота через пространство имён сессии RPC на нескольких языках. Связывание экспериментальное на сгенерированной поверхности RPC; Закрепите и SDK, и CLI-среду Copilot, если от этого зависит ваша заявка.\n\n### Внутри сессии\n\nМетод провода — `session.fleet.start`. Опциональное `prompt` сочетается с инструкциями по оркестрации флота во время выполнения.\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n```typescript\nconst result = await session.rpc.fleet.start({\n    prompt: \"Refactor each SDK package independently, then summarize the changes.\",\n});\n\nif (result.started) {\n    console.log(\"Fleet mode started\");\n}\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n```python\nfrom copilot.rpc import FleetStartRequest\n\nresult = await session.rpc.fleet.start(\n    FleetStartRequest(\n        prompt=\"Review each service independently, then summarize the risks.\"\n    )\n)\n\nif result.started:\n    print(\"Fleet mode started\")\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"go\" data-label=\"Go\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Go</div>\n\n```golang\nprompt := \"Update each package independently, then report validation results.\"\nresult, err := session.RPC.Fleet.Start(ctx, &rpc.FleetStartRequest{\n    Prompt: &prompt,\n})\nif err != nil {\n    return err\n}\nif result.Started {\n    fmt.Println(\"Fleet mode started\")\n}\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"dotnet\" data-label=\".NET\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">.NET</div>\n\n```csharp\nvar result = await session.Rpc.Fleet.StartAsync(\n    \"Audit each project independently, then summarize the findings.\");\n\nif (result.Started)\n{\n    Console.WriteLine(\"Fleet mode started\");\n}\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"rust\" data-label=\"Rust\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Rust</div>\n\n```rust\nuse github_copilot_sdk::rpc::FleetStartRequest;\n\nlet result = session\n    .rpc()\n    .fleet()\n    .start(FleetStartRequest {\n        prompt: Some(\"Research each crate independently, then summarize the plan.\".into()),\n    })\n    .await?;\n\nif result.started {\n    println!(\"Fleet mode started\");\n}\n```\n\n</div>\n\n</div>\n\nНативные типизированные привязки для режима флота были проверены в Node.js/TypeScript, Python, Go, .NET и Rust. Связывание Java не было найдено в `java/src/main/java` на этой ветви, поэтому Java примеры опускаются до тех пор, пока поверхность не станет доступна.\n\n### Из режима плана\n\nИнтерфейсы в режиме планирования могут запускать развертывание флота, возвращая `autopilot_fleet` действие выхода. Сгенерированные типы событий сессии описывают его так:\n\n```typescript\ntype ExitPlanModeAction =\n  | \"exit_only\"\n  | \"interactive\"\n  | \"autopilot\"\n  /** Exit plan mode and continue with parallel autonomous workers. */\n  | \"autopilot_fleet\";\n```\n\nИспользуйте это, когда пользователь одобряет план, который уже содержит независимые рабочие элементы. Используйте `autopilot` для одного автономного работника и `interactive` когда пользователь должен оставаться в курсе событий.\n\n## Как подагенты координируются\n\nРежим флота опирается на явное координационное состояние, а не на неявную общую память. Родительский агент разлагает работу на задачи, каждый субагент владеет одной задачей, а оркестратор распределяет работников, чьи зависимости уже завершены.\n\nКаноническая схема выглядит следующим образом:\n\n```sql\nCREATE TABLE todos (\n    id TEXT PRIMARY KEY,\n    title TEXT NOT NULL,\n    description TEXT,\n    status TEXT DEFAULT 'pending'\n);\n\nCREATE TABLE todo_deps (\n    todo_id TEXT,\n    depends_on TEXT,\n    PRIMARY KEY (todo_id, depends_on)\n);\n```\n\nКаждая задача движется через небольшой автомат состояний:\n\n```text\npending -> in_progress -> done\n                       \\-> blocked\n```\n\nСубагент должен:\n\n1. Определите только один готовый к делу, установив `status = 'in_progress'`.\n2. Работайте только над прицелом этого дела.\n3. Сохраняйте его результат в разговоре или в соответствующей задаче.\n4. Устанавливается `status = 'done'` после завершения.\n5. Устанавливайте `status = 'blocked'` , когда не может продолжаться, и указывайте причину.\n\nОркестратор может найти работу, зависимости которых удовлетворяются таким запросом, как:\n\n```sql\nSELECT t.*\nFROM todos t\nWHERE t.status = 'pending'\n  AND NOT EXISTS (\n      SELECT 1\n      FROM todo_deps td\n      JOIN todos dep ON td.depends_on = dep.id\n      WHERE td.todo_id = t.id\n        AND dep.status != 'done'\n  );\n```\n\nЭтот паттерн даёт каждому работнику чёткого владельца и позволяет родительской сессии рассуждать о том, что готово, запущено, завершено или заблокировано.\n\n## Хуки жизненного цикла\n\nРежим флота вызывает субагентов через механизм задач во время выполнения. Время выполнения создаёт активность hook для вызовов инструментов подагентов: журнал изменений 1.0.52 отмечает, что `preToolUse`, `postToolUse`, `subagentStart`и `subagentStop` запускается правильно для вызовов инструментов подагентов.\n\nВыделенный SDK-callback для `subagentStart` или `subagentStop` не был найден в публичной поверхности SDK на этой ветке. Потребители SDK могут наблюдать активность субагентов через общий поток событий сессии, включающий такие события, как `subagent.started`, `subagent.completed`, `subagent.failed``subagent.selected`, и `subagent.deselected`.\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n```typescript\nsession.on((event) => {\n    if (event.type === \"subagent.started\") {\n        console.log(`Started ${event.data.agentDisplayName}`);\n    }\n\n    if (event.type === \"subagent.completed\") {\n        console.log(`Completed ${event.data.agentDisplayName}`);\n    }\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n```python\ndef handle_event(event):\n    if event.type == \"subagent.started\":\n        print(f\"Started {event.data.agent_display_name}\")\n    elif event.type == \"subagent.completed\":\n        print(f\"Completed {event.data.agent_display_name}\")\n\nunsubscribe = session.on(handle_event)\n```\n\n</div>\n\n</div>\n\nДля конфигурации крючка, которая уже открыта на слое SDK, см. [Работа с крючками](/ru/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features/hooks). Для полезной нагрузки событий субагентов см. [AUTOTITLE.](/ru/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features/custom-agents)\n\n## Подагенты плагинов\n\nСреда выполнения может загружать плагины с `--plugin-dir`помощью . Плагины, загруженные таким образом, могут регистрировать своих агентов как доступные `task(agent_type=...)` субагенты в режиме prompt, что означает, что режим флота может отправлять данные к этим типам работников, предоставленных плагинами.\n\nВ настоящее время это шаблон конфигурации на уровне выполнения времени, а не задокументированный регистрационный API на уровне SDK. Настройте Copilot CLI runtime с помощью каталога плагинов, затем подключите SDK-клиент к этой среде выполнения. В будущем могут быть добавлены нативные помощники SDK для регистрации типов подагентов плагинов.\n\nКонцептуально, в автопарке можно запросить конкретный тип работника:\n\n```text\nUse task(agent_type=\"security-review\") for each independent package.\nRun the workers in parallel and summarize only high-confidence findings.\n```\n\nДержите типы субагентов, предоставляемые плагинами, узкими и описательными, чтобы оркестратор мог их надёжно выбирать.\n\n## Лучшие практики\n\n* Разложите работу на отдельные единицы перед началом режима флота.\n* Минимизировать зависимости между задачами; Зависимости снижают параллелизм.\n* Дайте каждому todo надёжное удостоверение личности, чёткий титул и полное описание.\n* Сделайте так, чтобы каждый субагент владел ровно одной задачей за раз.\n* Используйте фоновые субагенты для действительно параллельной работы.\n* Используйте синхронные вызовы субагентов для сериализированных шагов или валидационных элементов.\n* Предоставить каждому субагенту полный контекст; Субагенты не имеют статуса во всех вызовах.\n* Включайте пути к файлам, команды, ожидаемые выходы и ограничения в каждой рабочей строке.\n* Не отправляйте ни одного субагента на заднем плане; Предпочитаю синхронный вызов или одновременно вырабатывать несколько рабочих подрядчиков.\n* Избегайте назначать перекрывающиеся файлы разным работникам, если только родительский агент явно не согласует конфликты.\n* Обязать каждого работника сообщать, что изменилось, как это подтвердилось и что ещё заблокировано.\n* Пусть родительский агент проверит совместный результат после завершения работы.\n\n## Ограничения и открытые вопросы\n\n* Режим флота доступен через сгенерированные сессионные RPC-привязки и отмечен как экспериментальный в нескольких SDK.\n* Шаблон SQL todos является канонической координационной моделью в руководстве по выполнению, но вопрос о том, является ли он стабильным контрактом на расширение для пользователей SDK, остаётся открытым.\n* `subagentStart` и `subagentStop` являются именами хуков во время выполнения; эта ветка открывает жизненный цикл субагента потребителям SDK через общий поток событий сессии, а не через выделенные обратные вызовы хуков.\n* Регистрация подагентов плагина настраивается на уровне выполнения через `--plugin-dir`; на этой ветке не был проверен помощник регистрации плагинов на уровне SDK.\n* Java нативных типизированных привязок для `session.fleet.start` не было найдено в исходном коде SDK Java этой ветви.\n* Режим флота не устраняет необходимость в родительском агентском обзоре. Параллельные работники могут создавать противоречивые предположения, которые оркестратор должен согласовать.\n\n## См. также\n\n* [Пользовательские агенты и оркестровка субагентов](/ru/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features/custom-agents)\n* [Работа с крючками](/ru/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features/hooks)"}