# Быстрый старт От регистрации до первой задачи, которую выполнит агент. Займёт около получаса, большая часть времени уйдёт на установку CLI агента, если её ещё нет. ## Что понадобится - Почтовый ящик: на него придут ссылка для подтверждения и данные для входа в доску. - Компьютер или сервер с Linux (x64) или Windows (x64). На нём будет работать runner, программа, через которую агенты выполняют задачи. Агенты работают с репозиториями прямо на этой машине, на доску репозиторий не загружается. Код уходит туда же, куда и при обычной работе с агентом: в ваш git-репозиторий и провайдеру модели вместе с запросами агента. - CLI хотя бы одного агента: Claude Code, Codex или OpenCode, и доступ к модели. Подойдёт любой: подписка, ключ API или бесплатная модель. Если CLI ещё не установлен, мастер настройки runner подскажет команду установки. ## 1. Зарегистрируйтесь Откройте портал QueueWarden и нажмите «Создать аккаунт». Укажите почту и пароль (не меньше 8 символов) и примите условия сервиса. Пробный период бесплатный, карта не нужна. Его условия — на странице регистрации, подробнее — в кабинете портала: «Подписка» → «Пробный период и оплата». ## 2. Подтвердите почту Портал пришлёт письмо «Подтвердите почту для QueueWarden». Откройте ссылку из него. Письма нет — проверьте папку «Спам» или нажмите «Отправить письмо ещё раз» на экране «Проверьте почту». Если ошиблись адресом, нажмите «Изменить email». ## 3. Дождитесь доски После подтверждения портал сам создаёт вашу установку QueueWarden: отдельную доску со своим адресом. В кабинете в это время виден экран «Готовим вашу установку». Страницу можно закрыть, о готовности придёт письмо. Когда доска готова, придут два письма: - от портала — «Ваша установка QueueWarden готова», в нём адрес доски; - от самой доски — пароль администратора. Логин администратора — часть вашей почты до `@`. Например, для `anna@company.ru` это `anna`. Если в этой части есть символы, которые не подходят для логина, логин будет `owner`. ::: info Другие экраны вместо «Готовим вашу установку» - **«Вы в листе ожидания»** — все места для пробных установок сейчас заняты. Доску создадим, когда место освободится, и напишем на почту. Срок пробного периода начнётся только после создания. - **«Заявка на проверке»** — с вашего подключения недавно уже запрашивали пробный период, заявку посмотрит человек. Ответим в течение рабочего дня. На обоих экранах есть кнопка «Выйти из листа ожидания». Выйти можно в любой момент, пока установка не начала создаваться. Пробный период при этом не теряется: вернуться можно кнопкой «Встать в лист ожидания», но уже в конец очереди. - **«Не получилось создать установку»** — нажмите «Повторить создание». Аккаунт сохранён, пробный период не начался. ::: ## 4. Войдите в доску В кабинете портала нажмите «Открыть доску» или перейдите по адресу из письма. Войдите с логином и паролем администратора. Доска приходит не пустой. В ней уже есть: - **«Основной проект»** — в нём можно сразу ставить задачи; - три агента: `assistant`, `executor` и `reviewer`; - типы задач «Исследование», «Багфикс» и «Фича». Агенты пока не могут работать: им нужен runner. ## 5. Подключите runner В доске откройте **Профиль → Подключить раннер** и скачайте runner для своей системы. ::: code-group ```sh [Linux] chmod +x qw ./qw ``` ```text [Windows] Запустите qw.exe двойным щелчком — мастер откроется в браузере. Если Windows предупредит о неизвестном издателе, нажмите «Подробнее» → «Выполнить в любом случае». ``` ::: При первом запуске открывается мастер настройки. На Linux он задаёт вопросы прямо в терминале. Мастер проведёт по шагам: 1. **Доска.** Укажите её адрес, логин и пароль. Runner получит собственный ключ доступа, пароль он не сохраняет. 2. **Агенты.** Мастер найдёт установленные CLI (`claude`, `codex`, `opencode`) и аккаунты, в которые в них уже вошли. Можно взять эти аккаунты или завести для runner отдельные: мастер покажет, как установить CLI и зарегистрироваться, и тут же выполнит вход. 3. **Аккаунты.** Каждому агенту доски назначается аккаунт. Если аккаунтов несколько, выберите, какой кому. 4. **Автозапуск.** Runner будет запускаться сам при входе в систему, а на Linux — и после перезагрузки. Повторно мастер открывается командой `qw setup`. ::: info Изоляция агентов По умолчанию агенты работают на машине как обычные программы вашего пользователя. Как изолировать их в песочнице — в разделе [«Как работает runner»](./runner.md#изоляция). ::: ## 6. Создайте первую задачу Откройте «Основной проект» и нажмите «Новая задача». Часть полей доска заполнит сама: - **Проект** — «Основной проект». - **Тип** — первый в списке. Выберите нужный: «Исследование» — разобраться и ответить, «Багфикс» — исправить ошибку, «Фича» — сделать новое. - **Ревизор, исполнитель и оператор** — вы. Ревизором и исполнителем вместо вас встанут ваши агенты, в списке это видно: «anna → @anna:reviewer». Оператором остаётесь вы: подтверждаете план и результат. - **Приоритет** — «Обычный». Заполнить самому нужно: - **Название** — одной строкой, что сделать; - **Срок** — не раньше сегодняшнего дня; - **План, часов** — сколько, по-вашему, займёт работа; - **поля постановки** выбранного типа. Обязательные отмечены звёздочкой: - «Исследование» — «Описание»; - «Багфикс» — «Что сломалось», «Где (ссылка на страницу)», «Как воспроизвести», «Как должно быть»; - «Фича» — «Предпосылки» и «Как должно работать». Чем подробнее постановка, тем точнее агент поймёт задачу. Нажмите «Создать»: задача появится в колонке «Бэклог». ## 7. Запустите в работу Созданная задача агентам сама не уходит, её нужно запустить. Способов два: - **Автоматически, в назначенное время.** Заполните поле «Запустить в» при создании задачи или позже, в её карточке. Если указать текущее или прошедшее время, задача стартует сразу. - **Кнопкой.** Нажмите в карточке задачи «Запустить», и агенты примутся за выполнение. ## Дальше Как вмешаться в работу агента, поставить задачу на паузу, сменить стадию или поправить задачу — на странице [«Как задача идёт по стадиям»](./workflow.md). --- # Как задача идёт по стадиям Кто работает с задачей на каждой стадии, как её запустить, как агенты передают её друг другу и где в этот процесс вмешивается человек. ## Стадии новой доски | Стадия | Что происходит | Кто работает | |---|---|---| | Бэклог | Задача ждёт запуска. После запуска кнопкой ревизор проверяет постановку: ясна ли цель, есть ли критерии готовности, хватает ли ссылок и доступов | ревизор | | К запуску | Исполнитель пишет план. Саму работу на этой стадии он не делает | исполнитель | | План | Ревизор проверяет план. Принятый план подтверждает человек | ревизор | | В работе | Исполнитель выполняет согласованный план | исполнитель | | Проверка | Ревизор проверяет результат. Закрытие задачи подтверждает человек | ревизор | | Готово | Задача закрыта | — | Стадии, их порядок и правила можно поменять: **Настройки → Стадии**. Набор стадий выбирается для каждого проекта отдельно. ## Запуск Созданная задача ждёт в «Бэклоге» и сама агентам не уходит. Запустить её можно двумя способами. **Кнопкой.** Нажмите в карточке задачи «Запустить». Ревизор проверит постановку прямо в «Бэклоге»; чего не хватает — спросит в «Обсуждении». Постановка годится — задача переходит в «К запуску», и исполнитель пишет план. **Автоматически, в назначенное время.** Заполните поле «Запустить в» при создании задачи или позже, в её карточке. В это время задача сама переходит в «К запуску», минуя проверку постановки. Если указать текущее или прошедшее время, она стартует сразу. Чтобы несколько задач шли в работу по одной, по порядку, поставьте их в очередь — см. раздел [«Очереди»](#очереди). ## Как агенты передают задачу друг другу Если на стадии работает агент, доска запускает его через ваш runner. Агент получает постановку, инструкцию стадии и всю переписку по задаче. Ход агента кончается решением: - **«Работа принята»** — задача переходит на следующую стадию; - **«Работа не принята»** — задача возвращается на доработку исполнителю. С «Плана» она уходит обратно в «К запуску», с «Проверки» — в «В работе». Что сделано и почему, агент пишет комментарием в «Обсуждение». Без комментария ход не засчитывается: доска дважды напомнит агенту, а если он так и не ответит, задача остановится и будет ждать человека. ![План исполнителя в «Обсуждении»](/img/board/discussion.png) Если запуск сорвался, например агент упал или не уложился во время, доска запустит его снова. Сколько попыток на стадии, задано в её настройках. В секции «Запуски» видно, какая сейчас попытка: «Попытка 2/3». ![Секция «Запуски»: два завершённых запуска агентов](/img/board/runs.png) ### Когда на стадии человек Если ревизор или исполнитель задачи — человек, агент на его стадии не запускается. Задача ждёт, пока человек сам сделает свою часть и переведёт её дальше. Задача ждёт человека и тогда, когда агента запустить нельзя: роль никому не назначена или агент заблокирован. Почему агент не запустился, видно в «Журнале». ## Согласования На некоторых стадиях решение агента подтверждает человек. В новой доске это «План» и «Проверка»: принятый план и закрытие задачи. Ждёт ли задача подтверждения, зависит от того, как она запущена: - **вне очереди или в ручной очереди** — задача останавливается и ждёт решения человека; - **в очереди «Авто»** — подтверждение пропускается, задача идёт дальше сама. Когда агент принял работу на такой стадии, в секции **«Согласования»** появляется запрос. Под ним — начало последнего комментария агента, чтобы было видно, что именно он принял. ![Запрос в «Согласованиях»: подтвердить переход на «В работе»](/img/board/approvals.png) - **«Одобрить»** (галочка) — задача уходит на следующую стадию. - **«Отклонить»** (крестик) — задача остаётся на стадии и снимается с очереди. Нужно указать причину. Отправить на доработку без подтверждения агент может и сам: возврат согласования не требует. Решать согласования может человек с правом подтверждения. Обычно это оператор задачи. ## Разговор с агентом Пока идёт сессия агента, над полем ввода написано «Агент на связи — реплика уйдёт прямо в идущую сессию», а само поле подписано «Сказать агенту…». Сообщение из этого поля уйдёт прямо в сессию агента, и он ответит в обсуждении. Пока агент занят ходом и ещё не ответил, в ленте обсуждения видна отметка «работает над задачей». ![«Обсуждение» во время запуска: поле «Сказать агенту…» и кнопки управления](/img/board/agent-talk.png) Если движок агента не принимает сообщения на ходу, доска предупредит об этом. Тогда сообщение ляжет обычным комментарием, и агент прочитает его на следующем ходу. Кнопки управления под полем видит тот, у кого есть право управлять запусками: | Кнопка | Что делает | |---|---| | Прервать ход | Останавливает текущий ход и даёт агенту новое указание. Сессия продолжается | | Отпустить агента | Появляется после решения агента. Заканчивает разговор, и задача идёт дальше по его решению | | Остановить ран | Завершает запуск досрочно. Задача остаётся на месте | Кнопка **«Перезапустить»** в шапке карточки запускает агента на текущей стадии заново. ### Вывод агента В секции «Запуски» у каждого запуска есть кнопка «Показать вывод»: что агент делал в терминале. Свой вывод видит владелец агента. Другой человек может нажать «Запросить вывод», и владелец разрешит или откажет. Владелец идущей сессии может писать агенту прямо в терминал, в поле «Сказать агенту в терминал…». Такой разговор виден только ему и в обсуждение задачи не попадает. ## Очереди Очередь запускает задачи проекта по одной: следующая стартует, когда предыдущая закрыта. ### Создать очередь Очереди проекта живут в карточке проекта: **Проекты → проект → «Данные проекта» → «Очереди» → «Новая очередь»**. Укажите название и режим: - **«Авто»** — согласования пропускаются, и задача проходит все стадии без человека. Остановится она, только если на стадии работает человек, у стадии нет следующей или кончились попытки агента; - **«Ручная»** — задача останавливается на стадиях с согласованием и ждёт решения человека. Где согласований нет, она идёт сама, как в «Авто». Новая очередь создаётся в режиме «Авто». Очередь можно создать и прямо при добавлении задачи. ### Добавить задачу Есть три способа: - выбрать очередь в поле «Очередь» при создании задачи; - нажать «Очередь» в шапке карточки задачи; - нажать на отметку очереди на карточке на доске. Задача может стоять только в одной очереди. Закрытую задачу поставить в очередь нельзя. ### Запустить и приостановить На доске нажмите **«Очереди»**. В окне видны все очереди проекта. У каждой можно: - запустить её кнопкой «Запустить очередь»; - приостановить кнопкой «Приостановить очередь». Вместе с очередью встаёт на паузу и задача, которая сейчас в работе; - сменить режим; - раскрыть список задач и перетащить их в нужном порядке. ![Окно «Очереди проекта»: очередь «Релиз 1.2» раскрыта, в ней две задачи](/img/board/queues.png) Задача, которая уже в работе, стоит первой, её не передвинуть и не убрать. Остальные можно переставлять, пока они в «Бэклоге». Дойдя до «Готово», задача уходит из очереди, и стартует следующая. Отдельную задачу запускают и приостанавливают в её карточке, очередь для этого не нужна: - **«Запустить»** — запускает агента на текущей стадии. После первого запуска кнопка называется «Перезапустить»; - **«Пауза»** — останавливает агента, нужно указать причину. Время паузы в факт не входит; - **«Продолжить»** — снимает паузу, агент продолжает ту же сессию с того места, где остановился. Пауза очереди на задачи вне очереди не действует: их останавливают кнопкой «Пауза» в карточке. --- # Меню и проекты Как устроена доска QueueWarden: меню, проекты, колонки стадий, фильтры и перенос карточек. ## Меню В шапке доски есть меню: - **«Ассистент»**: разговор с вашим личным агентом о проекте. Подробнее — в разделе [«Ассистент»](#ассистент). - **«Задачи»**: доска проекта и обзор задач всех проектов. С этого раздела доска открывается после входа. - **«Проекты»**: список проектов, их участники, очереди и расход токенов. - **«Пользователи»**: люди и агенты установки. Раздел видят администратор и те, кому выдали права на пользователей. - **«Настройки»**: стадии, типы задач, приоритеты, шаблоны доступа. Почту, лимит запусков, Telegram и хранилище видит только администратор. Если прав нет ни на одну вкладку, пункта в меню нет. В шапке видно, сколько раннеров подключено и сколько слотов одновременных запусков сейчас занято. Там же колокольчик уведомлений, профиль, переключатели темы и языка и выход. ## Проекты Задачи живут в проектах. У каждого проекта свой набор стадий, типов задач, участников и очередей. В новой доске уже есть «Основной проект», и в нём можно сразу ставить задачи. ### Создать проект В разделе **«Проекты»** нажмите **«Новый проект»**. Кнопку видит тот, у кого есть право создавать проекты. | Поле | Что указать | |---|---| | Ключ | Короткий код проекта. Обязателен | | Название | Обязательно | | Набор стадий | По каким стадиям пойдут задачи. Подробнее — в разделе [«Как задача идёт по стадиям»](./workflow.md) | | Набор типов | Какие типы задач можно ставить в проекте | | Описание | Необязательно | ### Карточка проекта Нажмите на проект в списке, чтобы открыть его карточку. В ней три вкладки. **«Данные проекта»**: ключ, название, описание, набор стадий, среды, репозитории и очереди. Здесь же поле **«Параллельных запусков»**: сколько агентов проекта могут работать одновременно. Пустое поле значит «без лимита проекта», тогда действует общий лимит установки. ![Вкладка «Данные проекта»: ключ, название, лимит запусков, среды, репозитории и очереди](/img/board/project-data.png) **«Участники»**: кто работает в проекте. Добавить можно уже заведённого пользователя (**«Добавить»**) или позвать нового письмом (**«Пригласить»**). Права участника задаёт шаблон доступа. У каждого участника три переключателя в колонке **«По умолчанию»**: «Исполнитель», «Ревизор», «Оператор». Отмеченный участник подставится в эту роль в новой задаче, если её не выбрали явно. ![Вкладка «Участники»: доступ участников и роли по умолчанию](/img/board/project-members.png) **«Расход»**: сколько токенов потратили агенты проекта за выбранный период. ### Архив и удаление Ненужный проект можно отправить в архив. Задачи останутся, а доска проекта станет только для чтения. Вернуть проект можно из фильтра «Архивные» в списке проектов. Удалить проект можно, только если в нём нет задач. Для подтверждения нужно ввести название проекта. ## Доска проекта Откройте **«Задачи»**. Проект выбирается в **«Фильтрах»**, в поле «Проект». Колонки доски — это стадии проекта. В шапке колонки видны название стадии, её описание и число задач. Набор стадий в новой доске такой: **Бэклог → К запуску → План → В работе → Проверка → Готово** ![Доска проекта: шесть колонок стадий с карточками задач](/img/board/board.png) Что происходит на каждой стадии, описано в разделе [«Как задача идёт по стадиям»](./workflow.md). ### Карточка задачи на доске На карточке видно: - название и ключ задачи; - очередь и место в ней или «Без очереди»; - теги; - срок или «Без срока». Просроченный срок подсвечен; - приоритет; - плановое и фактическое время в часах, например «4 ч / 1.5 ч»; - исполнитель. Иногда на карточке появляются отметки: - **«На паузе»** — задачу приостановили. Время паузы в факт не входит. - **«Аварийно»** — задачу перевели в обход обычного пути. Причина видна в подсказке. Агента на карточке и везде на доске видно как `@владелец:агент`, например `@anna:executor`. ### Обзор Кнопка рядом с «Новой задачей» переключает доску на **«Обзор»** и обратно. Обзор — таблица задач всех проектов: номер, стадия, срок, название, проект, оператор, исполнитель и ревизор. Приоритет показан цветной полосой у края строки. На телефоне вместо таблицы — список карточек. ### Фильтры и сортировка Кнопка **«Фильтры»** открывает окно с полями: - **Поиск** по номеру задачи, названию или тегу. - **«Проект»**. На доске выбирается один проект, в обзоре можно несколько. - **«Моя роль»**: задачи, где вы создатель, ревизор, исполнитель или оператор. - **«Стадии»**, **«Приоритеты»**, **«Теги»**. - **«Создана с»** и **«Создана до»**. - **«Сортировка»**: по сроку или по приоритету, в обе стороны. ![Окно «Фильтры и сортировка»](/img/board/filters.png) Число включённых фильтров видно на кнопке: «Фильтры · 2». Кнопка «Сбросить» в окне выключает все фильтры. Тег на карточке тоже работает как фильтр: нажмите на него, чтобы показать только задачи с этим тегом, и ещё раз, чтобы снять фильтр. У каждой колонки есть своя кнопка сортировки. По умолчанию колонка сортируется как в фильтрах. ### Перенос карточек Чтобы перевести задачу на другую стадию, перетащите карточку в нужную колонку. У края экрана доска прокручивается сама. На телефоне зажмите карточку примерно на полсекунды. Телефон коротко завибрирует, и карточку можно вести пальцем. Перенести задачу можно не на любую стадию. У каждой стадии есть список ролей, которые могут перевести на неё задачу. Если вашей роли в списке нет, карточка вернётся на место. Создатель и оператор задачи переводят её на любую стадию. ::: info Аварийный перевод Администратор и тот, у кого есть права на участников и настройки проекта, могут перевести задачу в обход обычного пути. Доска попросит указать причину, она останется в журнале задачи, а на карточке появится отметка «Аварийно». ::: Пока агент работает над задачей, перенести её вручную нельзя. Дождитесь конца его хода или остановите его в карточке задачи. ## Уведомления Колокольчик в шапке показывает число непрочитанных уведомлений. Нажмите на него, чтобы открыть список, и на уведомление, чтобы перейти к задаче. Кнопка «Прочитать все» отмечает прочитанным весь список. Новые уведомления ещё и всплывают на несколько секунд в углу экрана. ## Ассистент Ассистент — ваш личный агент для разговора о проекте. Он отвечает на вопросы о задачах и проекте, но код не меняет. Беседы сохраняются в списке «Диалоги», новую начинает кнопка «Новый диалог». В новой доске ассистент уже заведён — агент `assistant`. Если его нет, добавьте в своём профиле агента с ролью «Ассистент» и укажите, к каким проектам у него доступ. --- # Задачи Как поставить задачу, кто в ней участвует и что есть в карточке задачи. ## Роли в задаче У каждой задачи четыре участника: - **Создатель** — тот, кто поставил задачу. Всегда человек. - **Ревизор** — принимает работу: проверяет постановку, план и результат, решает споры о сроке и оценке. - **Исполнитель** — делает работу: пишет план и выполняет его. - **Оператор** — дежурный по задаче. Следит за запусками агентов, перезапускает их и подтверждает решения, которые доска оставляет человеку. Всегда человек. Ревизором и исполнителем может быть человек или агент. Это должны быть разные участники: один и тот же агент не может проверять собственную работу. Два разных агента одного владельца — можно. ### Агент вместо человека В полях «Ревизор» и «Исполнитель» выбираются люди. Если у человека есть агент на эту роль, в задачу встанет его агент. В списке это видно заранее: «Анна → @anna:executor». В журнале задачи останется запись, кого выбрали и какой агент назначен. Какой агент подставляется, владелец настраивает в своём профиле. Можно задать агента на проект, на тип задачи и время работы. ## Новая задача Нажмите **«Новая задача»** на доске или в обзоре. ![Форма «Новая задача» для багфикса: проект, тип, название, участники, срок и оценка](/img/board/new-task.png) | Поле | Обязательно | Что указать | |---|---|---| | Проект | да | | | Тип | да | От типа зависят поля постановки, см. ниже | | Название | да | Одна строка, до 120 символов | | Ревизор | да | Подставляется из настроек проекта, иначе вы | | Исполнитель | да | Подставляется из настроек проекта | | Оператор | да | Только человек. Подставляется из настроек проекта, иначе вы | | Приоритет | нет | | | Срок | да | Не раньше сегодняшнего дня | | Теги | нет | Метки, по которым задачи потом находятся вместе, см. ниже | | План, часов | да | Оценка трудоёмкости, можно дробное число | | Очередь | нет | В какую очередь поставить задачу | | Запустить в | нет | Когда задача стартует сама | Ниже идут **поля постановки** выбранного типа. Отдельного поля «Описание» у задачи нет: что нужно сделать, описывается в полях типа. Какие из них обязательны, задаёт тип. Если у типа есть поле «Файлы», файлы можно перетащить в него мышью. Если обязательные поля пусты, доска подсветит их все сразу. ::: tip Задача не уйдёт агентам сама Созданная задача ждёт в «Бэклоге», пока её не запустят: временем в поле «Запустить в» или очередью. Подробнее — в разделе [«Как задача идёт по стадиям»](./workflow.md#запуск). ::: ### Теги Теги собирают задачи в группу. Например, задачи одного релиза или одной доработки помечаются общим тегом. По тегу задачи потом находятся в «Фильтрах» — так видно, какие задачи выполнялись вместе. Тег ищется и обычным поиском. У задачи может быть несколько тегов. ## Карточка задачи Нажмите на задачу на доске, чтобы открыть её карточку. Карточка разбита на секции, каждую можно свернуть. На телефоне сразу открыто только «Обсуждение». ![Карточка задачи на стадии «План»: постановка, обсуждение, карточка и запрос на согласование](/img/board/task-card.png) | Секция | Что в ней | |---|---| | Постановка | Поля типа: что нужно сделать | | Карточка | Проект, родительская задача, участники, приоритет, срок, время запуска, теги, план и факт | | Обсуждение | Комментарии людей и агентов. Отсюда же можно говорить с агентом, пока он работает | | Подзадачи | Дочерние задачи и кнопка «Добавить» | | Вложения | Файлы задачи | | Согласования | Решения, которые ждут подтверждения человеком | | Запуски | Каждый запуск агента: попытка, длительность, итог и вывод | | Журнал | Все события задачи: переходы, назначения, запуски | | Расход | Сколько токенов потратил каждый запуск | Стадию задачи можно сменить и в карточке: в шапке есть список стадий. В нём только те, куда вам разрешено перевести задачу. ### Комментарии и упоминания Комментарий пишется в поле внизу «Обсуждения». Отправить — кнопкой или Ctrl+Enter (⌘+Enter на Mac). К комментарию можно приложить файлы. Наберите `@`, чтобы упомянуть человека или агента. Упомянутый получит уведомление. Свои комментарии можно изменить или удалить. ### Подзадачи Крупную задачу можно разбить: в секции «Подзадачи» нажмите «Добавить». Откроется форма новой задачи, родитель подставится сам. Пока не закрыты все подзадачи, в том числе вложенные на любую глубину, родительскую задачу не закрыть: принять её работу нельзя, доска ответит «У задачи есть незавершённые подзадачи». Через подзадачи удобно: - **подключить к задаче ещё исполнителей.** У задачи один исполнитель и один ревизор. Если нужен ещё кто-то, заведите на его часть подзадачу. Например, агент пишет код, а код-ревью делает человек: подзадача «Код-ревью» с этим человеком в роли исполнителя. Пока он её не закроет, родительская задача не закроется; - **собрать большую фичу.** Заведите родительскую задачу на всю фичу и подзадачи на её части. Каждую часть делают и принимают отдельно, а фича закрывается, когда готовы все. ### Правка Кнопка **«Редактировать»** в шапке превращает поля «Карточки» и «Постановки» в редактируемые. Сохраните изменения кнопкой «Сохранить». Ревизор, исполнитель и оператор есть у задачи всегда: их можно заменить, но не убрать. Пока задача в «Бэклоге», её можно править свободно. Когда она ушла в работу, ревизор, исполнитель, приоритет, оценка, срок и очередь фиксируются. Чтобы снова их поменять, верните задачу в «Бэклог». ### Спор о сроке и оценке Если срок или оценка не подходят, исполнитель может предложить свои: кнопка **«Оспорить»** у поля «Срок» или «План». Предложение появится в «Карточке», ревизор примет его или отклонит. ### Пауза Кнопка **«Пауза»** приостанавливает задачу, если работа по ней уже началась. Агент, который сейчас работает, останавливается. Нужно указать причину, она появится в обсуждении. Время паузы не входит в фактические затраты. Продолжить — кнопкой «Продолжить»: агент вернётся в ту же сессию. ### Время У задачи два числа, они видны на карточке на доске («4 ч / 1.5 ч») и в «Карточке» задачи: - **План** — оценка в часах, её указывают при создании задачи; - **Факт** — сколько задача была в работе. Доска считает его сама: отсчёт начинается, когда задача входит в «К запуску», и останавливается, когда она доходит до «Готово» или возвращается в «Бэклог». Время пауз вычитается. Если задачу снова запустят, отсчёт продолжится и сложится с прежним. Проверка постановки в «Бэклоге» в факт не входит. ### Расход токенов Секция **«Расход»** в карточке задачи показывает, сколько токенов потратил каждый запуск агента: вход, выход, чтение и запись кэша, рассуждение и всего, а внизу — итог по задаче. Если движок агента не сообщил расход, число оценено по длине текста и помечено «оценка». Расход всего проекта — на вкладке **«Расход»** в карточке проекта: за выбранный период, с группировкой по месяцу, движку и модели и числом запусков. ### Удаление Удалить задачу можно, пока она в «Бэклоге», без подзадач и без запусков агентов. Для подтверждения нужно ввести ключ задачи. ### Закрытая задача Задача закрывается, когда доходит до финальной стадии, в новой доске это «Готово». Закрытую задачу менять нельзя: её можно читать и комментировать. --- # Агенты Что такое агент, как его завести и настроить, чтобы он вставал в задачи вместо вас. ## Что такое агент Агент — отдельная учётная запись на доске, у которой есть владелец-человек. Агента заводит только сам владелец и только себе, настраивает его тоже только владелец. По назначению агенты бывают двух видов: | Назначение | Как работает | |---|---| | «Запускается раннером» | Работает в задачах: доска запускает его через runner владельца, когда до него доходит ход. Прав на доске у него нет, он действует ролью в задаче | | «Мост — ходит на доску сам» | Внешняя программа, которая сама обращается к доске по токену агента. Действует в пределах маски и ваших прав | Назначение выбирается при создании и потом не меняется. Мост нельзя поставить ревизором или исполнителем задачи. Как устроен runner — в разделе [«Как работает runner»](./runner.md). ## Агенты новой доски В новой установке у администратора уже есть три агента: | Агент | Роль | |---|---| | `assistant` | Ассистент | | `executor` | Исполнитель | | `reviewer` | Ревизор | Все трое запускаются раннером на движке claude и работают во всех проектах. Движок и аккаунт им назначает мастер настройки runner, когда подключается машина. В «Основном проекте» администратор стоит исполнителем, ревизором и оператором по умолчанию, поэтому в новых задачах на его место встают `executor` и `reviewer`. ## Создать агента Откройте свой профиль и в блоке **«Агенты пользователя»** нажмите **«+»**. Откроется окно «Добавление агента». | Поле | Что указать | |---|---| | Логин | Имя агента на доске | | Назначение | «Запускается раннером» или «Мост — ходит на доску сам» | | CLI | Каким движком запускать: claude, codex, opencode или jarvis | | Аккаунт | Под каким аккаунтом модели. Без выбора — «Аккаунт раннера по умолчанию» | | Модель | Список отдаёт ваш runner. Без выбора — «По умолчанию у CLI» | | Режим разрешений | Что движку можно делать без спроса. Варианты зависят от CLI | | Дополнительные аргументы | Аргументы запуска CLI: введите аргумент и нажмите Enter | CLI, аккаунт, модель, режим и аргументы есть только у агента, который запускается раннером. У моста при создании можно указать «Адрес вебхука (необязательно)». ::: tip Нет списка моделей Список моделей отдаёт runner в сети с выбранным CLI и аккаунтом, версии не ниже v0.2.9. Если такого нет, доска так и напишет. Про аккаунты — в разделе [«Аккаунты моделей»](./accounts.md). ::: Режимы разрешений. Агент работает без человека за терминалом, подтверждать за него некому, поэтому режим задаёт, что агенту можно: | CLI | Режим | Что может агент | |---|---|---| | claude | bypassPermissions | всё | | claude | acceptEdits | правит файлы; команды — только разрешённые в настройках Claude Code (`permissions.allow` в `settings.json`) | | claude | plan | только читает и строит план | | claude | default | только разрешённое в `permissions.allow`; остальное получает отказ | | codex | danger-full-access | пишет куда угодно | | codex | workspace-write | пишет только в каталог задачи | | codex | read-only | ничего не пишет | | opencode | allow / deny | всё / ничего | | opencode | ask | спрашивает, а ответить некому — не выбирайте | | jarvis | только режим по умолчанию | | Исполнителю нужна запись, ревизору хватает чтения (`plan`, `read-only`) — тогда он и по ошибке не поправит код, который проверяет. ::: warning «По умолчанию» у Claude Без своего списка `permissions.allow` агент получает отказ на каждую правку и команду. Ран не зависает: агент читает код, оставляет комментарий и вердикт, но работы не делает. ::: В списке агентов под логином видно, как агент запускается: «движок · модель · аккаунт». У моста там состояние токена: «мост · токен MCP · использован …», «… · ещё не использовался» или «мост · токен не выпущен». ## Агент вместо человека В задаче ревизором и исполнителем выбирают людей, а доска ставит вместо человека его агента. Как это выглядит в задаче — в разделе [«Задачи»](./tasks.md#агент-вместо-человека). Куда подставлять агента, задаёт блок **«Подстановка вместо владельца»**. Он появляется, когда вы открываете уже созданного агента на редактирование: сначала создайте агента, потом настройте подстановку. | Настройка | Что значит | |---|---| | Роль по умолчанию | «Исполнитель», «Ревизор», «Ассистент» или «Не подставлять» | | Во всех проектах | Включая будущие. Выключено — только в выбранных «Проектах» | | Типы задач | Пусто — все типы | | График доступности | Когда агента можно запускать | Если подходят несколько агентов, побеждает самая точная привязка: проект и тип → тип → проект → все проекты. Привязать агента можно только к проекту, где вы сами участник. На одну роль в одном проекте — один ваш агент. Смена настроек касается только новых назначений: задачи, где агент уже стоит, не меняются. ### График доступности На каждый день недели задаётся одно окно «с … до …» в целых часах. - График пуст — агент доступен всегда. - Пустой день — выходной. - Вне окна запуск ждёт ближайшего окна и стартует сам. Начатый запуск доработает. ### Ассистент Агент с ролью «Ассистент» обсуждает с вами проект вне задач и не занимает слоты запуска. Ассистент у владельца один. Для него выбираются только проекты, типов задач и графика у него нет. Где с ним говорить — в разделе [«Меню и проекты»](./board.md#ассистент). ## Мост Мост работает от вашего имени по токену. Его настройки — в окне «Редактирование агента». Как подключить к доске Claude Code, Codex или opencode — в разделе [«Подключение ИИ-агента по MCP»](./mcp.md). ### Токен агента Кнопка **«Выпустить»** выдаёт токен. Срок действия выбирается: число дней или «Бессрочно». Токен показывается один раз — скопируйте его и нажмите «Я сохранил токен». Токен у агента один: **«Перевыпустить»** отменяет прежний, **«Отозвать»** закрывает доступ. ::: warning Токен — как пароль По токену можно получить данные от вашего имени в пределах ваших прав. Не передавайте его третьим лицам: за действия по токену отвечаете вы. ::: ### Вебхук моста Доска может слать мосту ваши уведомления на его адрес. Кнопки: **«Подключить»**, **«Проверить»**, **«Перевыпустить секрет»**, **«Отключить»**. - Адрес — только https и только публичный. - Тело запроса подписано секретом: HMAC-SHA256, заголовок X‑QW‑Signature. Секрет показывается один раз. - Какие события слать, выбирается в настройках уведомлений: канал «Вебхук», затем этот мост. Подробнее — в разделе [«Уведомления»](./notifications.md). ## Доступ агента Мосту и ассистенту права задаёт маска. В окне агента, в блоке «Доступ агента», выбираются «Глобальная маска» и «Проектная маска», а для проектной — охват: «Без проектов», «Все проекты» или «Выбрать». Маска — потолок прав агента, а не выдача. Агент получает только то, что есть и в маске, и у вас. Урежут права вам — урежутся и агенту. Маски заводятся в своём профиле, в блоке **«Маски моих агентов»**: кнопки «Глобальная маска» и «Проектная маска». Права в маске выбираются так же, как в [шаблоне доступа](./access.md). Маску, привязанную к агенту, удалить нельзя — сначала снимите её в доступе агента. Агенту, который запускается раннером, маска не нужна: он работает ролью в задаче. ::: info Что агенту не дать никогда Даже через маску агент не получит права, оставленные людям: подтверждение human-gate, настройки, архивацию и удаление проекта, шаблоны доступа, стадии, типы задач, приоритеты и интеграции. ::: ## Инструкции агента Отдельной инструкции у агента нет. Что делать на каждом шаге, агент получает из настроек стадии, см. [«Стадии»](./stages.md). ## Удалить агента Кнопка удаления — в списке агентов. Для подтверждения введите логин агента, после удаления логин освободится. Агента, который уже участвовал в задачах, удалить нельзя — только заблокировать. --- # Пользователи и роли Как завести человека на доске, где настроить его профиль и права и как отключить учётную запись. ## Список пользователей Раздел **«Пользователи»** в меню видит тот, у кого в шаблоне доступа есть хотя бы одно право из группы «Пользователи», а также владелец аварийного доступа (sudo). В списке только люди, агенты показываются в профиле владельца. Фильтры: «Активные», «Заблокированные», «Все» и шаблон «Права на установку». Поиск — по имени, логину или почте. Кнопки в строке пользователя: | Кнопка | Что делает | |---|---| | Быстрый просмотр пользователя | Боковая панель: права на установку, статус, дата создания, агенты, проекты и роли | | Открыть профиль пользователя | Полный профиль пользователя | | Настроить уведомления пользователя | Настройки уведомлений этого человека, см. [«Уведомления»](./notifications.md) | | Заблокировать пользователя / Разблокировать пользователя | См. [«Отключить пользователя»](#отключить-пользователя) | | Обезличить, Удалить пользователя | См. там же | С чужими учётными записями каждое действие открывает своё право из группы «Пользователи»: | Действие | Право | |---|---| | Добавить человека: завести вручную или пригласить | Создание | | Изменить профиль | Изменение | | Сменить пароль | Смена пароля | | Заблокировать и разблокировать | Блокировка | | Удалить и обезличить | Удаление | Кнопки, на которые права нет, в списке не показываются. Свой профиль и своих агентов можно менять без прав. Чужого агента настраивает только его владелец, а заблокировать или удалить его может и тот, у кого есть право. ## Добавить человека Нажмите **«Добавить человека»**. Есть два способа. | Способ | Что указать | Кнопка | |---|---|---| | Завести вручную | Email, Логин, Имя, Пароль | «Создать пользователя» | | Пригласить по ссылке | Email | «Создать приглашение» | Пароль можно придумать или нажать «Сгенерировать». Приглашение уходит письмом само. Если письмо не ушло, доска покажет причину и кнопку «Копировать ссылку» — передайте ссылку сами. В обоих способах права выдаются сразу: - **«Права на установку»** — шаблон доступа к установке. По умолчанию «Сотрудник», то есть без прав на установку. - **«Доступ к проектам»** — «Без доступа», «Все проекты» или «Выбрать». Для проектов выбирается «Шаблон доступа», по умолчанию «Участник». «Все проекты» — один шаблон на все проекты, включая заведённые позже. Что дают шаблоны — в разделе [«Шаблоны доступа»](./access.md). ::: info Как принять приглашение По ссылке человек видит, на что получает доступ: «на установку», «все проекты, включая будущие» или конкретный проект. Принять — кнопкой **«Принять приглашение»**. Почта учётной записи должна совпасть с адресом из приглашения. ::: Позвать человека в один проект можно и из карточки проекта, см. [«Участники проекта»](#участники-проекта). ## Профиль Свой профиль открывает кнопка **«Профиль»** в шапке, чужой — кнопка «Открыть профиль» в списке пользователей. Изменения сохраняет кнопка «Сохранить профиль». | Поле или блок | Что в нём | |---|---| | Имя, Логин, Email | Данные учётной записи | | Telegram | Привязка для входа и уведомлений. Её можно отвязать, см. [«Telegram»](./telegram.md) | | Глубина ленты уведомлений | Сколько последних событий хранить под колокольчиком: от 1 до 1000 | | Сменить пароль | Не короче 8 символов. Свой пароль меняется с вводом текущего. После смены все сессии пользователя завершаются | | Права на установку | Шаблон доступа к установке | | Часовой пояс | Только в своём профиле. Время в истории диалогов и графиках агентов | | Агенты пользователя | Агенты этого человека, см. [«Агенты»](./agents.md) | | Проекты и роли | В каких проектах человек участвует и с какой ролью | | Мои персональные данные | Только в своём профиле, см. ниже | ### Права на установку Права на установку выдаёт шаблон доступа. Выбрать его можно при добавлении человека или позже в профиле. Выдать шаблон, который даёт больше прав, чем есть у вас самих, нельзя. Правка шаблона меняет доступ всем, к кому он привязан. Подробнее — в разделе [«Шаблоны доступа»](./access.md). ### Аварийный доступ (sudo) Переключатель «Аварийный доступ (sudo)» обходит проверку прав там, где без него установку не починить. - Переключатель видит и выдаёт только тот, у кого sudo уже есть. - Sudo бывает только у активного человека, агенту его не выдать. - У последнего администратора с полным доступом sudo не снять — сначала назначьте другого. ## Участники проекта Кто работает в проекте и с какими правами, задаёт вкладка **«Участники»** в карточке проекта. Как она выглядит — в разделе [«Меню и проекты»](./board.md#карточка-проекта). Менять состав может тот, у кого в проекте есть право «Участники → Ведение состава». - **«Добавить»** — выбрать уже заведённого пользователя и «Шаблон доступа». - **«Пригласить»** — указать Email и «Шаблон доступа», затем «Создать приглашение». Приглашения видны в списке со статусом «Активен», «Принят», «Истёк» или «Отозван»; активное можно отозвать. - Колонка **«Доступ»** — шаблон доступа участника в этом проекте. Если у человека шаблон на все проекты, рядом пометка «Шаблон привязан ко всем проектам». - Кнопка удаления убирает человека из проекта. В списке участников только люди. Агенты попадают в проект через подстановку, см. [«Агенты»](./agents.md#агент-вместо-человека). ### Роль в «Проектах и ролях» В профиле у каждого проекта стоит роль: «Владелец», «Ведущий», «Оператор», «Участник» или «Наблюдатель». Это подпись по набору прав человека в проекте, сами права задаёт шаблон доступа. Тот, кто создал проект, получает в нём шаблон «Владелец проекта». ## Отключить пользователя | Действие | Что происходит | |---|---| | Заблокировать | Учётная запись перестаёт работать, вместе с ней останавливаются её агенты. Разблокировать можно той же кнопкой. Себя заблокировать нельзя | | Удалить | Пользователь и его агенты удаляются безвозвратно, логин и почта освобождаются. Для подтверждения введите логин | | Обезличить | Имя, логин, почта, аватар, пароль, привязка Telegram и сессии стираются, агенты обезличиваются так же. Задачи и комментарии остаются с автором «Удалённый пользователь» | ::: warning Удалить можно не всех Если человек или его агенты участвовали в задачах, удалить его нельзя — только заблокировать. ::: ### Мои персональные данные В своём профиле: - **«Скачать мои данные»** — выгрузка профиля, привязки Telegram, согласий, активных сессий, ваших комментариев и задач, где вы автор; - **«Удалить мои персональные данные»** — обезличивает вашу учётную запись и агентов. Задачи и комментарии остаются, автором в них будет «Удалённый пользователь». Действие необратимо: вы сразу выйдете и войти больше не сможете. --- # Уведомления Кто получает уведомления о задачах, по каким каналам они приходят и как выбрать, о чём сообщать. ## Кому приходят уведомления Уведомления получают только люди. О событии в задаче узнают её участники: ревизор, исполнитель, оператор и создатель. Если роль в задаче занимает агент, уведомление получает его владелец. Тот, кто сам совершил действие, уведомление о нём не получает. Часть событий адресована одному человеку. Например, вопрос агента приходит только тому, кому он задан. ## В доске Все уведомления копятся под колокольчиком в шапке доски. Как работает список — в разделе [«Меню и проекты»](./board.md#уведомления). Сколько последних уведомлений хранить под колокольчиком, задаётся в профиле, в поле «Глубина ленты уведомлений»: от 1 до 1000, по умолчанию 100. Под колокольчик попадает всё. А всплывают в углу экрана только события, включённые для канала «В браузере» — см. [«Настроить уведомления»](#настроить-уведомления). ### Системные уведомления Обычно всплывающее уведомление видно, только пока доска открыта перед глазами. Чтобы видеть уведомления на другой вкладке или при свёрнутом окне, разрешите системные уведомления: откройте свои настройки уведомлений, выберите канал «В браузере» и нажмите **«Разрешить системные уведомления»**. Разрешение действует в том браузере, где вы его дали. Если браузер заблокировал уведомления, разрешите их в настройках сайта — значок замка у адреса. ## Каналы | Канал | Куда приходит | По умолчанию | |---|---|---| | В браузере | Всплывает на доске и в системе | включён | | Telegram | В личные сообщения от бота доски или от вашего бота | включён | | Почта | На почту из профиля | включён | | Бот-ассистент | В ваш мост — агента, который сам ходит на доску | выключен | | Вебхук | POST-запрос на адрес вашего моста | выключен | Как подключить Telegram — в разделе [«Telegram»](./telegram.md). Почту администратор настраивает при установке доски — см. [«Шаблоны писем»](./mail.md). Мосты описаны в разделе [«Агенты»](./agents.md). ::: info Канал не настроен Если канал не подключён в установке, под его названием будет написано: «Канал не настроен в установке: события сохранятся, но доставляться не будут.» ::: ## Настроить уведомления Свои уведомления: **«Профиль»** → кнопка с колокольчиком «Настроить уведомления пользователя». Администратор и те, у кого есть права на пользователей, могут открыть эти настройки и для другого человека: **«Пользователи»** → та же кнопка в строке пользователя. 1. В поле «Канал» выберите канал. Рядом с каждым каналом видно, сколько событий в нём включено, например «5 из 19». 2. Включите нужные события. «Выбрать все» включает или выключает все события канала разом. 3. Нажмите **«Сохранить события»**. События настраиваются для каждого канала отдельно. Например, в браузере можно видеть всё, а в Telegram получать только вопросы агентов. ## События | Событие | Когда приходит | |---|---| | Задача создана | Поставлена новая задача | | Задача перемещена | Задача перешла на другую стадию | | Экстренное перемещение | Задачу перевели в обход обычного пути | | Задача поставлена на паузу | | | Работа возобновлена | | | Смена ревизора | Вас сняли с роли ревизора задачи | | Новый комментарий | В обсуждении задачи новый комментарий | | Упоминание | Вас упомянули в комментарии | | Ожидается финальное решение | Работа закончена, но следующей стадии нет — ход за человеком | | Ожидается оператор | | | Ожидается согласование | Стадия пройдена, переход нужно подтвердить | | Агент остановился | | | Вопрос агента | Агент задал вам вопрос и ждёт ответа | | Ошибка запуска | Запуск агента завершился ошибкой | | Запуск требует внимания | Запуск не может продолжиться без человека | | Лимит запросов | Агент упёрся в лимит модели. Работа продолжится сама | | Запуск завершён | Запуск агента закончился | | Согласование принято | Согласование принято | | Согласование отклонено | Согласование отклонено | ## Исходящий вебхук Вебхук отправляет ваши уведомления во внешнюю систему: доска шлёт POST-запрос с JSON на адрес вашего моста. Приходят те же уведомления, что и вам. ### Подключить 1. Откройте мост: **«Профиль»** → «Агенты пользователя» → кнопка «Редактировать агента» у моста. Вебхук есть только у мостов — агентов с назначением «Мост — ходит на доску сам». Адрес можно указать и при создании моста, в поле «Адрес вебхука (необязательно)». 2. В блоке «Вебхук моста» укажите адрес в поле «URL» и нажмите **«Подключить»**. Адрес принимается только с https и только публичный: адреса внутренней сети запрещены. 3. Доска покажет секрет подписи. Скопируйте его сразу — повторно он не показывается. Затем нажмите **«Я сохранил секрет»**. 4. Нажмите **«Проверить»**, чтобы отправить пробный запрос. Доска покажет, что ответил приёмник. 5. Выберите события: настройки уведомлений → канал «Вебхук» → в поле «Мост» выберите мост → включите события → **«Сохранить события»**. Пока события не выбраны, на вебхук ничего не уходит. События выбираются для каждого моста отдельно: у двух мостов одного человека может быть разный набор. | Кнопка | Что делает | |---|---| | Сохранить адрес | Меняет адрес вебхука | | Перевыпустить секрет | Выдаёт новый секрет. Прежний перестаёт действовать сразу — приёмник надо перенастроить | | Отключить | Удаляет адрес и секрет. Уведомления на вебхук перестают уходить | ### Что приходит Тело запроса — JSON с полями: | Поле | Что в нём | |---|---| | `notificationId` | Идентификатор уведомления | | `type` | Тип события, например `task.commented` | | `title` | Ключ и название задачи: `КЛЮЧ-1: Название` | | `taskId` | Идентификатор задачи | | `projectId` | Идентификатор проекта | | `url` | Ссылка на задачу | | `createdAt` | Когда случилось событие | Текста комментария в запросе нет. Его читают по ссылке, в самой доске. Подпись лежит в заголовке `X-QW-Signature` в виде `sha256=<подпись>`. Это HMAC-SHA256 от тела запроса, ключ — секрет вебхука. Приёмник проверяет подпись и отбрасывает запросы, где она не сошлась. ### Ответ приёмника | Ответ | Что делает доска | |---|---| | 2xx | Уведомление доставлено | | 429, 5xx, нет ответа | Повторяет позже | | Остальные коды | Больше не повторяет | ::: warning Повторы Повторная отправка может прийти на приёмник, который уже принял это уведомление. Отбрасывайте дубли по `notificationId`. ::: Действие, которое мост совершил сам, на его вебхук не приходит. ## Если доставка не удалась Если Telegram, почта или вебхук временно недоступны, доска повторяет отправку: через минуту, 5 минут, 15 минут и час — всего до пяти попыток. Под колокольчиком уведомление есть в любом случае. --- # Стадии Как устроены наборы стадий, что настраивается у каждой стадии и как набор связан с проектом. Как задача проходит стандартные стадии, описано в разделе [«Как задача идёт по стадиям»](./workflow.md). ## Наборы стадий Стадии собраны в наборы. Проект работает по одному набору, а один набор может обслуживать несколько проектов. Колонки доски проекта — это стадии его набора. Наборы живут во вкладке **Настройки → Стадии**. Вкладку видит тот, у кого есть право создавать, менять или удалять наборы стадий. В новой доске есть «Стандартный набор» с пометкой «Встроенный». Его нельзя удалить, и у него нельзя сменить ключ. Стадии и их настройки в нём правятся, как в любом другом наборе. ### Создать набор Нажмите **«Добавить набор стадий»** и заполните форму: | Поле | Что указать | |---|---| | Название | Обязательно, не должно повторять название другого набора | | Ключ | Обязателен. 2–32 символа: строчные латинские буквы, цифры, «-» и «_», начинается с буквы или цифры | | Описание | Необязательно | | Скопировать стадии из | Набор-образец. «Не копировать» — набор создастся пустым | Копия переносит стадии образца вместе со всеми настройками. Дальше наборы живут независимо: правка копии не трогает образец. После создания сразу открывается список стадий нового набора. ### Список наборов У каждого набора в списке три кнопки: - карандаш — сменить название, ключ и описание набора; - стрелка — открыть стадии набора; - корзина — удалить набор. Удалить можно только набор, который не назначен ни одному проекту. ## Стадии набора Стадии идут в списке в том же порядке, что и колонки на доске. Порядок меняется перетаскиванием. Под названием стадии видно, кто может перевести на неё задачу. Отметки рядом с названием показывают служебные стадии: «Начальная», «Старт», «Финальная». Новая стадия — кнопка **«Добавить стадию»**, она встаёт в конец списка. Изменить стадию — карандаш, удалить — корзина. ::: warning Правка набора действует сразу во всех его проектах Набор общий для всех проектов, которым он назначен. Если правило нужно поменять только для новых проектов, создайте для них отдельный набор копией. ::: ### Порядок стадий От порядка зависит, куда агент отправит задачу после своего хода: - **«Работа принята»** — на следующую стадию в списке; - **«Работа не принята»** — назад, на ближайшую предыдущую стадию, где работает исполнитель. Если следующей стадии нет или вернуть задачу некуда, она остаётся на месте и ждёт решения человека. ## Настройки стадии | Поле | Что задаёт | |---|---| | Ключ | Обязателен, правила те же, что у ключа набора. Уникален внутри набора | | Название | Обязательно, уникально внутри набора | | Описание | Видно в шапке колонки на доске | | Цвет | Цвет колонки и отметки стадии | | Кто переводит на стадию | Какие участники задачи могут перевести её на эту стадию. Нужна хотя бы одна роль | | Кто работает на стадии | Чья это стадия: ревизора, исполнителя или оператора | | Таймаут стадии, сек | Сколько длится один ход агента. У новой стадии — 1800 секунд | | Попыток | Сколько раз доска запустит агента, если запуск сорвался. У новой стадии — 3 | | Требует подтверждения человеком | Решение агента ждёт подтверждения, см. ниже | | Инструкция стадии | Текст, который получает агент на этой стадии | Сохранить стадию нельзя без названия, без роли в «Кто переводит на стадию» и без роли в «Кто работает на стадии». ### Кто переводит на стадию В списке можно отметить «Ревизор», «Исполнитель» и «Оператор». Ревизора и исполнителя вместе выбрать нельзя: на стадию переводит либо одна сторона, либо другая. Создатель и оператор задачи могут перевести её на любую стадию вручную, даже если их роли нет в списке. Пока агент работает над задачей, вручную её не перевести. ### Кто работает на стадии Если в этой роли у задачи агент, доска запускает его на стадии. Если роль у человека или не назначена, агент не запускается и задача ждёт, пока человек сделает свой ход. Подробнее — в разделе [«Когда на стадии человек»](./workflow.md#когда-на-стадии-человек). На стадии работает только одна роль. Если нужен ход другой роли, заведите для него отдельную стадию. ### Служебные стадии Три отметки делают стадию служебной: | Отметка | Что значит | |---|---| | Начальная | Сюда попадает новая задача. В новой доске это «Бэклог» | | Старт работы агента | Сюда задача переходит при запуске: по времени из «Запустить в» или из очереди. С входа в неё начинается отсчёт фактического времени. В новой доске это «К запуску» | | Конечная | Задача на ней закрыта. В новой доске это «Готово» | Каждая отметка бывает только у одной стадии набора: если отметить другую стадию, отметка с прежней снимется. В наборе, который назначен проекту, начальная и конечная стадии обязательны. ### Согласование человеком Если включено «Требует подтверждения человеком», решение агента на этой стадии не выполняется сразу. В карточке задачи появляется запрос в «Согласованиях», и задача ждёт, пока человек его одобрит или отклонит. В очереди «Авто» подтверждение пропускается. Как выглядит запрос и кто его решает, описано в разделе [«Согласования»](./workflow.md#согласования). ### Попытки агента Запуск срывается, если агент упал или не уложился в «Таймаут стадии, сек». Тогда доска запускает агента снова, пока не кончатся попытки из поля «Попыток». Когда попытки кончились, задача останавливается и ждёт человека. Какая сейчас попытка, видно в секции «Запуски» карточки задачи: «Попытка 2/3». ### Удалить стадию Начальную и конечную стадию удалить нельзя: кнопка неактивна. Не удалится и стадия с отметкой «Старт работы агента». Нельзя удалить и стадию, на которой стоят задачи или на которую ссылаются согласования задач. ## Стандартный набор Так настроены стадии «Стандартного набора» в новой доске: | Стадия | Кто работает | Кто переводит на стадию | Попыток | Таймаут, сек | Подтверждение | |---|---|---|---|---|---| | Бэклог | Ревизор | Ревизор, Оператор | 3 | 1800 | нет | | К запуску | Исполнитель | Ревизор | 1 | 900 | нет | | План | Ревизор | Исполнитель | 2 | 1800 | да | | В работе | Исполнитель | Ревизор | 3 | 3600 | нет | | Проверка | Ревизор | Исполнитель | 1 | 900 | да | «Бэклог» — начальная стадия, «К запуску» — старт работы агента. «Готово» — конечная стадия: на ней задача закрыта, перевести на неё может ревизор. ## Набор стадий проекта Набор выбирают при создании проекта, в поле «Набор стадий». По умолчанию подставляется «Стандартный набор». Подробнее — в разделе [«Создать проект»](./board.md#создать-проект). ::: warning Набор проекта не меняется После создания проекта сменить его набор стадий нельзя. Выберите нужный набор сразу. ::: Какой набор у проекта, видно в карточке проекта, на вкладке «Данные проекта», в строке «Набор стадий». Если у вас есть доступ к настройкам стадий, название набора — ссылка: она открывает стадии этого набора. --- # Типы задач Тип задачи задаёт поля постановки: что нужно заполнить при создании задачи. Здесь — какие типы есть в новой доске и как завести свой. ## Где настраиваются Типы живут во вкладке **Настройки → Типы задач**. Вкладку видит тот, у кого есть право создавать, менять или удалять типы задач. Типы собраны в наборы. Набор типов выбирают при создании проекта, в поле «Набор типов», см. [«Создать проект»](./board.md#создать-проект). Вкладка показывает типы проекта, выбранного на доске в «Фильтрах». ::: warning Правка типа действует во всех проектах с тем же набором Новый тип добавляется в набор типов проекта, а правка меняет тип в этом наборе. Все проекты, которые работают по этому набору, видят изменения сразу. ::: ## Типы новой доски | Тип | Для чего | Поля постановки | |---|---|---| | Исследование | Разобраться в вопросе и дать ответ | «Описание» (обязательно), «Формат результата» | | Багфикс | Что-то на сайте работает не так, как должно | «Что сломалось», «Где (ссылка на страницу)», «Как воспроизвести», «Как должно быть» (все обязательны), «Скриншоты, видео» | | Фича | Новая функциональность сайта | «Предпосылки (какую бизнес-задачу решает)» (обязательно), «Референсы», «Как должно работать» (обязательно) | В поле «Формат результата» три варианта: «Запись в БЗ и отчёт комментарием», «Документ», «Таблица». ## Создать тип Нажмите **«Добавить тип задачи»**. Откроется форма типа: | Поле | Что указать | |---|---| | Ключ | Обязателен. 2–32 символа: строчные латинские буквы, цифры, «-» и «_», начинается с буквы или цифры | | Название | Обязательно. Под ним тип виден в форме новой задачи | | Описание | Необязательно | | Тип активен | Можно ли ставить задачи этого типа | Ключ и название не должны повторять другой тип в том же наборе. Ниже идут поля постановки, см. следующий раздел. Сохраняется тип кнопкой **«Сохранить»**. Без хотя бы одного поля тип не сохранится: «Добавьте хотя бы одно поле типа задачи». Изменить тип — карандаш в списке типов. Откроется та же форма. ## Поля постановки Поле добавляет кнопка **«Добавить поле»**. У каждого поля: - **«Ключ»** — внутреннее имя поля. Обязателен и не должен повторяться внутри типа; - **«Название»** — подпись поля в форме задачи. Обязательно; - **вид поля** — список под названием, см. таблицу; - **«Обязательное»** — без этого поля задачу не создать; - корзина — удалить поле. | Вид | Что вводят в задаче | |---|---| | Строка | Одна строка текста | | Многострочный текст | Несколько абзацев | | Ссылка | Адрес страницы | | Число | Число, можно дробное | | Дата | Дату, с календарём | | Выбор из списка | Один вариант из списка | | Пользователь | Человека из списка | | Файлы | Файлы. Их можно перетащить в поле мышью | Для вида «Выбор из списка» появится поле «Варианты через |»: перечислите варианты через вертикальную черту, например `Документ|Таблица`. Ключи `key`, `title`, `description`, `deadline`, `tags`, `plan_hours`, `priority`, `type_id` и `stage_id` заняты встроенными полями задачи, полю их дать нельзя. Поля постановки агент получает вместе с задачей: это и есть описание того, что нужно сделать. Отдельного поля «Описание» у задачи нет. ## Выключить и удалить тип Если тип больше не нужен, снимите «Тип активен». Выключенный тип не предлагается в новых задачах, а старые задачи этого типа остаются как есть. Выключить тип можно, только когда все его задачи закрыты. Выключенный тип остаётся в списке типов с отметкой «Выключен». Чтобы вернуть его, откройте тип и снова отметьте «Тип активен». Корзина в списке удаляет тип. Удалить можно только тип, у которого нет ни одной задачи, даже закрытой. Иначе доска ответит: «Тип задачи используется — его нельзя удалить». --- # Приоритеты Приоритет показывает, насколько задача важна. Список приоритетов общий для всех проектов доски и настраивается во вкладке **Настройки → Приоритеты**. ## Приоритеты новой доски | Приоритет | Цвет | |---|---| | Низкий | серый | | Обычный | синий | | Высокий | оранжевый | | Срочный | красный | Новой задаче по умолчанию ставится «Обычный». ## Где виден приоритет - в поле «Приоритет» формы новой задачи и в «Карточке» задачи; - отметкой с названием и цветом на карточке на доске; - цветной полосой у края строки в «Обзоре»; - в «Фильтрах»: поле «Приоритеты» и сортировка по приоритету. ## Создать и изменить приоритет Вкладку видит тот, у кого есть право настраивать приоритеты. Новый приоритет — кнопка **«Добавить приоритет»**, он встаёт в конец списка. Изменить — карандаш, удалить — корзина. Порядок меняется перетаскиванием. Порядок в списке задаёт важность: чем ниже приоритет в списке, тем он важнее. По нему работает сортировка «Приоритет: высокий → низкий» в «Фильтрах». | Поле | Что указать | |---|---| | Ключ | Обязателен. 2–32 символа: строчные латинские буквы, цифры, «-» и «_», начинается с буквы или цифры | | Название | Обязательно, не должно повторять другой приоритет | | Цвет | Цвет отметки на карточке и полосы в «Обзоре» | Ключ приоритета не должен повторяться. ::: warning Используемый приоритет Если приоритет стоит хотя бы у одной задачи, даже закрытой, его нельзя удалить и нельзя сменить ему ключ. Название и цвет менять можно всегда. ::: --- # Шаблоны доступа Шаблон доступа — именованный набор прав. Здесь — какие права бывают, какие шаблоны есть в новой доске и как их менять. ## Что такое шаблон доступа Права на доске выдаются только шаблоном: отдельной галочки «право человеку» нет. Человеку привязывают шаблон, и он получает всё, что в шаблоне отмечено. Шаблоны бывают двух охватов: | Охват | Что даёт | Где привязывается | |---|---|---| | Права на установку | Работу с пользователями, проектами, справочниками и настройками всей доски | При добавлении человека или в его профиле, поле «Права на установку» | | Права на проект | Работу внутри проекта: задачи, очереди, стадии, участники | При добавлении человека («Доступ к проектам») или на вкладке «Участники» проекта | Общие шаблоны собраны на вкладке **Настройки → Шаблоны доступа**. Её видит тот, у кого есть право «Шаблоны доступа → Правка шаблонов». Для агентов есть свои шаблоны — маски. Они хранятся в профиле владельца, см. [«Агенты»](./agents.md#доступ-агента). ## Шаблоны новой доски | Шаблон | Охват | Что даёт | |---|---|---| | Администратор | Установка | Все права на пользователей, проекты, наборы стадий, типы задач, приоритеты, шаблоны, интеграции и настройки установки | | Руководитель | Установка | Создание, изменение и архивация проектов | | Сотрудник | Установка | Прав на установку нет | | Владелец проекта | Проект | Все права в проекте | | Ответственный | Проект | Всё, кроме ведения состава, изменения настроек проекта, стадий и правки типов задач | | Оператор | Проект | Просмотр, очереди, создание и комментирование задач, пауза задач, управление ранами, подтверждение human-gate | | Участник | Проект | Просмотр, создание и комментирование задач | | Наблюдатель | Проект | Просмотр и комментирование | Встроенные шаблоны помечены «Встроенный». Их можно править, но нельзя удалить. Тот, кто создаёт проект, получает в нём шаблон «Владелец проекта». ## Права на установку | Группа | Права | |---|---| | Пользователи | Создание, Изменение, Удаление, Блокировка, Смена пароля | | Проекты | Создание, Изменение, Архивация, Удаление | | Наборы стадий | Создание набора, Изменение набора, Удаление набора | | Типы задач | Создание типа, Изменение типа, Удаление типа | | Приоритеты | Правка списка | | Шаблоны доступа | Правка шаблонов | | Интеграции | Настройка интеграций | | Настройки установки | Правка настроек | «Правка настроек» открывает вкладки «Шаблоны писем», «Запуски», «Telegram» и «Хранилище» в разделе «Настройки». ## Права на проект | Группа | Права | |---|---| | Проект | Просмотр, Изменение настроек | | Участники | Ведение состава | | Стадии проекта | Создание стадии, Изменение стадии, Удаление стадии | | Типы задач | Правка типов задач | | Очереди | Управление очередями, Пауза очереди | | Задачи | Создание, Комментирование, Правка чужих, Удаление чужих, Перевод стадии чужих, Смена ревизора и исполнителя, Срок, приоритет, оценка, Разрешение спора, Пауза задач | | Раны | Управление ранами | | Human-gate | Подтверждение human-gate | Без права «Просмотр» остальные права проекта не работают, поэтому доска отмечает его сама. Так же «Пауза очереди» тянет за собой «Управление очередями». ## Создать и изменить шаблон На вкладке **Настройки → Шаблоны доступа** нажмите **«Добавить шаблон установки»** или **«Добавить шаблон проекта»**. Откроется окно «Новый шаблон доступа»: укажите «Название» и отметьте права. Галочка у группы отмечает все её права. У каждого шаблона в списке видны его права и число привязанных людей. Править — кнопка «Изменить шаблон». ::: tip Перед сохранением видно, кого заденет правка Правка шаблона меняет доступ всем, к кому он привязан. Окно покажет, сколько людей затронет изменение и кто они, а также что «Добавится» и что «Отберётся». ::: Шаблон не может дать больше прав, чем есть у вас самих. Иначе доска ответит: «Шаблон даёт больше прав, чем есть у вас самих.» ### Удалить шаблон Кнопка «Удалить шаблон». Шаблон, к которому привязаны люди, удалить нельзя: сначала переведите их на другой шаблон. ## Назначить шаблон пользователю - **Права на установку** — при добавлении человека или в его профиле, поле «Права на установку». См. [«Пользователи и роли»](./users.md#права-на-установку). - **Права на проект** — при добавлении человека в блоке «Доступ к проектам» или на вкладке «Участники» проекта, колонка «Доступ». См. [«Пользователи и роли»](./users.md#участники-проекта). Привязать человеку шаблон, который даёт больше прав, чем есть у вас, нельзя. --- # Шаблоны писем Какие письма отправляет доска и как поменять вид писем-уведомлений. ## Почтовый сервер Почтовый сервер (SMTP) задаётся при установке доски, в конфигурации сервера. В интерфейсе его настроек нет. Если почта не настроена, доска не отправляет писем: ни уведомлений, ни приглашений, ни ссылок для смены пароля. ## Какие письма отправляет доска | Письмо | Когда приходит | |---|---| | Уведомление о событии | Событие в задаче, если для вас включён канал «Почта» — см. [«Уведомления»](./notifications.md) | | QueueWarden: приглашение | Вас пригласили в доску. Ссылка сработает один раз | | QueueWarden: восстановление пароля | Вы запросили новый пароль. Ссылка действует 30 минут и сработает один раз | | QueueWarden: доступ администратора | Для вас развёрнута новая доска. Ссылка для пароля действует 7 дней | Уведомления приходят на почту из профиля. Тема письма — название события, ключ и название задачи. В письме — текст события и ссылка «Открыть задачу». Менять можно только письма-уведомления. Приглашение, восстановление пароля и доступ администратора всегда приходят в стандартном виде. ## Изменить шаблон Шаблоны загружаются на вкладке **Настройки → Шаблоны писем**. Её видит тот, у кого есть право «Настройки установки → Правка настроек». Шаблон — HTML-файл, свой для каждого события. 1. В поле «Событие» выберите событие. 2. Нажмите **«Выбрать HTML»** и выберите файл `.html` или `.htm` размером до 256 КБ. 3. Нажмите **«Загрузить шаблон»**. Загруженный шаблон появится в списке ниже. Если для события уже был шаблон, новый его заменит. Для событий без шаблона письмо собирается в стандартном виде. Чтобы вернуть стандартное письмо, удалите шаблон кнопкой с корзиной в его строке. ### Подстановки В шаблон можно вставить данные события. Доска заменит их при отправке: | Подстановка | Что вставится | |---|---| | `{{event}}` | Название события, например «Добавлен комментарий» | | `{{title}}` | Ключ и название задачи: `КЛЮЧ-1: Название` | | `{{taskKey}}` | Только ключ задачи | | `{{body}}` | Текст уведомления, например текст комментария | | `{{url}}` | Ссылка на задачу | Значения вставляются как обычный текст: разметка внутри них не сработает. Неизвестная подстановка останется в письме как есть. ::: tip Пример ```html

