화면 소개

요구를 등록하고 나면 사람이 할 일은 지켜보는 것입니다. 이 장에서는 그 순서대로 화면을 살펴봅니다. 큐 전체를 보는 보드에서 티켓 하나로 들어가고, 거기서 그 티켓을 맡고 있는 세션이 지금 무엇을 하는 중인지까지 확인합니다.

프로젝트에 들어가면 홈이 먼저 뜹니다. 목록에서 행을 누르든 헤더의 전환기에서 고르든, 주소를 직접 입력하거나 북마크로 들어와도 같은 화면입니다. 홈은 이 프로젝트를 두고 묻는 대화 화면이고 아래 프로젝트 홈에서 따로 봅니다. 다른 화면을 보다가 홈으로 돌아오려면 헤더 왼쪽 끝의 로고를 누르세요.

프로젝트 안에서는 헤더에 보드, 스쿼드, 프로토콜, 온톨로지, 워커 화면이 뜹니다. 여기에 홈 항목은 없습니다. 맨 왼쪽 보드가 큐 전체를 보여 주는 화면이고 ⌘B로도 열립니다. 스쿼드는 페르소나를 고치는 화면이기도 해서 매뉴얼의 장도 둘입니다(페르소나, 스쿼드). 왼쪽 목록 맨 위의 모아보기가 그 두 가지 일을 구분합니다. 켜면 스쿼드를 기준으로 묶이고 끄면 페르소나 목록이 따로 뜹니다. 기본은 켜짐입니다. 나머지 둘도 각자의 장이 있습니다(프로토콜, 아카이빙과 온톨로지). 여기서는 보드와 워커, 그리고 헤더 양 끝에 놓인 항목을 살펴봅니다.

티켓 상세와 에픽 화면에서 Esc를 누르면 보드로 나옵니다. 새 탭에 주소를 붙여 바로 열었어도 마찬가지입니다. 되짚을 이력이 없어도 목적지는 보드입니다. 다이얼로그나 전환기처럼 화면을 덮은 요소가 있으면 그것부터 닫히고, 밑에 있던 화면은 그대로 남습니다.

나머지 화면에서는 Esc를 눌러도 아무 일도 일어나지 않습니다. 보드와 스쿼드, 프로토콜, 온톨로지, 워커, 홈 여섯 화면이 그렇고, 온톨로지에서 열어 둔 파일이나 스쿼드에서 고른 페르소나, 보드에 지정해 둔 정렬과 필터, 홈에서 고른 표면과 열어 둔 탭도 그렇습니다. 고장이 아닙니다. 나갈 곳이 정해져 있는 화면이 위의 둘뿐입니다. 참견 칸이나 티켓 편집기에 글을 입력하는 중이면 Esc를 눌러도 화면이 바뀌지 않습니다. 쓰던 글이 Esc 한 번에 사라지지 않도록 막아 둔 것입니다.

보드

dira 보드 화면. 대기, 진행중, 완료 레인에 티켓 카드가 놓여 있습니다.

화면을 세로로 나누는 칸이 셋 보입니다. 이 칸 하나를 레인이라고 부르고, 왼쪽부터 대기, 진행중, 완료입니다. 카드 하나가 티켓 파일 하나입니다.

레인은 파일명 접미사를 표시한 결과입니다. 접미사가 바뀌면 카드가 저절로 옆 레인으로 넘어갑니다(티켓이 지나는 상태 참고). 상태를 정하는 쪽은 엔진입니다.

카드를 끌어 다른 레인에 놓으면 엔진 작업을 부를 수 있습니다. 대기 카드를 집으면 진행중 레인 머리에 놓으면 지금 시작합니다가 뜹니다. 놓으면 쉬는 워커에게 그 티켓을 지목해 맡기고, 쉬는 워커가 없으면 도는 세션 하나를 끊고 시작할지 묻습니다. 진행중 카드를 집으면 대기 레인 머리에 놓으면 할당을 풉니다가 뜹니다. 여기에 놓으면 티켓 상세의 할당 해제와 같습니다. 어느 쪽이든 카드는 엔진이 파일 이름을 바꾼 뒤에야 옮겨 갑니다. 갈래별 자세한 동작은 티켓이 지나는 상태에 있습니다.

  • 막힌 티켓도 대기 레인에 같이 놓입니다. 차이는 카드에 붙는 주황색 deps 태그 하나뿐입니다. 막힘은 그 단계 안에서 생긴 사정이라 선행 티켓이 끝나면 아무도 손대지 않아도 사라집니다.
  • 진행중 카드는 세 가지를 더 알려 줍니다. 페르소나 색 점이 움직이고, 메타 줄 끝에 지금 그 티켓을 맡고 있는 워커 마크(w6)가 붙고, 카드 맨 아래에 그 세션이 방금 한 일이 한 줄로 뜹니다. 완료 카드에는 셋 다 없습니다. 끝난 티켓의 owner는 기록일 뿐이고, 지금 그 티켓을 맡고 있는 워커를 가리키지 않습니다.
  • 외부 조건을 기다리는 티켓도 대기 레인에 있습니다. 카드에 폴링 대기 배지와 남은 시간이 붙고, 그 아래 한 줄이 무엇을 기다리는지 알려 줍니다. 상한을 넘긴 카드는 배지가 상한 지남으로 바뀝니다(티켓이 지나는 상태 참고).
  • 잇달아 실패해서 쉬고 있는 티켓도 대기 레인에 그대로 남습니다. 카드에 재시도 대기 배지와 다시 맡을 때까지 남은 시간이 붙습니다. 폴링 대기와 달리 배지 아래 한 줄은 없습니다. 무엇 때문에 실패했는지는 티켓을 열어 보셔야 합니다(티켓이 지나는 상태 참고).
  • 아카이브 티켓이 딸린 완료 카드는 그 자리에 아카이빙이 어디까지 진행됐는지를 표시합니다. 아카이빙 대기, 아카이빙중, 아카이빙 답변 대기 셋입니다 (아카이빙과 온톨로지 참고).
  • 완료 레인은 한 번에 20건을 표시합니다. 바닥까지 내려가면 20건이 더 이어집니다. 나눠서 표시할 뿐이므로 빠지는 완료 티켓은 없습니다. 한눈에 확인하려면 테이블 뷰(?view=table)와 필터를 쓰시면 됩니다.

티켓 상세

진행중 티켓 상세 화면. 왼쪽 위에 할당 해제 버튼이 달린 잠금 안내, 그 아래 계획 단계 네 줄이 선 진행 기록과 도는 세션에 말 거는 입력창, 다시 그 아래 본문의 Goal과 Done when 체크리스트가 있습니다. 오른쪽 단에는 frontmatter 표와 관계, 요구사항이 있습니다.

카드를 누르면 티켓 하나의 화면이 열립니다. 왼쪽은 읽고 쓰는 영역이고, 오른쪽은 참조하는 영역입니다.

  • 왼쪽에는 사람이 쓴 마크다운 본문과 ## Done when 체크리스트가 있습니다. 진행 기록도 여기 뜹니다.
  • 오른쪽 맨 위에는 이 티켓이 몇 번 되돌아왔는지가 다시 할당 3회처럼 한 줄로 뜹니다. 워커가 끝내지 못해 큐로 되돌아갔다가 다시 누군가에게 건네진 횟수입니다. 한 번에 끝난 티켓과 아직 아무도 맡지 않은 티켓에는 이 줄이 없습니다.
  • 그 아래로 frontmatter 표와 관계가 뜹니다. frontmatter는 티켓 파일 맨 위에 --- 두 줄 사이로 적어 두는 설정값 묶음입니다. 관계는 맨 위 한 줄에 [선행] 이 티켓 [후행]을 보여 줍니다. 그 아래로는 이 티켓이 어느 요구에서 나왔는지(출처 req:)와 이 티켓을 기록으로 옮긴 아카이브 티켓이 있을 때만 한 줄씩 더 붙습니다.

다시 할당은 frontmatter 표의 attempts와 다른 수입니다. 한 화면에 수가 둘이라 헷갈리기 쉽습니다. 세는 사건이 다릅니다. 다시 할당은 티켓이 워커에게 건네진 횟수를 빠짐없이 셉니다. 세션이 오류로 끝났든, 더 급한 티켓에 밀렸든, 사람이 할당을 풀었든 가리지 않습니다. attempts는 그중 자동 회수만 셉니다. 세션이 오류나 시간 초과로 끝난 회차와, 죽은 채 남은 세션을 엔진이 나중에 발견해 회수한 회차입니다. 더 급한 티켓에 밀려 끊긴 회차, 계정 한도로 죽은 회차, 사람이 손으로 할당을 푼 회차는 세지 않습니다. 그래서 두 수는 여전히 다릅니다. 오래된 티켓에서는 격차가 더 큽니다. 오류로 끝난 회차를 세지 않던 동안 되돌아간 3,104번 가운데 attempts가 올라간 것은 149번, 4.6%였습니다. 그 시기에 가장 많이 되돌아온 티켓은 273번 다시 할당됐는데 그 attempts 줄은 비어 있습니다. attempts가 비었거나 0이라고 해서 그 티켓이 순탄했던 것은 아닙니다.

Done when 체크는 세션이 일하면서 켭니다. 사람이 누르는 상자가 아닙니다. 그 항목이 끝났는지 아는 것은 그 일을 하고 있는 세션뿐입니다. 그래서 항목을 하나 끝낼 때마다 세션이 티켓 파일의 - [ ]를 - [x]로 바꿉니다. 진행 중인 티켓을 열어 지금 어디까지 왔는지 확인하는 곳이 여기입니다.

이 화면은 새로고침하지 않아도 최신 상태를 유지합니다. 세션이 본문에 한 줄을 더하면 그 줄이 뜨고, - [ ]가 - [x]로 바뀌면 그 상자가 켜집니다. 이 티켓 하나만 갱신되는 것도 아닙니다. 화면을 다시 그리는 계기는 큐에 변화가 생겼다는 사실 하나라서, 관계에 뜬 선행 티켓과 후행 티켓의 배지도, 본문에 적힌 다른 티켓의 해시도 같이 갱신됩니다. 막고 있던 선행 티켓이 방금 끝났으면 그 배지가 완료로 바뀝니다. 세 레인 어디에 있는 티켓이든 같습니다. 대기 티켓을 열어 두면 워커가 그 티켓을 맡는 순간이 화면에 뜨고, 완료 티켓의 본문은 더 바뀌지 않지만 거기 적힌 다른 티켓의 상태는 계속 갱신됩니다.

진행중 티켓은 읽기만 됩니다. 세션이 그 파일을 점유하고 있기 때문입니다. 잠금 카드 안의 할당 해제를 누르면 그 파일이 큐로 되돌아갑니다. 그다음에야 직접 고칠 수 있습니다.

브라우저를 띄운 티켓의 브라우저에서 작업중 절

워커가 브라우저를 띄워 일하는 동안에만 오른쪽 단에 절이 하나 더 붙습니다. 자리는 frontmatter 표 바로 아래이고 폴링 대기 절 위입니다. 이름은 브라우저에서 작업중이고, 그 밑으로 워커가 지금 보고 있는 화면이 바로 깔립니다.

누를 줄도 펼칠 화살표도 없습니다. 절이 뜬 그 순간부터 그림이 보입니다. 실시간이라 워커가 페이지를 넘기면 이 그림도 따라 넘어갑니다. 브라우저에 창이 없어서 여태 안 보이던 것이 이 절 하나로 보입니다. 그림의 가로는 오른쪽 단 폭에 맞고 세로는 워커 쪽 화면 비율을 따라갑니다. 첫 그림이 도착하기 전 짧은 동안은 절 이름만 서 있습니다.

브라우저를 안 쥔 티켓에는 이 절이 아예 없습니다. 절 이름도 흐린 줄도 빈 상자도 남지 않습니다. 워커가 일을 마치고 브라우저를 반납한 뒤에 다시 열어 보면 절이 사라져 있습니다.

여기서는 못 만집니다. 그림 위를 눌러도 워커 쪽 페이지는 전혀 반응하지 않습니다. 이 자리는 보기만 하는 자리입니다. 사람이 무심코 클릭해서 워커가 확인하던 화면을 건드리는 일이 없도록 입력을 막아 두었습니다.

만져야 하면 절 이름 오른쪽 끝의 홈 탭에서 열기를 누르세요. 홈의 브라우저 표면으로 건너가고 그 티켓의 탭이 골라진 채로 뜹니다. 거기서 한 번 승인하면 마우스와 키보드가 작동합니다 (터미널과 파일과 소스 컨트롤 참고).

절 이름 줄에는 주인 이름도 점도 없습니다. 이 자리의 주인은 언제나 이 티켓이라 한 번 더 적을 것이 없습니다. 주인 이름과 점은 홈의 브라우저 표면에 섭니다. 한 프로젝트가 띄운 브라우저가 거기 다 모이기 때문입니다.

건너간 화면에서는 비추는 그림 위에 머리 줄이 하나 섭니다. 그 줄은 주인 이름 뒤에 쓰는 중을 붙여 적습니다. 이름은 주인에 따라 갈립니다. 티켓이 쥔 브라우저면 <페르소나> - <티켓 제목>이 그 이름입니다. 큐에서 그 해시의 티켓을 못 찾으면 워커 이름만 뜹니다. 사람이 홈 대화에서 띄웠으면 홈 대화가 쓰는 중이고 셸에서 직접 불렀으면 외부 호출이 쓰는 중입니다. 한 번 승인해 입력을 열면 입력 열림과 다시 잠그기가 같은 줄에 더 붙습니다.

이름 왼쪽의 작은 점은 지금 그 화면이 갈리고 있다는 표시입니다. 워커가 페이지를 넘기거나 무언가를 누르는 명령을 하나 돌리는 동안만 점이 켜집니다. 그 명령이 끝나면 5초 안에 꺼집니다. 점이 꺼져도 주인은 그대로입니다. 그 사이 아무 명령도 안 도는 것뿐입니다. 누가 쥐고 있는지는 이름으로 알고 지금 손이 가고 있는지는 점으로 압니다.

좌측 브라우저 목록의 줄도 같은 이름을 씁니다. 줄마다 이름이 앞에 오고 그 뒤에 해시 여덟 자가 흐리게 붙습니다. 티켓이 쥔 줄과 홈 대화가 쥔 줄은 그 이름으로 가립니다. 우측 탭 줄은 폭이 좁아 종전대로 해시만 쓰고 점 하나를 더 답니다. 이 표식이 생기기 전에 띄운 브라우저는 주인을 적어 둔 적이 없어서 해시만 뜹니다. 없는 이름을 앱이 추정으로 메우지 않습니다.

주인이 죽은 브라우저는 목록에서 저절로 빠집니다. 목록은 5초마다 그 브라우저를 띄운 세션이 살아 있는지 확인합니다. 죽어 있으면 그 줄을 지우면서 메모리에 남아 있던 브라우저까지 회수합니다. 사람이 치울 것은 없습니다. 그 탭을 열어 둔 채였다면 화면이 브라우저가 반납되어 화면이 끊겼습니다로 바뀝니다.

창을 좁혀 두 단이 한 단으로 접혀도 이 절이 서는 차례는 그대로입니다.

기다리는 티켓의 폴링 대기 절

외부 조건을 기다리는 티켓에만 오른쪽 단에 절이 하나 더 붙습니다. frontmatter 표 바로 아래이고, 이름은 카드의 배지와 같은 폴링 대기입니다. 행은 다섯입니다.

