Настройка
hermes kanban init
hermes dashboard # http://127.0.0.1:9119 → Kanban
Дашборд — лучшее место для наблюдения. Воркеры никогда не видят дашборд — они работают через инструменты kanban_*.
Шесть колонок доски
Сценарий 1: Сольный разработчик
Классический поток: спроектировать → реализовать → протестировать. Три задачи с зависимостями.
SCHEMA=$(hermes kanban create "Design auth schema" \
--assignee backend-dev --priority 2 \
--body "Design user/session/token schema for auth module." \
--json | jq -r .id)
API=$(hermes kanban create "Implement auth API" \
--assignee backend-dev --priority 2 \
--parent $SCHEMA \
--body "POST /register, POST /login, POST /refresh, POST /logout." \
--json | jq -r .id)
hermes kanban create "Write auth tests" \
--assignee qa-dev --priority 2 \
--parent $API \
--body "Cover happy path, wrong password, expired token."
Что происходит:
SCHEMA стартует сразу (нет родителей)API ждёт в todo, пока SCHEMA не завершитсяTests ждёт, пока API не завершитсяКогда SCHEMA достигает done, диспетчер автоматически продвигает API в ready. Воркер API при запуске видит summary и metadata SCHEMA в передаче от родителя.
hermes kanban show $SCHEMA
hermes kanban runs $SCHEMA
# OUTCOME PROFILE ELAPSED
# 1 completed backend-dev 0s
# → users(id, email, pw_hash), sessions(id, user_id, jti, expires_at)
Сценарий 2: Ферма из воркеров
Три воркера (переводчик, транскрайбер, копирайтер) и куча независимых задач. Все работают параллельно.
for lang in Spanish French German; do
hermes kanban create "Translate homepage to $lang" \
--assignee translator --tenant content-ops
done
for i in 1 2 3 4 5; do
hermes kanban create "Transcribe Q3 customer call #$i" \
--assignee transcriber --tenant content-ops
done
for sku in 1001 1002 1003 1004; do
hermes kanban create "Generate product description: SKU-$sku" \
--assignee copywriter --tenant content-ops
done
hermes gateway start # диспетчер разруливает
Диспетчер запускает до N воркеров параллельно. Каждый берёт задачу, работает, завершает. Очередь осушается без участия человека.
Сценарий 3: Пайплайн с ревью и повтором
PM пишет спецификацию → инженер реализует → ревьюер отклоняет → инженер исправляет → ревьюер одобряет.
PM воркер:
kanban_show()
kanban_complete(
summary="spec approved; POST /forgot-password sends email, "
"GET /reset/:token renders form, POST /reset applies new password",
metadata={"acceptance": [
"expired token returns 410",
"reused last-3 password returns 400",
"successful reset invalidates all sessions",
]},
)
Инженер (попытка 1):
kanban_show() # читает acceptance metadata от PM
# ... пишет код ...
kanban_block(
reason="Review: password strength check missing, "
"reset link isn't single-use",
)
Человек разблокирует:
hermes kanban unblock $IMPL
Инженер (попытка 2):
kanban_show() # видит причину блокировки из попытки 1
kanban_complete(
summary="added zxcvbn strength check, reset tokens single-use",
metadata={
"changed_files": ["auth/reset.py", "tests/test_reset.py"],
"tests_run": 11,
"review_iteration": 2,
},
)
В ящике задачи — две попытки с полной историей. Каждый запуск — строка в task_runs.
Сценарий 4: Circuit breaker и восстановление после краша
Circuit breaker
Задача не может запустить воркера (нет credentials). После 3 сбоев подряд диспетчер блокирует задачу:
hermes kanban runs t_ef5d
# OUTCOME PROFILE ELAPSED
# 1 spawn_failed deploy-bot 0s
# ! AWS_ACCESS_KEY_ID not set
# 2 spawn_failed deploy-bot 0s
# ! AWS_ACCESS_KEY_ID not set
# 3 gave_up deploy-bot 0s
# ! AWS_ACCESS_KEY_ID not set
Восстановление после краша
Воркер упал (OOM, segfault). Диспетчер обнаруживает мёртвый PID, освобождает клейм, задача возвращается в ready.
Пример: миграция, вызвавшая OOM:
crashed, OOM kill at row 2.3Mcompleted, стратегия «chunked with LIMIT + WHERE id > last_id»Повторный воркер видит краш попытки 1 в контексте и выбирает безопасную стратегию.
Почему структурированная передача важна
kanban_complete(summary=..., metadata=...) — это не декорация, а основной канал связи между этапами.
Когда воркер на задаче B запускается, worker_context включает:
Это заменяет копание в комментариях и логах.
Следующие шаги
hermes kanban --help — справка по командам