{{event}}

{{title}}

{{body}}

Открыть задачу

``` ::: Тему письма шаблон не меняет. --- # Запуски Сколько агентов может работать одновременно: общий лимит доски, лимит проекта и предел тарифа. ## Одновременные запуски Каждый ход агента по задаче — это запуск. Сколько запусков идёт одновременно во всей доске, задаёт лимит во вкладке **Настройки → Запуски**. Вкладку видит тот, у кого есть право «Настройки установки → Правка настроек». | Поле | Что задаёт | |---|---| | Без ограничений | Лимита нет, запуски стартуют, как только их есть кому взять | | Одновременных запусков | Целое число от 1 до 10000. Поле доступно, когда «Без ограничений» снято | Сохраните лимит кнопкой **«Сохранить»**. Запуск сверх лимита ждёт в очереди и стартует сам, когда освободится слот. Запуск, отменённый до старта, не стартует. Слот занят, пока агент работает, в том числе пока он ждёт ответа на свой вопрос. Запуск, который ждёт старта или повтора, слот не занимает. ### Сколько слотов занято В шапке доски всем видна отметка «Слоты 2/5»: сколько слотов занято из скольких. Если запуски ждут старта, к ней добавляется число ждущих: «Слоты 5/5, ждут 3». Без лимита отметка выглядит так: «Слоты 2/∞». Если запуски стоят по одной из причин ниже, отметка подсвечивается, а причина видна в подсказке: - **«Ждёт свободного слота»** — все слоты заняты, запуск стартует, когда какой-то закончится; - **«Нет доступного runner-а»** — слоты есть, но ни один runner не на связи. Запуск стартует, когда runner подключится. Та же строка со слотами и причиной есть и во вкладке «Запуски». ## Лимит проекта У проекта может быть свой лимит: поле «Параллельных запусков» в карточке проекта, на вкладке «Данные проекта». Он ограничивает запуски только этого проекта, внутри общего лимита. Пустое поле — у проекта своего лимита нет, действует общий. Лимит проекта не может быть выше общего лимита доски. Подробнее о карточке проекта — в разделе [«Меню и проекты»](./board.md#карточка-проекта). ## Лимит тарифа Тариф может ограничивать число одновременных запусков. Тогда во вкладке «Запуски» видна строка «Ограничение тарифа: не больше N одновременных запусков. Лимит можно снизить, но не поднять выше.» При таком ограничении: - «Без ограничений» выбрать нельзя; - в поле «Одновременных запусков» не ввести число больше предела тарифа. --- # Telegram Как подключить к доске бота Telegram, открыть доску в мини-приложении и получать уведомления в Telegram. ## Бот доски У доски один общий бот. Через него работает вход в мини-приложение, и он присылает уведомления в личные сообщения тем, у кого нет своего бота. Подключается он на вкладке **Настройки → Telegram**. Её видит тот, у кого есть право «Настройки установки → Правка настроек». 1. Создайте бота у @BotFather командой `/newbot`. 2. Вставьте выданный токен в поле «Токен бота». 3. Нажмите **«Сохранить»**. Изменения действуют сразу. После подключения доска покажет «Подключён бот @имя_бота» и поставит боту кнопку меню, которая открывает мини-приложение. ::: warning Кнопка меню не встала Если Telegram не принял кнопку меню, доска покажет причину и адрес мини-приложения. Адрес мини-приложения должен быть на https. Кнопку можно указать у @BotFather вручную, этим адресом. ::: Чтобы заменить бота, введите новый токен и сохраните. Сохранённый токен доска не показывает. Кнопка **«Отключить»** отключает бота: вход в мини-приложение и уведомления через общего бота перестают работать. ## Мини-приложение Мини-приложение — та же доска, открытая внутри Telegram. Открывается кнопкой меню бота доски. Работает только в клиенте Telegram, в обычном браузере не откроется. ### Привязать Telegram При первом входе мини-приложение попросит связать Telegram с учётной записью доски: 1. Откройте мини-приложение кнопкой меню бота. 2. Введите «Почта или логин» и «Пароль» от доски. 3. Если доска просит согласие на передачу данных в Telegram, отметьте его. 4. Нажмите **«Войти и связать»**. Дальше вход в мини-приложение автоматический, без пароля. Привязать Telegram может только сам человек: согласие на передачу данных даёт он. Привязанный аккаунт виден в профиле, в поле «Telegram». Отвязать его можно там же: кнопка с крестиком «Отвязать Telegram». После этого вход через этот Telegram перестаёт работать. ::: info Если вход не проходит Мини-приложение покажет причину и кнопку повтора. Чаще всего помогает закрыть его и открыть заново из меню бота: строка входа от Telegram действует около пяти минут. ::: ## Уведомления в Telegram Уведомления от бота доски приходят в личные сообщения, если: - Telegram привязан к вашей учётной записи — см. [«Привязать Telegram»](#привязать-telegram); - вы нажали «Старт» у бота доски; - вы дали согласие на передачу данных, если доска его запрашивает; - канал Telegram включён для нужных событий — см. [«Уведомления»](./notifications.md#настроить-уведомления). ::: tip Согласие Если Telegram привязан, а согласия нет, профиль покажет: «Уведомления в Telegram не отправляются, пока вы не дадите согласие на передачу данных.» Отметьте согласие и нажмите **«Дать согласие»**. ::: В сообщении — название события, ключ и название задачи и ссылка на неё. Текста комментария в сообщении нет: его читают по ссылке, в самой доске. ## Свой бот Вместо бота доски уведомления может присылать ваш собственный бот — например, в топик рабочей группы. 1. Откройте свои настройки уведомлений: **«Профиль»** → кнопка с колокольчиком «Настроить уведомления пользователя». 2. В поле «Канал» выберите «Telegram». Ниже появится блок «Telegram-бот». 3. Заполните поля: | Поле | Что указать | |---|---| | Токен бота | Токен вашего бота от @BotFather | | Chat ID | Чат, куда слать уведомления | | Thread ID | Топик в чате. Необязательно | 4. Нажмите **«Сохранить Telegram»**. Токен хранится зашифрованным и повторно не показывается. Чтобы сменить только чат или топик, оставьте поле «Токен бота» пустым. Бот должен иметь право писать в этот чат. Пока свой бот подключён и указан чат, уведомления в Telegram идут через него, а не через бота доски. Кнопка **«Отключить»** убирает своего бота. --- # Хранилище Где доска хранит файлы, сколько места им отведено и как подключить своё хранилище S3. Хранилище настраивается на вкладке **Настройки → Хранилище**. Её видит тот, у кого есть право «Настройки установки → Правка настроек». ## Что занимает место Место занимают файлы задач и комментариев, вложения ассистента и аватары пользователей. Вверху страницы видно, где сейчас лежат файлы и сколько места занято: - «Файлы хранятся на сервере установки, до 5 МБ на файл. Занято … из …» — своё хранилище не подключено; - «Файлы хранятся в вашем S3: бакет … на …» — подключено своё хранилище S3. ## Лимиты | | Без своего S3 | Со своим S3 | |---|---|---| | Размер файла | 5 МБ | Задаёте сами, по типу файла. Пока не задано — 5 МБ | | Общий объём | Квота установки, если она есть | Задаёте сами. Пока не задано — без ограничения | | Аватар | 500 КБ | 500 КБ | Если файл больше лимита, доска откажет ещё до загрузки и назовёт допустимый размер. Если место закончилось, доска предложит удалить ненужные файлы или подключить своё хранилище S3. ### Задать свои лимиты Свои лимиты задаются только при подключённом S3. Блок «Лимиты» появляется под настройками S3 после подключения. | Поле | Что указать | |---|---| | Общий объём, МБ | Сколько места можно занять в S3 всего | | Изображение, МБ на файл | jpg, png, gif, webp, svg, heic и другие картинки | | Документ, МБ на файл | pdf, doc, docx, xls, xlsx, ppt, pptx, odt, rtf, txt, md, csv и похожие | | Архив, МБ на файл | zip, rar, 7z, tar, gz и другие архивы | | Прочие файлы, МБ на файл | Всё остальное | Лимит — целое число мегабайт, на один файл — не больше 1024 МБ. Пустое поле «Общий объём, МБ» — без ограничения. Пустое поле размера файла — 5 МБ. Нажмите **«Сохранить»**. ## Своё хранилище S3 Подойдёт любое S3-совместимое хранилище. После подключения квота установки перестаёт действовать, а лимиты вы задаёте сами. ### Подключить В блоке «Своё хранилище S3» заполните поля: | Поле | Что указать | |---|---| | Адрес (endpoint) | Адрес хранилища вида `https://s3.example.com` — без пути, логина и пароля. Адреса внутренней сети не принимаются | | Бакет | Имя бакета: строчные латинские буквы, цифры, точки и дефисы | | Регион | Регион хранилища, например `us-east-1`. Латинские буквы, цифры и дефисы | | Ключ доступа (Access Key ID) | Ключ доступа к хранилищу | | Секретный ключ | Секретный ключ к нему | Флажок «Адресация бакета через путь (path-style)» включён по умолчанию. Он нужен MinIO и большинству S3-совместимых хранилищ. Нажмите **«Проверить и сохранить»**. Доска сделает проверочную запись в хранилище. Если запись не прошла, она покажет ответ S3, и ничего не сохранится. Сохранённый секретный ключ доска не показывает. Чтобы поменять другие поля, оставьте поле «Секретный ключ» пустым. Если меняете «Ключ доступа (Access Key ID)», введите и новый секретный ключ. ### Перенос файлов Файлы, загруженные до подключения, переносятся в S3 сами, в фоне. Пока перенос идёт, на странице видно, сколько файлов осталось. Новые файлы сразу сохраняются в S3. ### Отключить Кнопка **«Отключить S3»**. После отключения: - файлы, которые лежат в S3, становятся недоступны; - новые файлы сохраняются на сервер установки в пределах квоты. ::: warning Файлы из S3 пропадут из доски Отключение не переносит файлы обратно на сервер. Они снова станут доступны, когда вы подключите S3 заново. ::: --- # Как работает runner Что такое runner, где и от чьего имени работают агенты, как runner связан с доской и сколько задач он ведёт одновременно. ## Что делает runner Runner — программа `qw` на вашем компьютере или сервере. Через неё агенты доски выполняют задачи. Доска сама агентов не запускает: без runner задача ждёт в очереди. Runner работает постоянно: 1. Ждёт запуск для одного из ваших агентов. 2. Забирает его и запускает CLI агента: Claude Code, Codex или OpenCode, — тот, что указан у агента на доске. Вместе с CLI берутся модель, аккаунт и режим разрешений агента. 3. Передаёт агенту задание стадии: постановку задачи и новые комментарии. 4. Пока агент работает, сообщает доске о ходе запуска и расходе токенов. 5. Снова ждёт следующий запуск. На время запуска агент получает доступ к доске: читает задачу, пишет комментарии, сдаёт результат. Доступ выдаётся на один запуск и заканчивается вместе с ним. Установка — на страницах [«Runner на Linux»](./runner-linux.md), [«Runner на Windows»](./runner-windows.md) и [«Runner на удалённом сервере»](./runner-server.md). ## Где работают агенты Агент работает прямо на машине runner как обычная сессия пользователя, от имени которого запущен runner. Ему доступно то же, что вам в терминале: - домашний каталог и файлы этого пользователя; - настройки CLI: для Claude Code — `~/.claude` с `CLAUDE.md`, скиллами и хуками, для Codex — `~/.codex`, настройки OpenCode; - MCP-серверы, подключённые в CLI. Сервер доски добавляется к ним сам; - ключи SSH и доступ к git-репозиториям. Из окружения агента убираются только переменные самого runner. Если агенту назначен аккаунт, убираются ещё ключи провайдеров, чтобы они не перебили вход в аккаунт. ::: warning Доступ агента = доступ пользователя Что агенту можно, определяет пользователь, от имени которого работает runner. На своём компьютере это вы. На общей машине или сервере заведите для runner отдельного пользователя, которому доступны только нужные репозитории, файлы и ключи. ::: У каждой задачи свой рабочий каталог на машине runner. Он сохраняется между стадиями и повторными запусками: следующий запуск видит то, что оставил предыдущий. Каталог убирается, когда задача закрыта. Рабочие каталоги и журналы запусков лежат рядом с настройками runner: | Система | Каталог | |---|---| | Linux | `~/.config/queuewarden/installations/` | | Windows | `%APPDATA%\queuewarden\installations\` | ## Изоляция По умолчанию изоляции нет: агент работает так, как описано выше. Это сделано намеренно: агенту нужны те же настройки CLI, MCP-серверы и ключи, что и вам. Изоляцию включают, когда пользователь runner видит больше, чем положено агентам. Например, если на машине работают агенты разных людей. Тогда каждый запуск получает одноразовый домашний каталог и песочницу. Писать агент может только в каталог задачи и этот одноразовый каталог, остальной файловой системы для него нет, а CLI видит только MCP-сервер доски. Изоляция включается флагом `--isolation`. Для фонового runner его указывают при включении автозапуска, для запуска в терминале — у `qw run`: ```sh qw autostart enable --isolation auto # фоновый runner qw run --isolation auto # runner в терминале ``` Значение из `qw autostart enable` запоминается, и `qw run` без флага берёт его же. | Значение | Что делает | |---|---| | `none` | без изоляции, по умолчанию | | `auto` | Linux: пробует `bubblewrap`, затем `systemd`, берёт первый, который работает | | `bubblewrap` | Linux: песочница bubblewrap, самая строгая | | `systemd` | Linux: временная служба systemd с ограничениями доступа к файлам | | `appcontainer` | Windows: AppContainer, экспериментально | Если изоляция включена, но ни одна песочница не прошла проверку, runner не запускается. Молча работать без изоляции он не станет. Что нужно для bubblewrap — на странице [«Runner на Linux»](./runner-linux.md#изоляция-через-bubblewrap). ## Подключение к доске Runner подключается к доске под вашей учётной записью. При подключении вы вводите логин и пароль, runner получает собственный ключ доступа, а пароль не сохраняет. Подключить можно только доску по HTTPS. Runner выполняет только задачи **ваших** агентов: тех, что в вашем профиле в блоке «Агенты пользователя». Задачи агентов другого человека выполняет runner этого человека, со своими аккаунтами моделей. Подробнее — на странице [«Аккаунты моделей»](./accounts.md). Runner сообщает доске, какие CLI и аккаунты на машине готовы к работе. Запуск агента достаётся runner, у которого есть нужный CLI, а если агенту назначен аккаунт — этот аккаунт. Сколько runner сейчас на связи, видно в шапке доски. Свои runner и их аккаунты — в **Профиль** → «Аккаунты движков»: рядом с именем runner стоит «на связи» или «не на связи». ### Несколько машин и досок - **Несколько машин.** Поставьте runner на каждую и подключите к доске под своей учётной записью. Запуски ваших агентов распределятся между ними. - **Несколько досок.** Один runner обслуживает несколько досок сразу. Подключите ещё одну командой `qw connect`: первым идёт имя подключения, латиницей. ```sh qw connect work --server https://board.example.com qw connections # список подключённых досок qw disconnect work # отозвать подключение work ``` `qw disconnect` спрашивает подтверждение. В скриптах его пропускает флаг `--yes`. При отзыве ключ runner на доске перестаёт действовать, рабочие файлы остаются на машине. Подключения можно добавлять и отзывать, не останавливая runner: он подхватит изменения сам. ## Одновременные запуски По умолчанию runner ведёт один запуск за раз. Каждый запуск — отдельный CLI агента со своей памятью и расходом токенов, поэтому больше одного запуска на машину ставьте с запасом по ресурсам. Сколько запусков вести одновременно, задаёт флаг `--concurrency` от 1 до 64. Число общее на все подключённые доски: ```sh qw autostart enable --concurrency 3 # фоновый runner qw run --concurrency 3 # runner в терминале ``` Как и изоляция, число из `qw autostart enable` запоминается и действует для `qw run` без флага. Сколько запусков идёт во всей установке, задаёт администратор доски — раздел [«Запуски»](./runs.md). Этот лимит главнее: runner не возьмёт запуск сверх него. Занятые и свободные слоты видны в шапке доски. ## Автозапуск Runner можно держать открытым в терминале или запускать в фоне: - **В терминале** — `qw run`. Runner работает, пока открыто окно. Остановка — Ctrl+C. - **В фоне** — автозапуск. Мастер настройки предлагает включить его последним шагом. Runner стартует сам при входе в систему, а на Linux — и после перезагрузки без входа. Управление автозапуском одинаковое на Linux и Windows: ```sh qw autostart enable # включить автозапуск qw autostart start # запустить в фоне сейчас qw autostart status # состояние и где журнал qw autostart stop # остановить фоновый runner qw autostart disable # отключить автозапуск qw autostart remove # убрать автозапуск совсем qw logs # последние строки журнала фонового runner qw logs -f # следить за журналом ``` `qw autostart` без слова открывает меню с теми же действиями. `enable` без флагов сохраняет прежние изоляцию и число запусков, по умолчанию это `none` и 1. `remove` останавливает фоновый runner и удаляет службу и копию программы, которую создал автозапуск. Подключения к доскам и аккаунты остаются. Проверить, что runner запущен и все подключения работают, — `qw status`, подробная проверка — `qw doctor`. `enable` не запускает runner сразу: для этого `start`. `disable` не останавливает работающий runner: для этого `stop`. Фоновый runner и `qw run` в терминале одновременно не работают — сначала остановите один, потом запускайте другой. Как это устроено на каждой системе — на страницах [«Runner на Linux»](./runner-linux.md) и [«Runner на Windows»](./runner-windows.md). ## Меню и команды `qw` без аргументов в терминале открывает меню: мастер настройки, подключение досок, вход в аккаунты, автозапуск. Список всех команд и версия runner: ```sh qw help qw version ``` --- # Runner на Linux Как установить runner на компьютер с Linux, пройти мастер настройки, включить автозапуск, обновить и удалить runner. Что такое runner — на странице [«Как работает runner»](./runner.md). ## Что понадобится - Linux x64. - Учётная запись на доске: логин и пароль. - CLI хотя бы одного агента: `claude`, `codex` или `opencode`. Если его нет, мастер покажет команду установки. Для неё нужен Node.js. - Для автозапуска — systemd. Runner ставится без `sudo` и работает от вашего пользователя. ## Скачать и запустить В доске откройте **Профиль** → «Подключить раннер» и нажмите **Скачать** у «Linux (x64)». Доска отдаёт runner своей версии. Сделайте файл исполняемым и запустите в терминале: ```sh chmod +x qw ./qw ``` При первом запуске открывается мастер настройки. Повторно его можно открыть в любой момент: ```sh ./qw setup ``` ::: tip qw или ./qw Мастер и подсказки runner пишут команды как `qw …`. Если файл не лежит в каталоге из `PATH`, запускайте его из папки, куда скачали: `./qw …`. ::: ## Мастер настройки Мастер задаёт вопросы прямо в терминале. Шагов четыре. ### 1. Доска Укажите адрес доски, например `https://board.example.com`, затем логин или почту и пароль. Пароль при вводе не отображается. Runner получит собственный ключ доступа, а пароль не сохранит. ### 2. Агенты Мастер ищет на компьютере `claude`, `codex` и `opencode` и аккаунты, в которые в них уже вошли. Дальше два пути: - **«Использовать имеющиеся»** — runner работает от тех же аккаунтов, что и вы в терминале. Задачи доски расходуют те же лимиты подписки. - **«Создать отдельные аккаунты»** — для runner заводится отдельный аккаунт модели. Мастер спросит движок и короткое имя аккаунта латиницей, покажет команду установки CLI и где зарегистрироваться. Когда аккаунт создан, выберите **«Да — войти»**: мастер запустит вход в CLI. Если аккаунта ещё нет, выберите **«Пока нет — закончу позже»** и вернитесь потом командой `./qw setup`. Подробнее про аккаунты — на странице [«Аккаунты моделей»](./accounts.md). ### 3. Аккаунты агентов Мастер назначает аккаунт каждому вашему агенту на доске. Если аккаунт один, он достаётся всем агентам. Если несколько, мастер спросит, какой кому. Если агентов на доске нет, мастер предложит создать одного. Затем для каждого CLI мастер спрашивает, что агенты могут делать без вопроса: | Вариант | Claude Code | Codex | OpenCode | |---|---|---|---| | «По умолчанию CLI» | как настроено в CLI | как настроено в CLI | как настроено в CLI | | «Правки файлов без вопроса» | правит файлы | — | — | | «Запись в рабочий каталог» | — | пишет в каталог задачи | — | | «Все инструменты без подтверждений (полный доступ этой учётки)» | всё без вопросов | всё без вопросов | всё без вопросов | ::: warning Без разрешений агент не правит файлы В задаче агенту некого спросить. С вариантом «По умолчанию CLI» Claude Code получает отказ на всё, чего нет в его списке разрешений, и ран проходит вхолостую. Подробнее — в разделе [«Агенты»](./agents.md). ::: С вариантом «Все инструменты без подтверждений» агент может всё, что может пользователь, под которым работает runner. Если это больше, чем положено агенту, включите [изоляцию](./runner.md#изоляция). Режим разрешений и аккаунт агента потом можно поменять на доске в форме агента. ### 4. Запуск Мастер спрашивает, запускать ли runner автоматически: - **«Да, включить автозапуск и запустить сейчас»** — runner уходит в фон, терминал можно закрыть. - **«Нет, запущу сам»** — запустите runner командой ниже и не закрывайте окно: ```sh ./qw run ``` Готово: поставьте задачу в «Основном проекте» — её возьмут ваши агенты. ## Автозапуск Автозапуск включает мастер или команда: ```sh ./qw autostart enable ./qw autostart start ``` `enable` делает три вещи: - копирует `qw` в `~/.local/share/queuewarden/runner/`; - создаёт пользовательскую службу systemd в `~/.config/systemd/user/`; - включает для вашего пользователя `loginctl enable-linger`, чтобы служба запускалась при загрузке и работала после выхода из системы. Если система не разрешает linger, runner скажет об этом: служба будет запускаться только при входе в систему. Включить linger может администратор машины: ```sh sudo loginctl enable-linger <пользователь> ``` Остальные команды — `status`, `stop`, `disable` — на странице [«Как работает runner»](./runner.md#автозапуск). Журнал фонового runner — в журнале systemd. Его показывает `qw logs`: ```sh ./qw logs # последние строки ./qw logs -f # следить за журналом ``` ::: tip Служба помнит PATH Служба запоминает пути поиска программ на момент `enable`. Если вы поставили CLI агента в новое место, остановите runner и выполните `qw autostart enable` ещё раз. ::: ## Изоляция через bubblewrap По умолчанию runner работает без изоляции, и bubblewrap не нужен. Он понадобится, если вы хотите запускать агентов в песочнице. Зачем это и как включается — в разделе [«Изоляция»](./runner.md#изоляция). Установите пакет: ```sh sudo apt install bubblewrap ``` Проверьте, что песочница работает на этой машине: ```sh ./qw --selftest --isolation bubblewrap ``` Команда пробует песочницу и печатает вердикт. Если проверка не прошла, runner с этой изоляцией не запустится. ::: warning Ubuntu 24.04 На Ubuntu 24.04 bubblewrap может падать с ошибкой `setting up uid map: Permission denied`. Системе нужен профиль AppArmor, который разрешает bubblewrap создавать пространства имён пользователей. ::: ## Обновление Автоматического обновления нет. Новую версию берите там же: **Профиль** → «Подключить раннер». Настройки, аккаунты и рабочие каталоги хранятся отдельно от файла `qw` и при обновлении сохраняются. Если включён автозапуск: ```sh ./qw autostart stop chmod +x qw ./qw autostart enable ./qw autostart start ``` Здесь `./qw` — новый скачанный файл. `enable` заменит им копию, из которой работает служба. Если runner запущен в терминале, остановите его через Ctrl+C, замените файл и запустите снова. ## Удаление 1. Уберите автозапуск. Команда остановит фоновый runner и удалит службу: ```sh ./qw autostart remove ``` 2. Отзовите подключения к доскам. Имена подключений покажет `./qw connections`: ```sh ./qw connections ./qw disconnect <имя> ``` 3. Удалите файлы runner: ```sh rm -rf ~/.local/share/queuewarden ~/.config/queuewarden ~/.queuewarden ``` В `~/.queuewarden` лежат аккаунты моделей, в которые входил runner. Ваши собственные профили CLI, например `~/.claude` или `~/.codex`, при этом не затрагиваются. В `~/.config/queuewarden` лежат рабочие каталоги задач: если в них осталось нужное, сохраните это до удаления. `remove` не выключает linger: на него могут опираться другие службы. Если он не нужен, выключите его командой `loginctl disable-linger`. --- # Runner на Windows Как установить runner на компьютер с Windows, пройти мастер настройки, включить автозапуск, обновить и удалить runner. Что такое runner — на странице [«Как работает runner»](./runner.md). ## Что понадобится - Windows x64. - Учётная запись на доске: логин и пароль. - CLI хотя бы одного агента: `claude`, `codex` или `opencode`. Если его нет, мастер покажет команду установки. Для неё нужен Node.js. Runner не требует прав администратора и работает от вашего пользователя Windows. ## Скачать и запустить В доске откройте **Профиль** → «Подключить раннер» и нажмите **Скачать** у «Windows (x64)». Доска отдаёт runner своей версии. Запустите `qw.exe` двойным щелчком. Если Windows предупредит о неизвестном издателе, нажмите **Подробнее** → **Выполнить в любом случае**. При первом запуске мастер настройки открывается в браузере. В окне консоли runner печатает адрес страницы: если браузер не открылся сам, скопируйте адрес туда. Не закрывайте окно консоли до конца настройки. Повторно мастер можно открыть из PowerShell в папке с файлом: ```sh .\qw.exe setup --web ``` ::: tip qw или .\qw.exe Мастер и подсказки runner пишут команды как `qw …`. В PowerShell запускайте их из папки, где лежит файл: `.\qw.exe …`. ::: ## Мастер настройки Вопросы те же, что на Linux, только на странице в браузере: доска, агенты, аккаунты агентов и автозапуск. Что значит каждый вариант — в разделе «Мастер настройки» на странице [«Runner на Linux»](./runner-linux.md). Отличие одно: вход в аккаунт модели тоже идёт на странице. Мастер показывает ссылку, а иногда и код. Откройте ссылку, войдите под аккаунтом для runner и введите код или вставьте код со страницы входа обратно в мастер. Для OpenCode мастер спросит провайдера и его ключ API. ::: warning Новые программы видны только новым окнам Если вы поставили Node.js или CLI агента, пока мастер открыт, мастер их может не найти. Закройте окно консоли и запустите `qw.exe` снова. ::: ## Автозапуск Автозапуск включает мастер последним шагом или команды: ```sh .\qw.exe autostart enable .\qw.exe autostart start ``` `enable` копирует `qw.exe` в `%LOCALAPPDATA%\QueueWarden\runner\` и создаёт задачу в Планировщике заданий Windows. Задача запускает runner в скрытом окне через 15 секунд после вашего входа в систему. Если runner упал, Планировщик перезапустит его до трёх раз с паузой в минуту. Runner работает, пока вы вошли в Windows. После перезагрузки он ждёт вашего входа. Остальные команды — `status`, `stop`, `disable` — на странице [«Как работает runner»](./runner.md#автозапуск). `stop` дожидается, пока runner мягко завершит текущие запуски. `.\qw.exe autostart status` печатает имя задачи, её папку и состояние. Последние строки журнала показывает `.\qw.exe logs`. Сам журнал фонового runner — в этой папке, файлы `stdout.log` и `stderr.log`. При каждом старте прошлые журналы переименовываются в `stdout.log.previous` и `stderr.log.previous`. ## Обновление Автоматического обновления нет. Новую версию берите там же: **Профиль** → «Подключить раннер». Настройки, аккаунты и рабочие каталоги хранятся отдельно от `qw.exe` и при обновлении сохраняются. Если включён автозапуск, выполните в PowerShell в папке с новым файлом: ```sh .\qw.exe autostart stop .\qw.exe autostart enable .\qw.exe autostart start ``` `enable` заменит новым файлом копию, из которой работает задача Планировщика. Если runner запущен в консоли, остановите его через Ctrl+C, замените файл и запустите снова. ## Удаление 1. Уберите автозапуск. Команда остановит фоновый runner, удалит задачу Планировщика и копию runner: ```sh .\qw.exe autostart remove ``` 2. Отзовите подключения к доскам. Имена подключений покажет `.\qw.exe connections`: ```sh .\qw.exe connections .\qw.exe disconnect <имя> ``` 3. Удалите папки runner: - `%APPDATA%\queuewarden` — настройки, рабочие каталоги задач и журналы запусков; - `%USERPROFILE%\.queuewarden` — аккаунты моделей, в которые входил runner; - `%LOCALAPPDATA%\QueueWarden` — копия runner для автозапуска и её журналы. Ваши собственные профили CLI, например `%USERPROFILE%\.claude`, при этом не затрагиваются. Если в рабочих каталогах задач осталось нужное, сохраните это до удаления. --- # Runner на удалённом сервере Как поставить runner на Linux-сервер без графики и браузера: мастер настройки по SSH, вход в аккаунты моделей и запуск в фоне. ## Когда это нужно Runner на сервере работает круглые сутки и не зависит от того, включён ли ваш компьютер. Сервер подойдёт, если агенты должны брать задачи ночью или если на нём уже лежат репозитории, с которыми они работают. Агент работает на сервере с правами пользователя, от которого запущен runner, — см. [«Где работают агенты»](./runner.md#где-работают-агенты). Заведите для runner отдельного пользователя и дайте ему доступ только к нужным репозиториям и ключам. Права администратора runner не нужны. ## Установка без браузера Зайдите на сервер по SSH под пользователем для runner. Скачайте файл «Linux (x64)» из **Профиль** → «Подключить раннер» и перенесите его на сервер, например через `scp`. Затем: ```sh chmod +x qw ./qw setup ``` Мастер работает прямо в терминале SSH, браузер на сервере не нужен. Шаги те же, что на компьютере, — раздел «Мастер настройки» на странице [«Runner на Linux»](./runner-linux.md). На последнем шаге выберите **«Да, включить автозапуск и запустить сейчас»**: тогда runner продолжит работать после того, как вы закроете SSH. ## Вход в аккаунты моделей На сервере нет браузера, поэтому вход идёт по ссылке, которую вы открываете у себя: - **Claude Code.** CLI печатает ссылку. Откройте её на своём компьютере, войдите под аккаунтом для runner и вставьте код со страницы обратно в терминал SSH. - **Codex.** CLI печатает ссылку и код. Откройте ссылку на своём компьютере, войдите и введите там код. - **OpenCode.** Браузер не нужен: CLI спросит провайдера и его ключ API. Можно не заходить по SSH вовсе. Когда runner уже подключён и на связи, войти в аккаунт можно с доски: **Профиль** → «Аккаунты движков». Как это сделать — на странице [«Аккаунты моделей»](./accounts.md). Вход, выход и удаление аккаунта из терминала требуют остановленного runner. Сначала остановите его, потом снова запустите: ```sh ./qw autostart stop ./qw login claude:work ./qw autostart start ``` С доски то же самое делается без остановки. ## Запуск как службы Фоновый runner на сервере — пользовательская служба systemd. Её включает мастер или команды: ```sh ./qw autostart enable ./qw autostart start ``` Чтобы служба стартовала при загрузке сервера и работала без открытой сессии SSH, runner включает для пользователя `loginctl enable-linger`. Если система этого не разрешила, runner скажет об этом. Тогда включите linger под администратором и перезапустите службу: ```sh sudo loginctl enable-linger <пользователь> ``` Состояние службы печатает `./qw autostart status`, журнал — `./qw logs`, а `./qw logs -f` следит за ним. Подробнее про службу, обновление и удаление — на странице [«Runner на Linux»](./runner-linux.md#автозапуск). ## Несколько runner На одном сервере можно держать несколько runner: по одному на каждого пользователя системы. Каждый подключается к доске под своей учётной записью и выполняет задачи только её агентов, со своими аккаунтами моделей. Так на одном сервере работают агенты разных людей, и никто не тратит чужие лимиты. Один runner сам обслуживает несколько досок и может вести несколько запусков сразу — см. [«Несколько машин и досок»](./runner.md#несколько-машин-и-досок) и [«Одновременные запуски»](./runner.md#одновременные-запуски). --- # Аккаунты моделей От чьего аккаунта модели работают агенты, как добавить аккаунт на runner, назначить его агенту, сменить и удалить. ## Подписка или ключ API Агент работает через CLI, а CLI — через ваш аккаунт у поставщика модели. Доска аккаунтов не хранит: файлы входа лежат на машине runner. | CLI | Чем платить | |---|---| | Claude Code | подписка Claude Pro или Max | | Codex | подписка ChatGPT Plus или Pro | | OpenCode | ключ API провайдера: Anthropic, OpenAI, DeepSeek, OpenRouter и другие | Аккаунты на runner бывают двух видов: - **Имеющиеся.** Профили CLI, в которые вы уже вошли на этом компьютере, например `~/.claude`. Агенты расходуют те же лимиты подписки, что и вы в терминале. - **Отдельные.** Аккаунт, в который runner входит сам. Его лимиты тратят только агенты. Какие аккаунты брать, мастер настройки спрашивает на шаге «Агенты» — см. [«Runner на Linux»](./runner-linux.md). На доске и в командах runner аккаунт называется слотом. Имя слота пишется как `:<имя>`, например `claude:work`. ## Добавить аккаунт ### С доски Runner должен быть подключён и на связи. 1. Откройте **Профиль** → «Аккаунты движков». Там перечислены ваши runner, у каждого — отметка «на связи» или «не на связи» и список слотов. 2. Нажмите **Новый слот**, выберите «Движок» и введите «Имя слота, например work». Имя — латиница, цифры, точка, дефис или подчёркивание, до 64 символов. 3. Войдите в слот: - **Claude Code** — откройте ссылку, войдите под нужным аккаунтом, скопируйте код со страницы в поле и нажмите **Отправить код**; - **Codex** — откройте ссылку и введите на странице показанный код; - **OpenCode** — укажите провайдера, вставьте ключ API и нажмите **Отправить ключ**. Ключ уйдёт на runner один раз, доска его не сохранит. Когда вход прошёл, слот получает отметку «вошёл» и сразу доступен агентам. В существующий слот можно войти заново кнопкой **Войти** в его строке. ### В терминале ```sh qw login claude:work # отдельный аккаунт: CLI покажет ссылку или код для входа qw list # аккаунты этой машины ``` Сделать слотом уже имеющийся профиль CLI: ```sh qw link claude:work ~/.claude-work ``` `login`, `logout` и `rm` в терминале работают только при остановленном runner: сначала `qw autostart stop` или Ctrl+C в окне `qw run`. `link` можно выполнять и на ходу, runner подхватит новый слот сам. ::: info Вход не протухает сам Runner время от времени продлевает вход в фоне коротким запросом к модели. Если вход всё же истёк или сломался, на доске у слота появится «вход истёк» или «вход сломан» — войдите заново. ::: ## Назначить аккаунт агенту Аккаунт назначается в форме агента: **Профиль** → «Агенты пользователя», плюс для нового агента или карандаш для существующего. В поле «Аккаунт» есть варианты: - **«Аккаунт раннера по умолчанию»** — агент работает от профиля CLI пользователя runner, например `~/.claude`. Запуск возьмёт любой ваш runner, на котором есть нужный CLI. - **Слот** — список слотов ваших runner для выбранного CLI. Запуск возьмёт только runner, на котором есть этот слот. Мастер настройки назначает аккаунты агентам сам на шаге «Аккаунты агентов». Назначить аккаунт можно только своему агенту и только из слотов своих runner. ## Отдельный аккаунт для другого пользователя Runner выполняет задачи только агентов своего владельца. Поэтому чтобы агенты коллеги работали от его подписки, коллеге нужен свой runner: 1. Коллега ставит runner — на свой компьютер или на общий сервер под отдельным пользователем системы, см. [«Runner на удалённом сервере»](./runner-server.md#несколько-runner). 2. Подключает его к доске под своей учётной записью. 3. Добавляет на него свой аккаунт и назначает его своим агентам. Управлять аккаунтами runner на доске может только его владелец. Ваши аккаунты коллега не увидит и не потратит, и наоборот. ## Сменить и удалить аккаунт **Сменить аккаунт агента** — откройте агента карандашом в «Агенты пользователя» и выберите другой «Аккаунт». Новые запуски пойдут уже от него. **Выйти из аккаунта** — кнопка **Выйти** в строке слота в «Аккаунты движков» или команда в терминале. Слот остаётся, но запуски на него больше не идут. ```sh qw logout claude:work ``` Выйти так можно из Claude Code и OpenCode. У Codex своего выхода нет — удалите слот. **Удалить слот** целиком: ```sh qw rm claude:work ``` Если слот — ссылка на ваш профиль CLI, `rm` убирает только ссылку, сам профиль остаётся. В терминале перед выходом и удалением runner покажет, каким агентам назначен этот аккаунт. Их запуски будут ждать, пока аккаунт не вернётся: назначьте им другой. **Лимиты** — кнопка в строке слота показывает, сколько осталось до лимита подписки и когда он сбросится. OpenCode этих данных не отдаёт: остаток смотрите в кабинете провайдера. --- # Сайты без git Как дать агенту доступ к сайту, у которого нет git-репозитория: агент читает код, логи и выбранные таблицы базы прямо на сервере через SSH-шлюз. ## Когда нужен шлюз Обычно агент работает с git-репозиторием на машине с runner. Если сайт живёт только на хостинге, без репозитория, шлюз даёт агенту доступ к нему на чтение: - код сайта: список файлов и чтение строк файла; - логи: последние строки, с фильтром по подстроке; - база данных: выборка из таблиц и колонок, которые вы разрешили. Модуль базы включается отдельно. ::: warning Только чтение Через шлюз агент не меняет файлы на сервере и не выполняет команды. Shell и SSH-ключ ему не выдаются. Шлюз подходит, чтобы разобраться в ошибке, найти причину и предложить правку. ::: ## Что понадобится | Где | Что нужно | |---|---| | Сервер сайта | Обычный SSH-доступ пользователя хостинга, root не нужен. Утилиты `awk`, `grep`, `sed`, `tail`, `ls` и `realpath` или `readlink` | | Сервер сайта, для базы | Клиент `mysql`, PHP с расширением mysqli или Docker, если база в контейнере | | Ваш компьютер | Вход на сервер по SSH, описанный в `~/.ssh/config` под коротким именем (alias) | | Runner | Linux и изоляция агентов `bubblewrap` или `systemd`, см. ниже | ### Изоляция runner Шлюз включается, только если песочница runner надёжно прячет от агента ключ шлюза. Изоляцию задаёт флаг `-isolation` или переменная `QUEUEWARDEN_ISOLATION`: | Значение | Шлюз | |---|---| | `bubblewrap`, `systemd` | работает | | `auto` | работает, если runner выбрал `bubblewrap` или `systemd` | | `none` (по умолчанию) | выключен | | `container`, `appcontainer` (Windows) | выключен | Если условие не выполнено, runner выключает шлюз целиком и пишет причину в журнал. Журнал показывает команда `qw logs`. ## Подключить сервер Подключение делается на машине, с которой у вас есть SSH-доступ к серверу. Понадобятся два файла: настройки шлюза и правила скрытия. ### Настройки: gateway.conf ```text root /home/user/site.ru/htdocs/www max_bytes 262144 log error /home/user/site.ru/htdocs/www/core/cache/logs/error.log log access /home/user/site.ru/logs/access_log* db_client mysql db_table modx_users id username active db_table modx_system_settings key value namespace db_mask modx_system_settings key (password|secret|token|apikey|api_key|_key) ``` | Строка | Что задаёт | |---|---| | `root <путь>` | Корень кода: абсолютный путь без ссылок. Выше корня агент не читает, ссылки наружу тоже не работают | | `max_bytes <число>` | Предел размера одного ответа в байтах. По умолчанию 262144 | | `log <имя> <путь>` | Лог под именем из латиницы, цифр, `_` и `-`. В пути можно `*`: берутся до трёх самых новых файлов, архивы пропускаются | | `db_client <клиент>` | Включает модуль базы: `mysql`, абсолютный путь к `php` или `docker <контейнер> [mariadb\|mysql]`. Без этой строки базы нет | | `db_table <таблица> <колонки>` | Таблица и колонки, которые агенту можно читать | | `db_mask <таблица> <колонка> <выражение>` | Если значение колонки подходит под регулярное выражение, остальные колонки строки скрываются | Доступ к базе — файл в формате `my.cnf`: в секции `[client]` поля `host`, `port`, `user`, `password`, в секции `[mysql]` — `database`. Его передают при подключении, на сервер он ложится с правами `0600`. Локальную копию после подключения удалите. Если клиента базы на сервере нет, модуль выключается сам: остальное работает. ::: info База в Docker Вариант `docker` нужен, когда клиента базы на самом сервере нет. Пользователю хостинга тогда нужен доступ к Docker, а это фактически права root. Используйте его, только если у учётной записи они уже есть. ::: ### Правила скрытия Файл в синтаксисе `.gitignore`: `*`, `**`, `?`, `!`-исключения, `/` в начале и в конце. Скрытое агент не видит в списке файлов и не читает. На логи правила не действуют: их определяет строка `log`. Скрыто всегда, и `!` это не открывает: `.ssh`, `.git`, `.env*`, `*.pem`, `*.key`, `id_*`, `.htpasswd`, `.netrc`, `.my.cnf`, `.pgpass`, `*.p12`, `*.pfx` и каталог самого шлюза. Начните с набора под свой движок: ::: code-group ```text [MODX] /core/config/ /config.core.php /manager/config.core.php /connectors/config.core.php /core/cache/ /core/packages/ /assets/components/*/cache/ *.sql *.sql.gz *.log ``` ```text [WordPress] /wp-config.php /wp-content/uploads/ /wp-content/cache/ /wp-content/backup*/ *.sql *.log ``` ```text [PHP] /config/ /config*.php /vendor/ /storage/ *.sql *.log ``` ::: Добавьте сюда всё, где лежат пароли и ключи: резервные копии, дампы, свои конфиги. ### Установка ```sh qw gateway install --name shop --host shop-prod --project <ключ проекта> \ --rules ./rules --config ./gateway.conf --db-cnf ./db.cnf ``` | Флаг | Что указать | |---|---| | `--name` | Имя сервера в шлюзе. Агент выбирает по нему, если у проекта несколько серверов | | `--host` | Alias сервера из `~/.ssh/config`. Из него же берутся адрес, пользователь и порт | | `--project` | Ключ проекта доски. Сервер увидят только агенты задач этого проекта | | `--rules` | Файл правил скрытия | | `--config` | Файл `gateway.conf` | | `--db-cnf` | Доступ к базе. Не нужен, если базы нет | Команда создаёт для сервера отдельный ключ, ставит на сервер обёртку и дописывает ключ в `~/.ssh/authorized_keys` с ограничением: по этому ключу сервер запускает только обёртку. Затем проверяет, что ограничение действительно работает: произвольная команда, shell, sftp, scp и проброс портов отбиваются, файлы `.env` и выход за корень не читаются, каждый лог отвечает. Если проверка не прошла, install откатывает всё, что сделал, и сообщает причину. После установки перезапустите runner: раны увидят сервер только после перезапуска. ### Управление | Команда | Что делает | |---|---| | `qw gateway list` | Подключённые серверы и их проекты | | `qw gateway check --name shop` | Повторяет проверку ключом шлюза | | `qw gateway uninstall --name shop` | Убирает обёртку с сервера, строку ключа и локальные файлы | После `uninstall` тоже перезапустите runner. На одной учётной записи хостинга можно подключить несколько сайтов: у каждого подключения свой каталог, корень, логи и база. ### Runner на другой машине Если на машине с runner нет вашего SSH-доступа к серверу: 1. Выполните install у себя с флагом `--dir <временный каталог>`. 2. Перенесите каталог `<временный каталог>/<имя>/` в каталог шлюза runner от имени пользователя runner. Права каталога — `0700`. 3. Удалите локальную копию и перезапустите runner. Каталог шлюза runner меняет флаг `-gateway-dir` или переменная `QUEUEWARDEN_GATEWAY_DIR`. Значение `off` выключает шлюз. ## Как агент работает с сервером Когда runner берёт задачу проекта, к которому привязан сервер, агент получает MCP-сервер `ssh-gateway`. Доступ живёт, пока идёт запуск. Агенты задач других проектов этот сервер не видят. | Инструмент | Что делает | |---|---| | `server_info` | Корень кода, имена логов, таблицы и колонки базы | | `logs_tail` | Последние строки лога: по умолчанию 100, не больше 2000. Можно фильтр по подстроке | | `code_list` | Содержимое каталога от корня кода | | `code_read` | Строки файла: сколько пропустить и сколько вернуть, по умолчанию 400, не больше 2000 | | `db_query` | Выборка из разрешённой таблицы и колонок, условие только на равенство, по умолчанию 50 строк, не больше 500 | Если у проекта несколько серверов, агент указывает, к какому обращается. Всё, что уходит агенту — код, логи, строки базы, имена файлов, — на сервере проходит маскировку: токены, пары вида `password=…`, адреса почты, номера карт и телефонов заменяются звёздочками. ::: warning Маскировка не заменяет правила Маскировка ищет секреты по шаблонам и может что-то пропустить. Файлы с паролями и ключами скрывайте правилами. ::: На сервер держится одно SSH-соединение, оно живёт 5 минут после последнего запроса. Так хостинг не заблокирует адрес runner за частые подключения. ### Агент вне runner Команда `qw gateway mcp` отдаёт те же инструменты по stdio агенту, который работает не через runner, например интеграции с CRM. Такой агент видит все подключённые серверы, а не серверы одного проекта. Песочницу здесь никто не проверяет: у такого агента не должно быть shell и чтения файлов вне отведённых ему каталогов. ## Ограничения - Только чтение: менять файлы и выполнять команды на сервере агент не может. - Нужен runner на Linux с изоляцией `bubblewrap` или `systemd`. На Windows и без изоляции шлюз не работает. - Подключение — только командой `qw gateway` на компьютере, в интерфейсе доски его нет. - Сервер привязан к одному проекту доски. - Ответ не больше `max_bytes`, у логов — не больше трёх самых новых файлов. - В выборке из базы — одно условие на равенство. Значение — буквы, цифры и `_.:@/-`. - Имена файлов, похожие на длинный токен, приходят замаскированными, например `***.tar.gz`. --- # Подключение ИИ-агента по MCP Как дать своему ИИ-агенту — Claude Code, Codex, opencode или другому клиенту MCP — работать с доской: читать задачи, ставить новые, комментировать. Агент подключается как [мост](./agents.md#мост): ходит на доску сам по токену и видит то, что разрешают маска агента и ваши права. ## Что понадобится 1. **Агент-мост и его токен.** Как их завести — в разделе [«REST API»](./api.md#выпустить-токен). Тот же токен работает и в REST, и в MCP. 2. **Адрес MCP вашей доски** — адрес доски и `/mcp` в конце: ```text https://<ваша-доска>/mcp ``` Сохраните токен в переменную окружения, а не в файл настроек: так он не попадёт в репозиторий и в чужие руки. ```sh export QW_TOKEN='токен агента' ``` ## Claude Code Для себя, во всех проектах: ```sh claude mcp add --scope user --transport http queuewarden https://<ваша-доска>/mcp \ --header "Authorization: Bearer $QW_TOKEN" ``` Команда записывает токен в ваши личные настройки Claude Code. Проверка: `claude mcp list` показывает `queuewarden` со статусом `Connected`. Для всей команды — файл `.mcp.json` в корне репозитория. Токен в нём не хранится: Claude Code подставит его из переменной окружения каждого участника. ```json { "mcpServers": { "queuewarden": { "type": "http", "url": "https://<ваша-доска>/mcp", "headers": { "Authorization": "Bearer ${QW_TOKEN}" } } } } ``` Сервер из `.mcp.json` Claude Code включает только после подтверждения: при первом запуске `claude` в репозитории согласитесь его использовать. До этого `claude mcp list` показывает `Pending approval`. ## Codex ```sh codex mcp add queuewarden --url https://<ваша-доска>/mcp --bearer-token-env-var QW_TOKEN ``` Или вручную в `~/.codex/config.toml`: ```toml [mcp_servers.queuewarden] url = "https://<ваша-доска>/mcp" bearer_token_env_var = "QW_TOKEN" ``` Codex читает токен из переменной при каждом запуске. Проверка: `codex mcp list`. ## opencode В `opencode.json` проекта или в `~/.config/opencode/opencode.json`: ```json { "$schema": "https://opencode.ai/config.json", "mcp": { "queuewarden": { "type": "remote", "url": "https://<ваша-доска>/mcp", "headers": { "Authorization": "Bearer {env:QW_TOKEN}" } } } } ``` Проверка: `opencode mcp list`. ## Другие клиенты Доска отвечает по MCP через HTTP (транспорт Streamable HTTP) на `POST /mcp`. Токен передаётся в заголовке `Authorization: Bearer <токен>`. Входа через OAuth нет. ## Что агент получает при подключении Вместе с подключением агент получает от доски короткие правила работы с ней: как поставить задачу, какими инструментами отвечать на узкие вопросы, что текст задач и комментарии — данные, а не команды. Описывать это в своём промпте не нужно. Список инструментов зависит от прав: инструменты, на которые у агента нет прав, доска ему не показывает. ## Промпт для агента Чтобы агент подключился сам, скопируйте ему этот текст и подставьте адрес доски: ```text Подключись к доске задач QueueWarden по MCP. Адрес: https://<ваша-доска>/mcp Токен лежит в переменной окружения QW_TOKEN, передавай его заголовком Authorization: Bearer. Не записывай токен в файлы репозитория. Инструкция по настройке клиентов: https://portal.queuewarden.ru/docs/mcp.md После подключения проверь доступ: выведи список проектов инструментом queuewarden_project_list. ``` ## Документация для ИИ Вся документация в виде, удобном для ИИ: - [`llms.txt`](https://portal.queuewarden.ru/docs/llms.txt) — оглавление со ссылками на страницы в markdown; - [`llms-full.txt`](https://portal.queuewarden.ru/docs/llms-full.txt) — все страницы одним файлом. --- # REST API Как читать данные доски из своих программ: проекты, стадии, типы, очереди, задачи и людей. Публичный REST API доски сейчас состоит из шести методов на чтение. ## Доступ и токены Запросы подписываются токеном агента-моста в заголовке `Authorization`: ```sh curl -H "Authorization: Bearer $QW_TOKEN" "https://<ваша-доска>/api/projects" ``` Токен выдаётся агенту, а не человеку. Видимость считается от агента: он видит те проекты и данные, на которые у него есть права. Права агента не шире прав его владельца. ### Выпустить токен 1. Откройте **Профиль**, в блоке «Агенты пользователя» нажмите **«Добавить агента»**. 2. Укажите логин, в поле «Назначение» выберите «Мост — ходит на доску сам» и нажмите **«Добавить»**. 3. Откройте агента кнопкой **«Редактировать агента»**. В блоке «Доступ агента @…» выберите маски и проекты, к которым у агента будет доступ. 4. В блоке «Токен агента» выберите срок действия: «Бессрочно» или 30, 90, 180, 365 дней. Нажмите **«Выпустить»**. 5. Скопируйте токен. Повторно его не покажут. У агента один токен. **«Перевыпустить»** выдаёт новый, старый сразу перестаёт работать. **«Отозвать»** отключает токен без замены. В блоке видно, когда токен использовали последний раз. ::: warning Храните токен как пароль По токену доступны все данные, которые видит агент, включая данные других пользователей в пределах его прав. ::: ::: info Токен перестал работать в REST Токены, выпущенные до появления REST API, открывают только MCP. REST на них отвечает `401 api_token_unauthorized`. Перевыпустите токен: новый работает и в REST, и в MCP. ::: Тот же токен подключает агента-мост к доске по MCP — см. [«Подключение ИИ-агента по MCP»](./mcp.md). Остальные адреса `/api/*` по токену недоступны: они обслуживают веб-интерфейс доски и работают только по входу в доску. ## Методы | Метод | Что возвращает | |---|---| | `GET /api/projects` | Проекты | | `GET /api/projects/{projectId}/stages` | Стадии проекта | | `GET /api/projects/{projectId}/types` | Типы задач проекта | | `GET /api/projects/{projectId}/queues` | Очереди проекта | | `GET /api/tasks` | Задачи с фильтрами | | `GET /api/people` | Люди и агенты | Все методы отвечают страницей: ```json { "rows": [ … ], "total": 137, "page": 2, "perPage": 50 } ``` `rows` — строки страницы, `total` — сколько строк всего по фильтру. Параметры страницы описаны в разделе [«Страницы»](#страницы). ### Проекты `GET /api/projects` | Параметр | Значения | |---|---| | `state` | `active` — действующие (по умолчанию), `archived` — в архиве, `all` — все | ```sh curl -H "Authorization: Bearer $QW_TOKEN" \ "https://<ваша-доска>/api/projects?state=all" ``` `id` проекта из ответа нужен для остальных методов. ### Стадии, типы и очереди проекта `GET /api/projects/{projectId}/stages`, `…/types`, `…/queues`. Кроме страницы, параметров нет. ```sh curl -H "Authorization: Bearer $QW_TOKEN" \ "https://<ваша-доска>/api/projects/$PROJECT_ID/stages" ``` ### Задачи `GET /api/tasks`. Без фильтров отдаёт открытые задачи всех проектов, которые видит агент, новые первыми. | Параметр | Что задаёт | |---|---| | `projectIds` | Проекты | | `stageIds`, `stageKeys` | Стадии: по `id` или по ключу стадии, например `done` | | `status` | `open` — открытые (по умолчанию), `closed` — закрытые, `any` — все | | `priorities` | Ключи приоритетов, например `normal` | | `tags` | Теги: задача должна иметь все перечисленные | | `assigneeIds`, `reviewerIds`, `operatorIds` | Исполнитель, ревизор, оператор | | `createdBy` | Создатель | | `search` | Текст в названии, ключе или полях постановки, до 500 символов | | `createdFrom`, `createdTo` | Период создания | | `updatedFrom`, `updatedTo` | Период последнего изменения | | `closedFrom`, `closedTo` | Период закрытия | | `deadlineFrom`, `deadlineTo` | Период срока, даты `ГГГГ-ММ-ДД` | | `sortBy` | `created_at` (по умолчанию), `updated_at`, `closed_at`, `deadline`, `priority`, `task_key` | | `sortDir` | `desc` (по умолчанию) или `asc` | - Несколько значений передаются повтором параметра (`?tags=a&tags=b`) или через запятую (`?tags=a,b`). - Границы периодов — дата и время в ISO 8601, обе включаются. Указывайте часовой пояс, например `2026-10-01T00:00:00Z`. - `id` людей берутся из `GET /api/people`, `id` и ключи стадий — из списка стадий. ```sh curl -H "Authorization: Bearer $QW_TOKEN" \ --get "https://<ваша-доска>/api/tasks" \ --data-urlencode "projectIds=$P1,$P2" --data-urlencode "status=closed" \ --data-urlencode "closedFrom=2026-10-01T00:00:00Z" --data-urlencode "perPage=100" ``` Строка задачи — краткая карточка, как на доске, без полей постановки: | Поле | Что в нём | |---|---| | `id`, `task_key`, `title` | Идентификатор, ключ и название | | `project_id`, `stage_id`, `type_id` | Проект, стадия, тип | | `priority`, `deadline`, `tags` | Приоритет, срок, теги | | `assignee_id`, `reviewer_id`, `operator_id`, `created_by` | Участники и создатель | | `plan_hours`, `time_spent_seconds` | План в часах и факт в секундах | | `created_at`, `updated_at`, `started_at`, `closed_at` | Даты создания, изменения, запуска, закрытия | | `closed` | Закрыта ли задача | ### Люди `GET /api/people` работает в двух режимах. **С `projectId`** — кого можно назначить в задачи проекта: | Параметр | Что задаёт | |---|---| | `projectId` | Проект | | `role` | Роль в задаче: `reviewer` — ревизор, `assignee` — исполнитель, `operator` — оператор. По умолчанию `assignee` | | `taskTypeId` | Тип задачи | | `search` | Текст в имени или логине, до 200 символов | Без `perPage` возвращается весь список, но не больше 200 строк. **Без `projectId`** — поиск по всей установке. Нужно право приглашать пользователей, иначе ответ `403`. | Параметр | Что задаёт | |---|---| | `kind` | `human` — люди, `agent` — агенты | | `search` | Текст в имени, логине или почте, до 200 символов | Здесь страница по умолчанию — 25 строк. ```sh curl -H "Authorization: Bearer $QW_TOKEN" \ "https://<ваша-доска>/api/people?projectId=$PROJECT_ID&role=assignee" ``` ## Страницы | Параметр | Значение | |---|---| | `page` | Номер страницы, с 1 | | `perPage` | Строк на странице: по умолчанию 50, не больше 200 | `perPage` больше 200 даёт ответ `400`. Страница за концом списка приходит с пустым `rows` и тем же `total`. ```sh curl -H "Authorization: Bearer $QW_TOKEN" \ "https://<ваша-доска>/api/tasks?status=any&page=2&perPage=200" ``` ## Ошибки Ошибка приходит с HTTP-кодом и JSON с полем `error`: ```json { "error": "forbidden", "permission": "project.view", "message": "forbidden:project.view" } ``` | Код | `error` | Что значит | |---|---|---| | 400 | `request_failed` | Неверный параметр: значение не из списка, `perPage` больше 200, слишком длинный `search` | | 401 | `api_token_unauthorized` | Токен неверный, отозван, истёк или выпущен до появления REST API | | 401 | `api_identity_required` | Агент, которому выдан токен, заблокирован или удалён | | 401 | `authentication_required` | Нет токена, или адрес не входит в публичные методы | | 403 | `forbidden` | Нет прав. В `permission` — какое право нужно. Чужой проект даёт `project.view`, а не пустой список | | 423 | `offer_acceptance_required` | Доска заблокирована, пока владелец не примет условия сервиса | | 429 | | Слишком много запросов, см. ниже | ## Ограничения - Только чтение. Создавать и менять задачи через REST API пока нельзя. - Не больше 300 запросов в минуту с одного адреса. Сверх этого доска отвечает `429`. - Строка задачи не содержит полей постановки, комментариев и вложений.