행값
사유카드에서 배지 아래 뜨던 그 한 줄입니다. 티켓 본문 마지막 ## 결과 절의 첫 줄이고, 그 절이 없으면 이 행도 없습니다
스크립트조건을 판정하는 파일 이름입니다. 큐 루트 밑 polls/에 둡니다
주기얼마나 자주 돌려 보는지입니다(300초). 스크립트 앞부분에 적지 않았으면 매 tick입니다
상한언제까지 기다리는지와 남은 시간입니다. 이미 지났으면 상한 지남이 대신 붙습니다
마지막 폴링마지막으로 돌린 시각입니다. 한 번도 안 돌렸으면 아직 안 돌림입니다

행 아래로 스크립트 본문과 마지막 출력이 통째로 펼쳐집니다. 왜 안 풀리는지는 대개 그 출력에 적혀 있습니다. 파일이 사라졌으면 스크립트 파일 없음이, 아직 한 번도 안 돌았으면 출력 기록 없음이 그 자리에 뜹니다.

절 맨 아래 버튼 둘로 상한 전에도 기다림을 끊습니다. 지금 디스패치를 누르면 조건과 상관없이 그 티켓이 후보로 돌아갑니다. 다음 tick을 기다리지 않고 그 자리에서 워커까지 깨우니 바로 할당됩니다. 상한 늘리기는 옆 칸의 시각을 새 상한으로 적습니다. 칸에는 지금 상한이 미리 채워져 있으니 필요한 만큼만 뒤로 옮기시면 됩니다. 확인 다이얼로그는 없습니다. 되돌리는 데 워커 명령 한 번이면 충분하고, 무언가를 지우는 조작도 아니기 때문입니다.

어느 쪽을 눌러도 답변 파일은 생기지 않습니다. 사람이 묻지 않은 질문이라 답도 없습니다. 답변 파일이 생기는 경우는 상한을 넘겨 티켓이 답변 대기로 잠긴 뒤 하나뿐이고, 그 화면은 여느 질문과 똑같습니다(티켓이 지나는 상태 참고).

잇달아 죽은 티켓의 재시도 대기 절

잇달아 실패해서 쉬고 있는 티켓에만 오른쪽 단에 절이 하나 더 붙습니다. 자리는 폴링 대기 절 바로 아래이고, 이름은 카드의 배지와 같은 재시도 대기입니다. 행은 둘입니다.

행값
누적 횟수이 티켓이 지금까지 몇 번 쉬었는지입니다
다음 시각다시 맡는 시각과 그때까지 남은 시간입니다

폴링 대기 절에 있던 스크립트와 그 출력은 여기에 없습니다. 상한도 없습니다. 이 티켓이 기다리는 것은 시간뿐이라 확인할 값도 다시 맡는 그 시각 하나입니다.

절 맨 아래 지금 다시 보내기 하나로 대기를 끊습니다. 누르면 쉬는 표식이 그 자리에서 사라지고 그 티켓이 다음 tick의 후보로 돌아갑니다. 누적 횟수도 같이 지워져서 다음에 또 실패하면 첫 대기부터 다시 셉니다. 확인 다이얼로그는 없습니다. 지우는 것이 쉬는 표식 하나뿐이라 티켓 파일은 그대로입니다.

답을 쓰는 칸은 여기에도 없습니다. 사람이 묻지 않은 질문이라 답도 없습니다.

앱 안의 링크

티켓 본문에 적힌 주소, 진행 기록에 찍힌 배포 URL, 터미널이 뱉은 http://localhost:3000. 앱 창 안에서 이런 링크를 누르면 내장 브라우저가 그 주소를 엽니다. 기본 브라우저는 뜨지 않습니다.

누른 직후 홈의 브라우저 표면으로 건너가고 링크라는 탭이 골라진 채로 뜹니다. 어느 화면에서 눌렀든 같습니다. 홈 대화나 홈 터미널에서 눌러 이미 홈에 있을 때도 보던 표면을 떠나 그 탭으로 옮겨 갑니다. 좌측 목록에도 같은 이름으로 줄이 하나 섭니다. 워커가 쥔 줄이나 홈 대화가 쥔 줄과 나란히 놓이고 해시 자리에는 c0ffee00이 붙습니다.

두 번째 링크부터는 그 탭을 다시 씁니다. 링크를 백 번 눌러도 브라우저는 하나입니다. 워커가 빌려 쓸 자리를 링크가 잠식하지 않도록 이렇게 두었습니다.

터미널에서는 http://나 https://로 시작하는 글자만 링크가 됩니다. 마우스를 올리면 밑줄이 생깁니다. 그때 누르면 열립니다. 주소 끝에 붙은 마침표나 닫는 괄호는 주소에서 떼어냅니다.

랜딩과 이 매뉴얼의 링크는 기본 브라우저로 나갑니다. 두 화면은 앱 없이 웹 브라우저로도 여는 제품 바깥 면이라 내장 브라우저를 안 거칩니다. 앱 안 화면으로 가는 링크와 같은 문서 안의 앵커도 종전 그대로 동작합니다. 가로채는 것은 바깥 주소뿐입니다.

기본 브라우저로 바로 엽니다

내장 브라우저를 거치지 않고 평소 쓰는 브라우저로 열고 싶으면 수정키를 누른 채 링크를 누르세요. 맥은 Cmd+클릭, 윈도우는 Ctrl+클릭입니다. 앱 창 안의 링크와 터미널의 링크 모두 이렇게 열립니다. 이때는 링크 탭이 생기지도 않고 주소가 바뀌지도 않으며 화면도 지금 자리에 그대로 있습니다. 맥에서 Ctrl+클릭을 하면 우클릭 메뉴가 뜨니 Cmd를 쓰세요.

링크 없이 빈 브라우저를 띄웁니다

누를 링크가 없어도 주소를 직접 쳐서 열 수 있습니다. 홈 좌측 브라우저 패널의 머리 줄 오른쪽 끝에 새 브라우저 단추가 있습니다. 도는 브라우저가 하나도 없어서 지금 실행 중인 브라우저가 없습니다가 뜬 때는 그 문구 옆에도 같은 단추가 섭니다.

누르면 링크 탭이 빈 페이지로 뜨고 주소표시줄은 about:blank를 보여 줍니다. 커서는 이미 그 입력칸에 가 있습니다. 바로 주소를 치고 엔터를 누르세요.

링크 브라우저가 이미 떠 있으면 새로 띄우지 않고 그 탭으로 옮겨 갑니다. 보던 페이지도 그대로 남습니다. 커서는 이때도 주소표시줄에 가 있으니 다른 주소를 치면 됩니다. 이 단추로 여는 브라우저도 링크를 눌러 여는 것과 같은 하나라서, 여러 번 눌러도 사람 몫의 브라우저는 늘지 않습니다.

주소표시줄

브라우저 탭 머리 줄, 주인 이름 바로 아래에 지금 주소가 한 줄 섭니다. 모든 브라우저 탭에 있습니다. 워커가 페이지를 넘기면 이 값도 따라 바뀝니다. 티켓 상세의 브라우저에서 작업중 절에는 이 줄이 없습니다. 거기는 보기만 하는 자리입니다.

주소를 고칠 수 있는 탭은 링크 하나뿐입니다. 거기서는 이 줄이 입력칸입니다. 주소를 지우고 다시 쳐서 엔터를 누르면 그 자리로 갑니다. 스킴을 빼고 example.com만 쳐도 앞에 https://를 붙여 줍니다.

나머지 탭에서는 같은 줄이 읽기 전용 글자입니다. 그 브라우저를 누가 띄웠느냐가 이 차이를 만듭니다. 화면이 띄운 브라우저는 링크 하나뿐이고 화면이 돌릴 수 있는 것도 그 하나니까요. 워커와 홈 대화가 쥔 브라우저는 지금 일하고 있는 세션의 것입니다. 사람이 주소를 갈아 버리면 그 회차의 실측이 어긋납니다.

http:와 https: 밖의 주소는 안 받습니다. javascript:로 시작하는 값을 넣고 엔터를 눌러도 아무 데도 안 갑니다.

다 쓴 브라우저를 반납합니다

링크 탭 주소표시줄 오른쪽 끝에 반납이 있습니다. 누르면 그 브라우저가 그 자리에서 사라지고 좌측 목록에서도 줄이 빠집니다. 다음에 링크를 누르면 새로 하나 띄웁니다.

다른 탭에는 이 단추가 없습니다. 워커가 쥔 브라우저를 사람이 화면에서 거두는 수단은 여전히 없습니다(터미널과 파일과 소스 컨트롤 참고). 화면이 띄운 것만 화면이 거둡니다.

내장으로 안 되는 화면은 기본 브라우저로 넘깁니다

주소표시줄 오른쪽의 기본 브라우저에서 열기를 누르면 지금 주소가 맥의 기본 브라우저에서 뜹니다. 이 단추는 모든 브라우저 탭에 있습니다. 주소가 아직 안 잡힌 탭에서는 눌리지 않습니다.

내장 브라우저에는 뒤로 가기도 북마크도 없습니다. 평소 쓰는 브라우저의 로그인 기록도 물려받지 않습니다. 구글 계정으로 들어가야 하는 화면이나 확장 프로그램이 있어야 도는 화면은 이 단추로 넘기세요.

화면을 눌러 그 자리에 요구를 남깁니다

보던 화면에서 고칠 곳이 보이면 그 자리를 짚어 요구로 접수할 수 있습니다. 주소표시줄 오른쪽 끝의 댓글을 누르세요. 모든 브라우저 탭에 있고, 켜지면 단추가 눌린 모양으로 바뀌며 화면 위 커서가 십자 모양이 됩니다.

이제 화면의 한 점을 누르면 그 자리에 작은 점이 찍히고, 꼬리가 그 점을 가리키는 말풍선이 뜹니다. 제목은 화면 댓글이고 그 아래에 지금 주소가 한 줄로 보입니다. 맨 위에는 누른 순간의 화면이 작게 들어가 있고 누른 자리에 점이 표시됩니다. 그 아래 입력 폼은 보드의 요구 접수 다이얼로그와 같습니다. 본문을 쓰고 요구 접수를 누르거나 ⌘↵를 치면 접수됩니다. 성공하면 말풍선 안에 확인 문장과 접수한 요구 보기 링크가 뜹니다.

접수된 요구는 pm 앞으로 가는 kind: request 티켓 한 장입니다. 쓴 본문 아래에 ## 화면 댓글 절이 붙고 세 줄이 적힙니다.

  • URL - 누를 때 주소표시줄에 있던 주소
  • 스크린샷 - 누른 순간 화면에 떠 있던 그림 파일의 경로(attachments/comment-<날짜-시각>.jpg)
  • 클릭 위치 - 그 스크린샷 안에서 누른 점의 픽셀 좌표와 스크린샷 크기

그래서 pm은 화면을 다시 띄우지 않고도 어디를 가리킨 요구인지 압니다. 스크린샷은 따로 첨부하지 않아도 되고, 말풍선에서 뺄 수도 없습니다. 다른 파일은 첨부 칸으로 더 붙일 수 있습니다.

댓글이 켜져 있는 동안에는 페이지가 클릭을 받지 않습니다. 링크를 눌러도 이동하지 않고, 스크롤과 키 입력도 페이지로 가지 않습니다. 워커가 쓰는 브라우저에서도 입력을 열겠느냐는 확인 창이 뜨지 않습니다. 그림 둘레의 검은 띠나 아직 화면이 안 들어온 탭은 눌러도 아무 일이 없습니다.

접수한 뒤에도 댓글은 켜진 채로 남습니다. 다른 자리를 누르면 빈 말풍선이 새로 뜹니다. 말풍선은 Esc, 말풍선 밖 클릭, 닫기로 닫힙니다. 본문을 쓰던 중이면 다이얼로그와 같은 확인을 한 번 거칩니다. 페이지를 다시 만지려면 댓글을 한 번 더 눌러 끄세요. 켜짐 상태는 저장되지 않아서 새로고침하면 꺼져 있습니다.

자리가 다 찼을 때

브라우저는 한 번에 여섯 개까지 돕니다. 링크 브라우저가 이미 떠 있으면 상한과 무관합니다. 그때 도는 것은 주소 이동 하나뿐이라 자리를 새로 빌리지 않습니다.

링크 브라우저가 없는데 여섯 자리가 다 차 있으면 링크나 새 브라우저를 눌렀을 때 토스트가 한 줄 뜹니다. 문구는 두 경우가 같습니다.

브라우저 슬롯이 6/6으로 다 차서 링크를 못 엽니다.

화면은 그 자리에 그대로 머뭅니다. 앱이 워커의 브라우저를 대신 거두지도 않습니다. 워커가 일을 마쳐 자리가 빌 때까지 기다리세요.

글에 적힌 해시와 P번호

티켓 본문을 열면 다른 티켓의 해시가 곳곳에 적혀 있습니다. 세션이 "뒤쪽 절반은 8b7c1021이 받는다"처럼 적어 둡니다. 그 여덟 자를 누르면 그 티켓이 열립니다. 주소창에 옮겨 적을 일이 없습니다. 이렇게 눌리는 글자를 표식이라고 부르겠습니다.

표식이 뜨는 값은 큐에 있는 티켓 해시 여덟 자와 에픽 번호(P273)입니다. 티켓 해시 앞에는 상태를 말하는 동그라미가 하나 붙습니다. 빈 원이 대기, 삼각형이 든 원이 진행중, 체크가 든 원이 완료입니다(티켓이 지나는 상태에서 보신 그 셋입니다). 에픽 번호에는 동그라미가 없습니다. 에픽에는 상태라는 것이 없으니까요. 둘 다 밑줄이 그어져 있어서 누를 수 있는 글자인지 바로 구분됩니다.

그 동그라미는 지금 큐를 가리킵니다. 그 글을 쓴 시점이 아닙니다. 오래전에 끝난 티켓을 열어도 그 진행 기록에 적힌 해시에는 오늘 상태가 붙습니다. 보는 동안 바뀌기도 합니다. 방금 넘긴 티켓의 해시가 화면에 떠 있으면 삼각형이 체크로 바뀌는 것을 그 자리에서 봅니다.

글자는 안 바뀝니다. 해시는 여덟 자 그대로 뜨고 제목이 딸려 오지 않습니다. ## 결과 한 절에 해시가 열 개 넘게 적히는 티켓이 흔합니다. 표식마다 제목까지 함께 표시하면 그 문단이 몇 배로 길어집니다. 제목이 궁금하면 표식 위에 포인터를 잠깐 올려 두시면 됩니다.

백틱으로 감싼 해시도 눌립니다. 이 큐는 `8b7c1021`처럼 적는 쪽이 더 흔합니다. 백틱이 만드는 회색 배경은 그대로 두고 동그라미만 그 바깥에 붙입니다.

어디에서 눌리나

사람이 읽으라고 쓴 글은 전부입니다. 티켓 본문, 진행 기록에 쌓이는 세션의 말, 답변 폼의 왕복 스레드, 에픽 README, 페르소나 메모리, 프로젝트 홈의 대화가 모두 해당합니다.

티켓 제목에도 표식이 뜹니다. 보드 카드와 표 행의 제목, 티켓 상세 맨 위 제목, 그리고 스쿼드 화면 맨 위 경고 상자에 줄지어 놓이는 티켓 줄입니다. 아카이브 - 73f89584 같은 제목에서 그 뒤 여덟 자가 표식이 됩니다. 그래서 보드 카드 하나에 목적지가 둘입니다. 제목의 해시를 누르면 그 해시의 티켓이 열리고, 카드의 다른 자리를 누르면 종전대로 그 카드의 티켓이 열립니다.

본문을 고치는 편집기에는 표식이 뜨지 않습니다. 글을 고치는 중에 커서가 지나갈 자리라서 일부러 뺐습니다.

잠깐 멈추면 카드가 뜹니다

표식 위에 포인터를 얹고 0.6초를 기다리면 카드가 뜹니다. 포인터가 스쳐 지나가기만 해서는 뜨지 않습니다. 한 문단에 표식이 열 개 넘게 뜨는 글이 이 큐에서는 보통이라, 지나가기만 해도 카드가 연달아 뜨면 방해만 됩니다.

