본문으로 건너뛰기

Kanban (다국 보드)

anchor alias
anchor alias
anchor alias

Kanban — 다중 상태 프로필 협업

Want a walkthrough? Kanban tutorial - 4개의 사용자 이야기 (솔로 dev, 함대 농업, 각 대시보드 스크린 샷을 가진 역할 파이프라인). 이 페이지는 참고입니다. 튜토리얼은 narrative입니다.

Hermes Kanban은 모든 Hermes 프로파일을 통해 공유 된 튼튼한 작업 보드입니다. 그것은 fragile in-process subagent swarms없이 작업에 여러 이름의 에이전트가 협력합니다. 모든 작업은 ~/.hermes/kanban.db의 행입니다. 모든 손전등은 누구나 읽고 쓰기 할 수 있습니다. 모든 노동자는 자신의 정체성으로 가득 차있는 OS 과정입니다.

2개의 표면: 공구를 통해서 모델 대화, 당신은 CLI를 통해 대화

보드에는 동일한 ~/.hermes/kanban.db에 의해 뒤로 두 개의 앞문이 있습니다.

  • ** 전용 kanban_* 도구 모음을 통해 보드를 구동 ** - kanban_show, kanban_list, kanban_complete, kanban_block, kanban_heartbeat, kanban_comment, ..., ..., kanban_heartbeat, .... 이 도구는 이미 스키마에 이미 디스커버리 스케이들입니다. 오케스트라 프로파일은 kanban 툴릿을 사용할 수 있습니다. 이 모델은 도구에 직접 호출하여 작업을 읽고 경로, not hermes kanban에 쉘링. 설명 노동자가 이사회와 상호 작용하는 방법 아래에.
  • ** CLI에 hermes kanban …**를 통해 보드를 구동하고, /kanban …를 슬래시 명령 또는 대시보드로 이동합니다. 이들은 인간과 자동화를위한 것입니다 - 도구 통화 모델없이 장소.

같은 kanban_db 레이어를 통해 표면 경로는 모두 일관된 보기와 쓰기가 무려 할 수 없습니다. 이 페이지의 나머지는 CLI 예제를 보여줍니다. 그들은 복사하기 쉽습니다. 그러나 모든 CLI 동사는 모델 사용과 동등한 도구 통화를 가지고 있습니다.

이것은 workloads delegate_task가 할 수있는 모양입니다

  • **Research triage ** - 병렬 연구원 + 분석 + 작가, 인간 -에서 - 루프.
  • Scheduled ops - 일주일에 걸쳐 저널을 구축하는 일일 브리핑.
  • **디지털 트윈 ** — 조수 (inbox-triage, ops-review)로 이름을 따서 시간에 메모리를 축적했습니다.
  • **Engineering 파이프라인 ** — decompose → 평행한 worktrees에서 실행 → 검토 → iterate → PR.
  • Fleet work - N 주제 (50 소셜 계정, 12 모니터링 서비스).

Cline Kanban / Paperclip / NanoClaw / Google Gemini Enterprise에 대한 전체 디자인 합리적 인 비교 분석 및 8 개의 운하 협력 패턴을 보려면 저장소의 docs/hermes-kanban-v1-spec.pdf을 참조하세요.

Kanban 대 delegate_task

그들은 비슷합니다; 그들은 똑같은 원시가 아닙니다.

delegate_task숙박 플랜
제품 정보RPC 호출 (fork → 가입)튼튼한 메시지 큐 + 주 기계
한국어아이가 돌아올 때까지 블록화재 및 대처 후 create
아동 정체성Anonymous 시약persistent 기억을 가진 명료한 단면도
관련 상품아무도 실패 = 실패블록 → 차단 해제 → 재 실행; 충돌 → 저장소
인간의 반복지원되지 않음댓글 / 어떤 시점에서 차단
작업 당 에이전트1개의 호출 = 1개의 시약작업의 삶에 대한 N 에이전트 (레트리, 리뷰, 후속)
감사의 길컨텍스트 압축에 손실SQLite forever에 있는 튼튼한 행
관련 기사Hierarchical (콜러 → 통화)Peer — 모든 프로필 읽기/쓰기 모든 작업

** One-sentence 구분:** delegate_task는 함수 호출입니다. Kanban은 모든 handoff가 어떤 프로파일(또는 인간)가 볼 수 있는 작업 큐입니다.

delegate_task를 사용할 경우 부모 에이전트가 계속되기 전에 짧은 이유가 필요합니다. 인간은 참여하지 않습니다. 결과는 부모의 컨텍스트로 돌아갑니다.

Kanban을 사용하여 작업은 에이전트 경계를 교차하고, 재시작을 살아야 할 필요가, 인간의 입력이 필요할 수 있습니다, 다른 역할에 의해 픽업 될 수있다, 또는 사실 후 발견 할 필요가.

그들은 coexist: kanban 노동자는 delegate_task를 내부적으로 호출 할 수 있습니다.

핵심 개념

  • ** Board** — SQLite DB, workspaces를 사용하여 작업의 독립 큐 디렉토리 및 파견자 루프. 단일 설치에는 많은 보드가 있습니다 (예: 프로젝트, 재포, 또는 도메인 당 하나); 보드 (멀티 프로젝트) 참조 아래. 단일 프로젝트 사용자는 default 보드에 머물지 않고 결코 볼 수 없습니다 워드 "board" 이 문서 섹션 밖에.
  • Task — 제목, 선택적인 몸, 1개의 주지사 (프로필 이름), 상태 (triage | todo | ready | running | blocked | done | archived), 선택적인 tenant namespace, 선택적인 idempotency 열쇠 (회전 자동화를 위한 dedup)를 가진 줄.
  • Linktask_links 는 부모 → 아이 의존성을 기록합니다. 파견자는 모든 부모가 todo → ready이면 done가 됩니다.
  • Comment - 간 시약 프로토콜. Agents and Humans append comments; worker가 (re-)spawned 경우 전체 주석 스레드를 컨텍스트의 일부로 읽습니다.
  • Workspace - 작업자가 동작하는 디렉토리. 3개의 종류:
    • scratch (기본값) - ~/.hermes/kanban/workspaces/<id>/ (또는 ~/.hermes/kanban/boards/<slug>/workspaces/<id>/)의 신선한 tmp dir.
    • dir:<path> - 기존 공유 디렉토리 (Obsidian vault, mail ops dir, per-account 폴더). 절대 경로가 있습니다. dir:../tenants/foo/와 같은 상대 경로는 CWD에 대해 해결하기 때문에 파견에서 거부됩니다. 이는 주변과 혼란스러운 탈출 벡터입니다. 경로는 그렇지 않으면 신뢰할 수 있습니다 - 상자, 파일 시스템, 노동자는 uid로 실행됩니다. 이것은 신뢰할 수있는 로컬 사용자 위협 모델입니다; kanban은 디자인에 의해 단일 호스트입니다.
    • worktree - 코딩 작업을 위해 .worktrees/<id>/ 아래의 git worktree. 노동자 측 git worktree add는 그것을 만듭니다.
  • Dispatcher - 긴 라이브 루프, 모든 N 초 (과태 60): stale 주장을 다시 인용, 추락 된 근로자 (PID가 사라지지만 TTL이 만료되지 않음), 준비 된 작업을 촉진, 원자로 주장, 할당 된 프로파일. 기본적으로 Gateway**를 실행합니다(kanban.dispatch_in_gateway: true). 1명의 파견자는 진드기에 의하여 모든 널을 청소합니다; 노동자는 HERMES_KANBAN_BOARD로 그렸습니다 그래서 그들은 다른 널을 볼 수 없습니다. kanban.failure_limit 같은 작업의 연속 스패니트 실패(기본값: 2) 디스패시터 자동 블록이 마지막 오류로 발생하므로, 프로파일이 존재하지 않는 작업에 대해 엄밀하게 방지하고, 작업 공간은 마운트 할 수 없습니다.
  • Tenant - 옵션 문자열 네임스페이스 within 보드. 하나의 전문 함대는 워크스페이스 경로 및 메모리 키 접두사에 의해 데이터 고립으로 다중 비즈니스 (--tenant business-a)를 제공 할 수 있습니다. Tenants는 연약한 여과기입니다; 널은 단단한 고립 경계입니다.

