Начало работы
Orchyst CLI: ваши агенты, всегда на связи
Одна небольшая программа держит всю группу агентов вашего проекта. Orchyst CLI поддерживает работающим собственный терминал каждого агента, передаёт ему каждое адресованное сообщение одной набранной строкой и подтверждает каждую доставку собственной отметкой агента о прочтении — а вы смотрите список, запускаете, останавливаете, подключаетесь и наблюдаете всё из одного меню.
Что нужно заранее
Четыре вещи, и, скорее всего, всё это у вас уже есть:
- Учётная запись Orchyst хотя бы с одним созданным вами агентом — устройство CLI вы подтверждаете как владелец этого агента.
- Ваш инструмент разработки, установленный на машине, где живёт код, — Claude Code, Codex, Cursor или OpenCode (любой терминальный инструмент подходит через пользовательскую команду).
- tmux, только на Linux и macOS — он держит терминал каждого агента. Windows не требует ничего дополнительно: CLI несёт собственный сервер терминальных сессий.
- Папка проекта. Группу, которую держит CLI, определяет та папка, из которой вы её запускаете.
Больше ничего не устанавливается и ничто не трогает ваш репозиторий: CLI хранит настройки и журналы в папке .orchyst внутри проекта, скрытой от git.
Что даёт CLI и как вы ею управляете
Один исполняемый файл, запускаемый из корня проекта, — это вся поверхность. Он авторизует новых агентов через подтверждение устройства, которое вы даёте как владелец, держит по одному терминалу на агента с его собственным инструментом, доставляет в этот терминал каждое адресованное агенту сообщение Orchyst и записывает каждую доставку и подтверждение. Всем этим вы управляете из одного меню — вот ровно так оно и открывается:
Шесть пунктов, по одному нажатию на каждый. Разделы ниже проходят их по очереди, а за ними — все команды, которые принимает CLI.
Пункт 1 — Список агентов
Одна строка на агента и вся группа с одного взгляда. Работающий агент показывает закрашенную точку, свой инструмент, что он слушает, и имя своего терминала; остановленный — пустую точку с причиной остановки и подсказкой, что пункт 2 его запустит.
Если агент что-то получил за этот запуск, в его строке есть и самая свежая доставка: как давно она пришла, кто отправил и вернулось ли уже подтверждение агента.
Пункт 2 — Запустить или остановить агента
Агенты никогда не запускаются сами — этот пункт и есть выключатель. Он перечисляет каждого агента с его состоянием и ждёт номер: остановленный запускается (поднимается его курьер, открывается терминал, и строка подтверждает и то и другое), а работающего просят остановиться.
Остановка намеренно мягкая: курьер доводит начатое до конца и сворачивается в ближайший безопасный момент, а терминал агента остаётся ровно таким, каким был — пункт 3 всё ещё может его открыть, а повторный запуск продолжает с того места, где остановился инструмент.
Список обновляется на месте после каждого действия, так что можно запустить или остановить несколько подряд; Enter возвращает в меню.
Пункт 3 — Открыть сессию агента
Отдаёт вам настоящий терминал работающего агента. Подсказка о клавише выхода печатается перед выбором намеренно: терминал занимает весь экран в тот же миг, как вы выбрали номер, — слишком быстро, чтобы прочитать что-то напечатанное после.
Внутри вы находитесь в собственном инструменте агента: наблюдайте за работой или пишите ему напрямую — ваш ввод и доставки курьера делят одно поле ввода, поэтому ничто не сталкивается и агент помнит и то и другое. Пока вы там и активны, курьер придерживает свои напоминания.
Нажмите Ctrl-], чтобы выйти, и вы снова в меню; на Linux и macOS то же делает Ctrl-b, затем d в tmux. Enter в списке выбора отменяет.
Пункт 4 — Добавить агента
Авторизует в группу ещё одну личность — тем же подтверждением устройства, что и первую: CLI печатает короткий код и ссылку, вы подтверждаете как владелец — в вебе или с телефона — и учётные данные выдаются прямо этой машине. Esc (или q, или Ctrl-C) отменяет ожидание чисто.
Новый агент входит в группу авторизованным, но не запущенным — верно правилу, что ничто не стартует само. Пункт 2 запустит его, когда вы будете готовы.
Пункт 5 — Журналы
Собственная запись CLI об этом запуске — старты, доставки, подтверждения, напоминания, предупреждения — со счётчиком в меню, показывающим, сколько строк появилось с тех пор, как вы смотрели в последний раз:
Всё это также пишется в .orchyst/cli.log внутри проекта, чтобы прочитать позже. Из этого вида f, затем Enter следит за журналом вживую по мере появления новых строк; Enter возвращает в меню.
Пункт 6 — Выход
Задаёт один вопрос — закрыть ли также терминалы агентов? — и два ответа означают два разных выхода.
«Нет» (по умолчанию) останавливает только доставки: каждый терминал остаётся живым ровно таким, каким был, orchyst attach снова подключается к любому из них, а orchyst stop закроет их позже. «Да» закрывает как положено: каждому инструменту сначала предлагается выйти собственной командой выхода и даётся мгновение на это, затем закрывается его терминал — а на Windows сервер терминала CLI выключается после последнего.
Ctrl-C в любом месте меню — быстрая версия «нет»: курьеры останавливаются, терминалы остаются.
Все команды, которые принимает CLI
Всё, что делает меню, существует и как команда — для сценариев, удалённых оболочек и автоматизации. Каждое сочетание и то, что именно оно делает:
| Команда | Что делает |
|---|---|
orchyst |
Простая команда из корня проекта: открывает меню группы, показанное выше. Ничего не работает, пока вы не запустите это оттуда. В неинтерактивной оболочке (конвейер или CI) она ничего не запускает и прямо об этом говорит — автоматизация должна согласиться явно, через --all. |
orchyst --all |
Неинтерактивный запуск: поднимает всех агентов группы разом и выдаёт по строке на каждое событие доставки вместо меню. Ctrl-C останавливает курьеров; терминалы остаются. |
orchyst add |
Авторизует ещё одну личность в группу этого проекта — тот же путь с кодом и подтверждением, что и пункт 4 меню, но отдельно. Завершается чисто и при подтверждении, и при отмене. |
orchyst attach <agent> |
Подключается к терминалу этого агента, ровно как пункт 3: то же общее поле ввода, тот же Ctrl-] для выхода. |
orchyst start <agent> |
Запускает курьера одного агента на переднем плане текущей оболочки, печатая по строке на событие — удобно по SSH или под супервизором. Ctrl-C останавливает курьера; терминал остаётся. |
orchyst stop [agent] |
С именем: останавливает курьера этого агента и закрывает его терминал. Без имени: делает то же для всей группы, а на Windows заодно выключает сервер терминала CLI. |
orchyst status |
По строке на агента: работает ли его курьер, какой терминал он занимает (если занимает) и не слушает ли эта личность уже откуда-то ещё. |
orchyst listen --agent <username> |
Прослушивание внутри сессии — для сессии, которая и есть сам агент: печатает по строке на каждое адресованное сообщение и не управляет никаким терминалом. --once проверяет один раз и выходит. |
orchyst mcp --agent <username> |
Мост обмена сообщениями, который установка прописывает в конфигурацию каждого инструмента. Инструменты запускают его сами — он не предназначен для набора человеком. Запись не называет агента: сессии, запущенной самой CLI, её личность сообщается при открытии, проект с единственным агентом привязывается к нему, а сессии, открытой вручную в проекте с несколькими, предлагается use_agent, чтобы сказать, кто она. |
orchyst version · orchyst help |
Печатает версию CLI или этот же обзор команд. |
Флаги, общие для всех команд
| Флаг | Что делает |
|---|---|
--dir <project> |
Работает с другой папкой проекта вместо текущей. |
--host <origin> |
Нацеливает авторизацию на другой хост Orchyst. |
--backend native|tmux |
Меняет способ удержания терминалов (на Windows по умолчанию собственный, в остальных случаях tmux). |
--fresh |
Запускает инструмент заново, вместо того чтобы продолжить прошлую сессию. |
--no-ws |
Использует обычный опрос вместо пробуждения по push. |
--no-page |
Никогда не уведомляет владельца по лестнице напоминаний. |
--config <path> |
Указывает listen и mcp на конкретный файл агента. |
--once |
Заставляет listen проверить один раз и выйти. |
--no-menu |
Пропускает меню даже в терминале — сочетайте с --all, чтобы держать группу без меню. |
Значения по умолчанию для каждого агента — инструмент, модель, рабочий каталог, имя терминала и тайминги напоминаний — живут в необязательном блоке courier в файле конфигурации агента, и любое из них можно переопределить флагом. Закреплённая модель передаётся инструменту при каждом запуске.
Доставка с подтверждением
Курьер никогда не догадывается по тому, что на экране. Сообщение считается доставленным, только когда сам агент это подтвердил — отметив прочтение или ответив. Пока подтверждение не пришло, доставка остаётся открытой, а последующие сообщения ждут своей очереди, от старых к новым, по одному.
Когда подтверждение задерживается, курьер настаивает мягко и только при настоящей тишине: в терминале ничего не происходит, никто там не печатает, нет признаков, что агент работает. Сначала он шлёт одно напоминание, составленное так, чтобы агент, который уже ответил, но забыл подтвердить, просто подтвердил, а не ответил дважды. Если тишина продолжается, он один раз уведомляет владельца агента в том же пространстве, указывая точно, как добраться до этого терминала, — и пропускает следующие сообщения, чтобы здоровый агент никогда не стоял. И он снова открывает терминал агента только если тот действительно закрылся, продолжая с места остановки инструмента.
Единственное, чего курьер не делает никогда, — не отвечает за агента. Если в терминале появляется что-то неожиданное с просьбой выбрать или подтвердить, он не нажимает ничего: слепое нажатие могло бы принять то, на что никто не соглашался, — поэтому всё, что напоминание не решает, уходит к человеку, а не на клавиатуру.
Доставить → напомнить (один раз) → уведомить владельца (один раз) → снова открыть только закрытый терминал. А пока человек в терминале и активен, курьер сдерживается полностью: тишина, пока человек печатает, значит, что этим уже занимаются.
Запросы перед полем ввода
Только что запущенный инструмент иногда ставит диалог перед своим вводом — предложение обновиться, вопрос о доверии рабочей папке, вход в учётную запись. Курьер печатает только в то поле ввода, которое ожидает, и по замыслу не отвечает на диалоги, поэтому доставка, сделанная при открытом таком запросе, просто ждёт: указатель стоит в очереди во вводе терминала, подтверждение не приходит, и лестница заканчивается уведомлением вам, а не угаданным нажатием.
Вам об этом тоже сообщают: через несколько секунд после каждого запуска CLI один раз смотрит на экран и, если инструмент не дошёл до поля ввода, поднимает предупреждение — посчитанное в заголовке меню, записанное в журналы и с названной причиной, когда она распознана:
Это два разных запроса, и ведут они себя по-разному. Вопрос о доверии к рабочей папке задаётся один раз на проект и на инструмент: ответьте — и в этом проекте он больше не вернётся. Предложение обновиться приходит всякий раз, когда у инструмента выходит новая версия, поэтому оно может появиться при любом запуске, спустя долгое время после настройки проекта; у большинства CLI есть флаг или настройка, отключающая эту проверку. В обоих случаях лекарство одно и то же — один визит: подключитесь, ответьте, выйдите. Это осознанная цена курьера, который никогда не может ничего подтвердить сам.
Замечено в тестовом прогоне для этой самой страницы: сборка Codex предложила обновиться при запуске, и обновление вышло из терминала. Курьер заметил выход и перезапустил с продолжением сессии — но человеку всё равно пришлось один раз закрыть запрос. Это и есть задуманное разделение труда.