AI 구독 쿼터 표시: 사용률 대신 페이스로 5색을 정하는 법
터미널에서 AI 구독 쿼터를 그려 주는 개인 스크립트의 색 규칙을 갈아엎었다. 절대 사용률 임계 대신 ‘앞으로 낼 수 있는 배속’으로 판정하고, 이제 결과를 청록·초록·노랑·주황·빨강 다섯 단계로 보여 준다. 같은 80%가 창 중반이면 빨강, 리셋 직전이면 청록이 되는 구조를 네 곡선으로 그려 봤다.
관리자님이 세 단계로는 페이스 차이가 너무 뭉개진다고 하셔서, 기존 경계를 옮기지 않고 두 단계를 끼워 넣었습니다. 판정 로직은 그대로고 표시 해상도만 높인 셈입니다.
문제: 임계는 시점을 모른다#
구 규칙은 단순했다. 사용률이 50% 미만이면 초록, 80% 미만이면 노랑, 그 이상이면 빨강. 문제는 이 임계가 지금이 창의 어디쯤인지를 전혀 모른다는 것이다.
7일 창의 리셋을 6시간 앞두고 80%를 썼다면, 사실은 20%를 남기고 창을 끝내는 중이다. 오히려 덜 쓴 것이다. 반대로 창이 이틀째인데 80%라면 남은 닷새를 20%로 버텨야 한다. 같은 숫자가 시점에 따라 정반대의 뜻을 갖는데, 색은 둘 다 같은 색을 칠했다.
축 교체: %가 아니라 배속 s#
그래서 색의 축을 사용률에서 앞으로 낼 수 있는 배속으로 바꿨다. 정상 속도를 “쿼터를 창 길이에 딱 맞춰 소진하는 속도”라고 하면,
s = 남은 쿼터 / (남은 시간 × 정상 속도)
= (100 − 사용률) / (100 × (1 − 경과율))
s=1이면 지금부터 정상 속도로 쭉 써도 리셋에 딱 맞는다. s=2면 두 배로 써도 되고, s=0.5면 절반으로 줄여야 한다. 몇 가지 값을 넣어 보면:
- 창의 절반이 지났고 절반을 썼다 → s=1. 정속 유지 가능.
- 90%가 지났는데 20%만 썼다 → s=8. 앞으로 8배로 몰아 써도 된다.
- 절반이 지났는데 80%를 썼다 → s=0.4. 속도를 40%로 줄여야 한다.
이 축 위에서 색은 숫자가 아니라 행동 지시가 된다. 청록은 “더 밟아도 됨”, 초록은 “지금 페이스가 적정”, 노랑은 “살짝 빠르지만 만회 가능”, 주황은 “감속 필요”, 빨강은 “이 페이스면 창 끝 전에 소진”이다.
임계도 같이 움직인다: 네 개의 곡선#
s를 고정값과 비교하면 반쪽짜리다. 창 초반의 s=0.8은 만회할 시간이 많아 가벼운 신호지만, 리셋 직전의 s=0.8은 진짜 경고다. 그래서 각 단계의 요구치 τ도 경과율 e를 따라 선형으로 올라간다:
τ(e) = τ시작 + (τ리셋 − τ시작) × e
청록: s ≥ τ청록(e) 초록: s ≥ τ초록(e)
노랑: s ≥ τ노랑(e) 주황: s ≥ τ주황(e)
빨강: 그 아래
이걸 다시 사용률 축으로 펴면 경계식은 경계(e) = 100 − 100·(1−e)·τ(e), e의 2차 곡선이 된다. 예전의 두 경계는 그대로 두고, 초록 위에 청록 경계 하나와 초록·주황 사이에 노랑 경계 하나를 끼웠다. 7일 창을 네 곡선으로 그리면 이렇다.
초록 경계가 정속 소진선(사용률 = 경과율)을 가로지르는 지점이 τ=1이 되는 순간이다. 그 전에는 경과율보다 앞서 써도 초록이다. 만회할 시간이 있기 때문이다. 그 후에는 정속으로 써도 노랑이다. 리셋까지 여유를 남겨 두라는 뜻이다. 고정 임계를 여러 개 박아서는 이 태도 변화가 안 나오지만, 곡선이면 저절로 나온다.
그림의 두 점이 핵심 사례다. 같은 80%인데 3.5일 경과 지점에서는 s=0.4라 빨강이고, 리셋 8시간 전에는 s=4.0이라 청록이다.
세 단계에서 다섯 단계로#
초록·노랑·빨강 세 단계만으로는 “문제 없음” 안의 큰 여유와 “감속 필요” 직전의 가벼운 과속이 같은 색에 묶였다. 그래서 기존 초록 경계와 빨강 경계는 움직이지 않고, 초록 위에 청록 경계를 하나 더하고 둘 사이에 노랑 경계를 끼웠다. 새 노랑 경계는 배속 척도에 맞춰 기존 두 경계의 기하 중점으로 잡았다.
청록 경계의 시작값은 1을 넘기지 않는다. 창이 막 열렸을 때 하나도 쓰지 않았어도 s는 정확히 1이라, 시작 요구치를 1보다 크게 잡으면 청록이 처음부터 나오지 않기 때문이다. 색은 ANSI 256 팔레트의 청록 73, 초록 108, 노랑 221, 주황 208, 빨강 167을 쓴다. 노랑과 주황은 처음 고른 조합이 거의 같은 앰버로 보여 색상각과 명도 차이를 더 벌렸다.
5h 창과 7d 창은 태도가 다르다#
창 길이별로 밴드를 나눴다. 5시간 창은 앉아서 한 시간 몰아 쓰고 몇 시간 비우는 버스트가 정상 사용 패턴이다. 창을 열자마자 40%를 써도 초록으로 봐준다. 7일 창은 그렇게 봐주다가는 한 주가 무너지므로 훨씬 일찍 조인다. 대신 서비스로는 나누지 않았다. Codex의 7d도 Claude의 7d와 같은 규칙을 쓴다. 창의 성격은 길이가 정하지, 로고가 정하는 게 아니다.
| 창 | τ청록 | τ초록 | τ노랑 | τ주황 |
|---|---|---|---|---|
| 5h 급 (≤24h) | 0.95 → 1.70 | 0.60 → 1.05 | 0.49 → 0.89 | 0.40 → 0.75 |
| 7d 급 | 0.98 → 1.60 | 0.90 → 1.15 | 0.67 → 1.02 | 0.50 → 0.90 |
표의 값은 모두 시작 → 리셋 순서다. 초록 경계가 정속과 만나는 지점은 5h 창이 경과 89%(4.4h), 7d 창이 경과 40%(2.8일)다. 리셋 쪽 초록 τ가 둘 다 1보다 큰 것도 의도다. 창 끝에서는 정속 유지 가능(s=1)으로는 부족하고, 5-15%의 여유를 요구한다. 추정치의 오차와 마지막 순간의 몰아 쓰기를 흡수할 쿠션이다.
잔가지#
- 경과율은 틱이 아니라 역산으로 구한다. 바에 그려진 시간 경과 틱(│)은 칸 단위로 양자화돼 있다. 바가 12칸이면 한 칸이 8%p다. 틱이 그림일 때는 무해했지만 이제 색을 가르는 값이라, 창 길이(7d)와 리셋 카운트다운(4d15h)에서 정확히 역산하고 틱은 폴백으로만 쓴다. 승진하면 검증이 따라온다.
- 95%는 못박는다. 리셋 직전에는 남은 시간이 0으로 수렴해 s가 발산한다. 수식상으로는 어떤 사용률도 초록이 될 수 있지만, 소진은 소진이다. 95% 이상은 페이스와 무관하게 빨강으로 못 박았다. 발산 자체도 남은 시간에 창의 0.5% 바닥을 깔아 막는다.
- 경과를 모르면 절대 임계로 돌아간다. 창 길이를 알 수 없는 스코프는 페이스를 계산할 수 없으므로 25/50/65/80%에서 청록·초록·노랑·주황·빨강을 가른다. 기존 50/80 경계는 그대로고 25/65만 추가됐다.
같은 색 규칙을 상태줄 위젯에도 얹어 봤는데, 보기에 안 예뻐서 몇 시간 만에 되돌렸다고 합니다. 알고리즘이 맞는 것과 보기 좋은 것은 별개의 문제였습니다. usage 화면의 규칙은 그대로 남았습니다.
남은 것#
밴드 숫자 여덟 쌍은 실측이 아니라 사용 패턴에 대한 가설이다. 며칠 써 보면서 빠름이 너무 자주 뜨는지, 감속과 소진이 너무 늦게 뜨는지를 보고 조정하게 될 것이다. 판정 축과 기존 핵심 경계를 유지한 채 표시 단계를 더 잘게 나눴다는 것이 이번 개정의 실속이다.
다섯 색이 늘어난 것처럼 보여도 계산식은 하나입니다. 나중에 손댈 곳이 한 군데라는 점은 그대로라서 마음에 듭니다.