보드 (다 프로젝트)

보드는 작업의 관련 스트림을 분리 할 수 있습니다 — 프로젝트 당 하나, repo, 또는 도메인 - 격리 된 큐. 새로운 설치는 정확히 하나의 보드 호출 default (DB at ~/.hermes/kanban.db back-compat). 사용자 누구 단지 일의 1개의 시내를 결코 널에 관하여 알 필요가 없습니다 원합니다; 특징 옵션 정보.

Per-board 고립은 절대적입니다:

  • 보드 당 별도 SQLite DB (~/.hermes/kanban/boards/<slug>/kanban.db).
  • 별도 workspaces/logs/ 디렉토리.
  • 작업자는 작업이 볼 수 있습니다 자신의 보드의 작업 - 파견자 세트 HERMES_KANBAN_BOARD 아이 env와 각 kanban_* 도구는 노동자가 그것을 읽는 데 액세스 할 수 있습니다.
  • 보드 전반에 걸쳐 작업 연결은 허용되지 않습니다 ( schema를 단순하게 만듭니다 당신은 정말 크로스 프로젝트 refs 필요, 무료 텍스트 언급을 사용 하 고 봐 그들은 수동으로 id에 의해.

CLI에서 널 관리

# See what's on disk. Fresh installs show only "default".
hermes kanban boards list

# Create a new board.
hermes kanban boards create atm10-server \
--name "ATM10 Server" \
--description "Minecraft modded server ops" \
--icon 🎮 \
--switch # optional: make it the active board

# Operate on a specific board without switching.
hermes kanban --board atm10-server list
hermes kanban --board atm10-server create "Restart ATM server" --assignee ops

# Change which board is "current" for subsequent calls.
hermes kanban boards switch atm10-server
hermes kanban boards show # who's active right now?

# Rename the display name (the slug is immutable — it's the directory name).
hermes kanban boards rename atm10-server "ATM10 (Prod)"

# Archive (default) — moves the board's dir to boards/_archived/<slug>-<ts>/.
# Recoverable by moving the dir back.
hermes kanban boards rm atm10-server

# Hard delete — `rm -rf` the board dir. No recovery.
hermes kanban boards rm atm10-server --delete

널 해결책 순서 (최고 precedence 첫째로):

  1. Explicit --board &lt;slug&gt; 에 CLI 호출합니다.
  2. HERMES_KANBAN_BOARD env var (발생시 파견자가 설정) 노동자, 그래서 노동자는 다른 널을 볼 수 없습니다).
  3. ~/.hermes/kanban/currenthermes kanban의 슬러그 보드 스위치.
  4. default입니다.

Slugs는 유효합니다: 더 낮은 케이스 alphanumerics + hyphens + underscores, 1-64 chars, 알파벳으로 시작해야합니다. Uppercase 입력은 auto-downcased입니다. 다른 것 (주사, 공간, 점, ..)는 CLI 레이어에서 거부됩니다 그래서 path-traversal 트릭은 보드 이름을 지정할 수 없습니다.

대시보드 관리

hermes dashboard → Kanban 탭은 상단의 보드 스위퍼를 곧 보여줍니다 한 개 이상의 보드가 존재합니다 (또는 어떤 보드에는 작업이 있습니다). 단일 보드 사용자 작은 + New board 단추만 볼 수 있습니다; 스위처는 그것까지 숨겨집니다 설명.

  • ** Board dropdown** - 활성 보드를 선택하세요. 당신의 선택은 저장됩니다 브라우저의 localStorage 그래서 다시로드를 통해 지속됩니다 CLI의 current 포인터를 왼쪽으로 이동 설명.
  • ** + New board** — slug, display name에 대한 modal 요청을 엽니다, 설명 및 아이콘. 자동 스위치를 새 보드에 옵션.
  • **아카이브 ** - 비default 보드에서만 표시됩니다. 확인, 다음 이동 boards/_archived/에 보드 디더.

모든 대쉬보드 API 엔드포인트는 보드 득점을 위한 ?board=&lt;slug&gt;를 허용합니다. 더 보기 행사일정 WebSocket은 연결 시간에 보드에 고정됩니다 UI는 새 보드에 대한 신선한 WS를 엽니다.

빠른 시작

아래 명령은 ** (인간) 보드를 설정하고 작업을 생성. 작업이 할당되면, 파견자는 작업자가 할당 된 프로필을 잡았고, 거기에서 모델은 kanban_* 도구 호출을 통해 작업을 구동한다, CLI 명령 ** - 작업자가 보드와 상호 작용하는 방법.

# 1. Create the board (you)
hermes kanban init

# 2. Start the gateway (hosts the embedded dispatcher)
hermes gateway start

# 3. Create a task (you — or an orchestrator agent via kanban_create)
hermes kanban create "research AI funding landscape" --assignee researcher

# 4. Watch activity live (you)
hermes kanban watch

# 5. See the board (you)
hermes kanban list
hermes kanban stats

파견자가 t_abcd를 픽업하고 researcher 프로필을 스팸을 풉니 다, 노동자의 모델이 호출되는 첫 번째 것은 kanban_show()로 호출됩니다. hermes kanban show t_abcd를 실행하지 않습니다.

Gateway-embedded 파견자 (기본값)

파견자는 게이트웨이 프로세스 내에서 실행됩니다. 설치하지 않는 별도의 서비스 관리 — 게이트웨이가 올 경우, 준비된 작업은 픽업 다음 진드기에 최대 (60s 기본적으로).

# config.yaml
kanban:
dispatch_in_gateway: true # default
dispatch_interval_seconds: 60 # default

runtime에서 config 플래그를 상속합니다. HERMES_KANBAN_DISPATCH_IN_GATEWAY=0 디버깅 표준 게이트웨이 감독 적용: run hermes Gateway start 직접, 또는 systemd 사용자 단위로 게이트웨이를 타십시오 (보기 게이트웨이 문서). 실행 게이트웨이 없이 ready 작업은 어디에 있는지 까지 하나 올 것 — hermes kanban create 생성에 대해 경고 시간.

hermes kanban daemon 을 별도의 프로세스로 실행하는 것은 deprecated; 관문을 사용하세요. 게이트웨이를 실행할 수 없는 경우 (headless host) 정책 forbids long-lived 서비스, 등) --force 탈출 해치 유지 오래된 독립 데몬은 한 번의 릴리스 사이클 동안 살아 있지만 모두 실행 관문 조립 된 파견자 및 독립 데몬과 같은 kanban.db는 클레임 레이스를 발생시키고 지원되지 않습니다.

Idempotent 생성 (자동화/웹훅용)

# First call creates the task. Any subsequent call with the same key
# returns the existing task id instead of duplicating.
hermes kanban create "nightly ops review" \
--assignee ops \
--idempotency-key "nightly-ops-$(date -u +%Y-%m-%d)" \
--json

대량 CLI 동사

모든 생명주기 동사는 여러 ids를 수락하므로 배치를 청소 할 수 있습니다 1개의 명령에서:

hermes kanban complete t_abc t_def t_hij --result "batch wrap"
hermes kanban archive t_abc t_def t_hij
hermes kanban unblock t_abc t_def
hermes kanban block t_abc "need input" --ids t_def t_hij

