본문 바로가기

만들기

토큰 0으로 AI 사용량 보는 위젯 만들기|스테이터스 위젯 제작기 1편

📌 이 글은 Claude Code와 Codex를 같이 쓰면서 "지금 한도가 얼마나 남았지?"를 한눈에 보는 위젯을 AI랑 같이 만든 기록 1편입니다. 핵심은 하나, 위젯 자체는 토큰을 한 개도 쓰지 않게 만드는 것이었어요. 결론만 궁금하시면 맨 아래 최종 요약으로 가셔도 됩니다.

Claude Code에 서브에이전트를 붙이고, 리뷰는 Codex한테 넘기고, 요약·정리 같은 가벼운 일은 로컬 LLM에 맡기다 보니 궁금한 게 생겼어요. "지금 누가, 어떤 모델로, 얼마나 쓰고 있지?" 매번 각 앱에 들어가서 확인하기가 번거롭더라고요. 그래서 맥미니 화면(저는 아이패드를 화면으로 써요)에 늘 떠 있는 작은 창을 만들기로 했습니다.

📎 앞에서 이야기한 것들이 궁금하신 분들은 지난 포스팅을 참고하세요 → 서브에이전트 붙이기 · Codex 리뷰어 붙이기 · 로컬 LLM으로 토큰 아끼기

뭘 보여 주는 위젯인가?

한도 카드(10/16 아이폰에서 캡처). 위부터 한 줄 요약, Claude Code, Codex, 맥미니 상태

  • 에이전트별 한도: Claude Code와 Codex의 5시간·주간 사용률, 언제 리셋되는지.
  • 지금 동작 중인지: "● 동작 중 2:56"처럼 일하는 중이면 경과 시간까지.
  • 최근 모델·마지막 활동: 마지막에 어떤 모델로 일했는지, 몇 분 전에 일했는지.
  • 맥미니 상태: CPU·GPU·메모리, 로컬 모델이 올라와 있는지.

그리고 제일 궁금했던 "누가, 어떤 모델로, 얼마나"는 표로 봐요. 메인 대화와 서브에이전트, Codex 작업, 로컬 LLM까지 한 줄씩 나오고, 현재 5시간·오늘·7일·30일로 기간을 바꿔 볼 수 있어요.

에이전트·모델별 사용량 표(10/19 '오늘' 기준). 비용은 구독료가 아니라 API 가격으로 환산한 참고값

표에서 이름 옆에 ⚠가 붙은 건 거의 안 부르는 서브에이전트예요. 이걸 보다가 "공들여 만든 팀원 중 실제로 일하는 건 몇이나 될까?" 싶어서, 제 환경과 아무것도 안 한 기본 상태를 같은 과제로 붙여 보기도 했어요. 거기서도 (당시) 7명 중 실제로 불린 건 리뷰어 하나였고요.

📎 궁금하신 분들은 지난 「내 Claude Code 환경 vs 기본 상태, 같은 과제로 붙여 봤다」 포스팅을 참고하세요 → 글 보러 가기

캡처에 보이는 팀원 이름이 서브에이전트 글이랑 좀 다르죠? 그 사이에 팀을 한 번 다시 짰어요. docs-researcher는 researcher로, test-runner는 qa로, longdoc-analyst는 analyst로 바꾸고, 코드 짜는 implementer랑 예비 리뷰어 backup-reviewer를 새로 넣고, 로컬 LLM에 일을 넘기던 text-drafter는 정리했어요. 그래서 지금은 8명이에요. AI들을 회사처럼 굴리게 된 이야기는 따로 정리해서 올릴게요.

대화 내용은 일부러 안 보여 줘요. 제가 입력한 문장엔 비밀번호나 키 같은 게 섞일 수 있어서, 사용자 문장은 화면에 띄우지도 저장하지도 않는다는 규칙을 처음부터 넣었어요.

제일 중요한 원칙: 토큰 0

한도를 아끼려고 만드는 위젯이 한도를 먹으면 웃기잖아요. 그래서 위젯은 AI 모델을 한 번도 부르지 않는다를 1번 원칙으로 정했어요. 모든 숫자는 작은 파이썬 프로그램이 맥 안의 파일과 명령어에서 읽어 와요.

  • Claude 한도: Claude Code 화면 아래 상태 줄(statusline)을 그릴 때 넘겨주는 정보에 5시간·주간 사용률이 들어 있어요. 그걸 받아 둡니다.
  • Codex 한도: Codex에 들어 있는 "계정 한도 조회" 기능을 30초마다 불러요. 모델에게 말을 거는 게 아니라 숫자만 묻는 거예요.
  • 누가 일했나: 각 프로그램이 맥에 남기는 작업 기록 파일에서 시각·모델 이름·도구 사용 횟수만 읽어요.

토큰 0이라고 말만 하면 안 되죠. 검증까지 해야

