PM Assistant: как я автоматизировал PM-процесс четырьмя микросервисами и одним Obsidian vault

—

от автора

Пятница, вечер. Я уже не за рабочим местом, но в голове крутится идея, которую стоит зафиксировать. Открываю Telegram, надиктовываю голосовое и переключаюсь к повседневным делам. Когда вернусь к системе — увижу расшифрованное аудио, извлечённые структурированные поля, определённый продуктовый домен. Идею уже обогатили связанными артефактами из базы знаний и поставили на канбан с готовностью 44%.

Это PM Assistant — система, которую я построил, работая продактом в OTA-компании. Четыре Python-микросервиса в Docker, Obsidian vault как база знаний, гибридный LLM-слой с fallback-цепочкой, 14 cron-задач, которые работают, пока я сплю. Она снимает с меня рутину и оставляет то, чем и должен заниматься продакт — думать над продуктом.

Проблема: рутина съедает время на продуктовую работу

Пять продуктовых доменов. Три команды разработки. Ежедневные стендапы, спринты, стейкхолдерские ревью раз в две недели. Бэклог растёт быстрее, чем я успеваю его грумить.

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

  1. Протоколы встреч. Транскрипт со вторника содержит три экшен-айтема, два решения и одну идею. К среде транскрипт — в email-архиве, экшены — в голове, идея — нигде. Разбор одной встречи вручную — 30–40 минут.

  2. Отчёты по разработке. Ежедневные и еженедельные сводки: что движется, что буксует, какие блокеры. Собирать из Jira, чатов и заметок — 20–30 минут в день.

  3. Анализ рынка и сигналы. Новости конкурентов, изменения в отрасли, тренды. Без системы фиксации сигнал из марта невидим, когда в апреле я пишу PRD. Формирование идей для бэклога из внешнего контекста — задача, которую продакт делает от случая к случаю, а должен непрерывно.

  4. Фиксация продуктовых идей. Идея приходит в метро, на встрече, на прогулке. Записать — полдела. Превратить заметку в структурированную идею с проблемой, метрикой, сегментом и Job Story — ещё 15–20 минут на каждую.

  5. Контекст проекта. Быстрый поиск: какие решения принимались по домену? Какие идеи рассматривались? Без единой базы знаний — археология по Confluence, Jira и Google Docs. А из контекста нужно генерировать артефакты для разработки: PRD, ADR, эпики с задачами.

Инструменты, которые я пробовал — Confluence, Obsidian с плагинами — reshaют задачу еухранения. Ни один не решает задачу обработки.

Мне нужна была система, которая берёт на себя механическую часть этих пяти зон — непрерывно, автоматически и не забывая.

Подход: vault как база данных

Отправная точка — заметка Андрея Карпати о персональном управлении знаниями. Его модель: raw → compile → wiki. Эto ровно то, что продакт-менеджер делает каждый день — только руками.

Raw — всё, что приходит извне: голосовое сообщение с идеей, транскрипт встречи, тикет из Jira, вырезка из новости о конкуренте. Raw-файлы не редактируются никогда. Они — аудитный след, источник правды.

Wiki — скомпилированные знания: структурированные заметки, организованные по продуктовым доменам. YAML-фронтматтер для метаданных (id, статус, домен, теги). Тело файла — контент. Файловая система — индекс. Git — полная история.

Ключевой инсайт — использовать Obsidian vault как базу данных. Каждый файл одновременно читаем человеком в Obsidian и парсится машиной через REST API. Не нужно выбирать между инструментом для человека и инструментом для машины — vault является и тем, и другим. Я пишу заметки v Obsidian на телефоне в метро. Система обогащает их перекрёстными ссылками, пока я сплю. Утром те же заметки доступны через 72 API-эндпоинта, которые кормят веб-дашборд.

Как это работает: пять зон автоматизации

Четыре Python-микросервиса в Docker Compose работают с одним Obsidian vault. Но архитектура — это не про сервисы. Эto про пять зон, где система забирает рутину.

Зона 1 — Фиксация продуктовых идей. Идея приходит — открываю Telegram, надиктовываю голосовое или пишу текст. pm-bot принимает сообщение, faster-whisper транскрибирует аудио локально (данные не покидают машину), система создаёт файл в vault, определяет продуктовый домен, ставит статус «Новая». Я не открываю Obsidian, не переключаю контекст.

Зона 2 — Обработка протоколов встреч. Транскрипт приходит по email (IMAP-фетчер каждый час) или я кладу файл в папку (watchdog). Дальше — файловая очередь: pending → processing → done, атомарные os.rename(), без брокера сообщений. Claude пишет протокол, artifact_extractor раскладывает по доменам: action items в tasks/, решения в decisions.md, новые идеи в ideas/. Один транскрипт — три домена обновлены. Если LLM-обработка падает после 5 попыток с фоллбэком между провайдерами — файл уходит в failed/ на ручной разбор.

Зона 3 — Отчёты по разработке. knowledge-engine синхронизируется с Jira каждые 3 часа: статусы тикетов, блокеры, прогресс по спринту. Ежедневные и еженедельные сводки собираются автоматически — что движется, что буксует, где нужно моё внимание.