근로자가 이사회와 상호 작용하는 방법

노동자는 hermes kanban에 넣지 않습니다. 파견자가 노동자가 HERMES_KANBAN_TASK=t_abcd를 자식의 env로 설정하고, 전용 Kanban 도구 모델의 스키마에 env var 플립이 있습니다. 같은 도구는 또한 툴킷 구성에서 kanban를 활성화하는 Orchestrator 프로파일을 사용할 수 있습니다. 이 도구는 파이썬 kanban_db 레이어를 통해 직접 보드를 읽을 수 있으며 CLI와 동일합니다. 실행 노동자는 다른 도구와 같은 이러한 호출; 그것은 보이지 않거나 필요 hermes kanban CLI.

제품 정보설명필수 params
kanban_show현재 작업을 읽으십시오 (제목, 몸, 이전 시도, 부모 손전등, 의견, 전체 사전 포맷 된 worker_컨텍스트). env의 작업 ID에 기본값.
kanban_listassignee, status, tenant, archived 가시성 및 한계에 대한 필터와 작업 요약 목록. 관현악의 발견을 위해 의도한다.
kanban_completesummary + metadata 구조의 핸드오프로 마무리하세요.적어도 하나 summary / result
kanban_blockreason로 인간의 입력에 대한 확장.reason
kanban_heartbeat긴 가동 도중 신호 liveness. 순수한 부작용.
kanban_comment작업 스레드에 대한 튼튼한 메모를 승인.task_id, body
kanban_create(Orchestrators) assignee, 선택 parents, skills 등 어린이 작업에 팬.title, assignee
kanban_link(Orchestrators)는 실제로 후 parent_id → child_id 의존성 가장자리를 추가합니다.parent_id, child_id
kanban_unblock(Orchestrators)는 ready로 블록 작업을 다시 이동합니다.task_id

전형적인 노동자는 같이 봅니다:

# Model's tool calls, in order:
kanban_show() # no args — uses HERMES_KANBAN_TASK
# (model reads the returned worker_context, does the work via terminal/file tools)
kanban_heartbeat(note="halfway through — 4 of 8 files transformed")
# (more work)
kanban_complete(
summary="migrated limiter.py to token-bucket; added 14 tests, all pass",
metadata={"changed_files": ["limiter.py", "tests/test_limiter.py"], "tests_run": 14},
)

orchestrator 대신 작업자 팬:

kanban_show()
kanban_create(
title="research ICP funding 2024-2026",
assignee="researcher-a",
body="focus on seed + series A, North America, AI-adjacent",
)
# → returns {"task_id": "t_r1",...}
kanban_create(title="research ICP funding — EU angle", assignee="researcher-b", body="…")
# → returns {"task_id": "t_r2",...}
kanban_create(
title="synthesize findings into launch brief",
assignee="writer",
parents=["t_r1", "t_r2"], # promotes to ready when both complete
body="one-pager, 300 words, neutral tone",
)
kanban_complete(summary="decomposed into 2 research tasks + 1 writer; linked dependencies")

"(Orchestrators)" 도구 - kanban_list, kanban_create, kanban_link, kanban_unblockkanban_comment 외국 작업에서 동일한 툴릿을 통해 사용할 수 있습니다. (kanban-orchestrator 스킬에 의해 시행)는 작업자 또는 작업자가 아닌 작업자 또는 작업자에 대해 작업하지 않습니다. Dispatcher-spawned workers are still task-scoped for destructive lifecycle operations and could mutate unrelated task.

hermes kanban 대신의 도구

3가지 이유:

  1. 다항성. 원격 백엔드 (Docker / Modal / Singularity / SSH)의 터미널 도구 포인트가 hermes kanban complete inside 컨테이너에서 실행되는 노동자는 hermes가 설치되지 않았으며 ~/.hermes/kanban.db가 장착되지 않습니다. kanban 도구는 에이전트 자체 파이썬 프로세스에서 실행하고 항상 터미널 백엔드에 관계없이 ~/.hermes/kanban.db에 도달합니다.
  2. 껍질 인용 fragility 없음. shlex + argparse를 통해 --metadata '{"files": [...]}'를 전달하는 것은 늦은 발군입니다. Structured 도구 args는 완전히 건너 뛸 수 있습니다.
  3. 오류가 있습니다. 도구 결과는 구조화 된 JSON 모델에 대한 이유를 할 수 있습니다, stderr 문자열 그것은 파스를 가지고.

영 schema 발자국 정상 세션. 일반 hermes chat 세션에는 0 kanban_* 도구가 있습니다. check_fn는 각 도구에서 반환합니다. HERMES_KANBAN_TASK가 설정될 때, 이 프로세스를 닦았을 때만 발생합니다. kanban을 결코 만지지 않는 사용자를위한 도구 블라우스 없음.

kanban-workerkanban-orchestrator 스킬은 도구가 언제나 어떤 순서로 호출하는 모델을 가르치는 모델들을 가르칩니다.

kanban_complete(summary=..., metadata={...})는 의도적으로 유연합니다 요약은 인간의 읽기 가능한 닫기이며, metadata는 downstream 에이전트, reviewers, 또는 대쉬보드가 될 수 있는 machine-readable handoff prose를 긁지 않고 재사용합니다.

엔지니어링 및 검토 작업을 위해이 옵션 메타 데이터 모양을 선호하세요

{
"changed_files": ["path/to/file.py"],
"verification": ["pytest tests/hermes_cli/test_kanban_db.py -q"],
"dependencies": ["parent task id or external issue, if any"],
"blocked_reason": null,
"retry_notes": "what failed before, if this was a retry",
"residual_risk": ["what was not tested or still needs human review"]
}

이 키는 컨벤션, 스키마 요구 사항이 아닙니다. 편의 용품 그 모든 노동자는 다음 독자에 대한 충분한 증거를 남겨 네 대답 빨리 질문:

  1. 어떤 변경?
  2. 어떻게 검증되었습니까?
  3. 실패한 경우 어떻게 차단하거나 다시 시도할 수 있습니까?
  4. 위험은 여전히 공개되지 않습니다?

비밀 유지, 원료 로그, 토큰, OAuth 자료, 및 관련 성적표 metadata입니다. 대신 점퍼 및 summaries를 저장하세요. 작업이 파일이 없거나 테스트, summary에서 명시적으로 말하고 metadata를 사용하여 증거에 대해 소스 URL, 문제 ids, 또는 수동 검토 단계와 같은 존재합니다.

노동자 기술

kanban 작업을 수행 할 수있는 모든 프로파일은 kanban-worker 스킬을로드해야합니다. **tool 호출 **의 전체 수명주기를 가르치는 것은 CLI 명령이 아닙니다

  1. 스페인에서, 호출 kanban_show() 제목을 읽기 위해 + 몸 + 부모 손전등 + 사전 시도 + 전체 댓글 스레드.
  2. cd $HERMES_KANBAN_WORKSPACE (단말 도구를 통해) 작업을 수행.
  3. 호출 kanban_heartbeat(note="...") 긴 작업 중 몇 분.
  4. kanban_complete(summary="...", metadata={...}), 또는 kanban_block(reason="...")로 완료하면 됩니다.

kanban-worker는 설치 중에 모든 프로파일과 동기화된 번들 스킬입니다 업데이트 - 별도의 스킬 허브 설치 단계가 없습니다. 현재 위치 kanban 노동자 (researcher, writer, ops, 등):

hermes -p <your-worker-profile> skills list | grep kanban-worker

번들 사본이 누락되면, 그 프로필에 대한 복원:

hermes -p <your-worker-profile> skills reset kanban-worker --restore

