Разработчики облачной платформы Cozystack опубликовали исходный код aeman, системы ежедневного планирования для инженерных команд, построенной поверх GitHub Projects v2. Инструмент развивает идею ежедневной доски: инженер видит ровно те задачи, которыми занимается сегодня, а всё отложенное исчезает с доски до того дня, когда за эту задачу кто-то возьмётся. Код написан на языке Go (веб-интерфейс — TypeScript/React) и распространяется под лицензией Apache-2.0.
Основные возможности:
- Персональная доска дня (Me): задачи инженера из всех его команд на выбранный день, сгруппированные в четыре цветовые зоны — срочное ("сделать сегодня кровь из носу"), обычная запланированная работа, незапланированное (прилетевшее в течение дня) и "делать, если всё остальное готово". У каждой карточки ползунок готовности 0-100%, стадия (Review / Locked / Recurrent / Done), счётчик возраста и автоматически распознаваемые ссылки на issue/PR; сбоку - панель заметок, живущих в контексте дня.
- Командная доска (Team): сетка "люди × зоны" на выбранный день с быстрым созданием и назначением задач; режим "View as" позволяет лидеру команды посмотреть на доску глазами конкретного инженера.
- Однодневные спринты, считаемые вперёд: операция "carry-over" одним действием переносит незавершённые задачи в новый день, завершённые остаются в истории, регулярные задачи пересоздаются автоматически. Кнопки "+1 день" и "+1 неделя" откладывают задачу, скрывая её с доски до нужной даты.
- Недельный план команды с полосами "к среде" и "к пятнице", перетаскиванием задач плана на исполнителей и общим прогресс-баром недели.
- Механика рецензирования (связанная карточка у рецензирующего с автоматическим освобождением оригинала по завершении), подзадачи с наследуемым прогрессом родителя и учёт незапланированной работы отдельной зоной.
- Журнал действий по каждой карточке: перемещения, изменения прогресса, смены спринтов - пригоден для аудита и построения статистики.
Отличительная особенность архитектуры - полное отсутствие собственной базы данных: единственным хранилищем выступает GitHub Projects v2. Каждая карточка - это "item" на доске GitHub, все атрибуты (зона, прогресс, спринт, план) - обычные поля проекта, которые aeman при необходимости создаёт автоматически. Ту же доску можно открыть в штатном интерфейсе GitHub, а отказаться от инструмента можно в любой момент - данные остаются у пользователя и не требуют миграции. Заметки и журнал также хранятся в GitHub: у draft-карточек — в теле карточки за специальным маркером, у карточек, привязанных к issue или PR, - обычными комментариями, а служебные события собираются в один пополняемый лог-комментарий, чтобы не засыпать подписчиков уведомлениями.
Проект поставляется одним исполняемым файлом со встроенным через go:embed веб-интерфейсом, JSON REST API, WebSocket-потоком обновлений и MCP-сервером. API построен по образцу Kubernetes: сущности оформлены ресурсами с kind/metadata/spec (Card, Sprint, Ordering, Presence), клиент работает по схеме "list + watch" с событиями ADDED/MODIFIED/DELETED — каждая открытая вкладка действует как informer с локальным кэшем, и правки коллег появляются на всех экранах примерно за секунду.
Для обхода медленных GraphQL-мутаций GitHub и отстающих от записи реплик чтения запись организована по схеме "write-behind": изменения мгновенно применяются к серверному кэшу и рассылаются клиентам, а в GitHub отправляются фоновой очередью с ограничением темпа, повторами и объединением последовательных изменений по аналогии с DeltaFIFO в Kubernetes (несколько правок одного поля сливаются в один запрос с итоговым значением, текст заметок при этом не теряется). Недавние собственные записи временно считаются достовернее свежих чтений из GitHub, что исключает видимые «откаты» интерфейса при отставании реплик; источником истины при конфликтах остаётся GitHub.
Встроенный MCP-сервер позволяет AI-агентам (например, Claude) участвовать в процессе наравне с людьми: создавать и перемещать карточки, вести заметки и проводить "carry-over". Отдельного API для агентов нет - их действия проходят через тот же доменный слой с теми же проверками. Хранилище скрыто за интерфейсом Backend: заявлены планы по git-бэкенду с хранением карточек файлами в репозитории, а движок доски можно встраивать в собственные инструменты как Go-библиотеку.
Для локального запуска достаточно аутентифицированного GitHub CLI: aeman открывает интерфейс на 127.0.0.1:8765 и работает с любым проектом GitHub Projects v2, создавая недостающие поля автоматически. Для командной работы предусмотрен многопользовательский режим со входом через GitHub OAuth (готовый docker-compose в комплекте) и Helm-чарт для развёртывания в Kubernetes.
Источник: https://www.opennet.ru/opennews/art.shtml?num=65969