티켓 카드에는 넷이 담깁니다. 상태 배지와 해시, 제목 전문, 본문 앞머리 세 줄, 담당 페르소나. 제목은 안 자릅니다. 본문 앞머리는 ## Goal 같은 제목 줄을 건너뛰고 첫 문장 줄부터 가져옵니다. 에픽 카드도 넷입니다. P번호, README 첫 줄, 그 뒤 본문 앞머리, 대기 - 진행중 - 완료 건수.

카드 안에는 누를 것이 없습니다. 표식 하나에 목적지 하나입니다.

마우스가 없어도 됩니다. 탭으로 표식에 포커스를 주면 같은 카드가 뜹니다.

안 눌리는 여덟 자

여덟 자 hex라고 다 눌리지는 않습니다. 큐에 그 티켓이 실제로 있을 때만 표식이 뜹니다.

## 결과 절에 적히는 커밋 해시가 딱 그 모양입니다. 3f05446e처럼요. 큐에 없는 값이라 그냥 글자로 남습니다. 흐린 표식조차 만들지 않습니다. 만들면 이 큐에서는 거짓 표식이 진짜보다 흔해집니다. 안 눌린다고 고장이 아닙니다. 큐 밖의 값이라는 뜻입니다.

같은 이유로 표식이 뜨지 않는 자리가 넷 더 있습니다.

  • 없는 에픽 번호. P999는 그냥 글자입니다.
  • 코드 블록 안. 세 겹 백틱으로 두른 그 안은 명령과 그 출력이라 원문 그대로가 값이고, 거기 뜨는 여덟 자는 대개 git log가 출력한 커밋 해시입니다.
  • 이미 링크인 글자. 링크 안에 링크를 넣을 수는 없습니다.
  • 앞뒤에 글자가 붙은 것. 세션 아이디 w4-1d21592f의 뒤 여덟 자도, 로드맵 행 P303-1도 표식이 아닙니다. 앞뒤가 글자나 하이픈이 아닐 때만 표식으로 인식합니다.

코드 블록 복사

대화 답변이나 티켓 본문에 뜬 명령을 터미널에 붙여 넣고 싶을 때, 드래그해서 긁을 필요가 없습니다. 세 겹 백틱으로 두른 코드 블록에 마우스를 올리면 블록 오른쪽 위에 복사 버튼이 뜹니다. 누르면 그 블록의 코드가 클립보드에 들어가고 아이콘이 1.5초 동안 체크로 바뀝니다. 마우스를 빼면 버튼은 다시 숨습니다.

마우스 없이 Tab으로도 복사 버튼에 닿습니다. 포커스가 오면 버튼이 보이고, Enter를 누르면 복사합니다.

담기는 것은 펜스 안의 글자 그대로입니다. 첫 줄의 ```와 언어 이름, 끝 줄의 ```는 빠집니다. 줄이 길어 블록을 옆으로 스크롤해도 버튼은 오른쪽 위에 그대로 있습니다. `x`처럼 문장 안에 든 짧은 코드에는 버튼이 없습니다.

세션 스트림

티켓을 맡고 있는 세션의 진행을 실시간으로 봅니다. 파일이 길어지는 대로 화면이 따라가는 tail -f 명령과 같습니다. 기본은 사건 한 줄씩입니다. 무슨 파일을 읽었나, 무슨 명령을 돌렸나, 무엇을 썼나.

  • 원본은 앱이 새로 남기는 로그가 아닙니다. Claude Code가 이미 실시간으로 쓰고 있는 자기 트랜스크립트를 읽습니다. 트랜스크립트는 세션이 주고받은 말과 도구 호출을 순서대로 적어 둔 기록 파일입니다. 화면을 위해 늘어나는 파일은 0개입니다.
  • 끝난 세션의 리플레이도 같은 자리입니다. 완료 티켓을 열면 그 세션이 무엇을 하다 끝냈는지가 같은 모양으로 남아 있습니다.
  • 스트림이 있는 엔진은 claude와 grok뿐입니다. codex나 agy 워커가 맡고 있는 티켓에는 이 자리가 빕니다. 어느 엔진 때문에 비었는지는 그 자리에 적힙니다. 트랜스크립트를 안 남기는 엔진이라 없는 것이지 고장은 아닙니다.

같은 기록을 여는 경로 셋

이 기록을 여는 경로가 셋입니다.

  • 티켓 상세 화면의 진행 기록 상자. 티켓을 열면 이미 열려 있어서 따로 누를 것이 없습니다.
  • 워커 화면에서 행 오른쪽의 스트림 버튼. 지금 돌고 있고 어느 티켓을 맡았는지 아는 행에서만 눌립니다. 나머지 행에서는 버튼이 자리만 차지한 채 눌리지 않습니다.
  • 티켓 상세의 진행 기록 절 머리 줄, 오른쪽 끝의 자세히 보기. 바로 위 상자가 읽고 있는 그 기록을 다이얼로그로 다시 엽니다.

셋이 읽는 파일은 하나인데 화면은 두 모양으로 나뉩니다. 나누는 기준은 이 기록을 담는 형태입니다. 단 안에 놓인 상자인지, 화면을 덮는 다이얼로그인지가 그것입니다. 어느 화면에서 열었는지는 따지지 않습니다. 첫 번째 경로는 상자를 열고, 뒤의 두 경로는 어느 쪽에서 눌러도 똑같은 다이얼로그를 엽니다.

인라인 상자 - 티켓을 열면 바로다이얼로그 - 자세히 보기나 스트림
줄 맨 앞의 시각14:32:07처럼 시계 시각+02:02, 세션이 시작하고 흐른 시간
줄을 눌렀을 때그 줄 아래로 원문이 펼쳐집니다오른쪽 단에 그 사건이 뜹니다
검색과 필터없습니다목록 위에 한 줄로 뜹니다
도구를 몇 번 불렀나없습니다머리 아래 칩 줄이 셉니다
결과를 표시하는 방식원문 글자 그대로입니다마크다운으로 뜨고, 배지를 누르면 원문입니다

모양이 나뉜 이유는 화면에서 차지하는 크기입니다. 상자는 본문과 Done when 체크리스트, 질문과 답변이 같이 뜨는 단 안에 있습니다. 다이얼로그는 열려 있는 동안 화면을 통째로 덮으니 검색칸과 오른쪽 단을 넣을 자리가 나옵니다. 그 넓어진 자리에 한 사건을 깊이 들여다볼 칸이 들어가고, 그래서 이름이 자세히 보기입니다.

자세히 보기로 열어도 상자에서 보던 것은 하나도 사라지지 않습니다. 계획 단계 아코디언, 질문과 답변 말풍선, 말 거는 입력칸이 다이얼로그 안에도 있고 그 위로 검색과 오른쪽 단이 얹힙니다. 따라 들어가지 않는 것은 절 머리의 토큰량 표시 하나뿐입니다. 닫으면 뒤에 있던 상자가 열기 전 화면 그대로입니다.

자세히 보기는 상자가 뜨는 티켓에만 뜹니다. 접수 직후의 요구사항처럼 세션 기록도 말풍선도 아직 없는 티켓에는 상자 자체가 없고, 그래서 더 들여다볼 것도 없습니다.

인라인 상자는 아래 진행 기록 장에서 따로 다룹니다. 여기서는 다이얼로그를 봅니다.

다이얼로그의 머리와 툴바

워커 화면에서 연 세션 스트림 다이얼로그. 머리에 워커 이름과 티켓 해시가 뜨고 그 아래 진행중 배지와 소요 8m 26s, 다시 그 아래 Bash 41로 시작하는 도구 칩 줄, 검색칸과 필터 넷, 기록 145건이 놓입니다. 본문은 좌우로 나뉩니다. 왼쪽은 +00:32 Read docs/DESIGN.md처럼 상대 시각으로 선 사건 목록이고, 오른쪽은 고른 줄의 입력과 결과입니다. 결과 절 머리에는 마크다운 배지와 복사 버튼이 나란히 놓입니다.

맨 윗줄은 어느 경로로 열었는지에 따라 달라집니다. 워커 쪽에서 열었으면 세션 스트림 - <워커 이름>이고, 티켓 상세에서 자세히 보기로 열었으면 절 이름 그대로 진행 기록입니다. 티켓 상세에는 워커 이름을 표시하지 않습니다. 거기서는 무엇의 기록인지가 맨 위 큰 제목에 이미 적혀 있습니다. 바로 아래 줄은 두 경로 모두 티켓 해시입니다.

그 아래로 두 가지가 더 붙습니다. 세션이 살아 있는지가 진행중과 완료 한 낱말로 뜨고 그 옆에 소요 12m 30s가 붙습니다. 진행 중인 세션이면 첫 사건부터 지금까지, 끝난 세션이면 첫 사건부터 마지막 사건까지 잰 시간입니다.

그 아래 칩 줄은 이 세션이 무엇을 얼마나 했는지 셉니다. Bash 14처럼 도구 이름과 횟수가 한 칩에 들어가고 많이 부른 것부터 왼쪽에 뜹니다. 이름은 엔진이 부른 그대로라 영어입니다. 접힌 자리까지 다 세기 때문에 아무것도 펼치지 않아도 이 줄은 맞습니다.

칩 줄 아래가 툴바입니다. 목록이 스크롤돼도 이 줄은 제자리에 있습니다. 왼쪽이 검색칸이고 자리표시가 이 기록 검색입니다. 도구 이름과 한 줄 요약은 물론 오른쪽 단에서야 보이는 원문까지 검색하고 대소문자는 가리지 않습니다. 검색하는 동안에는 접혀 있던 자리가 열립니다. 말풍선 묶음은 물론 끝났거나 취소된 계획 단계까지 펼쳐집니다. 접힌 채로 걸러 내면 맞은 줄이 그 안에 숨어 검색 결과가 틀리게 됩니다. 검색어를 지우면 직접 펼친 것만 열린 채 남습니다.

그 오른쪽이 필터 넷입니다. 대화, 도구, 생각, 프롬프트를 눌러 끄고 켭니다. 기본은 넷 다 켜짐이고 그 상태가 아무것도 안 거른 화면입니다. 명령이 어디서 어긋났는지만 볼 때는 도구만 남기면 됩니다.

필터 넷 오른쪽에 단계로 묶기가 하나 더 있습니다. 켜져 있는 것이 기본이고, 그때 목록은 진행 계획의 단계마다 묶여 있습니다. 끄면 그 묶음이 풀립니다. 단계 제목이 사라지고 사건과 말풍선이 처음부터 끝까지 시간순으로 한 줄기가 됩니다. 계획이 어디까지 왔는지보다 세션이 무엇을 어떤 순서로 했는지를 읽고 싶을 때 누르세요. 다시 누르면 아코디언이 돌아옵니다. 이 상태는 어디에도 안 남아서, 다이얼로그를 닫았다 열면 다시 켜져 있습니다.

꺼도 감춰지는 기록은 한 건도 없습니다. 이 칩이 왼쪽의 필터 넷과 구분되는 지점이 여기입니다. 필터는 사건을 덜어 내지만 이 칩은 묶음만 풉니다. 줄 오른쪽 끝의 기록 128건은 걸러 내고 남은 수라, 검색어를 넣거나 필터를 끄면 줄어듭니다. 이 칩을 눌러도 그 수는 그대로입니다.

이 칩은 자세히 보기로 연 다이얼로그에만, 그것도 진행 계획이 있는 티켓에만 뜹니다. 묶을 것이 없으면 풀 것도 없습니다. 워커 화면의 스트림으로 연 쪽은 티켓 본문을 안 읽어서 단계를 애초에 모릅니다. 두 경로가 똑같은 다이얼로그를 연다고 앞에서 적었는데, 달라지는 자리가 이 칩 하나입니다. 칩이 안 떠도 검색칸과 필터 넷, 기록 수는 그대로 있습니다. 위 그림도 스트림으로 연 화면이라 칩이 없습니다.

검색과 필터가 전부 걸러 내면 목록에 맞는 기록이 없습니다 한 줄만 남습니다. 머리와 칩 줄은 그때도 그대로입니다. 걸러 낸 대상은 목록일 뿐이고 세션이 한 일은 그대로 남아 있으니까요.

줄 하나 읽기

다이얼로그에서는 줄 맨 앞의 시각이 시계 시각 대신 +02:02입니다. 기준은 이 세션의 첫 사건입니다. 첫 사건에서 2분 2초 지난 뒤에 벌어진 일이라는 뜻입니다. 시계 시각은 사라지지 않았습니다. 그 칸에 마우스를 올리면 종전의 14:32:07이 그대로 뜹니다.

줄 오른쪽 끝에는 그 도구가 얼마나 걸렸는지가 붙습니다. 값은 도구를 부른 시각과 결과가 돌아온 시각의 차입니다. 그래서 도구를 부른 줄에만 뜨고 결과 줄에는 같은 수를 다시 안 씁니다. 10초 안쪽이면 8.0s, 1분을 넘으면 3m 50s입니다. 결과가 아직 안 온 도구는 이 칸이 빕니다. 지금 실행 중인 명령이 그렇습니다.

오른쪽 단의 입력과 결과

줄을 누르면 다이얼로그 오른쪽 단에 그 사건이 뜹니다. 단 머리에 도구 이름과 시각, 걸린 시간이 다시 뜨고 그 아래로 절 둘이 놓입니다.

입력은 그 도구에 넘긴 것입니다. 파일을 고친 줄이면 무엇이 지워지고 무엇이 들어갔는지까지 나옵니다. 결과는 돌려받은 것이고 아직 안 돌아왔으면 절 자체가 없습니다. 실패한 결과에는 오류가 낱말로 붙습니다.

결과는 처음 뜰 때 마크다운입니다. ## 로 시작한 줄이 제목이 되고 |가 든 줄이 표가 됩니다. 줄바꿈은 원문 그대로입니다. 도구가 출력한 내용은 줄 하나가 뜻 하나인 경우가 많아서, 여러 줄을 한 문단으로 합치면 그 뜻이 사라집니다.

원문이 필요하면 절 머리 오른쪽의 마크다운 배지를 누릅니다. 배지가 꺼지고 그 절이 받은 글자가 그대로 돌아옵니다. 다시 누르면 마크다운입니다. 이 상태는 어디에도 안 남습니다. 목록에서 다른 줄을 고르면 새로 뜨는 결과는 다시 마크다운입니다. 두 면으로 나뉘는 것은 결과 절 하나뿐이고 입력은 언제나 원문입니다.

절마다 복사가 하나씩 있습니다. 어느 면을 보고 있든 클립보드에 담기는 것은 원문입니다. 마크다운으로 읽다가 눌러도 변환하기 전의 글자가 그대로 담깁니다.

한 도구 호출의 입력과 결과를 나란히 읽는 자리가 여기입니다. 그래서 다이얼로그에서는 줄 아래로 원문이 펼쳐지지 않습니다. 같은 내용을 두 곳에 표시하지 않기 때문입니다. 인라인 상자에는 오른쪽 단이 없어서 원문이 종전대로 그 줄 아래에 펼쳐집니다.

고른 줄이 없으면 그 단에 줄을 고르면 여기에 입력과 결과가 뜹니다가 표시됩니다. 단 자체는 사라지지 않습니다. 오른쪽 위의 닫기를 누르면 선택이 풀리고 그 문구로 돌아갑니다. 창이 좁으면 단이 목록 오른쪽에서 아래로 내려옵니다.

고를 수 있는 것은 사건 줄입니다. 사람이 쓴 말과 세션이 사람에게 한 말은 말풍선과 산문으로 이미 다 보이는 자리라 누를 것이 없습니다.

진행 기록