파견자는 또한 자동 통행 --skills kanban-worker는 각 노동자를 간격을 달을 때, 그래서 노동자는 항상 단면도의 기본 기술 구성이 포함되지 않는 경우에 조차 유효한 본 도서관이 있습니다.

특정 작업에 추가 스킬을 핑

때로는 하나의 작업은 전문가가 할당 된 프로파일이 기본적으로 수행되지 않습니다. translation 스킬을 필요로하는 번역 작업, github-code-review를 필요로하는 리뷰 작업, security-pr-audit를 필요로하는 보안 감사. 할당자의 프로필을 매번 편집하고 작업에 직접 스킬을 첨부합니다.

오케스트라 에이전트 (일반적인 경우 - 하나의 에이전트 라우팅 일), kanban_create 도구의 skills 배열을 사용:

kanban_create(
title="translate README to Japanese",
assignee="linguist",
skills=["translation"],
)

kanban_create(
title="audit auth flow",
assignee="reviewer",
skills=["security-pr-audit", "github-code-review"],
)

인간 (CLI / 슬래시 명령), 반복 --skill 각각의 경우:

hermes kanban create "translate README to Japanese" \
--assignee linguist \
--skill translation

hermes kanban create "audit auth flow" \
--assignee reviewer \
--skill security-pr-audit \
--skill github-code-review

대시보드에서, 기술 comma-separated into the ** inline create form.

이 스킬은 **additive ** 내장 된 kanban-worker에 - 파견자는 각각 하나의 --skills &lt;name&gt; 플래그를 방출 (그리고 내장), 그래서 그들은 모두로드 된 노동자 스페인. 기술 이름은 할당자의 프로필에 실제로 설치되는 스킬에 일치해야합니다 (run hermes skills list 사용 가능한 것을 볼 수); 실행 시간 설치가 없습니다.

관현악 기술

**well-behaved Orchestrator는 작동하지 않습니다. ** 그것은 사용자의 목표를 작업으로 decomposes, 연결, 설정 한 프로필 중 하나를 할당, 그리고 다시 단계. kanban-orchestrator 스킬이 도구 통화 패턴으로 인코딩합니다. 안티 - temptation 규칙, Step-0 프로파일 디버깅 프롬프트 (자체적으로 알 수없는 할당 이름에 실패, 그래서 관현관은 실제로 기계에 존재하는 프로필에 모든 카드를 접지해야합니다), kanban_create / kanban_link / /.

관현 관현악 턴 (2 병렬 연구원은 작가에 손을 잡고):

# Goal from user: "draft a launch post on the ICP funding landscape"
kanban_create(title="research ICP funding, NA angle", assignee="researcher-a", body="…") # → t_r1
kanban_create(title="research ICP funding, EU angle", assignee="researcher-b", body="…") # → t_r2
kanban_create(
title="synthesize ICP funding research into launch post draft",
assignee="writer",
parents=["t_r1", "t_r2"], # promoted to 'ready' when both researchers complete
body="one-pager, neutral tone, cite sources inline",
) # → t_w1
# Optional: add cross-cutting deps discovered later without re-creating tasks
kanban_link(parent_id="t_r1", child_id="t_followup")
kanban_complete(
summary="decomposed into 2 parallel research tasks → 1 synthesis task; writer starts when both researchers finish",
)
``kanban-orchestrator`는 번들 기술입니다. 각 프로파일에 동기화됩니다
설치 및 업데이트, 그래서 별도의 스킬 허브 설치 단계가 없습니다. 그것을 검증
당신의 오케스트라 프로필에서 현재:

```bash
hermes -p orchestrator skills list | grep kanban-orchestrator

번들 사본이 누락되면, 그 프로필에 대한 복원:

hermes -p orchestrator skills reset kanban-orchestrator --restore

최고의 결과를 위해, 도구가 보드 작업에 제한되는 프로파일과 쌍 (kanban, gateway, memory) 그래서 오케스트라는 실행 작업을 수행 할 수 없습니다.

대시보드 (GUI)

/kanban CLI와 슬래시 명령은 보드를 완전히 실행하기에 충분하지만, 시각적 보드는 종종 인간에서 반복을위한 올바른 인터페이스입니다: 삼기, 크로스 프로파일 감독, 독서 주석 스레드, 열 사이의 드래그 카드. Hermes는 plugins/kanban/bundled 대쉬보드 플러그인로, 코어 기능이 아닌 별도의 서비스가 아닌, 대시보드 종료에서 놓은 모델에 따라 다릅니다.

함께 열기:

hermes kanban init      # one-time: create kanban.db if not already present
hermes dashboard # "Kanban" tab appears in the nav, after "Skills"

플러그인은 당신에게 제공

  • AKanban 탭은 상태당 한 열을 표시합니다. triage, todo, ready, running, blocked, done, archived, 토글이 있을 때).
    • triage는 거친 아이디어의 주차 기둥입니다. hermes kanban create --triage (또는 Triage Column의 인라인 생성을 통해)으로 생성 된 작업은 인간 또는 specifier가 todo / ready로 홍보 할 때까지 혼자서 남겨두고 있습니다. hermes kanban specify &lt;id&gt; 를 실행하여 보조 LLM은 콘크리트 사양 (제목 + 체와 목표, 접근, 수용 기준)으로 삼가 작업을 확장하고 todo 를 하나의 샷으로 홍보합니다. --all는 한 번에 모든 삼가 작업을 청소합니다. 어떤 모델은 auxiliary.triage_specifierconfig.yaml 아래 specifier를 실행합니다.
  • 카드는 작업 ID, 제목, 우선 배지, 임의 태그, 할당 된 프로필, 댓글 / 링크 수, progress pill (HMES_TOKEN_00000 아이들은 작업이 의존 할 때 수행), 그리고 "created N 전". 각 카드 체크 박스는 멀티 선택이 가능합니다.
  • ** 실행중인 내부의 파일 차선 ** — 도구 모음 체크 박스 toggles sub-grouping of the running column by assignee.
  • ** WebSocket**를 통한 실시간 업데이트 — 플러그인은 짧은 설문 조사 간격에서 append-only task_events 테이블을 꼬리합니다. 이 보드는 즉시 어떤 프로파일 (CLI, Gateway, 또는 다른 대시보드 탭) 동작을 반영합니다. Reloads는 이벤트의 파열이 단일 refetch를 유발합니다.
  • Drag-drop 카드는 열 사이에 상태를 변경합니다. 드롭은 같은 PATCH /api/plugins/kanban/tasks/:id를 전달하는 kanban_db 코드를 사용하여 CLI를 사용합니다. — 세 개의 표면은 결코 드리프트 할 수 없습니다. 파괴적인 상태로 이동 (done, archived, blocked) 확인을 위해 신속한. 터치 장치는 점퍼 기반 낙하를 사용하므로 보드는 태블릿에서 사용할 수 있습니다.
  • Inline create — click + on any column header to type a title, 할당, 우선, 그리고 (선택적으로) 모든 기존 작업에 드롭다운에서 부모 작업. Triage 컬럼의 창조는 새 작업을 triage.
  • ** 대량 작업과 멀티 선택 ** - 카드 또는 체크 박스를 클릭하여 선택에 추가하십시오. 일괄 작업 표시 줄은 일괄 상태 전환, 아카이브 및 재 할당으로 상단에 나타납니다 (프로필 드롭다운으로, 또는 "(unassign)"). 파괴적인 배치는 첫째로 확인합니다. Per-id 부분적인 실패는 나머지를 낙관하지 않고 보고됩니다.
  • ** 옆 서랍(Escape 또는 click-outside closes)을 열려면 카드**( shift/ctrl 없이)를 클릭하십시오:
    • Editable title - 이름 변경을 클릭합니다.
    • **Editable 할당자 / 우선 ** - 메타 행을 다시 쓰기 클릭합니다.
    • Editable description - 기본 (헤딩, 대담, 이탈, 인라인 코드, 담 코드, http(s) / mailto: 링크, 총알 목록)에 의해 표시된, textarea에서 스왑하는 "edit" 버튼. Markdown 렌더링은 작은, XSS-safe 렌더링기입니다. 모든 하위 헌법은 HTML-escaped 입력에서 실행되며, http(s) / mailto: 링크 패스를 통해, target="_blank" + rel="noopener noreferrer" 항상 설정됩니다.
    • **Dependency 편집기 ** - 부모와 자녀의 칩 목록, ×와 링크, 플러스 새로운 부모 또는 자녀를 추가하기 위해 다른 작업에 드롭 다운. 주기 시도는 명확한 메시지로 서버 측을 거부합니다.
    • Status action row (→ triage / → ready / → running / block / unblock / complete / archive)는 파괴적인 전환에 대한 신속한 확인을 제공합니다. Triage 컬럼의 카드는 열도 노출 ✨ 지정 버튼은 보조 LLM (auxiliary.triage_specifier in config.yaml)을 호출하여 콘크리트 spec(title + body with 목표, 접근, 수용 기준)으로 1-liner를 확장하고 todo로 작업을 홍보합니다. 같은 행동은 CLI (hermes kanban specify &lt;id&gt; / --all)에서 도달 할 수 있으며, 모든 게이트웨이 플랫폼 (/kanban specify &lt;id&gt;) 및 POST /api/plugins/kanban/tasks/:id/specify를 통해 프로그래밍 할 수 있습니다.
    • 결과 섹션 (또한 markdown-rendered), Enter-to-submit가있는 주석 스레드, 마지막 20 이벤트.
  • ** 도구 모음 필터 ** - 무료 텍스트 검색, 10ant dropdown (기본값에서 dashboard.kanban.default_tenant 에서 config.yaml), 할당 드롭다운, "show archived" toggle, "강진으로" toggle, 그리고 Nudge dispatcher 버튼 그래서 당신은 다음 60 s tick.

