지금 무엇을 해야 하는지 봅니다. 숫자는 내가 볼 수 있는 프로젝트 기준이고, 「완료」는 위에서 고른 기간(24h·7d) 안에 끝난 것입니다.
이슈를 선택하세요.
이슈
프로젝트를 고르고 제목만으로 이슈를 등록합니다. 상세는 나중에 사람이나 에이전트가 채웁니다.
왼쪽 목록에서 이슈를 고르면 여기에 상세가 나옵니다.
의존성 그래프
작업(노드)과 두 종류의 선 — 실선 화살표는 의존, 점선 회색은 포함입니다.
점선 노랑은 아직 안 끝난 선행(블록), 빨강 테두리는 순환입니다. 기본은 하위 접기라 하위 이슈가 상위 카드 하나로 묶여 있고, 카드의 + 를 누르면 그 묶음만 펼쳐집니다. 노드에 마우스를 올리면 그 작업에 걸린 선만 남습니다.
보드 카드를 끌어 칸을 옮기면 상태가 바뀝니다. 나루는 넘긴 것만 집습니다 — 이슈를 고르고 선택 바의 「에이전트에게 넘기기」를 눌러야 가져갑니다(에픽도 하위를 통째로 가져갑니다). 「할 일」·「대기」 칸 머리의 스위치를 누르면 그 칸이 보여주는 카드가 바뀝니다 — 할 일 ↔ 초안 작성중(기획을 시켰거나 세션이 쥔 것), 대기 ↔ 나루 대기(넘긴 것). 스위치는 보기만 바꿀 뿐 아무 요청도 걸지 않습니다. 카드 왼쪽 위 ⠿ 손잡이를 끌면 세로 순서가 바뀝니다(할 일·초안 완료·초안 작성중·나루 대기 보기의 최상위 카드 — 하위 이슈에는 없습니다). 「대기」 기본 보기에는 없습니다: 그 순서는 넘기는 순간 줄 맨 뒤로 덮입니다. 뒤쪽 칸은 최근에 움직인 순입니다.
칸을 끌어 옮기면 상태가 바뀝니다. 세로 순서는 앞쪽 칸에서만 끌어 바꿉니다.
이력
처리된 이슈가 어떤 모델로 얼마나 걸려 처리됐는지 봅니다. 줄을 누르면 시도별 내역이 펼쳐집니다.
시도별 보고를 복잡도×모델로 더합니다 — 복잡도 라우팅(0021)이 실제로 비용을 줄이는지 여기서 봅니다.
옅은 막대는 자기 보고(근사치)만으로 채워진 값입니다. 진한 막대는 나루 자동 기록(정확치)이 하나 이상 섞여 있습니다 — 커서를 올리면 시도·이슈 수가 갈라져 보입니다.
집힌 구간(claim → 다음 전이)을 시간축에 늘어놓습니다 — 언제 무엇이 얼마나 돌았는지, 재시도가 어디서 갈렸는지 봅니다.
게시판
사람이 직접 해야 하는 설정·확인 항목을 적어 두고 끝나면 체크합니다. 에이전트는 손대지 않습니다.
프로젝트
리포지토리 여러 개를 하나의 프로젝트로 묶습니다. 이슈는 프로젝트에 속합니다.
리포지토리
GitHub 조직에서 동기화된 registry. 항목을 눌러 관리 대상·헬스 URL 을 설정합니다.
설정
내가 등록한 이슈를 나루가 내 구독으로 돌립니다. 등록하지 않으면 시스템 기본 계정으로 돕니다. 값은 저장 후 다시 표시되지 않습니다 — 서버가 아예 돌려주지 않습니다.
claude 토큰은 자기 기계에서 claude setup-token 으로 받습니다.
codex 는 두 형태를 받습니다 — codex login 후 생긴
~/.codex/auth.json 의 내용 전체(구독 인증) 또는 API 키 한 줄.
figma 는 구독이 아니라 디자인 트랙([디자인] 이슈)이 시안을 만들 때 쓰는 도구 자격입니다 —
Figma 의 개인 액세스 토큰(Settings → Security → Personal access tokens).
등록하면 내 이슈의 시안이 내 계정·내 팀 파일에 만들어집니다. 안 넣으면 시스템 기본 토큰으로 돕니다.
원격 Figma MCP 서버를 쓰는 설치에서는 이 칸이 안 먹습니다 — https://mcp.figma.com/mcp 는 개인 액세스 토큰을 401 로 거절합니다.
그 설치의 인증은 OAuth 뿐이고, 나루 한 대마다 한 번 로그인합니다 — 절차는 도움말의 「Figma 연결」에 있습니다.
이 칸은 로컬 Dev Mode 서버(Figma 데스크톱 앱)를 쓰는 설치에서 뜻이 있습니다.
github 은 세션이 git push · PR 생성에 쓰는 자격입니다 — GitHub 의
개인 액세스 토큰(Settings → Developer settings → Personal access tokens).
등록하면 내 이슈의 커밋·PR 이 내 이름으로 올라갑니다. 안 넣으면 시스템 기본 토큰으로 돕니다.
워크플로(.github/workflows/)를 고치려면 권한이 하나 더 필요합니다 —
classic 이면 workflow 스코프, fine-grained 면 Workflows: Read and write.
없으면 그 커밋은 push 자체가 거절되고, 세션은 그걸 안에서 풀 수 없습니다.
수락해야 실제로 그 조직에 들어갑니다. 수락 전에는 조직의 프로젝트·이슈가 보이지 않습니다.
이 설치에서 동시에 돌릴 나루 수. 늘리면 그만큼 새로 뜨고, 줄이면 노는 인스턴스부터 걷습니다 — 도는 세션이 있는 나루는 죽이지 않습니다.
호스트가 컨테이너를 맞춥니다 — 반영까지 1~2분 걸릴 수 있고, 그동안 위 숫자는 그대로입니다.
한 계정(구독)이 동시에 돌릴 세션 수. 대수와 다른 축입니다 — 나루를 여러 대 띄워도 이 값이 1이면 그 계정의 세션은 하나씩 돕니다.
각 트랙을 어느 CLI 로 돌릴지의 설치 기본값입니다. 이슈에 벤더를 지정하면 그것이 이깁니다 — 여기는 「대개는 이렇게」고 이슈의 지정이 그 예외입니다. 미지정이면 예전대로 이슈의 담당 이름으로 판정합니다.
다음 배차부터 적용됩니다 — 이미 뜬 세션의 CLI 는 안 바뀝니다.
복잡도 네 칸 × 벤더 둘의 설치 기본값입니다. 이름은 자유 텍스트(회색 글자가 지금 쓰이는 코드 기본값), codex 는 모델명과 강도를 함께 채워야 적용됩니다. 비우면 코드 기본표로 돌아갑니다.
한 계정·프로젝트가 정해진 시간 안에 쓸 수 있는 토큰. 넘으면 새 세션이 안 뜹니다 — 도는 세션은 죽이지 않고 끝까지 갑니다. 값은 토큰이지 돈이 아니고, 캐시 토큰은 안 셉니다(입력+출력만). 비우면 한도 없음입니다.
지금 얼마나 썼는지는 운영 화면의 예산 대비에서 봅니다.
일시정지(사람이 멈춤)는 다른 축입니다 — 0 대로 줄이는 것과 멈추는 것은 할 일이 다릅니다. 멈춤·재개는 대시보드의 나루 칩에 있습니다.
마일스톤
체크포인트를 만들고, 이슈를 여러 개 골라 한 번에 넣거나 뺍니다. 진행률은 서버가 센 값이라 내가 볼 수 있는 프로젝트 기준입니다.
대기열
다음에 무엇이 갈지, 그리고 사람이 순서를 바꾸는 자리입니다. 숫자는 내가 볼 수 있는 프로젝트 기준입니다.
마일스톤 → 큐 순서 → 등록순 · 등급은 첫 자리만 정합니다 — 여기서 맨 위로 올려도 그 이슈의 마일스톤 차례가 아니면 안 돕니다.
관측
지금 무엇을 하고 있는지, 어디에 얼마나 썼는지, 무엇을 줄일 수 있는지를 봅니다. 숫자는 내가 볼 수 있는 프로젝트 기준입니다.
나루 한 대가 카드 한 장입니다. 「노는 중」은 1급 상태입니다 — 눌러 대기열에서 왜 안 가는지 봅니다.
캐시 토큰은 합계에 안 섞습니다 — 합치면 「무엇을 줄일까」의 답이 달라집니다. 못 읽은 값은 0 이 아니라 「모름」입니다.
줄을 누르면 몇 회차에 무엇을 돌았는지가 펼쳐집니다 — 이미 받아 둔 값이라 요청이 다시 안 나갑니다. 숫자는 입력+출력이고 캐시는 따로 적습니다.
눈에 띄는 것만 올립니다. 버튼은 여기서 값을 안 바꿉니다 — 바꾸는 화면으로 데려갑니다(무엇을 바꿨는지가 그 화면 이력에 남아야 합니다).
나루 운영
나루가 무엇을 얼마나 태웠는지, 어떤 세션이 돌았는지, 언제 무슨 일이 있었는지를 봅니다. 숫자는 내가 볼 수 있는 프로젝트 기준입니다.
세션 원장(0031)의 입력+출력 토큰입니다. 캐시 토큰은 안 셉니다 — 캐시가 대개 훨씬 커서 함께 세면 "얼마나 비쌌나"가 묻힙니다.
담당이 박혀 나루가 집지 않는 이슈입니다. 「잠가 둠」은 사람이 세션에 넘기며 예약한 것이고, 「도는 중」은 세션이 실제로 점유한 것입니다 — 앞엣것만 풀 수 있습니다. 내가 볼 수 있는 프로젝트 기준입니다.
등록된 나루입니다. 이름은 바꿔도 같은 인스턴스입니다 — 식별자가 따로 있어 세션 기록이 그대로 따라옵니다. 이름 바꾸기는 사람만 할 수 있습니다.
나루가 띄운 헤드리스 세션입니다. 도는 중이면 토큰이 확정치가 아닙니다 — 계속 자랍니다.
지난 일을 찾습니다. 지금 살아 있는지는 대시보드 헤더의 실시간 배지가 보여줍니다.
알람 이력
종에 떴던 알람을 지난 것까지 봅니다. 내가 볼 수 있는 프로젝트 기준입니다 — 읽음도 나만의 것이라, 다른 사람이 읽어도 내 표시는 그대로입니다.
행을 누르면 대상 이슈로 가면서 그 줄이 읽음이 됩니다. 여러 개를 한 번에 읽음 처리하려면 왼쪽 칸을 고르세요.
이슈 정리
정리 세션이 훑어 남긴 제안을 골라 적용합니다. 세션은 이슈를 하나도 안 바꿉니다 — 적용은 사람이 합니다.
도움말
지금 사람이 손대야 하는 것과, b3x 를 쓰는 방법을 모았습니다.
작업이 흘러가는 방식
- 등록 — 이슈 화면에서 제목만 적어도 된다. 내용은 나중에 에이전트가 채운다.
- todo → ready — 사람이 "이제 해도 된다"고 올린다. 선행 작업이 남아 있으면 올라가지 않는다.
- claim — 에이전트가 Ready 큐에서 가져가
in-progress로 바꾼다. 담당이 지정된 작업은 큐에 안 뜬다(사람 몫). - review — 에이전트가 산출물·인계 노트를 남기고 제출한다. 수용기준은 자동 검증된다.
- done — 사람이 확인하고 닫는다. 이 단계가 내 차례 목록에 뜬다.
막힌 작업은 blocked 로 가고 대시보드 "주의 필요"에도 함께 보인다.
클로드 연결
b3x 는 원격 HTTP MCP 서버다 — 리포를 클론하거나 빌드하지 않아도 주소 + 토큰만으로 붙는다. 토큰은 설정 화면에서 발급하고, 발급 직후 화면에는 아래 명령이 토큰까지 채워져 나온다. 여기 것은 형태만 보여준다.
--scope user 라 어느 리포에서든 쓸 수 있다. 등록한 뒤 /mcp 로 연결을 확인한다.
웹·앱에는 명령이 아니라 커스텀 커넥터로 등록한다: Settings → Connectors → Add custom connector → URL 에 위 서버 주소를 넣고 Connect → b3x 로그인·승인(OAuth). 이 방식은 토큰을 손으로 넣지 않는다. static headers(beta)가 켜져 있으면 Authorization: Bearer <발급한 토큰> 을 직접 넣어도 된다.
리포에서 make mcp-desktop 을 실행하고 토큰을 붙여넣으면 claude_desktop_config.json 에 자동 등록된다. Claude Code 도 make mcp-claude 로 같은 일을 한다 — 명령을 직접 치는 것보다 이쪽이 쉽다. Codex 는 아래 「Codex 연결」에 따로 있다.
붙고 나면 에이전트가 register_issue 로 이슈를 남기고 list_ready_tasks → claim_task → submit_result 로 이 화면의 작업을 직접 굴린다.
Codex 연결
묻는 것이 둘이고 서로 독립이다 — ① 내 터미널의 Codex 를 b3x 에 붙이는 것, ② 나루가 Codex 로 세션을 띄우게 하는 것. 하나만 해도 그쪽은 동작한다.
리포에서 make mcp-codex 를 실행하고 설정 화면에서 발급한 토큰을 붙여넣으면 끝난다. 위 서버 주소를 stdio 브리지(npx mcp-remote)로 등록한다 — Codex 는 원격 HTTP MCP 를 직접 못 받아서 클로드와 방식이 다르다. 다시 실행하면 기존 등록을 지우고 새로 붙여 토큰이 갱신된다.
CLI 는 이미 나루 이미지에 들어 있다 — 따로 설치하지 않는다. 남는 것은 자격증명과 무엇을 Codex 로 돌릴지 둘뿐이다.
자격증명 — 둘 중 하나. 클로드는 환경변수 하나면 되지만 Codex 의 인증은 파일이라 자리가 다르다.
- 내 구독으로(권장) — 설정 › 일반의 「내 구독 토큰 (나루)」 카드에서 벤더
codex를 고르고,codex login뒤 생긴~/.codex/auth.json의 내용 전체 또는 API 키 한 줄을 넣는다. 내가 등록한 이슈가 내 구독으로 돈다(사람마다 홈이 갈려 남의 이슈에 안 섞인다). - 설치 공용으로 —
.env에CODEX_API_KEY를 넣거나, 나루 컨테이너에서codex login을 한 번 한다(영속 홈에 남아 재배포를 넘어 산다)..env를 고쳤으면make up-runner로 나루를 갈아 끼워야 먹는다.
무엇을 Codex 로 돌릴까 — 세 자리이고 좁은 것이 이긴다.
- 이슈 상세 「트랙별 벤더」 — 이 이슈의 이 트랙만(기획·수행·리뷰 각각).
- 이슈 상세 「벤더」 알약 — 이 이슈는 통째로.
- 설정 › 일반의 「트랙별 기본 벤더」 — 설치 전체의 기본값. 「리뷰는 코덱스로」면 여기 한 번이면 된다.
셋 다 비우면 예전대로 담당 이름으로 판정한다(사실상 claude). 바꾼 값은 다음 배차부터 적용된다 — 이미 뜬 세션의 CLI 는 안 바뀐다.
확인 — 관측 › 운영의 세션 표에서 벤더 열이 codex 인지 본다. 리포에서는 make runner-check 가 인증을 먼저 확인해 준다.
알아 둘 것 — 아무도 자기 구독을 등록하지 않으면 모든 이슈가 system 한 계정으로 묶인다. 그러면 계정당 동시 상한이 사실상 전역 상한이 되어, 나루를 늘려도 세션이 안 는다.
Figma 연결
묻는 것이 둘이다 — ① 나루가 Figma 를 열 수 있게 하는 것(OAuth 로그인), ② 시안을 어디에 그릴지 정하는 것(파일·페이지 주소). 둘 다 있어야 디자인 트랙이 돈다.
개인 액세스 토큰(PAT)은 원격 서버가 안 받는다 — Authorization: Bearer <PAT> 는 무조건 401 이다. 설정 › 일반의 「내 구독 토큰」 figma 칸은 로컬 Dev Mode 서버(Figma 데스크톱 앱)를 쓰는 설치용이고, https://mcp.figma.com/mcp 를 쓰면 OAuth 뿐이다.
나루는 대마다 홈이 갈린다 — 로그인도 대마다 한 번씩 한다(b3x-naru-1, b3x-naru-2 …). 나루를 늘리면 새로 생긴 대는 다시 로그인해야 한다.
docker exec b3x-naru-1 claude mcp add -s user -t http figma https://mcp.figma.com/mcp
docker exec -it b3x-naru-1 claude mcp login figma --no-browser
docker exec b3x-naru-1 codex mcp add figma --url https://mcp.figma.com/mcp
docker exec -it b3x-naru-1 codex mcp login figma
- claude — 인증 URL 이 찍힌다. 브라우저에서 승인하고 리디렉트된 주소를 그 자리에 붙여넣으면 끝난다.
- codex — 콜백이 컨테이너 안
127.0.0.1:<임의포트>라 브라우저에서 연결 실패로 뜬다. 정상이다. 주소창의 URL 을 통째로 복사해docker exec b3x-naru-1 curl -s '<복사한 URL>'로 친다(작은따옴표 필수 —&가 먹힌다). 코드는 일회용이라 바로 친다. - 로그인 창은 그대로 둔다 — Ctrl-C 하면 콜백을 받을 서버가 같이 죽는다.
- 확인 —
docker exec b3x-naru-1 codex mcp list·docker exec b3x-naru-1 claude mcp list.
.env 의 B3X_FIGMA_MCP_URL 이 채워져 있어야 세션에 도구가 붙는다(고쳤으면 make up-runner). 비어 있으면 디자인 이슈가 도구 없이 떠서 시안 대신 글로 설명하고 blocked 로 끝난다.
- 프로젝트 수정 → 「화면 설계 파일」 — 팀 프로젝트에 만든 빈 파일의 주소. 드래프트(개인 초안)에 두면 다른 사람의 세션이 그 파일을 못 연다.
- 리포지토리 → 「화면 설계 페이지」 — 그 서비스의 화면들이 사는 페이지 주소(
?node-id=가 들어 있어야 한다).
비워 두면 프롬프트가 위치를 아예 말하지 않는다 — 세션마다 새 파일이 생긴다. 프로젝트별로 하나씩 켜면 된다.
- 표식은 제목 접두어
[디자인](또는 유형을design으로). 이 표식이 없으면 시안 없이 곧장 구현으로 간다 — 조용한 실패라 왜 시안이 안 나왔는지 알 수 없다. - 구현 이슈는 그 디자인 이슈를 선행(dependsOn) 으로 건다. 그러면 구현 세션에도 Figma 도구가 붙어 시안의 간격·색을 직접 읽는다.
- 대상 리포 개수가 신호다 — 1개면 그 리포 페이지, 2개 이상이면 프로젝트 파일의 공통 페이지(
_design-system), 0개면 세션이 되묻는다. - 세션이 두 번 도는 것이 정상이다 — 시안 2~3안을 링크로 남기고 질문하며
blocked(선택 대기) → 사람이 고르면ready로 돌아와 확정하고review. - 구현이 머지되면 나루가 「Figma 페이지를 갱신할까요?」 를 묻는다. 자동 갱신은 안 한다 — 답하면 갱신 이슈가 생긴다.
사람 폴백 — 로그인이 안 됐거나 나루를 안 쓸 때는, Figma 커넥터가 붙은 대화형 Claude Code 세션에 이슈 상세의 「넘기기」 프롬프트를 붙여넣으면 된다. 같은 표식·같은 프롬프트라 결과가 나루가 돌린 것과 구분되지 않는다.