КлиентЛабОбсудить проект
Open Source · MITБесплатноFastAPI · Next.js · PostgreSQL

PMS: self-hosted система управления проектами

Создан для агентства, которое ведёт десятки клиентских проектов одновременно. Лёгкий и простой Scrumban без тяжести Jira: видно задачи, статусы и бэклог по каждому проекту — в том числе из ИИ-агентов, которые заводят и закрывают задачи через CLI и REST API. На проектах, которые продают, включаются воронки лидов и учёт платежей. Разворачивается одной командой через Docker, данные остаются на вашем сервере. Открытый код, лицензия MIT.

Что внутри

Всё для операционного контроля над проектами

Доска

Kanban + Scrumban

Настраиваемые колонки-статусы на каждый проект, drag & drop, мягкие WIP-лимиты, дробный порядок задач без переиндексации.

Задачи

Ключи, ревью, история

Человекочитаемые ключи CODE-N, приоритеты, исполнитель и проверяющий, критерии приёмки, комментарии и append-only лог активности.

Agile

Спринты и инициативы

Короткие спринты с целью и статистикой, старт/завершение с переносом незакрытых задач, инициативы с прогрессом, приоритезированный бэклог.

План

Роадмапы периода

Период, согласованный с клиентом, волны внутри него, таблица «было → цель → стало» и ссылка на отчёт. Пункты плана — обычные задачи, поэтому прогресс и блокеры считаются с доски.

Управление

Дашборды портфеля

Health по проектам, счётчики open/overdue/blocked/review, «мои задачи» и «мои ревью», кросс-проектный список с фильтрами.

Доступ

Роли и права

Двухуровневый RBAC (роли воркспейса + роли проекта). Все проверки — на бэкенде. Нет доступа к проекту — проект не виден вовсе.

Продажи

Лиды и воронки

Включаются на нужных проектах: свои этапы и поля, доска и таблица, журнал по каждому лиду, конверсия по этапам и источникам. Заявки с форм сайта приходят сами, без дублей.

Деньги

Договоры и платежи

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

Ещё

Уведомления, поиск, i18n

In-app уведомления о назначениях и ревью, сквозной поиск по задачам и комментариям, интерфейс на русском и английском.

Как это выглядит

Наша PMS ведёт саму себя: проект PMS внутри PMS

Кадры и видео сняты 28.10.2026 с рабочей установки агентства, интерфейс на русском. Английский включается одной кнопкой в шапке.

Полминуты без монтажа: доска проекта, карточка задачи с комментариями, поиск по фразе из описания и переход к найденной задаче.
Доска проекта PMS на русском: колонки «На проверке», «Нужны правки» и «Готово», карточки задач с ключами PMS-1…PMS-12 и приоритетом
Доска проекта: колонки-статусы, карточка с ключом и приоритетом. Названия колонок задаются на проекте, здесь русские.
Карточка задачи PMS-11: описание правки бэкенда, критерии приёмки, справа статус «На проверке», приоритет HIGH, исполнитель, проверяющий и срок
Карточка задачи: описание, критерии приёмки, вложения; справа статус, приоритет, исполнитель, проверяющий, срок и story points.
Комментарии к задаче PMS-11 и журнал активности: создание задачи, смена статуса, два комментария
Комментарии и журнал активности: кто и когда создал задачу, сменил статус, написал комментарий.
Участники проекта PMS: пять ИИ-агентов с ролью MEMBER и владелец с ролью OWNER
Участники и роли проекта: без членства пользователь не видит проект вовсе. ИИ-агенты заведены как обычные участники.
Сквозной поиск по задачам: запрос «позицию 1000» и найденная задача PMS-5
Сквозной поиск по ключам, заголовкам и комментариям всех проектов.
Новое в версии 0.3Что изменилось →

Лиды и воронки там, где они нужны

Лид в PMS не задача, а отдельная карточка со своей воронкой. Модуль включается флагом на проекте: для продаж агентства, для заказов с сайта, для любого потока заявок. Остальные проекты его не видят.

