← 작업일지

2026-06-18 · v1.0.0

2026.06.18 작업일지 v1.0.0

00:51, Codex 텔레그램 브릿지를 사람들에게 공개할 수 있을지 묻는 질문이 들어왔다. 02:05, 새 구조가 매 메시지마다 새 세션이 되는지 의심하면서 resume 문제가 전면에 올라왔다. 02:26, WSL 3노드에서 codex 실행 파일을 못 찾는 PATH 문제가 마지막 함정으로 남았다.

6월 18일은 Codex가 보조 실험체에서 운영 인프라의 중심으로 들어온 날이었다. 화면을 긁어서 답을 가져오던 브릿지는 긴 답변, 중복 전송, origin 오분류, 터미널 chrome 노출 문제를 동시에 드러냈다. 해결은 부분 패치가 아니라 구조 전환이었다.

1. 화면 긁기는 더 이상 버티지 못했다

초기 브릿지는 tmux pane을 캡처해서 Codex의 답을 읽었다. 짧은 답변에서는 그럴듯했지만, 긴 답변이 나오자 약점이 한꺼번에 보였다. idle 판정이 렌더링 완료보다 먼저 뜨면 잘린 답을 보냈고, 완성본이 다시 잡히면 중복 전송됐다. Telegram-origin 답변이 🍎가 아니라 💬 터미널 응답으로 분류되는 일도 있었다.

첫 처방은 debounce와 origin lock이었다. 479df67에서 pane mirror를 안정화하고, f1b2ab6에서 trailing Codex chrome을 제거했다. 하지만 이건 어디까지나 화면 긁기의 수명 연장이었다.

2. 정답은 codex exec --json -o였다

결국 브릿지는 codex exec 기반으로 다시 작성됐다. 395a72d는 pane scraping을 버리고, codex exec --json -o로 최종 답만 깨끗하게 받는 구조로 바꿨다. thread id를 저장하고 다음 요청에서 resume <id>를 쓰게 하면서, “텔레그램 메시지마다 새 세션이 되는가”라는 의심도 처리했다.

이 전환은 단순한 코드 정리가 아니었다. 터미널 직접 입력 미러라는 기능 하나를 포기하는 대신, Telegram 사용자가 보는 답변의 품질과 맥락 유지가 안정화됐다.

배운 것 — TUI 화면은 사람이 보기 위한 표면이고, 자동화의 정본 인터페이스가 아니다.

3. 공개 제품의 방향도 정했다

같은 날 별도 public repo로 telegram-agent-bridge가 만들어졌다. 8deee7d는 “Run any terminal AI coding agent from Telegram”이라는 일반화 프레이밍을 담았다. 이후 03e5c78에서는 local FIFO/TTY 입력구, shared queue, 단일 worker 직렬 exec/resume, local↔Telegram prompt/answer mirror가 붙었다.

처음 방향은 범용 agent bridge였다. 하지만 실제 운영에서 가장 강하게 검증된 것은 Codex였다. 이후 이 흐름은 codex-telegram-bridge로 집중되는 쪽으로 이어졌다.

4. 마지막 함정은 Linux 서비스 PATH였다

macOS 두 노드에서는 새 구조가 동작했지만, WSL 3노드에서는 codex exec가 내부 오류처럼 보였다. 원인은 모델도 브릿지도 아니었다. systemd 서비스 PATH에 ~/.npm-global/bin이 없어 codex 실행 파일을 찾지 못한 것이다.

3077976에서 Linux systemd PATH에 npm global bin을 추가했고, 이후 WSL·desktop3060ti·notebook3060까지 배포했다. 이 과정에서 canary가 macOS 1노드만 보면 충분하지 않다는 교훈도 남았다.

5. 그래서 뭐가 남았나

이날 결과물은 세 갈래다. 첫째, Codex 텔레그램 브릿지는 pane-scrape에서 codex exec 기반으로 방향을 바꿨다. 둘째, public bridge의 제품 프레이밍과 repo가 생겼다. 셋째, 5노드 Codex 운영을 위한 inbox protocol과 codex-status 계열 문서화가 진행됐다.

동시에 Anthropic 비용 게이지 해석, OpenAI 재로그인, 약먹자 광고제거 조사 같은 운영 이슈도 task로 남았다. 하지만 큰 줄기는 하나였다. Codex를 “한 번 호출하는 도구”가 아니라, 텔레그램·노드·task SoT와 연결된 실행 엔진으로 다루기 시작했다.


다음 이야기는 브릿지를 public package로 다듬는 이야기.

— 강대종 / @ssamssae