완료된 티켓 상세의 진행 기록. 세션 기록 로그 아래 오른쪽에 사람이 쓴 답변 1 말풍선(1.(a))이 붙어 있고, 오른쪽 단에는 frontmatter 표와 관계, 요구사항이 있습니다.

스트림 줄과 질문, 답변 말풍선은 한 상자에 시간순으로 놓입니다. 절 이름이 진행 기록인 이유가 이것입니다. 사람이 여기에서 확인하는 것은 하나입니다. 이 티켓에 지금까지 무슨 일이 있었나.

여러 번 돈 티켓은 회차마다 카드가 한 장입니다

티켓은 한 번에 안 끝나기도 합니다. 막혀서 질문을 올렸다가 답을 받고 다시 배정되거나, 세션이 죽어서 다른 워커가 이어받습니다. 워커에 한 번 배정될 때마다 회차가 하나 늘고, 상자 안에 그 회차의 카드가 한 장씩 위에서부터 시간순으로 섭니다. 카드가 세 장이면 이 티켓은 세 번 돈 것입니다.

카드 머리 한 줄은 회차 1 같은 순번으로 시작하고, 그 회차를 맡은 워커와 시작 시각, 그 회차가 어떻게 끝났는지가 뒤를 잇습니다. 끝난 모양은 엔진이 남긴 낱말(DONE 등)이 그대로 뜨고, 아직 도는 회차는 진행 중입니다.

펼쳐져 있는 것은 마지막 회차뿐입니다. 앞 회차는 머리만 보입니다. 그 회차가 어디서 멈췄는지 보고 싶으면 머리를 누릅니다. 그 회차에 있었던 사건만 펼쳐지고, 뒤 회차의 도구 호출은 섞이지 않습니다. 실시간으로 사건이 붙는 곳도 마지막 카드 하나입니다. 기록이 남지 않은 회차는 머리 아래에 트랜스크립트 없음 한 줄만 뜹니다.

질문과 그 답변은 카드와 카드 사이에 섭니다. 첫 회차가 막혀서 올린 질문에 사람이 답하고 그 답을 받아 둘째 회차가 시작됐다면, 그 왕복은 첫 카드와 둘째 카드 사이에 놓입니다. 답을 단 시각이 어느 회차 사이에 드는지가 자리를 정합니다. 도는 동안 사람이 건넨 참견은 그 회차 카드 안에 남습니다. 답이 아직 없는 질문과 입력칸은 마지막 카드 밖 맨 아래입니다.

한 번만 돈 티켓에는 카드가 없습니다. 대부분의 티켓이 그렇고, 이 경우 화면은 아래 설명 그대로입니다. 오래된 기록이 정리되어 앞 회차가 사라졌으면 남은 회차만 카드로 서고 번호도 남은 것부터 셉니다.

세션이 적어 둔 단계(아래에서 설명합니다)도 회차마다 나뉘어 카드에 들어갑니다. 끝낸 단계는 그 단계를 끝낸 회차의 카드에 있습니다. 회차 1에서 끝낸 단계를 다시 보려면 회차 1 카드 머리를 눌러 펼치면 되고, 마지막 카드에서는 그 단계가 보이지 않습니다. 회차 1에서 시작해 회차 2에서 끝낸 단계는 회차 2 카드에 섭니다.

단계서는 카드
끝낸 단계와 그만둔 단계끝낸(그만둔) 회차의 카드. 끝난 시각이 없으면 시작한 회차의 카드
지금 하는 단계그 단계를 시작한 회차의 카드
아직 시작하지 않은 단계마지막 카드

카드 안에서 단계가 놓이는 순서는 세션이 적어 둔 순서 그대로입니다.

진행 중인 티켓을 열면 그 상자가 단계별로 나뉘어 있습니다. 티켓을 맡고 있는 세션이 일을 시작하기 전에 무엇을 어떤 순서로 할지 스스로 적어 두기 때문입니다. 사람이 짜서 넘기는 목록이 아닙니다. 적어 둔 한 줄이 상자 안의 단계 하나가 되고, 그 줄을 펼치면 그 단계를 하는 동안 있었던 일이 나옵니다. 위에서 아래로 읽어 내려가면 이 티켓이 어디까지 진행됐고 무엇이 남았는지 한 번에 보입니다.

진행중 티켓의 진행 기록 상자. 위에서부터 접힌 단계 하나, 말 거는 칸을 안에 품고 열려 있는 단계 하나, 제목만 선 미착수 단계, 취소선이 그어진 취소 단계가 차례로 놓여 있습니다.

단계는 넷 중 한 모양으로 뜹니다.

단계상자 안의 모양
끝낸 단계접혀 있습니다. 줄 끝에 기록 12건처럼 그 단계에 쌓인 건수가 붙고, 누르면 펼쳐집니다
지금 하는 단계열려 있습니다. 사건이 실시간으로 그 안에 붙습니다
아직 시작하지 않은 단계제목만 뜹니다. 줄 끝은 미착수고, 펼칠 것이 없어 화살표도 없습니다
그만둔 단계제목에 취소선이 그어지고 줄 끝이 취소입니다

말을 거는 칸은 지금 하는 단계 안에 있습니다. 그 단계 맨 아래가 진행 중인 세션에 한 줄 전달하는 자리입니다(도는 세션에 말 걸기 참고). 지금 하는 단계가 없으면 종전처럼 상자 맨 아래입니다.

세션은 한 번 세운 목록을 고치지 않습니다. 줄을 지우지도, 순서를 바꾸지도, 끝에 덧붙이지도 않습니다. 하다가 계획이 어긋나면 남은 줄에 취소선을 긋고 남은 범위는 새 티켓 한 장으로 넘깁니다. 사람이 그 목록을 보고 언제쯤 무엇이 끝나겠다고 짐작하는데, 목록이 바뀌면 그 짐작이 매번 무효가 되기 때문입니다.

계획 목록 위와 아래에 칸이 하나씩 더 붙습니다. 배정과 마무리입니다. 단계와 같은 모양으로 접혀 있고 누르면 열리는데, 줄 끝에 건수가 안 붙습니다. 낱말 하나와 화살표가 전부입니다.

칸담는 구간
배정첫 단계가 사건을 담기 전까지입니다. 세션이 티켓을 받아 본문을 읽고 무엇을 어떤 순서로 할지 목록을 짜는 동안이 여기 듭니다
마무리마지막 단계가 사건을 담은 뒤부터입니다. 커밋을 push하고 회고를 남기고 ## 결과를 적고 파일 이름을 .done으로 바꾸는 동안입니다

두 칸은 단계가 아닙니다. 어느 티켓에서나 똑같이 되풀이되는 앞뒤라 세션이 계획에 안 적습니다. 그래서 목록 밖에서 목록을 감쌉니다. 안이 비면 칸도 안 뜹니다. 진행 중인 티켓에서 마무리가 안 보이는 이유가 그것입니다. 지금 하는 단계가 이 순간까지의 사건을 전부 담고 있어 그 뒤에 아무것도 없습니다. 세션이 끝나고 뒤쪽 사건이 쌓이는 순간에 이 칸이 처음 뜹니다. 계획을 아직 안 적은 티켓과 이 목록이 생기기 전에 끝난 티켓에는 단계도 두 칸도 없습니다. 그 상자에는 예전처럼 사건이 한 줄씩 놓입니다.

화면은 세션이 적어 둔 시각을 기준으로 사건을 단계에 배치합니다. 목록 한 줄에 그 단계를 시작한 시각과 끝낸 시각이 있고 그 둘 사이에 벌어진 사건이 그 단계 안으로 들어갑니다. 시작 시각을 똑같이 적은 단계가 여럿이면 그 구간의 사건을 목록에 적힌 순서대로 나누어 배분합니다.

적어 둔 시각이 실제와 어긋난 티켓이 있습니다. 세션이 시계를 안 읽고 눈대중으로 적으면 그 시각대가 세션이 실제로 진행한 시간과 안 겹칩니다. 그러면 자기 시각대로 사건을 배정받는 단계가 몇 개만 남거나 하나도 없습니다. 사건을 배정받지 못한 단계에는 화면이 순서를 기준으로 사건을 채웁니다. 사건이 발생한 순서를 그대로 몇 구간으로 나눈 다음, 그 자리에 놓인 단계에 위에서부터 하나씩 배분합니다.

이렇게 나눈 것은 짐작입니다. 그 사건이 실제로 어느 단계에서 벌어졌는지는 티켓 파일에 안 남아 있습니다. 시각이 어긋난 티켓에서는 한 단계에 들어간 사건이 정말 그 단계의 것이라고 믿을 근거가 없습니다. 시각을 시계에서 읽어 적은 티켓에서는 이 짐작이 끼어들 여지가 없습니다.

단계와 단계 사이에 남는 사건은 예전 그대로입니다. 이름 붙은 칸이 없습니다. 두 단계 사이 그 자리에 시간순으로 그냥 뜹니다.

단계를 펼치면 줄이 여러 개 나옵니다. 줄 하나가 사건 하나입니다. 맨 앞에 그 일이 벌어진 시각이 뜹니다. 다음 칸이 사건의 종류, 그 뒤가 한 줄 요약입니다.

세션은 파일을 읽고 명령을 돌려 가며 일합니다. 그때 쓰는 수단 하나하나가 도구입니다. 도구를 부른 줄에는 그 도구 이름이 그대로 뜹니다. Bash면 명령을 돌린 것이고 Read면 파일을 읽은 것입니다. 요약 자리에는 그 명령이 하려던 일이 한 마디로 붙습니다. 파일을 만진 도구면 파일 경로입니다.

돌려받은 것은 다음 줄에 결과로 뜨고 요약 자리에 몇 줄이 돌아왔는지가 붙습니다. 사이에 생각이 끼기도 합니다. 세션이 말을 꺼내기 전에 혼자 생각한 대목인데, 대개 내용이 열리지 않아 분량만 보입니다. 세션이 사람에게 하는 말은 접힌 줄로 안 뜹니다. 앞에 세션을 달고 산문으로 이어집니다. 여기에는 시각이 없습니다.

줄을 누르면 요약 대신 원문이 나옵니다. 돌린 명령 전문, 돌아온 결과 전문, 파일을 고친 줄이면 무엇이 지워지고 무엇이 들어갔는지까지입니다.

틀린 결과는 다르게 보입니다. 도구가 실패해서 돌아온 결과 줄에는 요약 앞에 오류가 한 낱말 붙습니다. 그 낱말만 다른 글자보다 진합니다. 잘된 결과 줄에는 아무것도 안 붙으니 붙어 있는 줄만 눈에 띕니다. 색은 안 씁니다. 흑백으로 인쇄해도 낱말은 그대로 남습니다.

이 표식이 필요해지는 때는 티켓이 한참 도는데 진척이 안 보일 때입니다. 그때 어디서 어긋났는지를 사람이 직접 찾아 들어갑니다. 오류가 붙은 줄을 눌러 보면 그 도구가 무엇이라고 응답했는지 원문으로 나옵니다.

펼친 단계 안의 결과 줄 둘. 위는 결과 오류 · 2줄로 오류 낱말만 진하게 뜨고, 바로 아래는 같은 도구가 성공해 낱말 표식 없이 결과 1줄로 뜹니다.

오류만 골라 보는 스위치는 없습니다. 몇 건인지 세어 주는 자리도 없습니다. 상자를 살펴보며 오류를 찾으시면 됩니다. 접힌 단계 안에 든 오류는 그 단계를 펼쳐야 보입니다. 지금 하는 단계는 늘 열려 있으니 도는 세션이 방금 낸 오류는 아무것도 안 열고 보입니다.

세션이 막혀 질문을 올리고 사람이 답을 쓰는 왕복은 원래 세션 진행의 앞뒤입니다. 그래서 상자도 스크롤도 하나고 입력칸도 하나입니다. 칸이 무엇을 하는 칸인지는 티켓 상태가 정합니다. 셋은 서로 배타적입니다.

티켓 상태칸이 하는 일
진행중(.wip)참견 - 진행 중인 세션에 한 줄 전달합니다
답변 대기답변 - 세션이 올린 질문에 답을 씁니다. 답이 파일로 생기면 잠금이 풀립니다
완료(.done)이어받기 - 이 티켓을 이어받는 새 티켓 한 장을 엽니다

답이 아직 없는 질문은 맨 끝에 뜹니다. 바로 밑이 그 답을 쓰는 칸이라 물음과 답이 붙어 있습니다.

제목 옆의 토큰량 - 이 티켓이 한도를 얼마나 소모했나

진행 기록 제목 바로 옆에 이 티켓 48M 토큰이 회색으로 뜨고, 그 뒤에 세션 1개가 붙습니다. 이 티켓을 맡았던 세션들이 주고받은 토큰입니다. 세션이 끝날 때 엔진이 자기 회계로 적어 둔 넷을 그대로 더했습니다. 입력, 출력, 캐시에 쓴 것, 캐시에서 읽은 것. 우리가 단가를 곱해 어림한 값이 아닙니다. 수 앞에 붙은 이 티켓은 임자를 밝히는 말입니다.

얼마나 소모했는지를 알려 줍니다. 얼마나 비쌌는지는 말하지 않습니다. 정액 요금제에서 사람이 실제로 묻는 것은 한도를 얼마나 소모했느냐입니다. 그래서 단위를 토큰으로 잡았습니다. 돈으로 환산한 순서는 여기서 안 나옵니다. 더한 넷 중 대부분이 캐시에서 읽은 토큰인데 그 단가가 출력의 1/50밖에 안 됩니다. 수가 크다고 비싼 티켓이 아닙니다. 실제로 이 큐에서 토큰이 2.8배인 티켓 둘의 청구액이 거의 같았습니다. 이 수를 기준으로 줄을 세우면 긴 맥락을 오래 유지한 순서가 나옵니다. 비싼 순서는 아닙니다.

세션이 여럿이면 다 더한 수입니다. 티켓 하나가 세션 하나로 안 끝나는 일은 흔합니다. 답변을 기다렸다 이어서 진행하기도 하고, 죽어서 다시 배정되기도 합니다. 그 해시를 맡았던 세션 전부의 합이고, 마지막 세션 하나의 값은 아닙니다. 옆에 붙은 세션 1개가 몇 개를 더한 수인지 알려 줍니다. 기간도 안 자릅니다. 이 티켓이 열려 있던 내내가 범위입니다.

모름은 0이 아닙니다. 우리가 그 값을 모른다는 뜻입니다. 안 썼다는 뜻으로 읽으시면 곤란합니다. 토큰은 세션 로그에서 읽는데, 그 로그가 없는 경우가 셋입니다.

