칸반 보드
칸반 보드 (Kanban Board)
Board는 에이전트를 오케스트레이션하기 위한 칸반 TUI예요. 각 카드는 격리된 git worktree의 tmux 세션에서 에이전트를 실행하고, 카드를 파이프라인을 따라 전진시키면 도착 열(destination column)의 프롬프트가 그 에이전트에게 보내져요.
출처: 문서
본문
보드 실행하기 (Launching the board)
$ docker agent board
요구 사항: tmux와 git이 설치되어야 해요.
동작 원리 (How it works)
- 카드는 에이전트를 실행해요. 카드 생성(
n)은 프로젝트의 업스트림 기본 브랜치에서 분기된 새 git worktree에서 작업하는 전용 tmux 세션에서docker agent run을 실행해요. 카드의 제목, 실행 중/유휴 상태, 실패는 에이전트의 컨트롤 플레인에서 실시간으로 미러돼요. - 시작 단계. 에이전트가 기동되는 동안 카드는
running에 도달하기 전에 세 가지 중간 상태를 거쳐요:starting(tmux 세션 생성, 프로세스 부팅, worktree 아직 없음) →loading(worktree 존재; 에이전트가 구성, 모델, 도구 로드) →attaching(컨트롤 플레인 소켓 바인딩; 보드가 첫 스냅샷 대기). - 열은 파이프라인이에요. 기본 파이프라인은
Dev → Review → Push → Done이고 완전히 커스터마이즈 가능해요: 보드(c) 또는 구성 파일에서 열을 관리해요. 카드를 전진시키면(]) 도착 열의 프롬프트가 카드의 에이전트로 보내지고, 뒤로 옮기면([) 아무것도 보내지 않아요. - 언제든 연결. enter(또는 카드 더블클릭)로 터미널을 에이전트의 세션에 붙여 직접 상호작용하고,
ctrl+q로 분리해 보드로 돌아와요. - 모든 것은 복구 가능해요. 보드를 종료해도 에이전트는 tmux에서 계속 실행돼요; 다시 시작하면 그에 재연결해요. 에이전트 프로세스가 죽으면 보드가 다시 실행하고 같은 대화와 worktree를 재개해요. 시작 시 계속 크래시하는 에이전트는 무한 재실행 대신 카드를 빨갛게 바꿔요: 붙어서(
enter) 에러 출력을 읽고, 카드를 전진시켜 재실행하거나 삭제하세요.
키 바인딩 (Key bindings)
| Key | Action |
|---|---|
n |
카드 생성 (프로젝트 + 프롬프트) |
enter |
카드의 에이전트에 연결 (ctrl+q 로 분리) |
d |
카드의 worktree diff 보기 |
o |
$DOCKER_AGENT_BOARD_EDITOR(기본 code)에서 카드의 worktree 열기 |
s |
카드의 worktree에서 대화형 셸 열기 |
[ / ] |
카드를 뒤로 / 앞으로 이동 |
1 - 9 |
카드를 열 N으로 이동 |
x |
카드, 세션, worktree, 브랜치 삭제 |
p |
프로젝트 관리 (추가, 편집, 재정렬, 제거) |
c |
열 관리 (추가, 편집, 재정렬, 제거) |
e |
선택한 열의 프롬프트 편집 |
←↓↑→ hjkl |
탐색 |
mouse |
클릭 선택, 더블클릭 연결, 드래그 이동, 휠 스크롤 |
? |
도움말 |
q |
종료 (에이전트는 계속 실행) |
구성 (Configuration)
모든 것이 전역 구성 파일(~/.config/cagent/config.yaml) 또는 TUI 자체(p 프로젝트, c 열, e 열 프롬프트)로 구성돼요:
board:
projects:
- name: my-app
path: /Users/me/src/my-app
agent: coder # any agent ref; defaults to the built-in agent
columns:
- id: dev
name: Dev
emoji: 🔨
- id: review
name: Review
emoji: 🔍
prompt: Review the local changes and fix any issues you find.
- id: done
name: Done
emoji: ✅
열을 생략하면 기본 파이프라인이 유지돼요. 열 id 는 이름 변경 전반에 걸쳐 열을 식별해요(카드는 자신이 있는 열을 id로 기억해요); 생략되면 id는 열 이름에서 파생돼요. 카드가 prompt 가 있는 열에 들어가면 그 프롬프트가 카드의 에이전트에게 다음 메시지로 전달돼요.