정말 0인지 세 가지로 확인했다

"사용률이 안 늘었으니 0" 하고 끝내면 아주 조금씩 쓰는 건 못 잡아요. 그래서 세 가지를 다 했어요.

확인 어떻게 결과
코드 수집 프로그램에 모델을 부르는 코드가 있는지 확인 없음, 통과
네트워크 75초 동안 맥의 모든 인터넷 연결을 기록해 수집 프로그램 것과 대조 Anthropic·OpenAI 모델 주소 연결 없음, 통과
사용률 15분 동안 위젯만 켜 두고 Codex 사용률을 30초마다 31번 측정 5시간 29.0%·주간 6.0% 그대로, 통과

네트워크 확인에서 하나 걸린 게 있었어요. Codex 한도 조회가 실행될 때마다 chatgpt.com에 연결을 열더라고요. 문제는 ChatGPT 계정으로 쓰는 Codex는 모델 호출도 같은 주소를 써서 주소만으로는 구분이 안 된다는 거예요. 그래서 "코드상 한도 조회만 한다" + "15분 동안 사용률이 그대로였다" 두 가지를 같이 근거로 삼았어요.

삽질: 데스크톱 앱에서는 Claude 한도가 안 들어온다

만들고 나서 바로 막혔어요. 저는 Claude Code를 터미널보다 데스크톱 앱(Code 탭)에서 더 많이 쓰는데, 데스크톱 앱은 그 상태 줄을 아예 실행하지 않더라고요. 상태 줄이 없으니 Claude 한도 숫자가 안 들어오고, 위젯엔 계속 옛날 값만 남았어요.

상태 줄이 없는데 한도를 어떻게 알아요

결국 원칙에 딱 하나 예외를 뒀어요. 데스크톱 앱으로 일하는 중일 때만 아주 짧은 질문을 작은 모델(haiku)에 보내서, 그 답에 딸려 오는 한도 정보를 읽는 거예요. 주기는 기본 2분이고 설정에서 1~60분으로 바꿀 수 있어요. 이 예외는 제가 직접 승인했고, 화면에도 "짧은 핑으로 주기적으로 확인(측정 시각)"이라고 솔직하게 적어 두었어요. 위 캡처의 "데스크톱 앱 사용 중 · 짧은 핑으로 주기적으로 확인" 줄이 그거예요.

작은 규칙 하나: 모르면 0%라고 하지 않기

숫자를 못 가져왔을 때 0%로 보여 주면 "한도 넉넉하네" 하고 착각하기 딱 좋아요. 그래서 못 가져온 값은 "알 수 없음"과 마지막으로 성공한 시각으로 보여 주고, 너무 오래된 값(수집 주기의 3배, 90초)은 회색으로 바꿔요. 별것 아닌 것 같은데 위젯을 믿고 쓰게 만드는 데 이게 제일 컸어요.

마치며

요구사항 문서를 먼저 쓰고, 다른 AI에게 반대 의견(적대적 리뷰)을 받아 고친 뒤에 만들기 시작했어요. 첫날에 기본 기능이 다 돌았고요. 다음 2편에서는 이 위젯을 아이폰·아이패드에서 보고, 한도가 차면 알림을 받고, 맥미니를 켜면 저절로 뜨게 만든 이야기, 그리고 로컬 LLM 사용량까지 같이 세게 된 과정을 써 볼게요.

참고로 "요구사항 문서부터 쓰고, 할 일은 백로그로 나눈다"는 순서는 제 모든 프로젝트의 공통 규칙이에요.

📎 궁금하신 분들은 지난 「백로그 CLI로 AI 여러 명 일 나누기|순서 안 맞으면 거절하는 300줄 도구」 포스팅을 참고하세요 → 글 보러 가기

최종 요약

✅ 결론만 보고 싶은 분

1. Claude Code·Codex 한도, 동작 중 여부, 최근 모델, 맥 상태를 한 창에서 보는 위젯.

2. 원칙은 토큰 0 — 숫자는 상태 줄 정보, Codex 한도 조회, 맥 안의 기록 파일에서만 읽는다.

3. 코드·네트워크·사용률(15분 31회 측정) 세 가지로 확인해 통과.

4. 데스크톱 앱은 상태 줄을 안 띄워서 Claude 한도가 안 들어옴 → 일할 때만 짧은 핑, 예외로 명시.

5. 모르는 값은 0%가 아니라 "알 수 없음 + 마지막 성공 시각".

도움이 됐다면 공유 부탁드립니다! 한도 어떻게 확인하고 계신지 댓글로 알려 주세요.

퇴근 후 맥미니

애 둘 키우는 평범한 직장인 아빠. 퇴근 후 맥미니로 이것저것 만들다 막힌 걸 그대로 적습니다.

방명록에 질문 남기기