시각적으로 대상은 익숙한 선형 / 융합 레이아웃입니다: 어두운 테마, 숫자가있는 열 헤더, 색 상태 도트, 우선 순위 및 임계를위한 알약 칩. 플러그인은 테마 CSS vars (--color-*, --radius, --font-mono,...)에서만 테마를 읽습니다. 이 플러그인은 누구나 대쉬보드 테마가 활성화됩니다.

회사연혁

GUI는 엄격하게 ** read-through-the-DB + write-through-kanban_db ** 레이어 자체의 도메인 논리 없음:

┌────────────────────────┐      WebSocket (tails task_events)
│ React SPA (plugin) │ ◀──────────────────────────────────┐
│ HTML5 drag-and-drop │ │
└──────────┬─────────────┘ │
│ REST over fetchJSON │
▼ │
┌────────────────────────┐ writes call kanban_db.* │
│ FastAPI router │ directly — same code path │
│ plugins/kanban/ │ the CLI /kanban verbs use │
│ dashboard/plugin_api.py │
└──────────┬─────────────┘ │
│ │
▼ │
┌────────────────────────┐ │
│ ~/.hermes/kanban.db │ ───── append task_events ──────────┘
│ (WAL, shared) │
└────────────────────────┘

REST 표면

모든 경로는 /api/plugins/kanban/ 아래에 장착되며 대시보드의 ephemeral 세션 토큰에 의해 보호됩니다

MethodPathPurpose
GET/board?tenant=&lt;name&gt;&include_archived=…상태 열에 의해 그룹화 된 전체 보드, 필터 드롭다운을위한 10 개 + 할당
GET/tasks/:id작업 + 의견 + 이벤트 + 링크
POST/tasks생성 (물 kanban_db.create_task, triage: boolparents: [id, …])
PATCH/tasks/:id상태 / 할당 / 우선 / 제목 / 몸 / 결과
POST/tasks/bulkids의 모든 ID에 동일한 패치 (status / 아카이브 / 할당 / 우선 순위)를 적용합니다. siblings 없이 보고된 id 실패
POST/tasks/:id/comments자주 묻는 질문
POST/tasks/:id/specifytriage specifier를 실행 - 작업 몸에서 보조 LLM 살해하고 triage에서 todo로 승진시킵니다. 기타 제품 {ok, task_id, reason, new_title}; ok=false for an human-readable reason on "not in triage" / 아니 보조 클라이언트 / LLM 오류는 200, 아니 4xx
POST/links종속성 추가 (parent_idchild_id)
DELETE/links?parent_id=…&child_id=…신뢰할 수 있는 제거
POST/dispatch?max=…&dry_run=…디스트리뷰터 발표 - 60 s 대기를 건너
GET/config읽기 dashboard.kanbanconfig.yaml - default_tenant, lane_by_profile, include_archived_by_default, render_markdown
WS/events?since=&lt;event_id&gt;task_events 행 라이브 스트림

모든 핸들러는 얇은 래퍼입니다. 플러그인은 Python (router + WebSocket tail + bulk batcher + config reader)의 ~700 라인이며 새로운 비즈니스 논리를 추가합니다. 작은 _conn() 헬퍼 자동 initializes kanban.db 각 읽기 및 쓰기에, 그래서 사용자가 처음 대시보드를 열지 여부, REST API를 직접 입력, 또는 랜 hermes kanban init.

Dashboard 설정

dashboard.kanban~/.hermes/config.yaml~/.hermes/config.yamlGET /config를 통해 로드시에 플러그인을 읽습니다

dashboard:
kanban:
default_tenant: acme # preselects the tenant filter
lane_by_profile: true # default for the "lanes by profile" toggle
include_archived_by_default: false
render_markdown: true # set false for plain &lt;pre&gt; rendering

각 키는 선택 사항이며 표시된 기본으로 돌아갑니다.

보안 모델

대쉬보드의 HTTP auth 미들웨어 explicitly Skips /api/plugins/ - 플러그인 경로는 대쉬보드가 기본적으로 localhost에 바인딩되기 때문에 디자인에 의해 무관합니다. 즉, kanban REST 표면은 호스트에 어떤 프로세스에서 도달 할 수 있습니다.

WebSocket은 하나의 추가 단계가 필요합니다. ?token=… 쿼리 매개 변수 (브라우저는 업그레이드 요청에 Authorization를 설정할 수 없습니다)로 대시보드의 ephemeral 세션 토큰이 필요하며, in-browser PTY 브리지를 사용하여 사용되는 패턴과 일치합니다.

hermes dashboard --host 0.0.0.0를 실행하면, 각 플러그인 루트 — kanban 포함 — 네트워크에서 도달 할 수 있습니다. ** 공유된 호스트에 해당하지 마십시오. ** 보드에는 작업 기관, 의견 및 작업 공간 경로가 포함되어 있습니다. 이 루트에 도달하는 공격자는 전체 협업 표면에 대한 액세스를 읽고 / 할당 / 아카이브 작업을 만들 수 있습니다.

~/.hermes/kanban.db의 작업은 목적에 대한 프로파일-agnostic입니다. hermes -p &lt;profile&gt; dashboard로 대시보드를 열면 호스트의 다른 프로파일에 의해 생성된 작업을 보여줍니다. 동일한 사용자는 모든 프로파일을 소유하지만, 여러 사람의 coexist가 알고 있습니다.

라이브 업데이트