Минута о модуле лидов с озвучкой: доска воронки, перенос лида на следующий этап, карточка с журналом и задачей, таблица с поиском, настройки этапов и полей. Демо-стенд, компании и контакты вымышленные.
Доска лидов PMS: плитки статистики и семь этапов воронки от нового лида до выигранной и проигранной сделки
Доска лидов: сколько в работе, на какую сумму и какая конверсия, семь этапов воронки.
Таблица лидов PMS с поиском по слову SEO: этап, источник, сумма и дата поступления
Таблица лидов с поиском и своими полями: этап, источник, сумма, дата поступления.

Своя воронка

Готовые наборы этапов «Продажи» и «Заказы» или свои. У каждого этапа смысл: в работе, выигран, проигран. Проигрыш без причины не закрыть.

Свои поля

Бюджет, сайт, ниша, дата подачи, площадка, что нужно бизнесу: текст, число, сумма, дата, список, телефон, email, ссылка.

Журнал и задачи

Каждое действие по лиду в журнале. Когда по лиду нужна работа (аудит, КП), из него создаётся задача со ссылкой в обе стороны.

Приём заявок

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

Статистика

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

Для ИИ-агентов

Агент заводит лид, двигает его по этапам и пишет в журнал через тот же CLI и API, что и с задачами.

# заявка с формы сайта: нужен только ключ проекта
curl -X POST https://pms.example.com/api/ingest/leads \
  -H "X-Lead-Token: $LEAD_TOKEN" -H "Content-Type: application/json" \
  -d '{"source": "site", "external_id": "form-4812", "contact_name": "Анна",
       "phone": "+7 900 000-00-00", "data": {"budget": 50000}}'
Для ИИ-агентов

Задачи и бэклог, которые видит ваш ИИ-агент

Каждый проект — это доска и бэклог, с которыми работает не только человек, но и ИИ-агент. Через компактный CLI (только стандартная библиотека Python) и REST API агент заводит задачу под то, что делает, ведёт статус, оставляет комментарии и закрывает её — а вы видите единый живой лог работы по всем клиентам и собираете по нему месячные отчёты.

pms.py list --project ABC --status backlog     # что в бэклоге у клиента
pms.py add --project ABC --title "Правка форм на сайте" --priority HIGH
pms.py status ABC-42 "In Progress"
pms.py comment ABC-42 "выкатил, жду проверки"
pms.py done ABC-42                              # закрыто -> попадёт в отчёт
pms.py lead stage ABC-L-7 "Переговоры"          # лид дальше по воронке
pms.py lead stats --project ABC --from 2026-10-01
Быстрый старт

Запуск за одну команду

Нужен только Docker. Бэкенд сам применяет миграции при старте, затем создаёте первого администратора и рабочее пространство.

git clone https://github.com/trendbender/pms.git
cd pms
cp .env.example .env          # задать JWT_SECRET и пароль БД
docker compose up --build     # миграции применятся автоматически
docker compose exec backend python -m app.cli seed   # первый Owner + Workspace

Фронтенд — на localhost:3000, API и OpenAPI-документация — на localhost:8000/docs.

Зачем это нужно

Двадцать маленьких проектов ломаются не так, как один большой

Каждый проект по отдельности простой. Сложным становится их набор: состояние живёт в головах и переписке, планы лежат отдельно от задач, а «мы ждали клиента» всплывает в день сдачи. PMS отвечает на это одним принципом: хранится только факт, остальное считается. Прогресс, просрочка, что держит план и по какому вопросу ждём ответа — всё выводится из задач и их статусов и поэтому не может разойтись с доской.

Состояние в головах

Вопрос «что у нас по клиенту X» стоит дня переписки. В PMS это одна доска и один журнал, общий с подрядчиками и ИИ-агентами.

Планы отдельно от работы

Документ с планом устаревает на следующей неделе. Роадмап в PMS собран из тех же задач, что и доска.

Договорённости плывут

Через два месяца никто не скажет, что именно обещали. Роадмап держит период, дату согласования и номер решения.

Деньги в табличке

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

Блокеры невидимы

Статус «заблокировано» без причины не ставится, а все причины собираются в одном месте — что нужно от владельца и клиента.

Нет единого вида

