Меню-бар приложение для macOS: недельный лимит Claude Code одним взглядом.
На каждой полосе два цвета — план (сколько допустимо потратить к этому моменту) и факт (сколько реально потрачено). Видно не только «сколько осталось», но и «иду я в графике или обгоняю».
Иконка в строке меню — кольцо с процентом внутри, всего ~28 pt ширины; в настройках вместо него можно поставить полосу недели с процентом под ней. Кольцо показывает оба лимита сразу: один заполняет дугу, второй стоит цифрой в центре. Что где — выбирается там же: по умолчанию дуга это пятичасовая сессия, а цифра неделя, но их можно поменять местами.
Цвет у дуги и у цифры свой — каждый по своим порогам. Красная дуга при спокойной цифре означает ровно то, что написано: пятичасовой лимит на исходе, а недельный ещё нет. Это не рассинхрон, а два независимых лимита в одном значке.
Требования: macOS 14+ и установленный, авторизованный Claude Code. Ни Apple ID, ни платной подписки разработчика не нужно.
Скачайте .dmg со страницы релизов,
перетащите приложение в Applications и снимите карантин:
xattr -dr com.apple.quarantine /Applications/ClaudeWeek.appОбраз собран под Apple Silicon (M1 и новее) и подписан ad-hoc, без Apple Developer ID, — потому Gatekeeper и просит подтверждения. Кто предпочитает не верить чужому бинарю, собирает из исходников: там ровно те же три команды, что выполняет CI.
На Intel готового образа нет — только сборка из исходников, разделом ниже. Она там работает, но регулярно её никто не проверяет.
Дальше приложение следит за версией само: раз в сутки спрашивает GitHub, а
найдя новый выпуск, показывает строку внизу панели и присылает баннер — по
одному на версию, а не каждые сутки до установки. Обновляется по кнопке в
настройках («О программе»): покажет, что изменилось, скачает образ, сверит его
SHA256 с суммой из релиза, заменит себя и спросит про перезапуск. Настройки и
калибровка остаются на месте. Подробности — в
docs/USAGE.md; то же самое из терминала делает
ClaudeWeek --update.
Чем одна версия отличается от другой, записано в журнале изменений — человеческими словами, а не списком коммитов. Оттуда же собираются заметки к каждому релизу, так что читать его можно и прямо на странице выпуска. В программе он открывается ссылкой рядом с номером версии — «О программе».
Нужны Command Line Tools (xcode-select --install); полный Xcode не требуется.
git clone https://github.com/Greem4/ClaudeWeek.git
cd ClaudeWeek
./scripts/install.sh # соберёт, поставит в ~/Applications, включит автозапускПриложение появится в строке меню. Снять — ./scripts/uninstall.sh.
Обновиться — тот же install.sh: он пересобирает бандл, гасит работающую
копию и удаляет прежнюю установку целиком (включая забытые launchd-агенты и
копию в /Applications), и только потом ставит новую. Вторая иконка в строке
меню не появится, настройки и калибровка останутся.
Скрипт печатает, что именно собирает — ветку, коммит и дату, — и умеет ставить не только текущий каталог:
./scripts/install.sh --latest # самую свежую ветку репозитория
./scripts/install.sh --ref my-branch # конкретную ветку, тег или коммитНичего вводить не нужно: приложение читает OAuth-токен уже авторизованного Claude Code из Keychain — только читает, наружу не отдаёт, на диск не пишет. Разбор — docs/USAGE.md.
Один раз стоит сделать вот что:
./scripts/signing-cert.sh # постоянный сертификат подписиБез него macOS спрашивает доступ к записи Keychain с токеном после каждой пересборки: разрешение привязано к подписи, а ad-hoc подпись — это хеш бинаря, свой у каждой сборки. С сертификатом подпись перестаёт меняться, и приложение остаётся в списке доверенных навсегда. Apple ID и Developer ID для этого не нужны; Gatekeeper он не отменяет. Подробности — docs/USAGE.md.
Одного сертификата, впрочем, мало: вторую проверку — partition list — Claude
Code сбрасывает каждым обновлением токена, и диалог возвращался раз в сутки.
Поэтому запись читается утилитой /usr/bin/security, которой тот же токен
пишет сам Claude Code: разрешение на неё он и восстанавливает. Разбор —
docs/USAGE.md.
- Неделя с планом — семь суточных полос: факт, плановая зона, перерасход. 100 % лимита раскладываются по рабочим часам (по умолчанию 11:00 → 00:00), а не по астрономическим: сон не должен весить столько же, сколько работа. Ряд идёт с понедельника, а сутки, прошедшие сразу после сброса, стоят под чертой в конце; в настройках его можно развернуть от дня сброса.
- Пятичасовую сессию — отдельной строкой над сутками, с часом сброса. Тот лимит, в который упираются чаще недельного.
- Прогноз — «при таком темпе кончится ПТ 15:57», тоже по рабочим часам.
- Чем потрачено — клик по цифрам процента заменяет дни разбивкой по моделям: доля Opus, Sonnet и Haiku теми же полосами; клик ещё раз возвращает неделю. Считается по вашим транскриптам: сервер сообщает только итог недели.
- Откуда цифры — кружок у полосы сессии: зелёный залитый — живой ответ сервера, жёлтый — кеш, красный контурный — локальная оценка. Форма дублирует цвет, чтобы читалось при дальтонизме.
- Честный офлайн — без сети расход считается по вашим же транскриптам
~/.claude/projectsи помечается знаком≈. Калибруется сам, по последнему официальному ответу. - Пороги цвета — жёлтый после 81 %, красный после 93 % у недели и 95 % у сессии; считается по факту, а не по плану. Цвет значка можно и вовсе выключить — вкладка «Строка меню».
- Уведомления по своим порогам — баннер macOS, когда расход перешагнул заданную отметку: по два порога на недельный лимит (80 и 95 % из коробки) и на пятичасовую сессию (75 и 95 %). Каждый лимит выключается отдельно, все уведомления — общим тумблером. Подробнее ниже.
- Пять палитр и компактный режим — вкладка «Панель»; изменения видны сразу, на живой панели.
- Русский и английский — язык следует за системным, а на вкладке «Общие» выбирается явно: «Как в системе», «Русский» или «English». Переключается на ходу, без перезапуска.
Подробности по каждому пункту, все настройки, ключи конфига и флаги командной строки — в руководстве.
Цвет значка замечают, только посмотрев на часы, — а баннер приходит сам. Отметки, на которых стоит отвлечься, задаются на вкладке «Уведомления»: по два порога на каждый лимит, свои для недели и для пятичасовой сессии.
В баннере две строки — сколько израсходовано и через сколько сброс, — а какой это лимит, говорит картинка, а не третья строка текста: недельный лимит приходит числом, пятичасовая сессия — дугой. Тот же язык, что в строке меню, где дуга по умолчанию отдана сессии, а цифра в центре — неделе.
Цвет картинки считается по вашим порогам уведомлений: от первого до второго жёлтый, от второго и выше — красный. Не по цветам значка: те стоят на своих отметках (81 и 93 %), и баннер о пробитом пороге приходил бы со спокойным зелёным числом просто потому, что до окраски значка не хватило процента.
Три правила держат баннеры нешумными:
- один порог — один раз за окно лимита: следующая неделя и следующая сессия начинают отсчёт заново;
- только на ухудшении — откатившийся расход молчит;
- не чаще раза в пять минут, даже когда оба лимита пробиты разом.
Отдельно от лимитов стоит третий повод заговорить — вышла новая версия. Кнопки в том баннере нет намеренно: установка перезаписывает приложение и перезапускает его, а такому не место за одним щелчком из-под чужой работы — ставится обновление на вкладке «О программе». Тумблер у него свой: погасив разговоры о расходе, вы не обязаны молчать и про релизы.
Сказанное запоминается в ~/.config/claude-week/alerts.json и переживает
перезапуск: после перезагрузки посреди недели про пройденные пороги программа
молчит, а про уже объявленную версию не напоминает. Выключить можно всё разом или по лимиту в отдельности; разрешение macOS
спрашивается один раз, при первом запуске. Как баннер выглядит именно у вас,
показывает кнопка «Показать пример» — своя в каждой секции:
Вошли другим аккаунтом — рабочим вместо домашнего — и счёт начинается заново.
Недельный процент сменяется сам: сервер узнаёт аккаунт по токену. А вот
разбивка по суткам считается по транскриптам в ~/.claude/projects, а те
пишутся в одни и те же файлы при любом аккаунте, и различить их по содержимому
нечем. Поэтому у счёта есть начало: программа сверяет метку аккаунта из
Keychain с той, на которой ведётся счёт, и при расхождении ставит отсечку —
расход прежнего аккаунта в новый лимит больше не идёт.
Ту же отсечку можно поставить руками — кнопкой «Начать счёт заново» на вкладке «Доступ». Она нужна, когда Keychain недоступен: без него метку не прочитать, и смену аккаунта заметить неоткуда. Там же видно, чей аккаунт сейчас в ключе. Подробности — в docs/USAGE.md.
swift build # обе цели
swift run ClaudeWeekTests # 477 проверок: без сети, без UI, свой раннер
./scripts/make-app.sh # dist/ClaudeWeek.app — бандл, ничего не устанавливая
ARCH=arm64 ./scripts/make-dmg.sh # dist/ClaudeWeek-<версия>-arm64.dmgТо же самое гоняет CI на каждый push и pull request —
и собирает строже, с -warnings-as-errors: предупреждение роняет сборку.
Релиз выходит сам при слиянии pull request в main:
workflow поднимает версию в
Version.swift, ставит тег и запускает
сборку — она сверит тег с Version.swift,
прогонит проверки, соберёт образ под Apple Silicon и выложит его в Releases
вместе с контрольной суммой. Разряд версии выбирается меткой на PR
(версия:минор, версия:мажор, без метки — патч), метка без-релиза выпуск
отменяет; подробности — в CONTRIBUTING.md.
Библиотека и два исполняемых таргета: ClaudeWeekCore — расчёты без единого
импорта UI, ClaudeWeekApp — строка меню, панель и настройки, ClaudeWeekTests —
свой тест-раннер (XCTest без Xcode недоступен). Разделение намеренное: окно
недели и план — самая ошибкоопасная часть, и её нужно гонять тестами без запуска
приложения. Карта кода, потоки данных и рецепты правок —
docs/ARCHITECTURE.md.
Счётчиков лимита Claude Code написано много — CCSeva, ClaudeUsageBar, cc-usage-bar, cctray. Все показывают, сколько осталось; разбор — в ROADMAP. Коротко:
- плановая зона на полосе — только здесь: не «сколько осталось», а «иду я в графике или обгоняю»;
- ни Node, ни
ccusage, ни запускаclaudeради вывода/usage— тот же ответ берётся одним GET, нативным кодом; - офлайн честный: локальная оценка калибруется сама и помечается знаком
≈, а не выдаётся за точную цифру; - палитра прогнана через валидатор на дальтонизм и контраст.
- история не копится — сравнить «эта неделя против прошлой» нельзя;
- лимиты по моделям и докупленные кредиты не показываются;
- разбивки по проектам нет — стоимость каждого считается, наружу выходит сумма;
- уведомления о новой версии живут внутри программы — панель, меню и настройки; системного всплывающего окна нет;
- эндпоинт
/api/oauth/usageне документирован публично и может измениться без предупреждения; тогда виджет уйдёт на локальную оценку.
Полный список с приоритетами — docs/ROADMAP.md.
| Файл | О чём |
|---|---|
| CHANGELOG.md | журнал изменений: что нового в каждой версии, начиная с первой |
| docs/USAGE.md | руководство: доступ, панель, расчёт плана, все настройки и ключи конфига, командная строка |
| docs/ARCHITECTURE.md | карта кода: кто за что отвечает, потоки данных, инварианты, рецепты правок |
| docs/API.md | официальный источник: схема ответа, токен, дисциплина запросов |
| docs/SPACES.md | панель, рабочие столы и мониторы: почему «не открывается по щелчку» и почему вставала у чужого края, измерения и пробы для разбора |
| docs/PLAN.md | план работ, модель данных, разбор рисков и отвергнутых вариантов |
| docs/ROADMAP.md | чего не хватает и что делать дальше |
Пишет и ведёт проект Greem4 — он же единственный контрибьютор. Правки со стороны принимаются через issue и pull request: CONTRIBUTING.md.
MIT. Программа не связана с Anthropic и никак ею не поддерживается.









