dira에 대하여
내 PC에서 쉽게 돌리는 멀티 에이전트 매니지먼트 시스템입니다. 넣으신 요구를 pm이 티켓으로 쪼개고, 페르소나별 워커가 그 티켓을 하나씩 물어 세션을 띄우고, 결과를 통합 브랜치에 올립니다. 사람은 하고 싶은 것을 말하고, 물어오면 답하는 일만 하면 됩니다.
대신 토큰은 직접 하실 때보다 더 나갈 수 있습니다. 세션마다 프롬프트가 새로 조립되고 그 프롬프트가 워커 수만큼 동시에 돌기 때문입니다. 실측한 크기는 동시에 몇 개 돌릴까에 적어 뒀습니다.
dira는 서버가 없습니다. 티켓을 포함한 모든 동작이 파일시스템 위에서 일어나고, 내부 파일을 직접 열어 고쳐도 그대로 돕니다.
이름은 dir + jira입니다. 큐가 디렉터리 하나라서 dir이고, 그 디렉터리 위에서 jira처럼
티켓을 다룬다는 오마주입니다.
용어 넷
나머지 장은 이 넷을 안다는 전제로 썼습니다. 화면에도 그대로 나오는 말입니다.
티켓은 마크다운 파일 하나입니다. 무엇을 원하는지(## Goal)와 무엇이 되면 끝인지
(## Done when)를 적습니다.
큐는 그 티켓 파일들이 담긴 디렉터리 하나입니다(<프로젝트>/.dira/tickets). 하위
디렉터리로 나누지 않고 파일명 접미사(.wip·.done)로 상태를 구분합니다. 그래야 이름을
바꾸는 한 번이 곧 잠금이 됩니다.
워커는 30초마다 깨어나 큐를 훑고 열려 있는 티켓 하나를 무는 셸 스크립트입니다. 한 번 실행에 티켓 한 건입니다. 동시에 여러 개를 돌리고 싶으시면 설정값을 올리지 않습니다. 워커를 하나 더 만듭니다.
세션은 워커가 그 티켓을 들고 띄운 에이전트 프로세스입니다(기본은 claude -p). 페르소나
프로필과 협업 프로토콜, 티켓 본문을 프롬프트로 조립해 넘기고, 세션이 끝날 때까지 워커는
기다립니다.
앱과 엔진
앱이 제품입니다. 프로젝트를 만들고, 요구를 접수하고, 티켓이 도는 것을 보고, 도는 세션에 말을 걸고, 워커를 늘리는 일이 전부 화면에서 끝납니다. 큐 파일을 직접 열 일은 없습니다.
엔진은 앱이 없어도 도는 그 아래층입니다. tick.sh와 tickets.py 두 파일이고 bash와
python3 표준 라이브러리 밖으로 나가지 않습니다. 앱은 자기가 판정한 것을 큐에 쓰지 않고
엔진에 위임합니다. 화면과 cron이 같은 답을 내게 하는 방법이 그것 하나뿐이기 때문입니다.
cron은 정해진 주기마다 명령을 대신 실행해 주는, 맥에 이미 들어 있는 기능입니다. 화면 없이
cron만으로 굴리는 것도 되는데, 그건 엔진만으로 돌리기에서 다룹니다.
내 PC에만 남는 것
계정이 없습니다. 로그인 화면도, 초대 링크도, 내 작업이 올라가 있는 서버도 없습니다. 프로젝트를
만들면 고른 폴더 밑에 .dira 하나가 생기고 티켓과 세션이 남긴 기록은 전부 그 안에서 삽니다.
이 기록을 볼 사람은 이 PC를 쓰는 사람뿐이니, 누가 누구인지 확인할 일도 없습니다.
옮기는 것도 지우는 것도 폴더를 다루는 일입니다. 프로젝트 폴더를 통째로 다른 디스크에 옮기면 기록이 따라오고 폴더를 지우면 기록도 같이 없어집니다. 어딘가에 지워 달라고 요청할 자리가 없습니다.
한 군데는 나갑니다. 워커가 띄운 세션은 티켓 본문과 그 일에 필요한 코드를 모델에게 보냅니다. 에이전트를 부르는 일이 원래 그렇습니다. 어느 모델에 무엇까지 보내는지는 워커를 만들 때 고르신 엔진이 정합니다. dira의 서버로 가는 것은 아니지만 이 PC 밖으로 나가는 것은 맞습니다.
앱은 GA4로 사용 통계를 보냅니다. 티켓 본문과 제목, 파일 경로, 프로젝트 이름, 프롬프트는 어느 이벤트에도 들어가지 않습니다. 무엇을 보내고 무엇을 안 보내는지, 끄고 지우는 방법은 사용 통계와 끄는 법에 있습니다.
안 하는 것
- 서버로 배포하지 않습니다. 호스팅도 원격 접속도 없습니다. 큐는 쓰시는 PC의 파일시스템 위에만 있습니다.
- 인증과 멀티유저가 없습니다. 파일시스템 권한이 곧 권한입니다.
- 데스크톱 앱은 macOS(Apple Silicon)에서만 돕니다. 엔진 자체는 macOS와 Linux에서 돕니다.
- 큐를 손으로 끌어 순서를 바꾸는 자리가 없습니다. 도는 순서는 우선순위(1~5)와 마감,
deps, 만든 날짜가 정합니다.deps는 이 티켓보다 먼저 끝나야 하는 티켓을 가리키는 칸입니다.
다음은 설치입니다.