{/ Эта страница автоматически создается на основе файла SKILL.md навыка с помощью сайта site/scripts/generate-skill-docs.py. Редактируйте исходный код SKILL.md, а не эту страницу. /}
Канбан-работник
Подводные камни, примеры и крайние случаи для сотрудников Hermes Kanban. Сам жизненный цикл автоматически вводится в системное приглашение каждого работника как KANBAN_GUIDANCE (из агента/prompt_builder.py); этот навык вы загружаете, когда хотите получить более подробную информацию о конкретных сценариях.
Метаданные навыков
Источник
В комплекте (устанавливается по умолчанию)
Путь
skills/devops/kanban-worker
Версия
2.0.0
Платформы
Linux, MacOS, Windows
Теги
канбан, мультиагентность, сотрудничество, рабочий процесс, подводные камни
Ниже приведено полное определение навыка, которое Гермес загружает при активации этого навыка. Это то, что агент видит в качестве инструкций, когда навык активен.
Канбан-работник — подводные камни и примеры
Вы видите этот навык, потому что диспетчер Hermes Kanban создал вас как работника с --skills kanban-worker — он загружается автоматически для каждого отправленного работника. Жизненный цикл (6 шагов: ориентация → работа → пульс → блокировка/завершение) также находится в блоке KANBAN_GUIDANCE, который автоматически вводится в системное приглашение. Этот навык представляет собой более глубокую деталь: хорошие формы передачи обслуживания, повторную диагностику, крайние случаи.
Обработка рабочей области
Тип вашего рабочего пространства определяет, как вам следует вести себя внутри $HERMES_KANBAN_WORKSPACE:
Вид
Что это такое
Как работать
царапать
Свежий каталог tmp, только твой
Читать/писать свободно; он получает GC, когда задача архивируется.
каталог:<путь>
Общий постоянный каталог
Другие прогоны будут читать то, что вы пишете. Относитесь к этому как к долгоживущему государству. Путь гарантированно абсолютен (ядро отвергает относительные пути).
рабочее дерево
Рабочее дерево Git по разрешенному пути
Если .git не существует, сначала запустите git worktree add <path> <branch> из основного репозитория, затем cd и работайте нормально. Зафиксируйте работу здесь.
Изоляция арендатора
Если установлен $HERMES_TENANT, задача принадлежит пространству имен арендатора. При чтении или записи в постоянную память добавляйте к записям памяти префикс арендатора, чтобы контекст не перетекал между арендаторами:
Хорошо: бизнес-а: Acme — наш крупнейший клиент
Плохо (утечка): «Acme — наш крупнейший клиент»
Хорошее резюме + формы метаданных
Передача kanban_complete(summary=..., Metadata=...) — это то, как нижестоящие работники читают то, что вы сделали. Шаблоны, которые работают:
Задание по кодированию:
kanban_complete(summary="shipped rate limiter — token bucket, keys on user_id with IP fallback, 14 tests pass",metadata={"changed_files":["rate_limiter.py","tests/test_rate_limiter.py"],"tests_run":14,"tests_passed":14,"decisions":["user_id primary, IP fallback for unauthenticated requests"],},)
Исследовательская задача:
kanban_complete(summary="3 competing libraries reviewed; vLLM wins on throughput, SGLang on latency, Tensorrt-LLM on memory efficiency",metadata={"sources_read":12,"recommendation":"vLLM","benchmarks":{"vllm":1.0,"sglang":0.87,"trtllm":0.72},},)
Проверить задачу:
kanban_complete(summary="reviewed PR #123; 2 blocking issues found (SQL injection in /search, missing CSRF on /settings)",metadata={"pr_number":123,"findings":[{"severity":"critical","file":"api/search.py","line":42,"issue":"raw SQL concat"},{"severity":"high","file":"api/settings.py","issue":"missing CSRF middleware"},],"approved":False,},)
Формируйте «метаданные», чтобы последующие парсеры (рецензенты, агрегаторы, планировщики) могли использовать их, не перечитывая вашу прозу.
Получение карт, которые вы действительно создали
Если в результате выполнения были созданы новые задачи канбана (через «kanban_create»), передайте идентификаторы в «created_cards» в «kanban_complete». Ядро проверяет, существует ли каждый идентификатор и создан ли он вашим профилем; любой фантомный идентификатор блокирует завершение с указанием ошибок, в которых указано, что пошло не так, а отклоненная попытка постоянно записывается в журнал событий задачи. Списывайте только идентификаторы, полученные из успешного возвращаемого значения kanban_create — никогда не придумывайте идентификаторы из текста, никогда не вставляйте идентификаторы из предыдущих запусков, никогда не требуйте карточек, созданных другим работником.
# GOOD — capture return values, then claim them.c1=kanban_create(title="remediate SQL injection",assignee="security-worker")c2=kanban_create(title="fix CSRF middleware",assignee="web-worker")kanban_complete(summary="Review done; spawned remediations for both findings.",metadata={"pr_number":123,"approved":False},created_cards=[c1["task_id"],c2["task_id"]],)
# BAD — claiming ids you don't have captured return values for.kanban_complete(summary="Created remediation cards t_a1b2c3d4, t_deadbeef",# hallucinatedcreated_cards=["t_a1b2c3d4","t_deadbeef"],# → gate rejects)
Если вызов kanban_create завершается неудачно (исключение,tool_error), карта НЕ была создана — не указывайте для нее фантомный идентификатор. Повторите попытку создания или опустите идентификатор и упомяните об ошибке в сводке. Проход прозаического сканирования также улавливает ссылки t_<hex> в вашем резюме в произвольной форме, которые не разрешаются; они не блокируют завершение, а отображаются в виде рекомендательных предупреждений о задаче на панели мониторинга.
Блокируйте причины, на которые быстро отвечают
Плохо: «застрял» — у человека нет контекста.
Хорошо: одно предложение с указанием конкретного решения, которое вам нужно. Вместо этого оставьте более длинный контекст в качестве комментария.
kanban_comment(task_id=os.environ["HERMES_KANBAN_TASK"],body="Full context: I have user IPs from Cloudflare headers but some users are behind NATs with thousands of peers. Keying on IP alone causes false positives.",)kanban_block(reason="Rate limit key choice: IP (simple, NAT-unsafe) or user_id (requires auth, skips anonymous endpoints)?")
Сообщение о блокировке — это то, что отображается на панели управления/уведомлении шлюза. Комментарий — это более глубокий контекст, который человек читает, когда открывает задачу.
Heartbeats стоит отправить
Прогресс с хорошим пульсом: «эпоха 12/50, потеря 0,31», «просканировано 1,2 млн/2,4 млн строк», «загружено 47/120 видео».
Плохое сердцебиение: «все еще работает», пустые ноты, интервалы в доли секунды. Максимум каждые несколько минут; пропустить полностью для задач менее 2 минут.
Повторные сценарии
Если вы открываете задачу, а kanban_show возвращает runs: [...] с одним или несколькими закрытыми запусками, это повторная попытка. «Результат» / «сводка» / «ошибка» предыдущих запусков расскажет вам, что не сработало. Не повторяйте этот путь. Типичная повторная диагностика:
outcome: "timed_out" — предыдущая попытка достигла max_runtime_секундs. Возможно, вам придется разбить работу на части или сократить ее.
outcome: "crashed" — OOM или segfault. Уменьшите объем памяти.
outcome: "spawn_failed" + error: "..." — обычно проблема с конфигурацией профиля (отсутствуют учетные данные, неверный PATH). Спросите человека через kanban_block вместо того, чтобы повторять попытку вслепую.
outcome: "reclaimed" + summary: "task archived..." — оператор заархивировал задачу из-под предыдущего запуска; вам, вероятно, вообще не следует бегать, внимательно проверяйте статус.
outcome: "blocked" — предыдущая попытка заблокирована; комментарий о разблокировке уже должен быть в теме.
НЕ
Вызовите delegate_task вместо kanban_create. delegate_task предназначен для подзадач краткого рассуждения внутри ВАШЕГО выполнения; kanban_create предназначен для межагентной передачи обслуживания, которая длится один цикл API.
Изменяйте файлы за пределами $HERMES_KANBAN_WORKSPACE, если это не указано в теле задачи.
Создавайте дополнительные задачи для себя — поручайте нужному специалисту.
Завершите задачу, которую вы на самом деле не выполнили. Вместо этого заблокируйте его.
Подводные камни
Состояние задачи может меняться между отправкой и запуском. Между запросом диспетчера и фактической загрузкой процесса задача могла быть заблокирована, переназначена или заархивирована. Всегда сначала kanban_show. Если он сообщает «заблокировано» или «заархивировано», остановитесь — вам не следует запускать.
Рабочая область может содержать устаревшие артефакты. В частности, рабочие области dir: и worktree могут содержать файлы из предыдущих запусков. Прочтите ветку комментариев — обычно там объясняется, почему вы снова работаете и в каком состоянии находится рабочая область.
Не полагайтесь на интерфейс командной строки, когда доступны инструкции. Инструменты kanban_* работают во всех терминальных бэкендах (Docker, Modal, SSH). hermes kanban <verb> из вашего терминального инструмента не будет работать в контейнерных бэкэндах, поскольку там не установлен CLI. Если сомневаетесь, используйте этот инструмент.
Резервный вариант CLI (для сценариев)
Каждый инструмент имеет эквивалент CLI для операторов и сценариев:
- kanban_show ↔ hermes kanban show <id> --json
- kanban_complete ↔ hermes kanban Complete <id> --summary "..." --metadata '{...}'
- kanban_block ↔ гермес канбан-блок <id> "причина"
- kanban_create ↔ hermes kanban create "title" --assignee <профиль> [--parent <id>]
- и т. д.
Используйте инструменты изнутри агента; CLI существует для человека на терминале.