Зона 4 — Анализ рынка и сигналы. News Moderator фильтрует travel-новости по релевантности → скоринг → AgentLoop с QualityGate → диспатч сигналов. На выходе — HITL-триаж: я нажимаю «Approve», черновой сигнал превращается в идею для бэклога. Сигнал из марта не теряется, когда в апреле я пишу PRD.

Зона 5 — Контекст проекта и генерация артефактов. Vault с перекрёстными ссылками между доменами — единая база знаний, где каждый файл одновременно читаем человеком в Obsidian и парсится машиной через 72 API-эндпоинта. Когда идея созрела — idea-pipeline запускает цепочку из трёх AI-агентов: Analyst (идея + контекст vault → анализ), PM (анализ → PRD с acceptance criteria), Decomposer (PRD → эпик + задачи). Полный пакет за ~2 минуты вместо 3–4 часов вручную.

Под капотом — гибридный LLM-слой. Локальный Ollama (QWEN 3.5) для рутинных задач: классификация, ключевые слова. Claude API — сложная работа: синтез, обогащение, idea pipeline. OpenRouter — транскрипции с фоллбэк-цепочкой. Если Ollama недоступен — система автоматически переключается на Claude. Эto скорость (локальная модель отвечает быстрее на простых задачах), приватность (часть данных не покидает машину) и экономия. 14 cron-задач в ke-cron держат всё это в движении: синтез, индексация, линтинг vault, health-check, Jira-синхронизация. Self-hosted Langfuse — трейсинг промптов и контроль стоимости.

Жизненный цикл идеи: 9 полей, 2 барьера, 1 статус Отсев

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

Блок 1 — Паспорт идеи Ш4 поля, 44% готовности). Проблема/Боль, Решение, Ценность (USP), Метрика. Метрики нет — идея сразу в Отсев: дальше без неё двигаться некуда. Все четыре заполнены — статус «Проверка гипотезы».

Блок 2 — Посадочный талон (5 полей, 100% готовности). Сегмент (не «все»), Job Story (один сценарий, не пачка), In scope, Out of scope, Ограничения. 9 из 9 = 100%. Но это условие необходимое, не достаточное.

Переход в «Готова к производству» требует артефакта валидации — конкретного, а не пересказанного: цифра из аналитики, тикет с частотой, прямая цитата пользователя. И контрольный вопрос: смогу ли я завтра прийти с этим на планирование к разработчикам без созвонов на неделю? Ответ «нет» — идея не готова.

Отсев — отдельный статус в моем жизненном цикле идеи. Четыре возможные причины отсева:
1. нет метрики
2. не удалось определить границы MVP
3. нет артефакта валидации
4. контрольный вопрос дал ответ «нет».

Без явного статуса отсева воронка превращается в склад: идеи висят «в проработке» месяцами, потому что закрыть — эмоционально сложнее, чем оставить. Отсев решает эту проблему прямо.

Замыкающий цикл: из «Готова к производству» идея превращается в эпик, связь фиксируется полем epic_ref. При закрытии эпика — дозапись: метрика выросла или нет, что подтвердилось, дата. Так идея становится полным кейсом: гипотеза → что сделали → что получили.

Результаты за 5 месяцев

219 идей обработано. 115 фич отгружено в продакшен. Конверсия идея → shipped feature — 52%.

Idea Pipeline (Analyst → PM → Decomposer) генерирует полный пакет (анализ + PRD + эпик + задачи) за ~2 минуты. Раньше я тратил 3–4 часа на ту же работу вручную.

Стоимость: локальный Ollama — бесплатно (электричество не считаю), модели OpenRouter — бесплатно, self-hosted Langfuse — бесплатно. Итого: инфраструктура решения 100% бесплатная. Если подключить Claude Cowork для работы с vault — стоимость равна стоимости вашей подписки.

Веб-дашборд обрабатывает запросы за <200ms (FastAPI + файловая система, никакой базы данных кроме SQLite для дедупликации сигналов).

Что система не делает: не принимает решений. Не выбирает, какую идею брать в спринт. Не оценивает приоритеты. Она устраняет механическую работу между «я это придумал» и «это можно отдать в разработку» — и делает это непрерывно, автоматически и не забывая.

Диагноз

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

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

Честный итог за 5 месяцев: система убрала ~4 часа документационной работы в неделю и поймала ~30 идей, которые я бы потерял. Она также создала новые режимы отказа — галлюцинации LLM при обогащении, устаревшие ссылки Jira, ошибки парсинга транскриптов — которые требуют своего времени на поддержку.

Код на GitHub под MIT: github.com/afr13nd77/pm_assistant. Это рабочий инструмент, который решает реальную проблему реального продакт-менеджера. Код открыт, чтобы другие могли адаптировать решение под свой процесс.

Если ваш процесс похож — форкайте, адаптируйте. Issues и PR открыты.

ссылка на оригинал статьи https://habr.com/ru/articles/1090428/