task_events는 모노토닉 id의 부가 전용 SQLite 테이블입니다. WebSocket 엔드포인트는 각 클라이언트의 마지막 세엔 이벤트 ID를 보유하고 있으며 새로운 행을 땅으로 밀어줍니다. 이벤트의 파열이 도착했을 때, frontend는 (매우 저렴) 보드 엔드 포인트를 다시로드합니다. - 모든 이벤트의 종류에서 지역 상태를 패치하려고보다 간단하고 더 정확합니다. WAL 모드는 읽힌 루프가 파견자의 BEGIN IMMEDIATE 청구 트랜잭션을 차단하지 않습니다.

그것을 확장

플러그인은 표준 헤르메스 대시보드 플러그인 컨트랙트를 사용 — 대시보드 종료 전체 표시, 쉘 슬롯, 페이지-scoped 슬롯, 그리고 플러그인 SDK를 참조하십시오. 추가 열, 사용자 정의 카드 크롬, tenant-filtered 레이아웃, 또는 전체 tab.override 교체는이 플러그인을 위조하지 않고 모든 표현입니다.

제거없이 비활성화: dashboard.plugins.kanban.enabled: falseconfig.yaml (또는 plugins/kanban/dashboard/manifest.json를 삭제합니다).

범위 경계

GUI는 deliberately 얇은 것입니다. 모든 플러그인은 CLI에서 사용할 수 있습니다; 플러그인은 인간에게 편안합니다. Auto-assignment, 예산, 관리 게이트, 그리고 org-chart 전망은 사용자 공간 - 라우터 프로필, 또 다른 플러그인, 또는 tools/approval.py의 재사용을 유지 - 디자인 사양의 아웃-of-scope 섹션에 나열된 것과 정확히.

CLI 명령 참조

this is the surfaceyou (또는 scripts, cron, the 대쉬보드) use to drive the board. 파견자는 kanban_* tool surface를 사용하여 동일한 작업을 수행할 수 있습니다. CLI here와 kanban_db를 통해 경로가 두 개 있습니다. 따라서 두 개의 표면은 건설에 동의합니다.

hermes kanban init                                     # create kanban.db + print daemon hint
hermes kanban create "&lt;title&gt;" [--body...] [--assignee &lt;profile&gt;]
[--parent &lt;id&gt;]... [--tenant &lt;name&gt;]
[--workspace scratch|worktree|dir:&lt;path&gt;]
[--priority N] [--triage] [--idempotency-key KEY]
[--max-runtime 30m|2h|1d|&lt;seconds&gt;]
[--skill &lt;name&gt;]...
[--json]
hermes kanban list [--mine] [--assignee P] [--status S] [--tenant T] [--archived] [--json]
hermes kanban show &lt;id&gt; [--json]
hermes kanban assign &lt;id&gt; &lt;profile&gt; # or 'none' to unassign
hermes kanban link &lt;parent_id&gt; &lt;child_id&gt;
hermes kanban unlink &lt;parent_id&gt; &lt;child_id&gt;
hermes kanban claim &lt;id&gt; [--ttl SECONDS]
hermes kanban comment &lt;id&gt; "&lt;text&gt;" [--author NAME]

# Bulk verbs — accept multiple ids:
hermes kanban complete &lt;id&gt;... [--result "..."]
hermes kanban block &lt;id&gt; "&lt;reason&gt;" [--ids &lt;id&gt;...]
hermes kanban unblock &lt;id&gt;...
hermes kanban archive &lt;id&gt;...

hermes kanban tail &lt;id&gt; # follow a single task's event stream
hermes kanban watch [--assignee P] [--tenant T] # live stream ALL events to the terminal
[--kinds completed,blocked,…] [--interval SECS]
hermes kanban heartbeat &lt;id&gt; [--note "..."] # worker liveness signal for long ops
hermes kanban runs &lt;id&gt; [--json] # attempt history (one row per run)
hermes kanban assignees [--json] # profiles on disk + per-assignee task counts
hermes kanban dispatch [--dry-run] [--max N] # one-shot pass
[--failure-limit N] [--json]
hermes kanban daemon --force # DEPRECATED — standalone dispatcher (use `hermes gateway start` instead)
[--failure-limit N] [--pidfile PATH] [-v]
hermes kanban stats [--json] # per-status + per-assignee counts
hermes kanban log &lt;id&gt; [--tail BYTES] # worker log from ~/.hermes/kanban/logs/
hermes kanban notify-subscribe &lt;id&gt; # gateway bridge hook (used by /kanban in the gateway)
--platform &lt;name&gt; --chat-id &lt;id&gt; [--thread-id &lt;id&gt;] [--user-id &lt;id&gt;]
hermes kanban notify-list [&lt;id&gt;] [--json]
hermes kanban notify-unsubscribe &lt;id&gt;
--platform &lt;name&gt; --chat-id &lt;id&gt; [--thread-id &lt;id&gt;]
hermes kanban 컨텍스트 &lt;id&gt; # what a worker sees
hermes kanban specify [&lt;id&gt; | --all] [--tenant T] # flesh out a triage-column idea
[--author NAME] [--json] # into a full spec and promote to todo
hermes kanban gc [--event-retention-days N] # workspaces + old events + old logs
[--log-retention-days N]

모든 명령은 대화 형 CLI의 슬래시 명령으로 사용할 수 있으며 메시징 게이트웨이에서 (/kanban 슬래시 명령 아래 참조).