모름이 선 이유글자에 마우스를 올리면
세션이 아직 돌고 있습니다. 토큰은 세션이 끝나는 순간 한 번 적힙니다이 해시의 로그 3개에 종료 기록이 없습니다
세션이 결과를 안 남기고 죽었습니다. 그 토큰은 앞으로도 안 옵니다위와 같은 문구입니다. 화면은 이 둘을 구분하지 못합니다
로그가 지워질 만큼 오래된 티켓입니다. 다른 머신에서 돈 세션도 여기 없습니다workers/logs/*-<해시>.log가 이 머신에 0개입니다

로그는 이 머신 안에만 있고 엔진은 그 파일을 지우지 않습니다. 얼마나 남아 있느냐는 디스크와 사람이 정합니다(로그 읽는 법 참고). 그래서 오래된 티켓일수록 모름이 흔합니다. 0 토큰으로 그리면 두 달 전 티켓이 전부 공짜로 보일 테니, 모르는 자리에는 모른다고 적습니다. 반대로 세션이 끝났고 넷이 다 0이면 그때는 0 토큰이 그대로 뜹니다. 그건 사실이니까요.

이 합계에 없는 세션 3개가 붙었으면 실제로는 더 썼습니다. 그 세션들의 토큰이 앞의 수에서 빠져 있다는 뜻입니다. 로그는 남았는데 그 안에 종료 기록이 없는 세션이 여기 잡힙니다. 신호를 받고 죽은 세션이 그렇고, 그 값은 다시 오지 않습니다. 그래서 이 문구는 곧 채워진다는 말을 하지 않습니다. 워커 화면의 토큰 옆에 붙는 같은 문구와 뜻이 같습니다.

에픽별 합계는 에픽 화면에 있습니다. 그 에픽에 든 티켓들의 토큰을 더한 수고, 그중 몇 건을 아는지까지 같이 뜹니다(에픽 참고).

토큰량이 안 뜨는 자리가 셋입니다. 보드 카드, 테이블 뷰, 화면 맨 아래 status bar. 거기서 찾다가 안 보인다고 고장을 의심하지 마세요.

  • 진행 중인 티켓의 카드는 값이 늘 모름입니다. 늘 비는 칸을 만들지 않았습니다.
  • 완료 카드는 값이 있지만 보드에서 토큰량으로 내리는 결정이 없습니다. 카드를 움직이는 축은 상태 - 우선순위 - 에픽 - 배정입니다.
  • 테이블 뷰에 열을 세우면 사람이 그걸로 정렬할 텐데, 로그가 남은 기간이 짧아 큐의 대부분이 모름입니다. 모름끼리 줄 세우는 것은 정렬이 아닙니다.

하단 status bar의 토큰과는 다른 수입니다. 단위가 같아 헷갈리기 쉬운데 둘은 다른 것을 셉니다. 저 아래 줄은 계정 하나가 최근 창에 쓴 양입니다. 창은 5시간이나 7일이고 워커 전원이 쓴 것이 한 통에 섞여 있습니다. 여기 이 수는 티켓 하나가 열려 있던 내내 쓴 양이고, 그 티켓을 맡았던 세션만 셉니다. 묶는 단위도 다르고 창도 다릅니다. 두 수가 안 맞는 것이 고장이 아니니 나란히 놓고 빼 보지 마세요. 화면에 토큰으로 끝나는 수가 둘이라, 이 자리의 수는 앞에 이 티켓을 달고 뜹니다.

워커

dira 워커 화면. 워커 여덟이 한 줄씩 표로 놓이고, 줄마다 running 배지와 맡고 있는 티켓 해시, 컨텍스트 수, 마지막 활동 로그 한 줄, pid, 토큰 합계, 액션 넷이 붙어 있습니다.

열은 여덟입니다. 이름, 상태, 맡고 있는 티켓, 컨텍스트, 마지막 활동, pid, 토큰(5시간), 액션. 컨텍스트 셀은 그 자체가 토글입니다. 누르면 이 워커가 세션에 실어 주는 파일 목록이 아래로 펼쳐집니다.

행마다 pid가 보입니다. pid는 운영체제가 실행 중인 프로그램 하나에 붙이는 번호입니다. 이 번호가 표에 떠 있는 이유는 하나입니다. 회수 판정이 프로세스 생존에 걸려 있어서입니다. 걸린 시간이 기준이 아닙니다. 워커가 running인지 stale인지는 그 pid가 지금 살아 있는지로 결정됩니다. 살아 있으면 running, 죽었으면 stale입니다. 워커가 큐를 한 번 훑는 다음 tick이 회수합니다. 오래 걸리는 정상 세션과 멈춰 버린 세션은 걸린 시간만으로는 구분하지 못합니다.

워커를 늘리는 것도 이 화면입니다(워커 참고).

프로젝트 홈

프로젝트에 들어가면 이 화면부터 뜹니다. 다른 화면에서 돌아올 때는 헤더 왼쪽 끝의 로고를 누르세요. 여기 떠 있는 것은 이 프로젝트를 두고 묻는 대화 하나입니다. 요약 대시보드가 아닙니다. w2가 지금 무슨 일을 하고 있나, 이 프로토콜은 왜 이렇게 돼 있나 같은 물음을 그냥 쓰시면 됩니다. 에이전트가 이 프로젝트의 큐와 repo와 프로토콜을 읽고 답합니다.

  • 좌측 패널 아래 단에 그룹이 둘입니다. 대화는 세 줄부터 시작해 더보기를 누를 때마다 세 줄씩 열립니다. 워커 세션은 이 큐의 워커들이 물었던 세션입니다. 끝난 것을 고르면 그 맥락 위에서 이어 물을 수 있습니다. 진행 중인 세션에는 여기서 말을 걸 수 없습니다. 그건 티켓 상세의 참견입니다.
  • 명령어와 프롬프트를 이어 두고 손으로 돌리거나 시각을 정해 돌리는 커맨드는 패널 맨 위의 표면 줄에 있습니다. 이 아래 단에는 없습니다. 왼쪽에서 둘째 아이콘이고, 만드는 법과 나머지는 커맨드에 있습니다.
  • 답은 글자가 도착하는 대로 화면에 이어집니다. 오래 걸리면 중지로 끊으세요.
  • 답이 도는 동안에도 다음 글을 보낼 수 있습니다. 보낸 글은 말풍선 아래에 답을 기다리는 중을 달고 기다립니다. 답이 도구를 부르는 중이면 그 사이에 지금 답으로 들어가고, 아니면 답이 끝난 뒤 다음 질문으로 들어갑니다. 바로 넣고 싶으면 그 줄 오른쪽의 참견하기를 누르세요. 도는 답이 거기서 끊깁니다. 받은 데까지는 화면에 남고, 그 글로 새 답이 곧바로 시작됩니다. 글이 이미 도구 사이로 들어간 뒤에 누르면 같은 글이 한 번 더 갑니다.
  • 읽고, 고치고, 명령도 돌립니다. 도구는 Read, Glob, Grep, Write, Edit, Bash 여섯입니다. MCP 도구는 붙지 않습니다. 도구에는 경로 제한이 없어서 큐 안팎을 가리지 않습니다. 워커들이 일하는 워크트리와 프로젝트 소스까지, 이 맥의 사용자 계정이 열 수 있는 곳이면 읽고 고칠 수 있습니다. 대신 세션은 사람이 시키지 않은 것은 고치지 말고, 무엇을 왜 고치는지 확신이 안 서면 먼저 물어보라는 지시를 받습니다. 이 지시 말고는 막는 장치가 없습니다. 무언가를 고쳐 달라고 할 때는 대상을 분명히 적어 주세요.
  • 요구를 여기서 바로 접수할 수도 있습니다. 대화하다 요구사항으로 올려 달라고 하면 kind: request 티켓 한 장이 생기고 pm이 그것을 받습니다. 대화에서 불만을 읽고 알아서 접수하지는 않습니다. 올려 달라고 한 턴에만 씁니다.

알림 종

헤더 우측의 종 하나가 두 가지를 알려 줍니다. 지금 이 프로젝트가 왜 안 도나, 그리고 자리를 비운 사이에 무슨 일이 있었나. 종전에 본문 위에 쌓이던 배너들을 이 종 하나에 모았습니다. 아홉 가지이고, 영향 범위가 넓은 것부터 뜹니다.

  1. 네트워크가 끊겨 있습니다 - 연결이 없으면 인증이 있어도 아무것도 안 됩니다.
  2. 큐가 멈춰 있던 구간 3건 - 맥이 자거나 꺼져 있는 동안은 큐가 안 돕니다. 그렇게 멈춘 구간 하나가 한 건이고, 아직 보관하지 않은 것이 몇 건인지 제목에 붙습니다. 그 수만큼 줄이 밑에 뜨고, 한 줄이 8/5 23:40 - 09:12처럼 멈춰 있던 구간과 잠자기인지 꺼짐인지를 알려 줍니다. 최근 것이 위고, 오늘이 아닌 시각에만 날짜가 붙습니다. 잃은 것은 없고 고칠 일도 없습니다.
  3. 커밋 안 된 변경이 디스패치를 막고 있습니다 - 이 프로젝트의 워커가 하나도 티켓을 안 가져갑니다(트러블슈팅 §큐가 통째로 멈춰 있다).
  4. Claude 토큰이 없습니다 - 인증이 안 돼 세션이 뜨지 못합니다(인증 참고).
  5. 세션이 열리자마자 죽는 워커 - 외부 요인입니다.
  6. 아무도 가져가지 않는 티켓 - 할당됨 상태로 멈춘 채 레인에도 없는 티켓들입니다.
  7. 답변을 기다리는 티켓 - 사람이 답을 써야 그 프로젝트가 다시 돕니다.
  8. 되풀이해 죽어서 쉬는 티켓 - 같은 단계에서 여러 번 죽어 지금 잠시 쉬는 중입니다. 티켓마다 몇 번 죽었는지와 언제 다시 가져가는지가 같이 뜨고 기다리면 저절로 다시 돕니다. 대기가 끝나기를 안 기다리시려면 그 줄의 티켓 열기로 들어가세요. 티켓 상세의 재시도 대기 절에서 지금 다시 보내기를 누르면 대기가 그 자리에서 끝납니다.
  9. 마감을 못 지킬 티켓 - 마감이 지났거나, 선행이 안 풀린 채로 마감이 가까워졌습니다.
  • 배지는 켜진 알림의 개수(0~9)이고 건수 합계가 아닙니다. 단위가 서로 다른 아홉을 한 수로 합치면 그 수가 무엇이 몇 개인지 화면 어디에서도 알 수 없게 됩니다. 각 항목이 자기 건수를 자기 제목에 적습니다.
  • 0건이어도 종은 떠 있습니다. 눌리고, 열리고, 알림 없음이라고 알려 줍니다.

답변 대기 줄에는 무엇을 묻는지가 뜹니다

답변을 기다리는 티켓을 펼치면 티켓마다 한 줄이 뜹니다. 줄은 왼쪽부터 해시, 답변 대기 배지, 질문 제목, 답변 쓰기 링크 순서입니다. 질문 제목만 보면 티켓을 열지 않고도 무엇을 답해야 하는지 압니다.

제목은 티켓 본문에서 가져옵니다. 세션이 질문을 올리면 본문에 ## 질문 1 같은 절이 생기고, 그 아래 ### 1. 무엇부터 세우나처럼 번호를 단 문항이 붙습니다. 종은 마지막 질문 절에서 첫 문항의 제목만 줄에 적습니다.

  • 같은 절에 문항이 더 있으면 제목 뒤에 남은 수가 붙습니다. 문항이 셋이면 외 2건입니다. ### 1-1.처럼 가지 번호를 단 문항도 한 건으로 셉니다.
  • 질문이 다시 올라와 ## 질문 2가 생기면 줄은 그 절의 첫 문항으로 바뀝니다. 앞 절의 제목은 종에 남지 않습니다.
  • 줄에 다 안 들어가는 제목은 끝이 말줄임표로 잘립니다. 마우스를 올리면 전문이 뜹니다.

제목이 없는 줄도 있습니다. 본문에 ## 질문 n 절이 없거나, 절은 있어도 ### <번호>. <제목> 꼴의 문항 줄이 없으면 그 줄에는 해시와 배지와 링크만 뜹니다. 종이 문구를 지어내 빈칸을 채우지 않기 때문입니다. 이런 줄은 해시를 눌러 티켓 본문에서 무엇을 묻는지 확인하세요.

쌓이는 둘, 쌓이지 않는 일곱

아홉 중 둘만 목록이 됩니다. 세션이 열리자마자 죽는 워커와 복귀 알림입니다. 세션이 죽을 때마다 한 줄, 맥이 멈춰 있던 구간마다 한 줄이 남습니다. 나머지 일곱은 한 줄도 안 남습니다.

구분하는 기준은 시제입니다. 죽은 세션과 잠든 구간은 지나간 일이라 몇 번 있었는지를 셀 수 있습니다. 일곱은 지금 참인 사실입니다. 토큰이 두 번 없어도 "지금 없다" 하나입니다. 답을 기다리는 티켓이 어제 다섯이었다가 오늘 셋이면 항목은 그냥 3건입니다. 어제의 다섯을 따로 적어 두면 할당을 풀거나 답을 쓴 뒤에도 종이 그 수를 계속 표시하게 됩니다. 그러면 종과 큐의 내용이 어긋납니다.

그래서 일곱은 기다려도 목록이 안 생깁니다. 사흘을 비우고 돌아와도 그 일곱은 지금 몇 건인지만 알려 줍니다. 사흘분이 쌓이지 않습니다. 대신 이 일곱 가운데 여섯은 손을 대야 꺼집니다. 토큰을 저장하고, 할당을 풀고, 답을 쓰고, 마감을 다시 잡고, 받는 트리를 커밋하면 5초 뒤 다음 판정에 저절로 내려갑니다. 남은 하나인 되풀이해 죽어서 쉬는 티켓은 기다리기만 해도 됩니다. 쉬는 시간이 지나 워커가 그 티켓을 다시 가져가면 그 자리에서 내려갑니다. 더 기다리지 않기로 하셨으면 티켓을 열어 지금 다시 보내기를 누르시면 됩니다. 그러면 다음 판정에서 이 항목도 같이 꺼집니다.

밤새 죽은 워커가 아침에도 떠 있습니다

워커 화면과 종은 서로 다른 것을 다룹니다. 워커 화면에서 그 워커 밑에 붙는 세션이 즉시 실패했습니다 줄은 지금 그 워커가 어떤가를 알려 줍니다. 10분이 지나면 걷힙니다. 종의 저 둘은 그 일이 있었다를 알려 줍니다. 그래서 시간이 지나도 안 걷힙니다.

밤 두 시에 워커 넷이 한도에 걸려 죽고 네 시에 맥이 잠들었으면, 아침에 열어도 종에 그 둘이 그대로 있습니다. 워커 표에는 이미 아무것도 안 떠 있습니다. 지금은 아무 문제가 없으니까요. 자리를 비운 사람이 아무것도 못 보는 일을 막는 것이 이 둘이 하는 일 전부입니다.

복귀 알림은 안 걷은 구간을 전부 포함해 뜹니다. 사흘 사이에 세 번 잤으면 항목은 그대로 하나고 밑에 세 줄이 뜹니다. 항목이 셋으로 불어나지 않습니다.

보관을 누르면 어디로 가나

이 둘에만 보관 버튼이 붙습니다. 자리는 항목 오른쪽 아래, 문장 아래의 별도 행입니다. 화면을 영어로 쓰시면 Archive입니다.

알림 종 팝오버. 세션이 열리자마자 죽는 워커 1개 항목 문장 아래 오른쪽 끝에 보관 버튼이 붙어 있습니다.

  • 누르면 항목이 종에서 사라집니다. 버튼은 항목에 하나고, 그때 나열돼 있던 것이 전부 같이 들어갑니다. 죽은 세션이 넷 떠 있었으면 넷 다, 멈춰 있던 구간이 셋이면 셋 다입니다.
  • 같은 순간 워커 화면의 그 실패 줄도 같이 걷힙니다. 종과 워커 표가 같은 판정을 따르기 때문입니다. 종에서 치운 사고가 워커 화면에 남아 있는 일은 없습니다.
  • 사라진 것은 목록에서만 사라집니다. 지운 것이 아닙니다.

다시 보시려면 팝오버 머리 오른쪽의 보관함 토글을 켜세요(영어로는 Archived). 보관한 것이 최근 것부터 뜹니다. 죽은 세션은 시각과 워커 이름과 엔진이 준 사유 그대로, 복귀는 멈춰 있던 구간과 잠자기/꺼짐입니다. 토글을 다시 끄면 지금 화면으로 돌아옵니다. 보관한 것이 없으면 보관한 알림 없음(No archived notifications)이라고 알려 줍니다.

보관함 토글을 켠 팝오버. 보관된 사건이 시각 내림차순으로 뜹니다 - 죽은 세션 한 줄과 복귀 한 줄이 같은 목록에 섞여 있습니다.

되돌리기 버튼은 없습니다. 잘못 눌러도 보관함에 그대로 있으니 잃은 것이 없습니다.

치웠다고 다음 사고까지 안 뜨는 것은 아닙니다. 새 세션이 또 죽으면 새 줄이고, 맥이 다시 자면 새 구간이라 항목이 다시 뜹니다.

이 기록은 이 맥의 것입니다

목록은 큐에 안 적힙니다. 이 맥 안에 남습니다. 저 둘은 이 머신에서 있었던 일이라 큐가 적어 두는 사실에 들어가지 않습니다. 맥이 잔 것을 큐는 모릅니다. 죽은 세션의 로그도 그 세션을 띄운 맥에만 있습니다.

  • 맥 둘에서 같은 프로젝트를 보면 종의 내용이 서로 다릅니다. 그것이 맞습니다. 각 맥이 자기가 본 것을 들고 있습니다. 회사 맥에서 보관해도 집 맥의 종은 안 걷힙니다. 그 맥은 그 일을 아직 안 본 것입니다. 반대로 집 맥만 잠들었으면 회사 맥에는 그 구간이 아예 없습니다.
  • 큐 폴더를 옮기면 그 프로젝트의 목록이 안 보입니다. 잃는 것은 목록뿐이고 사고 자체는 안 없어집니다. runner.log와 세션 로그는 큐를 따라가고 워커 화면의 실패 줄도 그 로그 파일명을 그대로 표시합니다(로그 읽는 법 참고).
  • 목록이 무한히 자라지도 않습니다. 넘치면 오래된 것부터 밀려 나갑니다. 이 맥에서 측정해 보니 몇 주분이 들어갑니다. 며칠 비웠다고 못 볼 일은 없습니다. 다만 하루에 수백 번 죽은 사고 날은 그날 마지막 것들만 남습니다. 그날 전부를 보시려면 runner.log를 여세요.

하단 토큰 status bar

화면 맨 아래 얇은 한 줄에 이 프로젝트 워커들이 쓰는 엔진마다 한 칸이 뜹니다. 토큰이 얼마나 남았는지 보려고 앱을 떠나지 않게 하는 것이 이 줄의 전부입니다.

  • 칸에 무엇이 뜨는지는 그 엔진이 자기 잔여량을 알려주는지에 달렸습니다. 알려주면 n% 사용과 그 수가 어느 창의 값인지, 최근 10분 소모 속도, 리셋 시각이 뜹니다.
  • claude 칸에도 %와 리셋 시각이 뜹니다. 그 수는 활성 계정 하나의 것입니다. % 앞에 함께 붙은 이름이 그 계정입니다. 이름과 게이지가 한 계정을 가리킵니다.
  • claude의 창은 5시간과 7일 둘인데 더 많이 쓴 쪽이 뜹니다. 5시간을 3% 쓰고 7일을 77% 썼으면 77% 사용 · 7일입니다. 어느 쪽인지는 % 옆의 창 이름이 알려 줍니다. 먼저 막히는 쪽이 실제 상한이니까요.
  • 그 수를 읽으려고 앱이 아주 작은 호출 하나를 대신 보냅니다. 가장 싼 모델에 hi 한 마디를 보내고 응답 헤더만 씁니다. 오가는 토큰이 스물세 개고, 1분에 계정당 한 번을 안 넘습니다. 이 호출은 워커 세션이 아니라서 워커 화면의 소비량에도 이 바의 속도에도 안 잡히지만, 계정 한도는 그만큼 소모합니다.
  • 값이 안 올 때는 한도를 읽을 수 없습니다가 뜨고, 그 글자에 마우스를 올리면 원인이 나옵니다. 다음 폴링에 고쳐질 수 있는 실패입니다. 그 자리에는 대신 최근 5시간 누적 토큰이 뜹니다. 활성 계정을 아직 안 넣었으면 애초에 읽을 값이 없어 그 자리가 그냥 빕니다.
  • 창 길이는 엔진이 준 값을 그대로 씁니다. 5시간, 7일처럼 % 바로 옆에 붙습니다. 하나의 창을 두 엔진에 씌우면 둘 중 하나가 거짓이 됩니다.
  • 워커별로 달라지는 것은 쓴 양뿐입니다. 남은 양은 머신과 계정당 하나고 워커 전원이 그 한 통을 나눠 씁니다. 그래서 계정 단위 값은 이 바에, 워커별 소비는 워커 화면에 있습니다.
  • 소비 합계는 세션이 끝나야 잡힙니다. 90분짜리 세션은 90분 동안 0으로 보이고, 신호로 죽은 세션의 토큰은 영영 오지 않습니다. 그래서 워커 화면의 최근 5시간 토큰 옆에 이 합계에 없는 세션 n개가 같이 뜹니다. 그 사실을 안 적으면 사람이 "덜 썼다"로 읽습니다.

설정 다이얼로그

우측 위 톱니바퀴 하나가 다이얼로그를 엽니다. 왼쪽에 검색칸과 항목 트리가 있고 고른 항목의 패널이 오른쪽에 뜹니다. 항목 이름이 기억나지 않으면 검색칸에 쳐 보세요. 트리를 살펴보지 않고 바로 갑니다.

  • 프로젝트 - 트리의 첫 그룹입니다. 프로젝트 안에서 설정을 열었을 때만 생깁니다. 그 아래 줄은 하나뿐이고 그 이름이 지금 보고 있는 프로젝트의 이름입니다. 누르면 그 프로젝트 하나에만 걸리는 열 자리가 이 순서로 뜹니다 - 해석 결과, 온톨로지 마이그레이션, 가져올 폴더, 온톨로지 위치 편집, 지표 열두 칸, 이름, 통합 브랜치, 쉬는 동안 작업 트리 비우기, 환경변수, 등록 해제. 가운데 넷이 온톨로지를 다루는 자리라 나란히 붙어 있습니다. 온톨로지 화면에서 이리로 옮겨 온 것이 그중 둘, 온톨로지 위치 편집과 지표 열두 칸입니다(아카이빙과 온톨로지 참고). 통합 브랜치를 바꾸는 법은 첫 프로젝트 만들기 §통합 브랜치를 나중에 바꾸기에 있습니다. 쉬는 동안 작업 트리 비우기는 아래 쉬는 동안 작업 트리 비우기에서, 환경변수는 아래 프로젝트 환경변수에서 다룹니다.
  • 인증 - claude가 맨 위고 그 아래로 codex, grok, agy가 한 줄씩 뜹니다. cron에 걸린 워커가 쓰는 장기 토큰을 여기서 넣습니다. 발급 명령은 화면이 대신 실행해 줍니다. 자세한 것은 인증에 있습니다.
  • 키설정 - 화면 단축키를 보고 바꾸는 자리입니다.
  • 사용 통계 - 사용 통계와 끄는 법에서 다룹니다.
  • 언어 - 화면 문구를 한국어와 영어 사이에서 고릅니다.
  • 주도성 - 언어 바로 아래 줄입니다. 워커 세션이 사람에게 얼마나 되묻는지를 1에서 5까지 고릅니다. 숫자 버튼 다섯 개 옆에 그 수준이 무엇을 되묻는지 한 줄씩 적혀 있고, 4에 기본 표시가 붙어 있습니다. 한 번도 고친 적 없는 컴퓨터는 4로 돕니다. 버튼을 누르면 따로 저장할 필요 없이 바로 저장됩니다. 패널 맨 아래 지금 도는 세션은 그대로이고, 다음 디스패치부터 적용됩니다. 한 줄대로, 이미 떠 있는 세션은 원래 수준으로 끝까지 가고 새로 띄우는 세션부터 바뀐 값을 읽습니다. 1이나 2를 고르면 그 위에 되묻기 한 번이 약 40분 걸립니다.가 더 뜹니다. 5 줄 바로 아래에는 들여 쓴 오토파일럿 스위치가 있고, 그 밑에 빨간 글씨로 위험: 세션이 묻지 않고 어떻게든 진행합니다. 막히면 빨간 답변 대기로만 알립니다.가 적혀 있습니다. 스위치는 5를 골랐을 때만 눌리고, 켜고 끄면 역시 바로 저장됩니다. 검색칸에 오토파일럿을 쳐도 이 패널로 갑니다. 켰을 때 세션이 무엇을 안 묻는지는 요구사항 접수하기 §오토파일럿에 있습니다. 수준마다 무엇이 달라지는지는 요구사항 접수하기 §주도성에 있습니다.
  • 웹훅 - 답변을 기다리는 티켓이 새로 뜨면 그 사실만 밖으로 한 줄 보냅니다. 답변 대기를 밖으로 보내기에서 다룹니다.
  • 워커 - 트리의 맨 아래 줄입니다. 맨 위가 이 컴퓨터에서 한꺼번에 뜰 수 있는 세션 수를 정하는 머신 전체 세션 상한이고, 그 아래 전체 워커에 등록된 프로젝트 전부의 워커가 모입니다. 프로젝트와 상태 필터로 그 목록을 좁히고 필터 초기화로 되돌립니다(동시에 몇 개 돌릴까 §이 컴퓨터의 상한 - 머신 전체 세션 상한).

프로젝트 목록에서 헤더의 설정을 눌러 열면 프로젝트 그룹이 아예 없습니다. 아직 어느 프로젝트에도 들어가지 않았으니 그 열 자리가 누구의 값인지 정해지지 않습니다. 거기서 특정 프로젝트의 값을 보시려면 목록에서 그 행의 톱니를 누르세요. 프로젝트 안에서는 헤더의 전환기를 열고 그 안의 톱니를 눌러도 같습니다. 두 버튼은 자리도 아이콘도 예전 그대로입니다. 누르면 설정이 열리고 그 프로젝트 노드가 골라진 채로 뜹니다.

프로젝트 그룹 밖은 전부 이 컴퓨터의 것이고 등록된 프로젝트 전부에 걸립니다. 인증도 세션 상한도 프로젝트마다 다르게 두는 자리가 아닙니다. 프로젝트마다 값이 달라지는 자리는 두 군데뿐입니다. 방금 본 프로젝트 그룹의 열 자리, 그리고 워커 화면 우상단에서 따로 여는 워커 설정입니다(워커 참고).

쉬는 동안 작업 트리 비우기

프로젝트 폴더가 디스크를 많이 차지하면 이 스위치를 켜세요. 프로젝트 그룹에서 통합 브랜치 바로 아래에 쉬는 동안 작업 트리 비우기가 있습니다. 스위치 밑에는 이 한 줄이 붙어 있습니다.

켜면 지금 .dira와 .git만 남기고 비웁니다. 티켓을 처리할 때 통합 브랜치로 다시 채우고, 사흘 동안 작업이 없으면 다시 비웁니다.

비우는 대상은 프로젝트 폴더 하나입니다. 세션은 .dira/worktrees 아래 자기 워크트리에서 일하므로 프로젝트 폴더가 비어 있어도 티켓은 그대로 처리됩니다. 저장소를 다시 받아 오는 것도 아닙니다. .git이 남아 있으니 거기서 통합 브랜치를 꺼내 채우고, origin에서 fetch하지 않습니다. 워커가 올린 커밋은 origin에 아직 없을 수 있어서 그렇습니다.

켜는 순간 무엇이 남고 무엇이 지워지는지는 이렇습니다.

무엇
남는 것.dira와 .git
남는 것이름이 .env이거나 .env.로 시작하는 파일. 폴더 깊이와 상관없습니다. 비밀값은 git으로 되살릴 수 없습니다
남는 것git worktree list에 나오는 다른 워크트리와 그 위의 폴더. 프로젝트 폴더 안에 따로 만들어 둔 워크트리도 지우지 않습니다
지워지는 것git이 추적하는 파일 전부
지워지는 것.gitignore에 걸린 파일. node_modules와 빌드 산출물이 여기에 들어갑니다

비운 뒤에 git status를 쳐도 깨끗하게 나옵니다. 추적 파일은 git sparse-checkout으로 작업 트리에서만 내려 둔 것이라 git이 삭제로 보지 않습니다. 지금 비어 있는지 터미널에서 확인하려면 git sparse-checkout list를 치세요. 출력이 /.dira-slim-empty 한 줄뿐이면 비어 있는 상태입니다.

다시 채워지는 때

워커가 티켓을 물고 세션을 띄우기 직전에 채웁니다. 채우기가 실패해도 세션은 그대로 뜨고, 실패했다는 사실이 runner.log에 한 줄 남습니다. 스위치를 끄면 그 자리에서 채웁니다. 꺼 둔 프로젝트를 비운 채로 두지는 않습니다.

채워지는 것은 git이 추적하는 파일뿐입니다. node_modules와 빌드 산출물은 비운 상태 그대로 있습니다. 프로젝트 폴더에서 직접 앱을 돌리려면 패키지 설치와 빌드를 다시 하세요.

사흘 동안 쉬면 자동으로 비웁니다

워커가 30초마다 돌 때 아래 넷을 확인하고, 모두 맞으면 비웁니다.

  • 스위치가 켜져 있습니다.
  • 지금 채워진 상태입니다.
  • 큐에 진행 중인 티켓이 한 장도 없습니다.
  • 마지막 작업 시각이 지금보다 72시간 이상 앞입니다.

마지막 작업 시각은 티켓을 처리하려고 세션을 마지막으로 띄운 시각입니다. 스위치를 켠 뒤 아직 세션을 띄운 적이 없으면 스위치를 켠 시각을 씁니다. 사람이 프로젝트 폴더에서 직접 하는 일은 여기에 들어가지 않습니다. 사흘 넘게 그 폴더에서만 일했다면 아래 거절 조건이 편집 내용을 지켜 주지만, 커밋까지 마친 깨끗한 트리는 비워집니다.

비우기가 거절될 때

사람이 하던 일이 남아 있으면 비우지 않습니다. 아래 중 하나라도 해당하면 거절합니다.

  • 커밋하지 않은 변경이 있습니다.
  • .gitignore에 걸리지 않은 새 파일이 있습니다.
  • 통합 브랜치가 아닌 브랜치를 체크아웃하고 있습니다.
  • HEAD가 detached 상태입니다.

앱이 대신 stash하거나 커밋하지는 않습니다. 스위치 아래 상태 줄에 거절 사유와 걸린 경로가 최대 다섯 개까지 뜹니다. 그 경로를 커밋하거나 지우고, 다른 브랜치에 있으면 통합 브랜치로 돌아오세요. 거절돼도 스위치는 켜진 채 저장되고, 사흘 조건이 맞을 때 자동 비우기가 다시 시도합니다. 바로 비우고 싶으면 스위치를 껐다가 다시 켜세요.

상태 줄에는 평소에도 비어 있음이나 채워짐 중 하나와 마지막 작업 시각이 뜹니다. 스위치가 눌리지 않고 git 저장소의 최상위 폴더가 아닙니다가 뜨면 프로젝트 폴더가 저장소의 하위 폴더이거나 다른 저장소에 딸린 워크트리인 경우입니다. 그런 프로젝트에서는 이 기능을 켤 수 없습니다.

스위치 값은 .dira/slim-checkout에 한 줄로 남습니다. 내용이 on이면 켜짐이고 그 밖은 꺼짐입니다. 앱이 꺼져 있어도 워커는 이 파일을 읽습니다. 검색칸에 비우기를 쳐도 이 자리로 갑니다.

프로젝트 환경변수

세션이 쓸 API 토큰 같은 비밀 값을 프로젝트에 맡겨 두는 자리입니다. 프로젝트 그룹에서 쉬는 동안 작업 트리 비우기 아래, 등록 해제 위에 환경변수가 있습니다. 값은 이 맥의 OS 키 저장소(macOS는 키체인)로 암호화해서 앱 데이터 폴더에 둡니다. 큐, 티켓, git, .env 파일에는 적히지 않습니다.

저장한 값은 다시 볼 수 없습니다. 목록에는 이름, 가린 값 ••••••••, 수정 시각만 뜨고 보기 버튼도 복사 버튼도 없습니다. 값을 잊었으면 그 값을 발급한 서비스에서 새로 받아 교체하세요.

  • 추가 - 맨 아래 줄의 이름 칸과 값 칸을 채우고 추가를 누릅니다. 이름은 영문자나 밑줄로 시작하고 영문자, 숫자, 밑줄만 씁니다(예: TEST_API_TOKEN). 같은 이름이 이미 있으면 같은 이름이 이미 있습니다. 목록에서 값 교체를 쓰세요.가 뜹니다. 값은 64 KiB까지 받습니다.
  • 값 교체 - 그 줄의 값 교체를 누르면 빈 값 칸이 열립니다. 새 값을 넣고 교체 저장을 누르세요.
  • 삭제 - 휴지통 아이콘을 누르면 <이름>을(를) 삭제합니다. 다음 실행부터 사라집니다.가 뜹니다. 삭제 확인을 눌러야 지워집니다.
  • 이름을 바꾸는 버튼은 없습니다. 지우고 새 이름으로 추가하세요.

값 칸은 언제나 비어 있는 채로 열립니다. 저장에 성공하거나 다이얼로그를 닫으면 입력한 값은 버려집니다.

바뀐 값은 다음 실행부터 들어갑니다. 세션이 이미 띄워 둔 프로세스는 옛 값을 그대로 쥐고 있고, 지운 이름도 그 프로세스 안에서는 남아 있습니다. 새 값이 필요하면 그 프로세스를 다시 실행하세요.

값은 프로젝트마다 따로입니다. 다른 프로젝트에 같은 이름이 있어도 값은 서로 다르고, 한쪽을 바꿔도 다른 쪽은 그대로입니다. 같은 큐에서 도는 워커의 워크트리는 이 프로젝트의 값을 씁니다. 인증의 로그인 토큰과도 섞이지 않습니다. 프로젝트를 등록 해제해도 값은 남아 있다가 같은 폴더를 다시 등록하면 돌아옵니다. 폴더를 옮기거나 다른 맥으로 가져가는 기능은 없습니다.

PATH, HOME, SHELL, ENV, BASH_ENV, NODE_OPTIONS, PYTHONPATH, 그리고 LD_, DYLD_, TICKET_, DIRA_로 시작하는 이름은 등록되지 않습니다. 세션과 엔진의 실행을 좌우하는 값이라서 실행 제어에 쓰이는 이름이라 등록할 수 없습니다.가 뜹니다.

목록을 읽지 못하거나 저장이 안 되면 패널 위에 빨간 줄이 하나 뜹니다. 다섯 중 하나입니다.

화면 문구원인할 일
데스크톱 앱에 연결할 수 없습니다. 앱이 실행 중인지 확인하세요.dira 데스크톱 앱이 꺼져 있거나 연결이 끊겼습니다. 값은 앱이 떠 있는 동안에만 열립니다.앱을 띄우고 다시 시도하세요. 목록이 빈 것이 아닙니다. 앱이 꺼진 동안에는 저장도 실행도 하지 않습니다.
OS 키 저장소가 잠겼거나 사용할 수 없습니다. 잠금을 풀고 다시 시도하세요.키체인이 잠겨 있거나 앱의 키체인 접근이 거부됐습니다.맥에 로그인된 상태인지 확인하고, 키체인 접근을 묻는 창이 뜨면 허용한 뒤 다시 시도하세요. 값을 평문으로 대신 저장하는 길은 없습니다.
다른 곳에서 먼저 바뀌었습니다. 목록을 새로 읽었으니 다시 시도하세요.다른 세션이나 다른 창이 같은 이름을 먼저 교체하거나 지웠습니다.새로 읽힌 목록에서 다시 누르세요. 입력했던 값은 버려졌으니 다시 넣습니다.
이미 삭제된 이름입니다. 목록을 새로 읽었습니다.누가 먼저 지웠습니다.필요하면 추가로 다시 등록하세요.
저장된 환경변수 파일이 손상되어 읽을 수 없습니다. 파일은 그대로 두었으니 데스크톱 앱의 환경변수 폴더에서 확인하거나 지원에 문의하세요.이 프로젝트의 값을 담은 파일이 깨져서 읽히지 않습니다. dira는 이 파일을 고치거나 덮어쓰지 않습니다.파일은 ~/Library/Application Support/dira/project-env/ 안에 프로젝트마다 하나씩 있습니다. 백업이 있으면 그 파일로 되돌리고, 없으면 지원에 문의하세요. 파일이 고쳐질 때까지 이 프로젝트에서는 값을 추가할 수도, 세션에 넘길 수도 없습니다.

지켜 주는 범위는 여기까지입니다. 값이 풀리는 곳은 세션이 dira env run으로 띄운 프로세스의 환경 하나뿐입니다. 화면, 목록, 명령 출력, 세션 프롬프트에는 값이 실리지 않고, dira가 받아 적는 출력과 진행 기록에서는 그 값과 똑같은 문자열을 가립니다. 하지만 그 프로세스는 값을 그대로 받습니다. 프로그램이 값을 바꿔서 출력하거나 다른 서버로 보내는 것까지는 막지 못합니다. 같은 맥 계정에서 도는 세션과 프로그램을 믿는다는 전제입니다. 값을 티켓이나 대화창이나 명령 인자에 붙여 넣으면 그 기록에 평문이 남고 dira가 지워 주지 않습니다. 값은 이 화면에만 넣으세요.

세션이 이 값을 꺼내 쓰는 명령은 CLI의 dira env 절에 있습니다.

Vercel과 연결

Vercel에 배포하는 프로젝트라면 여기 맡긴 값을 Vercel 프로젝트의 환경변수와 맞춰 둘 수 있습니다. 환경변수 제목 바로 아래의 Vercel 줄이 그 자리입니다. 연결은 프로젝트마다 한 번이면 됩니다.

연결된 Vercel 프로젝트 없음 옆의 Vercel과 연결을 누르세요. dira가 아래 순서로 Vercel 프로젝트를 찾고 하나로 정해지면 묻지 않고 연결합니다.

  1. 프로젝트 폴더의 .vercel/project.json을 찾습니다. 루트에 없으면 세 단계 아래 폴더까지 내려갑니다(apps/web/.vercel/project.json 같은 자리). 그 폴더에서 vercel link를 한 번이라도 돌렸다면 이 파일이 있습니다.
  2. 파일이 없으면 git origin과 같은 레포에 연결된 Vercel 프로젝트를 찾습니다. 정확히 하나면 그 프로젝트로 연결합니다.
  3. 후보가 둘 이상이면 연결할 Vercel 프로젝트를 고르세요.와 후보 목록이 뜹니다. 하나도 없으면 연결된 Vercel 프로젝트가 없습니다. 아래 목록에서 고르세요.와 함께 그 계정과 팀의 프로젝트가 전부 뜹니다. 원하는 줄의 이 프로젝트로 연결을 누르세요.

연결되면 줄에 팀 ID와 프로젝트 이름, 마지막 동기화 시각, 지금 동기화, 연결 해제가 뜹니다. 연결하는 순간 dira가 양쪽을 한 번 맞추므로 따로 누를 것은 없습니다. 그 뒤로도 설정 화면을 열 때, 앱이 켜질 때, 앱이 켜져 있는 동안 5분마다 저절로 맞춥니다. 시각 자리에 아직 동기화 전이 남아 있으면 첫 동기화가 아직 끝나지 않았거나 실패한 것입니다. 실패하면 줄에 동기화하지 못했습니다. 잠시 뒤 다시 시도하세요.가 뜹니다. 그때는 잠시 기다렸다가 지금 동기화를 누르세요.

Vercel 로그인은 따로 하지 않아도 됩니다. 이 맥에서 vercel login을 해 두었다면 dira가 Vercel CLI의 로그인 정보를 그대로 씁니다. CLI로 로그인한 적이 없거나 로그인이 만료됐으면 줄에 Vercel 로그인이 필요합니다. 개인 토큰을 붙여넣으세요.가 뜹니다. 푸는 방법은 아래 로그인이 필요할 때에 있습니다.

연결 해제는 연결 정보만 지웁니다. dira 쪽 변수도 Vercel 쪽 변수도 그대로 남습니다.

연결한 뒤 값이 오가는 규칙은 이렇습니다. 사용자가 고르는 설정은 없습니다.

  • dira에서 추가, 교체, 삭제하면 곧바로 Vercel에 반영됩니다. Vercel에는 production과 preview 두 환경에 sensitive 변수로 씁니다. development 환경과 특정 브랜치에만 걸린 변수는 읽지도 쓰지도 않습니다.
  • Vercel 쪽에서 값을 읽을 수 있는 변수(sensitive가 아닌 변수)는 dira로 가져옵니다. production 값을 먼저 쓰고, 없으면 preview 값을 씁니다.
  • 마지막 동기화 뒤 양쪽에서 다 바뀌었으면 더 늦게 바뀐 쪽 값이 남습니다.
  • 동기화로 이어진 변수는 한쪽에서 지우면 다른 쪽에서도 지워집니다. 연결하기 전부터 한쪽에만 있던 변수는 반대쪽을 지우지 않습니다.

변수 줄의 동기화 표시

연결한 뒤에는 변수 줄마다 가린 값 오른쪽에 동기화 표시가 붙습니다. 연결 전에는 붙지 않습니다. dira에 없고 Vercel에만 있는 이름은 목록 아래쪽에 따로 뜹니다.

표시뜻할 일
맞음양쪽 값이 같습니다.없습니다.
Vercel 반영 대기dira에는 저장했지만 Vercel에는 아직 쓰지 못했습니다. 네트워크가 끊겼거나 Vercel 로그인이 풀린 경우입니다. 세션은 dira 값을 그대로 씁니다.다음 동기화가 다시 씁니다. 바로 맞추려면 지금 동기화를 누르세요. 그래도 남아 있으면 Vercel 줄이 로그인을 요구하는지 확인하세요.
충돌, 늦게 바뀐 값으로 맞춤 - dira 값 또는 - Vercel 값마지막 동기화 뒤 양쪽에서 다 바뀌어 늦게 바뀐 쪽 값으로 맞췄습니다. 뒤에 붙은 말이 남은 쪽입니다. 표시는 24시간 뒤 사라집니다.남은 값이 원하던 값이면 그대로 둡니다. 아니면 값 교체로 원하는 값을 다시 넣으세요.
Vercel에만 있음, 값을 읽을 수 없음Vercel에 sensitive로 저장된 변수입니다. Vercel도 값을 돌려주지 않아서 dira는 이름만 압니다.세션이 이 값을 써야 하면 값 입력을 누르고 값을 넣은 뒤 추가를 누르세요. dira에 추가되고 Vercel 쪽 값도 이 값으로 바뀝니다. 쓰지 않을 값이면 그대로 둡니다.
가져오지 않음괄호 안의 사유 때문에 dira로 가져오지 않는 이름입니다. 사유는 Vercel 시스템 변수(VERCEL_로 시작하는 이름), 실행 제어에 쓰이는 이름(위에서 말한 등록할 수 없는 이름), 쓸 수 없는 이름(dira의 이름 규칙에 맞지 않는 이름) 셋 중 하나입니다.대개 할 일이 없습니다. 쓸 수 없는 이름인 값을 세션이 써야 하면 규칙에 맞는 이름으로 dira에 따로 추가하세요.

다섯 가지 말고 Vercel에서 바뀜, 값 다시 입력 필요가 뜰 때가 있습니다. dira가 써 둔 변수를 누군가 Vercel에서 바꿨는데 sensitive 변수라서 dira가 새 값을 읽지 못한 경우입니다. dira는 Vercel 값을 옛 값으로 되돌리지 않습니다. 그 줄의 값 교체로 쓸 값을 다시 넣으면 양쪽이 그 값으로 맞춰집니다.

로그인이 필요할 때

Vercel 로그인이 필요합니다. 개인 토큰을 붙여넣으세요. 아래에 Vercel 토큰 칸과 Vercel 토큰 발급 페이지 링크가 뜹니다. 둘 중 편한 쪽으로 복구하세요.

  • 터미널에서 vercel login을 다시 하고 설정 창을 닫았다가 엽니다. dira는 CLI의 로그인 정보를 쓸 때마다 새로 읽으므로 붙여넣을 것이 없습니다.
  • Vercel 토큰 발급 페이지에서 토큰을 만들어 Vercel 토큰 칸에 붙여넣고 토큰 저장을 누릅니다. Vercel이 받아들인 토큰만 키체인으로 암호화해 보관하고 곧바로 다시 연결합니다. 이 토큰도 환경변수 값처럼 다시 볼 수 없습니다.

CLI 로그인과 붙여넣은 토큰이 둘 다 있으면 CLI 쪽을 먼저 씁니다. 로그인이 풀려 있는 동안 dira에서 바꾼 값은 dira에 저장되고 Vercel 반영 대기로 남습니다. 복구한 뒤 지금 동기화를 누르면 그때 Vercel로 갑니다.

토큰을 저장하지 못하면 칸 아래에 사유가 뜹니다.

화면 문구할 일
Vercel이 토큰을 받아들이지 않았습니다.만료됐거나 지운 토큰입니다. 발급 페이지에서 새로 만드세요.
토큰 형식이 올바르지 않습니다.앞뒤가 잘리거나 공백이 섞였습니다. 토큰 전체를 다시 복사하세요.
OS 키 저장소가 잠겼거나 사용할 수 없어 토큰을 보관하지 못했습니다.키체인 잠금을 풀고 다시 저장하세요.
데스크톱 앱에 연결할 수 없습니다. 앱이 실행 중인지 확인하세요.dira 데스크톱 앱을 띄우고 다시 저장하세요.

연결 자체가 실패하면 Vercel 줄에 빨간 사유와 재시도가 뜹니다. Vercel에 연결하지 못했습니다. 네트워크를 확인하세요.가 뜨면 네트워크를 확인하고 재시도를 누르세요. 키 저장소와 데스크톱 앱 문구는 위 표와 같은 방법으로 풉니다.

바뀐 값은 다음 배포부터

이미 배포된 사이트는 Vercel 변수가 바뀌어도 옛 값으로 돕니다. 새 값이 들어가려면 배포를 한 번 더 해야 합니다. dira가 Vercel 변수를 바꾸면 Vercel 줄 아래에 다음 배포부터 적용됩니다.와 production 다시 배포가 뜹니다.

지금 바로 적용하려면 production 다시 배포를 누르세요. 가장 최근 production 배포를 새로 만듭니다. preview는 다시 배포하지 않습니다. 누르지 않으면 dira가 알아서 배포하는 일은 없고, 다음에 평소처럼 배포할 때 새 값이 들어갑니다. 다시 배포하지 못했습니다.가 뜨면 그 프로젝트에 production 배포가 한 번도 없거나 Vercel에 닿지 못한 것입니다. Vercel 대시보드에서 배포하세요.

프로젝트 목록

앱을 열었을 때 보이는 첫 화면입니다. 프로젝트 안에서 여기로 돌아오려면 헤더의 프로젝트 전환기를 열고 맨 아래 프로젝트 관리를 누르세요. 맨 위에 등록한 프로젝트가 표로 뜨고 아래로 제품 소개가 이어집니다. 소개 쪽은 웹에서 보는 페이지와 같은 글입니다. 앱에서는 목록이 그 위에 얹혀 첫 화면이 됩니다.

  • 행 하나가 프로젝트 하나입니다. 열은 이름, 경로, 열림, 진행중, 완료, 연결, 액션입니다. 이름을 누르면 그 프로젝트의 홈이 열립니다. 큐를 보시려면 거기서 헤더의 보드를 누르세요.
  • 연결이 안 된 프로젝트는 건수 세 자리가 비어 있습니다. 0이 아닙니다. 못 읽은 것과 0건은 다른 사실입니다.
  • 액션 열의 톱니를 누르면 설정이 열립니다. 트리 첫 그룹 프로젝트 아래에 그 행의 프로젝트가 골라진 채로 뜨고 해석 결과부터 등록 해제까지 열 자리가 거기 있습니다. 예전처럼 프로젝트 설정이라는 다이얼로그가 따로 뜨지는 않습니다(위 설정 다이얼로그 참고).
  • 헤더 오른쪽은 매뉴얼, 마켓, Star, 새로 만들기, 설정입니다. 여기의 설정은 톱니 아이콘 없이 글자로만 뜹니다.
  • 등록된 프로젝트가 0건이면 표 자리에 만드는 폼이 펼쳐지고, 헤더에서는 새로 만들기가 빠집니다(첫 프로젝트 만들기 참고).

마켓

한 맥 안에서 프로젝트끼리 페르소나와 스쿼드를 주고받는 자리입니다. 이 큐에서 키운 writer를 옆 프로젝트에서 그대로 쓰고 싶을 때, 파일을 손으로 복사하는 대신 여기에 올려 두고 내려받습니다. 저장 자리는 ~/.config/dira/market/ 한 곳이고 이 맥 밖으로 나가지 않습니다. 계정도 업로드도 없습니다. 항목 하나의 버전마다 <kind>s/<owner>/<name>/<semver>/ 폴더가 하나씩 생기고, 그 안에 APM 패키지 한 벌(apm.yml과 PROFILE.md - skills.md, 스쿼드면 members)이 들어 있습니다. 예전 v<정수> 폴더는 <정수>.0.0으로 읽습니다.

스쿼드 화면 오른쪽 위의 마켓, 그리고 프로젝트 목록 화면 헤더의 마켓이 입구입니다. 어느 쪽을 눌러도 주소는 그대로이고, 보던 화면 위에 마켓 다이얼로그가 뜹니다. Esc나 바깥 클릭으로 닫으면 누르기 전 화면이 그대로 남아 있습니다. 목록은 다이얼로그를 열 때마다 새로 읽습니다. 읽는 동안에는 빈 카드 자리가 먼저 보이고, 읽지 못하면 다이얼로그 안에 오류와 다시 시도가 뜹니다.

올리기

올리는 자리는 원본 프로젝트입니다. 스쿼드 화면에서 왼쪽 목록의 페르소나를 고르면 오른쪽 칸 머리에 마켓에 배포가 붙어 있습니다. 스쿼드를 골랐을 때도 같은 자리에 같은 버튼이 뜹니다. 프로필이 아직 없는 페르소나에는 이 버튼이 안 뜹니다. 담을 것이 없기 때문입니다.

  • 다이얼로그가 노트 (필수)와 태그 (쉼표로 구분, 생략 가능) 둘을 받습니다. 노트를 비우면 배포가 안 먹습니다.
  • 노트 한 줄은 그 버전의 이름표입니다. 버전 목록에 시각과 나란히 붙어서, 나중에 원본 페르소나의 배포 이력 절과 마켓 항목 상세의 버전 목록 양쪽에 그대로 보입니다. 수정 같은 줄을 여러 번 쌓으면 목록이 숫자만 남습니다.
  • 버전은 semver(1.2.0 같은 세 자리)입니다. 올림에서 patch (고침), minor (더함), major (바뀜) 중 하나를 고르고 기본은 patch입니다. 첫 배포는 고른 값과 상관없이 1.0.0입니다. 같은 내용을 두 번 올려도 버전은 둘이 되고, 옛 버전은 지워지지 않습니다. 원본 프로젝트에 .dira/team/이 있으면 그 로컬 패키지가 그대로 복사되고 apm.yml의 version이 새 값으로 바뀝니다.
  • 태그는 나중에 마켓 다이얼로그에서 목록을 좁히는 데 씁니다. 비워도 됩니다.

배포본에 안 담기는 것

배포되는 것은 PROFILE.md와 skills.md, 그리고 dira가 붙이는 apm.yml뿐입니다. 스쿼드는 멤버 목록 한 장과 apm.yml입니다.

메모리는 안 담깁니다. memory/ 아래 회고는 이 큐에서만 참인 교훈이라, 받는 쪽에 그대로 가면 남의 프로젝트 사정을 자기 프롬프트에 싣게 됩니다. 세션 상한(limit)과 엔진 설정도 같은 이유로 빠집니다. 받는 쪽은 프로필과 스킬 줄만 받고 자기 메모리를 자기가 쌓습니다.

skills.md에 적힌 스킬 이름은 줄로만 건너갑니다. 그 스킬이 이 맥에 설치돼 있지 않으면 이름만 남습니다. 마켓이 스킬을 대신 설치하지는 않습니다(페르소나 참고).

스쿼드를 올리면 멤버가 먼저 올라갑니다

스쿼드는 멤버 이름만 담습니다. 그래서 멤버 페르소나가 마켓에 없으면 받는 쪽이 이름만 든 껍데기를 가져가게 됩니다. 그 자리를 배포 순서로 막았습니다.

스쿼드에 마켓에 배포를 누르면 아직 마켓에 없는 멤버를 세어 마켓에 없는 멤버가 있습니다로 먼저 묻습니다. 같이 배포를 고르면 멤버를 하나씩 먼저 올리고 그 다음에 스쿼드를 올립니다. 멤버가 받는 노트는 스쿼드에 적은 그 한 줄과 같습니다. 취소하면 스쿼드도 안 올라갑니다. 반쯤 올라간 상태로 두지 않습니다. 멤버를 올리다 하나가 실패하면 거기서 멈추고 스쿼드를 안 올립니다. 이미 올라간 멤버는 그대로 두고, 다시 누르면 남은 것부터 갑니다.

찾기

마켓은 어느 프로젝트에도 속하지 않습니다. 어느 입구로 열어도 같은 목록이 뜹니다.

  • 페르소나와 스쿼드 탭 둘로 갈립니다. 카드 한 장이 이름, 올린 프로젝트, 최신 버전, 태그, 즐겨찾기 별을 답니다. 이미 가져간 곳이 있으면 가져간 곳과 그 수가 같이 뜹니다.
  • 검색 칸은 이름과 올린 프로젝트 이름, 태그, 그리고 PROFILE.md 첫 줄을 훑습니다. 태그를 누르면 그 태그만 남습니다. 둘 다 걸린 상태는 머리에 배지로 뜨고 필터 초기화로 한 번에 풉니다.
  • 별을 켜 두면 새로 고쳐도 켜진 채로 뜹니다. 즐겨찾기도 이 맥의 것입니다.
  • 카드를 누르면 상세가 마켓 다이얼로그 위에 겹쳐 뜹니다. PROFILE.md 본문과 스킬 줄, 버전 목록이 읽기 전용으로 보입니다. 상세를 닫으면 아래에 열려 있던 마켓 다이얼로그로 돌아옵니다. 마켓에서 내용을 고치지는 못합니다. 고치는 자리는 언제나 원본 프로젝트입니다.

가져오기

상세 오른쪽 위의 가져오기가 다이얼로그를 엽니다.

  • 대상 프로젝트에서 받을 프로젝트를 고릅니다. 등록된 프로젝트가 아직 없으면 먼저 등록하라는 안내가 뜹니다.
  • 받을 이름은 마켓 항목 이름으로 채워져 있고 그 자리에서 고칠 수 있습니다.
  • 스쿼드를 가져오면 대상에 없는 멤버 페르소나를 최신 버전으로 같이 끌어옵니다. 결과 화면이 같이 들어온 멤버:로 그 이름을 듭니다. 대상에 이미 있는 이름은 안 건드립니다. 로컬에서 고쳐 쓰던 페르소나를 스쿼드 하나가 덮으면 안 되기 때문입니다. 마켓에도 없는 멤버가 남으면 가져오기는 그대로 성공하고 그 이름이 마켓에도 없는 멤버:로 따로 뜹니다.
  • 대상이 .dira/team/이 있는 프로젝트이고 그 항목의 버전이 둘 이상이면 버전 칸이 뜹니다. 처음에는 가장 높은 버전이 골라져 있습니다. 고른 버전이 .dira/team/market/<kind>/<owner>/<name>/에 복사됩니다. .dira/team/이 없는 프로젝트에는 이 칸이 없고, 가져오기는 늘 가장 높은 버전을 받습니다.
  • 가져오기를 마쳐도 마켓 다이얼로그는 닫히지 않습니다. 목록을 다시 읽어서 그 카드의 가져간 곳 수가 바로 늘어납니다.

같은 이름이 이미 있을 때

그 이름을 쓰는 페르소나가 대상에 벌써 있으면 가져오기가 그 자리에서 멈추고 두 갈래를 보여 줍니다. 조용히 덮는 일은 없습니다.

  • 덮어쓰기 - PROFILE.md와 skills.md 둘만 덮습니다. 그 페르소나의 memory/와 세션 상한, 엔진 설정은 그대로 남습니다. 배포본에 없는 값을 지울 근거가 없기 때문입니다.
  • 다른 이름으로 - 받을 이름 칸으로 돌아가 글자가 잡힌 채로 커서가 놓입니다. 이름을 고쳐 다시 가져오기를 누르면 새 이름으로 들어가고 기존 것은 그대로입니다.

받는 프로젝트에 .dira/team/이 있을 때 - 고정 사본

받는 프로젝트의 큐에 .dira/team/apm.yml이 있으면 가져온 것이 그 큐 안에 사본으로 남습니다. 가져오기를 누르면 이렇게 됩니다.

  1. 그 버전 폴더를 .dira/team/market/<kind>/<owner>/<받을 이름>/으로 복사합니다. 사본의 apm.yml version이 받은 버전입니다.
  2. .dira/team/apm.yml의 의존성에 ./market/<kind>/<owner>/<받을 이름> 한 줄을 더합니다.
  3. 패키지를 설치하고 결과를 .dira/team/apm.lock.yaml에 남깁니다.

사본과 두 파일은 큐 안에 있어서 프로젝트 저장소에 커밋되지 않습니다. 마켓 쪽 버전이 나중에 바뀌어도 python3 dira_apm.py install <프로젝트 루트>는 이 사본으로 같은 내용을 다시 깝니다 (설치). 받은 사본은 고정입니다. 원본이 새 버전을 올려도 사본은 그대로이고, 배지만 뜹니다.

owner가 dira인 항목은 dira 저장소 packages/의 공용 패키지입니다. 이 경우에는 사본을 만들지 않고 proofer-tech/dira/packages/<패키지>#<패키지>-v<버전> 형식의 git 의존성 한 줄만 더합니다.

.dira/team/apm.yml이 없는 프로젝트는 예전처럼 큐의 페르소나 폴더에 바로 덮어씁니다.

올린 쪽에서 보는 기록

원본 프로젝트에서 그 페르소나를 골라 프로필 탭을 열면 오른쪽 아래, 메모리 절 밑에 절이 둘 더 있습니다. 스쿼드는 탭 없이 멤버 절 아래 같은 둘이 뜹니다.

  • 배포 이력 - 올린 버전이 최신부터 아래로, 버전과 시각과 노트 한 줄씩입니다. 아직 한 번도 안 올렸으면 아직 배포 안 함입니다.
  • 가져간 기록 - 어느 프로젝트가 몇 번 버전을 언제 가져갔는지가 한 줄씩 쌓입니다. 아직 없으면 아직 없음입니다.

스쿼드 목록에서 올린 것과 받아 온 것 가르기

스쿼드 화면 왼쪽 목록만 보고도 어느 줄이 마켓과 얽혀 있는지 알 수 있습니다. 이름 뒤에 배지가 둘 중 하나, 또는 둘 다 붙습니다.

  • 배포 v1.2.0 - 이 프로젝트가 그 이름으로 마켓에 올린 적이 있다는 뜻입니다. 버전은 지금까지 올린 것 중 가장 최신이고, 오른쪽 칸 배포 이력 맨 위 줄과 같습니다. 배지에 마우스를 올리면 마켓에 배포함이 뜹니다.
  • 가져옴 - 마켓에서 받아 온 사본이라는 뜻입니다. 마우스를 올리면 원본이 <owner>/<name> v<받은 버전> 꼴로 뜹니다. 원본이 새 버전을 안 올려서 갱신 있음 배지가 없는 항목에도 이 배지는 붙습니다.

받아 온 것을 이 프로젝트에서 다시 올렸다면 두 배지가 함께 붙습니다. 마켓을 한 번도 안 쓴 줄에는 아무것도 붙지 않습니다. 모아보기를 켜도 꺼도, 스쿼드 아래에 펼친 멤버 줄에도 같은 배지가 붙습니다.

받아 온 항목을 골라 오른쪽 칸을 보면 배포 이력 절 바로 위에 가져온 원본 한 줄이 있습니다. 값은 가져옴 배지의 툴팁과 같은 <owner>/<name> v<받은 버전>입니다.

새 버전이 나오면 받은 쪽에 배지가 뜹니다

가져다 쓰는 프로젝트의 스쿼드 화면에서, 원본이 더 새 버전을 올린 페르소나 이름 옆에 갱신 있음 v1.1.0 같은 배지가 붙습니다. 배지가 붙는 자리는 오른쪽 칸 머리입니다. 받아 둔 사본의 apm.yml version이 마켓에서 가장 높은 버전보다 낮을 때만 뜹니다. 스쿼드에도 같은 배지가 붙습니다.

받기 전에 바뀌는 내용을 먼저 봅니다. 배지를 누르면 최신 버전을 다시 받을까요? 창이 뜨고, .dira/team/이 있는 프로젝트면 바뀌는 내용을 읽는 중…이 잠깐 보인 뒤 아래에 받기 전에 바뀌는 파일 · v1.0.0 → v1.1.0이 나옵니다. 파일마다 이름과 추가 - 삭제 - 변경 중 하나가 붙고, 그 아래에 바뀌는 줄이 +(초록)와 -(빨강)로 보입니다. 파일 내용이 같으면 받아 둔 사본과 파일 내용이 같습니다. 버전 표기만 바뀝니다.가 뜹니다.

다 읽고 받기를 누르면 사본을 새 버전으로 바꾸고 설치합니다. 받고 싶지 않으면 취소를 누르세요. 사본도 lock도 그대로입니다. 받은 쪽에서 사본을 고쳐 썼다면 그 줄도 diff에 -로 보이니, 남길 문장이 있으면 받기 전에 옮겨 두세요. 메모리는 이때도 안 건드립니다.

.dira/team/apm.yml이 없는 프로젝트에서는 diff 없이 지금 있는 PROFILE.md · skills.md를 v1.1.0 로 덮어씁니다. 되돌릴 수 없습니다.가 뜨고 버튼이 다시 받기입니다. 누르면 바로 덮어씁니다.

가져온 페르소나가 원본과 계속 묶여 있지는 않습니다. 받은 뒤에 고치면 그냥 그 프로젝트의 파일이고, 배지는 버전이 벌어졌다는 사실만 알려 줍니다. 양방향 동기화는 없습니다.

매뉴얼로 오가는 길

헤더 오른쪽의 매뉴얼이 이 문서를 엽니다. 프로젝트 안의 화면이 헤더를 같이 쓰니 보드에서 누르든 워커 화면에서 누르든 같은 자리입니다.

앱에서 이 문서를 열면 매뉴얼 헤더에도 프로젝트 관리가 뜹니다. 읽다 말고 화면으로 건너갔다 돌아오는 왕복이 그 두 버튼입니다. 웹에서 읽고 계시다면 그 버튼이 없습니다. 앱 안에서만 뜨는 자리입니다.

다음은 도는 세션에 말 걸기입니다.