그 주석들은 쓰일 당시엔 참이었습니다
2026-07-29 하루에 한 서브시스템에서 같은 결함을 여섯 개 찾았습니다. 거짓말은 하나도 없었고, 전부 쓰일 당시엔 정확했습니다. 정확했기 때문에 사람들이 믿었고, 그래서 정확하게 쓰자는 말은 이 문제의 처방이 되지 못합니다.
2026-07-29 하루에 한 서브시스템에서 같은 결함을 여섯 개 찾았습니다. 거짓말은 하나도 없었고, 전부 쓰일 당시엔 정확했습니다. 정확했기 때문에 사람들이 믿었고, 그래서 정확하게 쓰자는 말은 이 문제의 처방이 되지 못합니다.
에이전트 넷이 보드로 조율하며 RelayRoom 0.5.0을 만들었습니다. 그 과정을 굴러가게 한 규칙은 이번 릴리스로 만든 기능이 강제하는 규칙과 같았습니다. 서로를 반박한 사례들과, 통과한 테스트를 일부러 부숴 확인한 기록입니다.
0.5.0은 닫힌 스레드를 Project Knowledge로 증류해 에이전트가 작업 전에 recall하도록 하고, 틀린 사실이 맞는 사실만큼 빠르게 증폭되지 않도록 승격에 독립 발행자 게이트를 둡니다. 사실 하나가 후보에서 신뢰로, 다시 강등되기까지를 따라가 봅니다.
ban 게이트의 주석은 자기가 어떻게 실패할지를 정확히 적어두고 있었고, 코드는 프로덕션에서 실제로 그렇게 실패하고 있었습니다. 멀티에이전트로 전환한 첫날 RelayRoom이 자기 코드에서 찾은 것과, 그것들이 왜 거기 있었는지.
tmux `send-keys`로 에이전트를 깨우는 방식은 사람의 타이핑을 흉내 내기 때문에 TUI별 입력 처리와 붙여넣기 감지에 취약합니다. 버리는 대신, 감독이 필요한 세션과 headless worker를 나누는 delivery mode 설계를 정리했습니다.
git worktree에서 여러 에이전트를 돌렸더니 전부 같은 part로 글을 썼습니다. 원인은 Claude의 MCP local 스코프가 워크트리가 아니라 git 레포 루트에 묶이는 것이었고, 고치는 김에 `rr.sh doctor`와 self-update까지 정리했습니다.
루프 엔지니어링은 에이전트에게 매번 직접 프롬프트하는 대신, 에이전트가 계속 돌 수 있는 작업 시스템을 설계하자는 관점입니다. RelayRoom은 그중 여러 에이전트 루프가 서로 말하고, 깨우고, 기록하는 협업 레이어에 가깝습니다.
멀티아치 도커 빌드가 느린 진짜 이유는 amd64 러너 위에서 arm64를 QEMU로 흉내 내기 때문입니다. 아키텍처별 네이티브 러너에서 병렬로 빌드하고 digest를 manifest list로 합치는 방법, 그리고 결과 태그는 그대로 두면서 파이프라인만 바꾸는 과정을 정리했습니다.
DNS rebinding을 막으려고 넣은 Host 허용목록이 정상 커스텀 도메인을 403으로 막았습니다. env 설정과 UI 설정이 어긋나면서 생긴 self-host footgun이었고, 두 설정 표면을 모두 인정하는 쪽으로 고쳤습니다.
메시지는 멀쩡히 도착하는데 wake 알림만 죽었습니다. 범인은 우리 코드가 아니라 SSE 스트림을 붙잡고 있던 리버스 프록시였고, 고친 방법은 SSE 응답에 X-Accel-Buffering: no를 붙이는 것이었습니다.
RelayRoom으로 RelayRoom을 만들다 발견한 갭. 메시지는 파트에 보낼 수 있었지만, 정작 어떤 파트가 있는지 조회할 도구가 없었습니다. 협업 시스템에서 주소록이 왜 1급 기능이어야 하는지, 그리고 `roster`와 `whoami`를 더한 이유.
에이전틱 코딩을 하다 보니 한 에이전트로는 부족했고, OpenHands와 Paperclip과 Claude Teamwork를 써봐도 제 워크플로와 맞지 않았습니다. 이미 살아 있는 에이전트들을 얇게 연결하려고 tmux와 MCP를 엮기 시작한 기록입니다.