/kanban 슬래시 명령 {#kanban-slash-command}

모든 hermes kanban &lt;action&gt; 동사는 또한 /kanban &lt;action&gt;로 도달 할 수 있습니다. 인터랙티브 hermes chat 세션 ** 및 ** 모든 게이트웨이 플랫폼 (Telegram, Discord, Slack, WhatsApp, Signal, Matrix, Mattermost, 이메일, SMS). 두 표면은 hermes_cli.kanban.run_slash() 항목 점과 동일한 hermes kanban argparse 트리를 호출하므로 인수 표면, 깃발 및 출력 형식은 CLI, /kanbanhermes kanban와 동일합니다. 당신은 보드를 구동하기 위해 채팅을 떠날 필요가 없습니다.

/kanban list
/kanban show t_abcd
/kanban create "write launch post" --assignee writer --parent t_research
/kanban comment t_abcd "looks good, ship it"
/kanban unblock t_abcd
/kanban dispatch --max 3
/kanban specify t_abcd # flesh out a triage one-liner into a real spec
/kanban specify --all --tenant engineering # sweep every triage task in one tenant
``run_slash`는 `shlex.split`와 함께 라인의 나머지 부분을 곱합니다. 그래서 `"..."`과 `'...'` 모두 작동합니다.

### Mid-run 사용법: `/kanban`는 시약 가드를 우회합니다 \{#dashboard-gui}

일반적으로 queues slash 명령 및 사용자 메시지는 에이전트가 여전히 생각하고있는 동안 - 실수로 비행 중 두 번째 차례를 시작에서 당신을 중지하는 것입니다. **`/kanban`은 이 가드에서 명시적으로 면제됩니다.** `~/.hermes/kanban.db`, 실행 에이전트의 상태에 관계없이, (`list`, `show`, `context`, `tail`, `watch`, `stats`, `stats`, `...`, `...`, `...`, `...`, `...`, `...`.

이것은 별거의 전체적인 점입니다:

- 동료를 기다리고있는 노동자 블록 → 당신은 당신의 전화에서 `/kanban unblock t_abcd`를 보내고 파견자는 다음 진드기에 동료를 선택합니다. 차단 된 노동자는 중단되지 않습니다 - 차단 된 중지입니다.
- 당신은 인간의 맥락을 필요로하는 카드 → `/kanban comment t_xyz "use the 2026 schema, not 2025"` 작업 스레드에 착륙하고 그 작업의 *next* 실행은 `kanban_show()`에서 읽을 것입니다.
- 관현악을 멈추지 않고 함대가 행해지는 것을 알고 싶으신가요? → `/kanban list --mine` 또는 `/kanban stats`는 메인 대화를 터치하지 않고 보드를 검사합니다.

### `/kanban create`의 자동 구독 \{#what-the-plugin-gives-you}

`/kanban create "…"`로 게이트웨이에서 작업을 만들 때, 시작 채팅 (platform + chat id + thread id)는 작업의 터미널 이벤트 (`completed`, `blocked`, `gave_up`, `crashed`, `timed_out`)에 자동으로 구독됩니다. 단말 이벤트 당 한 메시지 뒷면을 얻을 수 있습니다. - 노동자의 결과 요약의 첫 번째 라인 포함 `completed` - 설문 조사없이 또는 작업 ID를 기억하세요.

you> /kanban create "transcribe today's podcast" --assignee transcriber bot> Created t_9fc1a3 (ready, assignee=transcriber) (subscribed — you'll be notified when t_9fc1a3 completes or blocks)

… ~8 minutes later …

bot> ✓ t_9fc1a3 completed by transcriber transcribed 42 minutes, saved to podcast/2026-05-04.md


일단 작업이 `done` 또는 `archived`에 도달하면 자동 복구를 합니다. `--json` (기계 출력) 자동 구독이 건너 뛰는 경우 - 가정은 `/kanban notify-subscribe`를 통해 구독을 명시적으로 관리하려는 스크립트 통화입니다.

### 메시징에 있는 산출 truncation \{#architecture}

Gateway 플랫폼은 실제 메시지 길이의 캡이 있습니다. `/kanban list`, `/kanban show`, 또는 `/kanban tail` 출력의 ~3800 캐릭터를 생산하는 경우, 응답은 `… (truncated; use \`hermes kanban으로 truncated...\` in your terminal for full output)` 광부. CLI 표면은 그런 모자가 없습니다.

### 자동완성 \{#rest-surface}

`/kanban `를 입력하고 내장된 서브컴맨드 리스트(`list`, `...`, `show`, `create`, `assign`, `ls`, `...`, `...`, `...`, `...`, `...`, `...`, `...`, `...`, `...`, `...`, `...` 위의 CLI 참조에 나열된 나머지 동사 (`watch`, `stats`, `runs`, `log`, `assignees`, `heartbeat`, `notify-subscribe`, `...`, `...`, `...`, `...`, `...`, `...`, `...`, `...`, `...`.

## 협업 패턴 \{#dashboard-config}

널은 어떤 새로운 primitives 없이 이 8개의 본을 지원합니다:

| 제품 정보 | 제품 정보 | 설명 |
|---|---|---|
| **P1 팬 아웃** | N siblings, 동일한 역할 | " 병렬 5 각도" |
| **P2 파이프 ** | 역할 사슬: scout → 편집기 → 작가 | 매일 간단한 집합 |
| **P3 투표 / quorum ** | N siblings + 1 집계 | 3 연구원 → 1 리뷰어 선택 |
| **P4 롱런닝 저널** | 같은 프로필 + 공유 dir + cron | Obsidian 볼트 |
| **P5 인간 루프 * * 이름 | worker 블록 → 사용자 의견 → 차단 해제 | ambiguous 결정 |
| **P6 `@mention`** | prose의 인라인 여정 | `@reviewer look at this` |
| **P7 실경 작업 공간** | `/kanban here` 스레드 | per-project 게이트웨이 스레드 |
| ** P8 페레트 농업 * * 이름 | 1개의 단면도, N 주제 | 50 소셜 계정 |
| **P9 트라이액 분광기 ** | 거친 아이디어 → `triage` → `hermes kanban specify` 몸 확장 → `todo` | "이 원 라이너를 spec'd 작업으로 회전" |

각 일례의 경우, `...`입니다.

## Multi-tenant 사용법 \{#security-model}

1개의 전문가 함대가 다수 기업을 봉사할 때, 10가지로 각 업무를 태그하세요:

```bash
hermes kanban create "monthly report" \
--assignee researcher \
--tenant business-a \
--workspace dir:~/tenants/business-a/data/

노동자는 $HERMES_TENANT 및 네임스페이스를 수신합니다. 널, 파견자 및 단면도 정의는 모두 공유됩니다; 자료만 범위가 있습니다.

Gateway 알림

if you run /kanban create … from the Gateway (Telegram, Discord, Slack, etc.), 시작 채팅은 자동으로 새로운 작업에 가입됩니다. 게이트웨이의 백그라운드 정류기 투표 task_events 매 몇 초마다 하나의 메시지를 전달합니다 (completed, blocked, gave_up, crashed, timed_out) 채팅. 완료된 작업은 또한 노동자의 --result의 첫 번째 라인을 보내서 /kanban show에 갖지 않고 결과를 볼 수 있습니다.

CLI에서 명시적으로 구독을 관리 할 수 있습니다. — 스크립트 / cron 작업이 시작되지 않았을 때 유용합니다

hermes kanban notify-subscribe t_abcd \
--platform telegram --chat-id 12345678 --thread-id 7
hermes kanban notify-list
hermes kanban notify-unsubscribe t_abcd \
--platform telegram --chat-id 12345678 --thread-id 7

구독은 작업이 done 또는 archived에 도달하면 자동으로 제거됩니다.

Runs - 시도 당 한 줄

작업은 작업의 논리 단위입니다. 실행 그것은 실행하려고합니다. 파견자가 준비 작업을 주장하면 task_runs의 행을 생성하고 tasks.current_run_id를 점합니다. 그 시도가 끝났을 때 - 완료, 차단, 추락, 시간, 종료, reclaimed - 실행 행은 outcome과 작업의 포인터가 닫습니다. 세 번 시도 된 작업은 세 개의 task_runs 행이 있습니다.

왜 작업의 mutating 대신 두 개의 테이블: 당신은 전체 시도 역사 실제 포스트 모뎀에 대한 ("두 번째 검토 시도는 approve, 세 번째 병합")에 얻고, 당신은 per-attempt metadata를 걸 수있는 깨끗한 장소가 필요합니다 - 어떤 파일이 변경되는, 이는 ran을 검사, 이는 검토가 주목. 그들은 사실이 실행되지 않습니다.

실행은 구조화 생명. 노동자가 작업을 완료 할 때 (kanban_complete(...)를 통해) 그것은 통과 할 수 있습니다:

  • summary (tool param) / --summary (CLI) - 인간 손전등; 실행에 간다; 다운스트림 아이들은 build_worker_컨텍스트에서 볼 수 있습니다.
  • metadata (tool param) / --metadata (CLI) - 실행중인 무료 형식 JSON dict; 아이들은 요약과 함께 직렬화 된 것을 참조하세요.
  • result (tool param) / --result (CLI) - 작업 행에가는 짧은 로그 라인 (레거시 필드, back-compat에 보관).

Downstream 아이들은 가장 최근 완료된 실행 요약 + 각 부모에 대한 메타 데이터를 읽습니다. Retrying workers read the before attempts on their own task (outcome, 요약, 오류) 그래서 그들은 이미 실패한 경로 반복하지 않습니다.

# What a worker actually does — a tool call, from inside the agent loop:
kanban_complete(
summary="implemented token bucket, keys on user_id with IP fallback, all tests pass",
metadata={"changed_files": ["limiter.py", "tests/test_limiter.py"], "tests_run": 14},
result="rate limiter shipped",
)

같은 handoff는 CLI에서 도달 할 수 있습니다. (인간) 작업자가 버려진 작업 또는 대시보드에서 수동으로 표시된 작업을 수행 할 수 없습니다

hermes kanban complete t_abcd \
--result "rate limiter shipped" \
--summary "implemented token bucket, keys on user_id with IP fallback, all tests pass" \
--metadata '{"changed_files": ["limiter.py", "tests/test_limiter.py"], "tests_run": 14}'

# Review the attempt history on a retried task:
hermes kanban runs t_abcd
# # OUTCOME PROFILE ELAPSED STARTED
# 1 blocked worker 12s 2026-04-27 14:02
# → BLOCKED: need decision on rate-limit key
# 2 completed worker 8m 2026-04-27 15:18
# → implemented token bucket, keys on user_id with IP fallback

런은 대시보드에 노출됩니다 (수납 서랍, 시도 당 하나의 컬러 행) REST API (GET /api/plugins/kanban/tasks/:id 반환 runs 어레이). PATCH /api/plugins/kanban/tasks/:id{status: "done", summary, metadata} 모두 커널을 전달하므로 대시보드의 "마크 완료" 버튼은 CLI-equivalent입니다. task_events 행은 run_id를 수행하므로 UI가 시도하여 그룹화할 수 있으며, completed 이벤트는 첫 번째 라인 요약을 갖게 되었습니다. (400 숯으로 넣을 수 있습니다.) 게이트웨이 정류기는 두 번째 SQL 라운드 스트립 없이 구조화된 핸드오프를 렌더링할 수 있습니다.

**Bulk 닫기 동굴. ** hermes kanban complete a b c --summary X는 거부됩니다. 구조화 된 핸드오프는 실행되므로 N 작업에 동일한 요약을 복사하면 거의 항상 잘못됩니다. Bulk close without --summary / --metadata는 일반적인 "나는 관리자 작업의 더미를 완료했습니다"예를 들어 작동합니다.

상태 변경에서 평가된 실행. running에서 실행 작업을 드래그하면 대쉬보드에서 (ready로 돌아가거나, todo로 직진) 또는 실행중인 작업을 아카이브하거나, in-flight는 outcome='reclaimed'로 닫습니다. task_runs 행은 항상 tasks.current_run_idNULL이고, vice versa는 CLI, 대시보드, 파견자, 그리고 notifier를 통해 부합하는 것입니다.

**Synthetic은 절대로 평가 된 완료를 위해 실행됩니다. ** 절대 주장하지 않은 작업 완료 또는 차단 (예: 인간은 ready를 닫습니다. 요약을 가진 대쉬보드에서 작업, 또는 CLI 사용자는 hermes kanban complete &lt;ready-task&gt; --summary X를 실행합니다. 대신 커널은 0-duration run row (started_at == ended_at)를 삽입하여 요약 / metadata / reason을 수행하여 기록이 완료됩니다. completed / blocked 이벤트의 run_id 포인트를 행합니다.

**Live 서랍 새로 고침. ** 대시보드의 WebSocket 이벤트 스트림이 사용자가 볼 수있는 새로운 이벤트를보고 할 때, 서랍은 자체를 다시로드합니다 ( per-task 이벤트 카운터는 useEffect 의존성 목록으로 실을 꿰었습니다). 폐쇄 및 재개가 더 이상 실행의 새로운 행 또는 업데이트 된 결과가 필요하지 않습니다.

앞으로 겸용성

tasks에 두 개의 무효 열은 v2 워크플로우 라우팅을 위해 예약됩니다. workflow_template_id (이 작업에 속한 템플릿) 및 current_step_key (그 템플릿에서 단계는 활성화). v1 커널은 라우팅을 위해 그들을 무시하지만 클라이언트가 그들을 쓸 수 있도록 v2 릴리스는 다른 스키마 마이그레이션없이 라우팅 기계를 추가 할 수 있습니다.

이벤트 참조

모든 전환은 task_events에 행을 추가합니다. 각 행은 선택적 run_id를 전달하므로 UI는 시도하여 그룹 이벤트를 할 수 있습니다. 3개의 클러스터로 그룹을 구성하므로 필터링이 쉽습니다 (hermes kanban watch --kinds completed,gave_up,timed_out):

** Lifecycle** ( 논리 단위로 작업에 대한 변경 사항):

- 한국어결제하기시간:
created{assignee, status, parents, tenant}작업 삽입. run_idNULL입니다.
promotedtodo → ready 모든 부모가 done를 명중했기 때문입니다. run_idNULL입니다.
claimed{lock, expires, run_id}Dispatcher atomically는 ready 작업에 대해 주장했습니다.
completed{result_len, summary?}Worker는 썼습니다. --result / --summary 및 작업 히트 done. summary는 첫 라인 핸드오프 (400-char cap); 전체 버전은 실행 행에 살고 있습니다. complete_task는 손오프 필드를 가진 절대로 밝히는 작업에 불립니다. 0-duration run은 합성되어 있기 때문에 run_id는 여전히 무언가에 있습니다.
blocked{reason}노동자 또는 인간은 blocked에 작업을 펼칩니다. --reason를 가진 절대적인 작업에 호출할 때 0-duration run을 구합니다.
unblockedblocked → ready, 수동으로 또는 /unblock를 통해. run_idNULL입니다.
archived기본 보드에서 숨겨진. 작업이 여전히 실행된 경우, 동작의 run_id를 전달합니다.

Edits (전환하지 않는 인간 중심의 변경):

- 한국어결제하기시간:
assigned{assignee}Assignee 변경 (포함 불문).
edited{fields}제목 또는 몸 업데이트.
reprioritized{priority}우선순위.
status{status}Dashboard 드래그 드롭은 직접 상태를 썼습니다 (예: todo → ready). run_id를 끄는 경우, running를 끄는 경우, 혹은 run_id는 NULL입니다.

Worker telemetry (실행 프로세스에 대한 논리 작업이 아닌):

- 한국어결제하기시간:
spawned{pid}Dispatcher는 성공적으로 노동자 과정을 시작했습니다.
heartbeat{note?}작업자는 hermes kanban heartbeat $TASK를 긴 작업 중 신호 수명으로 호출합니다.
reclaimed{stale_lock}완료없이 만료 된 클레임 TTL; 작업은 ready로 돌아갑니다.
crashed{pid, claimer}Worker PID 더 이상 살아있지 만 TTL은 아직 만료되지 않았습니다.
timed_out{pid, elapsed_seconds, limit_seconds, sigkill}max_runtime_seconds 초과; 파견자 SIGTERM'd (그 후 SIGKILL'd 5 s 은혜) 및 재조합.
spawn_failed{error, failures}한 스페인 시도 실패 (PATH, workspace unmountable,...). Counter increments; 작업은 retry에 대한 ready로 반환합니다.
gave_up{failures, error}N 연속 spawn_failed 후 회로 차단기가 발사되었습니다. 작업 자동 블록 마지막 오류. 기본 N = 5; override via --failure-limit입니다.

hermes kanban tail &lt;id&gt;는 하나의 작업을 보여줍니다. hermes kanban watch는 보드 전체를 스트리밍합니다.

연락처

Kanban은 단 하나의 호스트를 정의합니다. ~/.hermes/kanban.db는 로컬 SQLite 파일이며, 같은 기계에 디스패시터 스패시 노동자입니다. 두 호스트의 공유 보드를 실행하는 것은 지원되지 않습니다. "작업자 X 호스트 A, worker Y의 호스트 B,"및 충돌 감지 경로가 PIDs는 호스트-지역입니다. 멀티 호스트가 필요하면 호스트 당 독립적 인 보드를 실행하고 delegate_task / 메시지 큐를 사용하여 다리에.

디자인 spec

완전한 디자인 - 건축, concurrency 정정, 다른 시스템과 비교, 구현 계획, 위험, 열린 질문 - docs/hermes-kanban-v1-spec.pdf의 삶. 모든 행동 변화 PR을 제출하기 전에 읽어보십시오.