Claude Code가 밤새 멈췄는지 작업 중인지 알 수가 없어서, 상태를 보여주는 데스크용 화면(ESP32-S3)을 직접 만들었습니다.
I never know if my overnight Claude Code runs are stuck or just thinking, so I built a desk screen that shows me (ESP32-S3)
핵심 요약
여러 코딩 에이전트의 상태와 비용을 실시간으로 확인하기 위해 ESP32-S3 기반의 데스크용 모니터링 기기를 제작했습니다.
- 상태 모니터링 — 여러 에이전트의 실시간 작업 상태와 API 비용을 한눈에 확인 가능함
- 하드웨어 구성 — ESP32-S3와 4인치 터치스크린을 사용하여 직접 제작함
- 오류 감지 — 작업이 멈췄을 때 즉시 알림을 주는 워치독 기능 탑재함
- 오픈 소스 대시보드 — 기기가 읽어오는 대시보드인 'clawmetry'는 오픈 소스로 공개됨
지난 몇 달 동안 나는 보통 두세 개의 코딩 에이전트를 동시에 돌려왔어. 실무는 Claude Code가 하고, cron job에는 OpenClaw 봇을, 가끔은 Codex로 테스트를 돌리는 식이었지. 일 자체는 괜찮았는데, 에이전트 뒤치다꺼리하는 게 진짜 사람 미치게 하더라고. 몇 분마다 알트탭 눌러서 재시도 루프에 빠졌는지, 아니면 한 시간 전에 이미 머릿속에서 지워버린 작업 붙잡고 헛짓거리하고 있는지 확인해야 했거든.
결정타는 밤새 돌려놓은 작업이었어. 두어 시간 만에 진전도 없는 상태로 아침까지 멍하니 돌아가고 있더라고. 에러가 난 것도 아니라서 알림도 안 떴지. 아침에 커피 마시면서 에이전트가 6시간 동안 헛발질한 기록을 읽고 있자니 진짜 현타 오더라.
그래서 키보드 옆에 두고 상태를 바로 알려주는 멍청한 작은 화면을 하나 만들었어. 사진은 내 실제 작업 환경인데, 창틀 먼지까지 다 찍혔네.
이 화면에는 오늘 작업에 들어간 API 비용(오늘 나한테는 873달러 정도 찍혔네)이랑 내 Max 20x 플랜으로 커버 가능한지, 현재 몇 개의 세션이 돌아가는지, 그리고 뭔가 막혔을 때 방 건너편에서도 보일 정도로 빨간불이 들어오는 상태 표시등이 있어. 런타임마다 칩이 하나씩 할당되는데(지금은 Claude Code랑 OpenClaw가 떠 있고, Codex, Cursor, Goose, Aider 같은 것도 추적해), 칩을 누르면 최근 세션 제목이랑 비용, 마지막으로 뭘 했는지까지 다 나와. 두 번째 사진은 Claude Code가 이 장치 자체의 수집 파이프라인을 만들고 있는 모습인데, 좀 재귀적인 느낌이라 웃기지.
만드는 과정은 생각보다 훨씬 빡셌어. 처음엔 4.3인치 800x480 패널로 시작했다가 중간에 4인치 480x480 정사각형 유닛(ESP32-S3, 16MB 플래시, 8MB PSRAM)으로 바꾸는 바람에 화면 레이아웃을 다 갈아엎어야 했거든. LVGL 기본 32KB 메모리 풀이 계속 화면 다시 그릴 때마다 뻗어버려서 원인 찾느라 며칠을 날렸지. TLS는 또 왜 그렇게 죽어대는지, 나중에 알고 보니 mbedtls가 PSRAM에 스택이 있는 태스크랑은 상극이더라고. 그리고 가장 뼈저리게 배운 교훈 하나: 멈춰버린 상태 표시창은 아예 없는 것보다 못해. 멈춘 초록불을 보고 정상이라고 믿게 되니까. 그래서 지금은 편집증적인 라이브니스 워치독을 심어놨어. UI랑 폴링 루프가 각각 하트비트를 보내는데, 둘 중 하나라도 조용해지면 거짓 정보를 보여주느니 그냥 재부팅해버리게 만들었지.
다들 찾느라 고생하지 말라고 솔직하게 단점도 적어둘게. 페어링은 웹사이트에 짧은 코드 입력하는 방식이라 별거 없어. 8초마다 요약 정보를 가져오니까 밀리초 단위로 반응하는 기기가 아니라 그냥 슥 훑어보는 용도야. 보드에 마이크랑 스피커는 달려있는데 지금은 음성 기능이 없어(나중에 무료 OTA 업데이트로 음성 모드 추가할 예정). 펌웨어는 아직 공개 안 했어. 라이선스 문제 좀 정리해야 오픈할 수 있을 것 같아. 이 서브레딧 사람들이 제일 먼저 물고 늘어질 부분인 거 나도 알아. 그래도 대시보드가 읽어오는 데이터는 오픈소스니까 pip install clawmetry로 확인해 봐.


