Представлен aeman, инструмент планирования работы инженерных команд

Разработчики облачной платформы 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.

Источник: http://www.opennet.ru/opennews/art.shtml? num=65969

©  OpenNet