Как это работает
От одной цели до плана, за которым можно следить
Шесть этапов по кругу. Вы говорите, чего хотите. PO составляет план, упорядочивает задачи, вспоминает, что знает проект, выполняет работу, проверяет её и сохраняет, чему научился. Под каждым этапом можно открыть технические подробности.
План → Порядок → Вспомнить → Запуск → Проверка → Запомнить, затем снова «Вспомнить». Что сохраняет этап 6, то вспоминает этап 3 в следующем плане.
Цикл
Цикл, этап за этапом
Листайте: каждая картинка нарисована как экраны продукта. Пример — выходные команды.
Этап 1 из 6
Вы говорите, чего хотите, — получаете план
Вы описываете результат одной фразой. Ассистент превращает её в план с задачами. В каждой задаче есть шаги, и каждый шаг говорит, как проверить, что он выполнен.
Под капотом
Результат сохраняется как план с приоритетом и ограничениями и делится на задачи. Каждая задача указывает, от чего зависит, и перечисляет свои шаги. К каждому шагу приложена проверка, доказывающая, что он выполнен.
Планы, задачи и шаги сохраняются как данные, а не как свободный текст в чате. Экраны и исполнитель читают одни и те же статусы.
plan(action: "create", title, description, priority: 8, constraints: [{ constraint_type: "performance", … }])task(action: "create", plan_id, title, depends_on: [task_id], steps: [{ description, verification }])- Статус плана: draft, approved, in_progress, completed, cancelled.
- Типы ограничений: performance, security, style, compatibility, other.
- code(action: "plan_implementation", auto_create_plan: true) составляет черновик плана по графу кода.
Этап 2 из 6
Задачи, не зависящие друг от друга, идут вместе
PO сортирует задачи. Задача ждёт только те задачи, которые ей нужны. Все остальные могут стартовать сразу, одновременно.
Под капотом
Задача стартует, только когда завершено всё, от чего она зависит. PO превращает эти связи в волны: в волне 1 все задачи без невыполненных условий, в волне 2 — то, что открыла волна 1, и так далее.
Задачи одной волны независимы, поэтому идут одновременно. Самая длинная цепочка зависимостей, критический путь, определяет минимальное число волн.
plan(action: "get_waves", plan_id)plan(action: "get_critical_path", plan_id)- plan(action: "get_dependency_graph") возвращает граф задач (DAG).
- task(action: "get_next") возвращает следующую незаблокированную задачу, сначала с высшим приоритетом.
- При возобновлении запуска волны пересчитываются, а завершённые пропускаются.
Этап 3 из 6
Ассистент смотрит, что проект уже знает
Перед каждой задачей ассистент читает подходящие заметки и решения. Поэтому он не задаёт одни и те же вопросы снова.
Под капотом
Перед задачей ассистент читает память проекта: заметки (предупреждения, правила, шаблоны), решения с причинами и, для проекта с кодом, код вокруг файлов, которых коснётся. Поиск по смыслу сначала находит самые близкие совпадения.
Затем PO идёт по связям между заметками. Заметка, не совпавшая с вопросом, всё равно может появиться, потому что с ней тесно связана совпавшая. На каждом шаге связь слабеет, а угасшие заметки отбрасываются.
note(action: "search_semantic", query, project_slug)decision(action: "search_semantic", query)admin(action: "search_neurons", query, max_hops: 2)note(action: "get_context", entity_type: "file", entity_id)- Параметры распространения активации по умолчанию: 20 исходных заметок, 2 шага, сигнал на каждом шаге вдвое слабее, 10 результатов.
- 40% мест в результате зарезервировано для заметок, найденных через синапсы.
- Распространённая оценка = оценка родителя x вес синапса x энергия заметки x затухание.
Этап 4 из 6
Ассистенты выполняют задачи, группа за группой
Каждая задача уходит своему ассистенту. Задачи одной группы идут одновременно, а следующая группа ждёт.
Под капотом
plan(action: "run") запускает исполнитель в отдельной ветке git. Для каждой волны он стартует по одной сессии ассистента на каждую подходящую задачу и ведёт их параллельно, не больше лимита (по умолчанию 4).
Каждая задача получает подсказку, собранную из памяти проекта: описание, шаги и ограничения, связанные заметки, подходящие персону и навыки и сводку того, что сделали прошлые волны. Сторож следит за сессией: простой, повторяющиеся вызовы, тайм-ауты — и подсказывает, когда ассистент сбивается.
plan(action: "run", plan_id, cwd, project_slug)plan(action: "run_status", plan_id)- Задача получает профиль simple, complex или creative по тегам, шагам и файлам. Профиль задаёт лимит времени и бюджет затрат.
- Simple: 600 с и $0,50. Complex: 3600 с и $2,00. Creative: 1800 с и $1,00.
- Запуски сохраняются, поэтому запуск можно возобновить после перезапуска. plan(action: "cancel_run") останавливает запуск.
Этап 5 из 6
Группа готова, когда проверки пройдены
Перед следующей группой PO проверяет работу. Шаги должны быть закрыты, а в изменениях не должно остаться чувствительных файлов. Для проекта с кодом PO также проверяет, что он по-прежнему собирается.
Под капотом
Когда волна заканчивается, исполнитель проверяет её до начала следующей. Он убеждается, что ассистенты сделали коммиты, что каждый шаг выполнен или пропущен, что проект собирается и что в diff нет чувствительных файлов.
Сам запуск — конечный автомат. Протокол жизненного цикла переходит от approved к executing и к post_run, и каждый переход требует явного триггера. Задача, ассистент которой завершился ошибкой или по тайм-ауту, по умолчанию повторяется один раз, с ошибкой в качестве контекста.
protocol(action: "transition", run_id, trigger: "child_completed")step(action: "get_progress", task_id)- Проверка сборки: cargo check, npm run build или go build ./... — по определённому языку.
- Отклоняемые чувствительные файлы: .env, credentials.json, *.pem, *.key и подобные.
- Тесты — необязательный пункт, по умолчанию выключен. plan-runner-reviewed добавляет для человека состояние awaiting_review.
Этап 6 из 6
Что узнали — сохраняется на будущее
Когда работа сделана, то, что решили и узнали, записывается обратно в память проекта. Следующий план начинается с этого.
Под капотом
Когда задача завершена, исполнитель записывает данные без обращения к модели: связывает коммиты с задачей и планом, создаёт заметку контекста по журналу git и привязывает решения к затронутым файлам.
Ассистент добавляет то, что знает только он: решения с альтернативами, предупреждения, шаблоны. Заметки, использованные вместе, сближаются. Заметки, которыми никто не пользуется, теряют энергию и устаревают. Эпизод фиксирует запрос, путь по состояниям и итог. Следующий план начинается с этапа 3 уже со всем этим.
decision(action: "add", task_id, rationale, alternatives)note(action: "create", note_type: "gotcha", content, anchors)episode(action: "collect", run_id, project_id)admin(action: "reinforce_neurons", note_ids)- Устаревание растёт со временем с последней активности, со скоростью, зависящей от типа заметки. note(action: "confirm") сбрасывает его.
- Навыки возникают из кластеров тесно связанных заметок (admin(action: "detect_skills")).
Роли
Кто что делает
PO берёт на себя механику, чтобы ассистент мог сосредоточиться на работе.
PO делает сам, без просьб
- Сортирует задачи по группам и запускает ассистентов.
- Проверяет каждую группу: шаги закрыты, нет чувствительных файлов, а для проекта с кодом — сборка.
- Связывает изменения с задачей и пишет заметку о случившемся.
- Хранит изменения каждого запуска в отдельной ветке git.
- Записывает, какие персона и навыки помогли.
Ассистент делает через свои инструменты
- Ищет заметки и решения, прежде чем начать.
- Создаёт планы, задачи и шаги и обновляет их статус.
- Сохраняет решения с альтернативами и тем, на что они влияют.
- Пишет предупреждения, правила и шаблоны, привязанные к своему предмету.
- Продвигает процедуру вперёд, шаг за шагом.
Точки входа
Три способа запустить цикл
Из вашего ИИ-инструмента
Claude Code, Cursor или другой ИИ-инструмент, подключённый к PO. Вы описываете результат. Он планирует, упорядочивает и вспоминает, а в конце сохраняет, чему научился.
Из чата
Чат, встроенный в PO, разговаривает с тем же ассистентом. Каждое сообщение несёт подходящие навыки, применимые заметки и решения и то, что идёт сейчас.
Само по себе
План может идти, когда никого нет рядом. Он стартует по расписанию или по событию, с паузой между двумя стартами. Типы старта: schedule, webhook, event и chat.
Память
PO помнит, что вы решили и чему научились
Заметки, решения и связи между ними остаются привязаны к вашему проекту. PO находит их снова, когда они пригодятся. Листайте, чтобы увидеть, как растёт память.
Вымышленный пример: небольшой проект мероприятия. Названия в графе — иллюстрация, а не ваши данные. Цвета и формы — как в графе продукта.
1 из 5
Ваши файлы становятся точками
PO исходит из того, что есть в проекте: документы, таблицы, файлы. Каждый из них — синяя точка.
2 из 5
Появляются планы и задачи
Планы и задачи добавляются на ту же картину. Каждая задача связана с файлами, которых касается.
3 из 5
Заметки и решения остаются связанными
Чему вы научились — становится заметкой. Что решили — становится решением. И то и другое остаётся связанным с файлами и друг с другом.
4 из 5
Близкое собирается вместе
Элементы об одном и том же сдвигаются ближе друг к другу. Основные темы проекта видны с первого взгляда.
5 из 5
PO находит ответ по связям
Вы задаёте вопрос. PO находит подходящие заметки (голубой). Затем идёт по связям к родственным элементам (фиолетовый), даже если слова другие.
Под капотом: названия связей
Так продукт называет связи в своём графе. Чтобы пользоваться PO, они вам не нужны.
- CONTAINSПлан содержит свои задачи.
- IMPORTSОдин файл использует другой.
- AFFECTSЗадача затрагивает файл.
- CO_CHANGEDДва файла, которые часто меняются вместе, — это видно по истории кода.
- SYNAPSEСвязь между заметками, решениями и файлами. Связи, которыми никто не пользуется, угасают.
Попробуйте
Посмотрите, как ассистент работает с PO
Выберите запрос. Вы увидите ответ простыми словами и обращения ассистента к PO за кулисами. Откройте обращение, чтобы увидеть детали.
Two notes apply: the place must be close to a train station, and last year the menu had nothing vegetarian. I will write the plan around both.
The plan has 3 tasks in 2 waves. The shortlist and the date poll do not depend on each other, so they happen at the same time. Booking waits for both.
Имитация: ответы написаны заранее, к серверу никто не подключается. Сами обращения и их аргументы настоящие.
Начните
Дайте вашим ассистентам память и план
Установите оркестратор, подключите Claude Code по MCP и позвольте первому ассистенту изучить проект, прежде чем он напишет хоть строчку.
Или начните из терминала
brew install this-rs/tap/project-orchestrator