AI 사용량과 지난 세션

Claude Code와 Codex의 5시간·주간 한도를 계정별로, 장치를 넘나들어 폰에서 봅니다. 지난 에이전트 세션은 새 창에서 이어 합니다.

AI 사용량

앱은 Claude Code와 Codex가 플랜 한도를 얼마나 썼는지 보여 줍니다. 5시간 창과 주간 창(모델별 주간 한도가 있으면 그것도)과 각각 언제 초기화되는지입니다. 한도는 장치가 아니라 Anthropic·OpenAI 계정의 것이라, 앱은 닿는 모든 장치에 물어서 계정마다 카드 하나와 그 계정을 쓰는 장치를 보여 줍니다.

st usage                     # 컴퓨터에서 같은 내용
st usage poll off            # st가 직접 묻지 않게 (다시 켜려면 on)
st hooks install --usage     # Claude Code의 상태줄에서도 읽기
st hooks uninstall --usage   # 원래 상태줄로 되돌리기

st(0.3.65 이상)는 5분쯤마다 Anthropic과 OpenAI에 직접 묻습니다. Claude Code와 Codex가 이 컴퓨터에 둔 로그인으로, 각 CLI의 /usage가 묻는 곳에 묻습니다. 그래서 에이전트가 쉬고 있어도 숫자가 새것이고, 처음 숫자는 st를 켜고 몇 초 뒤에 나옵니다. 따로 설치할 것은 없습니다. st --no-telemetry로 띄운 st도 묻지 않습니다.

  • Codex는 자기 세션 파일에도 한도를 적습니다. st는 그것도 읽습니다.
  • Claude Code는 한도를 상태줄 명령에도 줍니다. st hooks install --usage를 하면 st가 그 명령이 되어 답이 끝날 때마다 숫자를 받습니다. 쓰던 상태줄(직접 만든 스크립트, HUD)은 st가 같은 입력으로 뒤이어 실행하므로 그대로 보입니다. st usage poll off로 직접 묻기를 껐다면 Claude Code의 숫자는 이 길로만 옵니다.
  • 출처가 여럿이면 가장 최근 것을 씁니다. st usage가 어디서 온 숫자인지 알려 줍니다.
  • 이 한도는 Claude.ai 플랜 로그인(Pro, Max, Team)과 ChatGPT 로그인에만 있고 API 키에는 없습니다.

폰에서는 장치 목록 맨 아래 AI 사용량 줄("Claude · 5시간 42% · 주간 61%"), 장치 화면, 설정에서 봅니다. 막대는 80 %에서 주황, 95 %에서 빨강이 되고, 창이 그 선을 넘으면 그 계정을 쓰는 장치가 몇 대든 알림이 하나 옵니다. 꺼진 장치는 마지막 값을 "이후 업데이트 없음"과 함께 보여 줍니다.

토큰과 계정 정보가 가는 곳

직접 물을 때 쓰는 로그인 토큰은 그 프로바이더(Anthropic이나 OpenAI)에게만 갑니다. st는 토큰을 저장하거나 갱신하지 않고, 만료됐으면 묻지 않고 마지막 값을 둡니다. 계정은 ~/.claude.json(Claude)이나 ~/.codex/auth.json(Codex)의 계정 id를 해시한 값으로 구분하고, 가린 이메일(y***@example.com)과 플랜으로 보여 줍니다.

계정에 로그인된 장치는 30초마다 보내는 하트비트에 한도를 실어 link.sophonz.io로 보냅니다. 계정 해시, 가린 이메일, 플랜, 창마다 쓴 비율과 초기화 시각입니다. 그래서 앱은 장치에 연결하지 않고도 계정의 한도를 봅니다. st usage poll off나 st --no-telemetry면 하트비트에 싣지 않고, 앱은 내 장치의 링크로 직접 읽습니다. 80 %/95 % 알림은 에이전트와 수준만 평문이고 나머지는 내 폰의 키로 암호화됩니다.

목표와 사용량 가드

st 0.3.113부터 Claude Code pane에 목표를 걸어 턴이 끝나도 계속 일하게 할 수 있고, 그런 루프가 주간 한도를 다 먹기 전에 st가 멈출 수 있습니다. 둘 다 st가 이미 설치하는 Stop 훅(에이전트 훅)의 응답입니다. 새로 실행되는 것도, pane에 입력되는 것도 없습니다.

st goal set "테스트가 다 통과할 때까지 고친다. 다 되면 st goal clear"
st goal set --file goal.md   # 긴 목표
st goal                      # 이 pane의 목표
st goal clear                # 내리기
st goal set --pane %12 "…"   # 같은 tmux 서버의 다른 pane
 
st usage guard on            # 너무 빨리 쓰는 루프를 멈추기(기본은 꺼짐)
st usage guard status        # 켜졌는지, 지금이면 에이전트마다 어떻게 판정하는지
st usage guard off
  • 목표는 ~/.sophonz/goals의 파일이고, pane 옵션 @st-goal이 그 파일을 가리킵니다. 에이전트가 턴을 끝낼 때마다 st가 목표를 다시 건네 계속 일하게 하고, st goal clear를 실행하면 끝납니다(목표를 이뤘거나 이룰 수 없으면 그렇게 하라고 알려 줍니다). Claude Code만 따릅니다.
  • 가드는 주간 창을 봅니다. 남은 한도의 비율이 남은 시간의 비율보다 10%p 넘게 뒤처지거나(한 주보다 빨리 쓰는 중) 10 % 아래로 내려가면 루프(st goal이든 Claude의 /goal이든)의 턴을 멈춥니다. 5시간 창은 가드하지 않지만, 멈출 때 그 창이 언제 초기화되는지 알려 줍니다.
  • 읽은 값이 없거나 한 시간보다 오래됐으면 루프는 이어 갑니다. 그 에이전트는 st usage guard status에 "no data"와 이유로 나옵니다.
  • Codex는 가드하지 않습니다. Codex의 /goal은 Stop 훅으로 멈추지 않기 때문이고, st usage guard status의 Codex 줄에 그렇다고 나옵니다.
  • 설정은 ~/.sophonz/usage/guard.json입니다. 예: {"on": true, "agents": {"claude": {"m": 0.1, "floor": 0.1}}}.

지난 세션

장치 화면(Android는 기록)과 세션 메뉴의 지난 세션 이어 하기는 그 컴퓨터의 Claude Code와 Codex 세션을 최근 것부터 보여 줍니다. 제목(/rename으로 붙인 이름, 없으면 처음 친 말), 폴더, 마지막으로 쓴 때, 메시지 수입니다. 하나를 누르고 tmux 세션을 고르면 st가 그 폴더에서 새 창을 열고 claude --resume <id>나 codex resume <id>를 실행합니다.

st history                   # 같은 목록
st history --cwd .           # 이 폴더만

세션 파일에서 나오는 것은 제목 한 줄뿐이고, 대화의 나머지는 내 컴퓨터에 남습니다. 이어 하려면 tmux가 필요합니다.