Портфель показывает здоровье, просрочку и активный спринт по каждому проекту, роадмапы — одним таймлайном.

Роадмап месяца вместо документа рядом с доской

Роадмап — это обёртка вокруг задач: период работ, чем он согласован с клиентом, волны внутри него, таблица «было → цель → стало» и ссылка на опубликованный отчёт. Пункты плана остаются обычными задачами, волны — инициативами, поэтому прогресс, просрочка и заблокированное берутся с доски, а не вводятся второй раз.

Период и согласование

Начало и конец, дата согласия клиента, короткая заметка «план из 14 пунктов» и номер решения в реестре.

Волны

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

Было → цель → стало

Значения текстом, а не числами: живые замеры звучат как «0 из 165» или «любой регистр отдаёт 200». Факт достижения ставит человек при сверке.

Отчёт одной командой

pms.py roadmap report собирает HTML-страницу для клиента из данных PMS. Сверка по пунктам не может разойтись с трекером.

pms.py roadmap add --project ABC --title "Месяц 1" --start 2026-11-01 --end 2026-11-30 \
  --scope "план из 14 пунктов согласован клиентом 27.10" --status ACTIVE
pms.py roadmap wave-add --project ABC --name "Неделя 1" --due 2026-11-07 --tasks ABC-12,ABC-13
pms.py roadmap metric-add --project ABC --name canonical --baseline "0 из 165" --target "165 из 165"
pms.py roadmap report --project ABC          # HTML-отчёт клиенту из данных PMS
Ваши данные

Self-hosted

Всё крутится на вашем сервере. Никакой внешней SaaS-подписки и передачи данных на сторону.

MIT

Открытый код

Читайте, форкайте, дорабатывайте под себя. Лицензия MIT — можно использовать и в коммерческих проектах.

Без микросервисов

Простая архитектура

Модульный монолит: понятно разворачивать, поддерживать и расширять. Один compose-стек.

Вопросы

Частые вопросы о PMS

Сколько стоит PMS?

Нисколько. Исходный код открыт под лицензией MIT: разворачиваете у себя, платите только за свой сервер. Платная у нас только помощь с внедрением и доработками.

Чем PMS отличается от Jira?

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

Можно ли вести в ней клиентов и не пускать их в систему?

Так и задумано: доска внутренняя, клиент получает отчёты и ссылки. Роль «Гость» на проекте есть, но клиентского портала нет.

Как это работает с ИИ-агентами?

Агент получает служебный аккаунт, роль на проекте и CLI на стандартной библиотеке Python. Он берёт задачи из своей очереди, ведёт статус и отчитывается комментариями; права проверяются на бэкенде, поэтому чужой проект он не увидит, а в «Готово» задачу переводит человек после сверки.

Где хранятся данные?

На вашем сервере: PostgreSQL в вашем Docker-стеке, вложения на вашем томе. Телеметрии нет, наружу ничего не уходит.

Что такое роадмап в PMS и чем он лучше документа?

Роадмап хранит период, согласованный с клиентом, его волны, таблицу «было → цель → стало» и ссылки на план и отчёт. Сами пункты — обычные задачи, поэтому прогресс и блокеры берутся с доски. Отчёт клиенту собирается командой из тех же данных, а не пишется заново, и расходиться с трекером ему нечем.

Есть ли русский интерфейс?

Да, язык выбирается на каждого пользователя: русский и английский из коробки. Новый язык — одна запись в перечне и один словарь.

Сложно ли разворачивать?

Нужен только Docker: docker compose up поднимает фронтенд, бэкенд, PostgreSQL и Redis, миграции применяются при старте, затем одна команда создаёт первого владельца. На боевом сервере тот же compose за обратным прокси с TLS.

Есть ли демо?

Публичного демо нет: боевой инстанс приватный. Посмотреть можно скриншоты и видео на этой странице, а развернуть локально — за одну команду.

Поможем внедрить и настроить под ваши процессы

Развернём PMS на вашем сервере, настроим статусы и роли под команду, доработаем под задачи бизнеса. Оставьте заявку — обсудим.

Заполнить бриф на продвижение

Пять минут на бриф, и мы придём с разбором вашей ниши, а не с общими вопросами.