Видишь лимит заранее. Решаешь, что делать с оставшимся. Продолжаешь с того же места.
У твоего AI-помощника есть батарейка. Когда она садится — он останавливается посреди работы и забывает, над чем вы работали.
continuum — это индикатор батарейки. Он следит за зарядом, и когда тот заканчивается, хлопает помощника по плечу: «Почти пусто. Заканчиваем, или поспим и продолжим когда зарядится?»
Если выбрать «поспать» — continuum запомнит, где вы остановились, подождёт пока батарейка зарядится и тихо запустит помощника снова — с того же места. Не надо следить. Не надо ничего запоминать.
Вот и всё. Индикатор, вопрос и сон, который заканчивается сам.
Четыре детали, склеенные одним механизмом Claude Code. Ничего не крутится в фоне.
-
Скрипт-провайдер (
providers/anthropic.sh) делаетcurlк эндпоинту использования Anthropic — токен из$CLAUDE_CODE_OAUTH_TOKEN, macOS Keychain, или~/.claude/.credentials.json— и печатает строку на каждое окно:5h 86.5 1783000000(имя, процент, reset как Unix epoch). Эти три колонки — весь контракт провайдера. Подставь скрипт, который отдаёт расход по API или токенный лимит — continuum не заметит разницы. -
Stop-хук (hooks/continuum-check.sh) запускается после каждого хода. Вызывает провайдера через 10-минутный кэш (позитивный и негативный — неудачный вызов тоже кэшируется, чтобы не долбить лимитированный эндпоинт каждый ход), сравнивает утилизацию с тирамиCONTINUUM_TIERS(80/90/95/99 по умолчанию) и — вот весь трюк — печатает{"decision":"block","reason":"..."}на stdout. Это механизм Claude Code для запрета молчаливого завершения хода;reasonподаётся модели как новый ввод.stop_hook_activeпроверяется первым (иначе бесконечный цикл), а файл-флаг по сессии означает что каждый тир срабатывает ровно один раз. -
PreToolUse-хук (hooks/frugal-gate.sh) — в экономном режиме (CONTINUUM_FRUGAL=1) блокирует вызовыAgent. Не просьба — запрет на уровне хука. -
Скилл (
skills/session-budget) — то, что injectedreasonпросит Claude запустить. Чистый prompt engineering: честно описать ситуацию, потомAskUserQuestionс вариантами. Никогда не решает за тебя. -
continuum resume— планируетclaude --continue -p "$PROMPT"на после сброса. По умолчанию черезlaunchd(macOS) илиsystemd-run(Linux) — переживает ребут. Если ни один не доступен —nohup sleep(переживает закрытие терминала, не ребут). Лог (~/.claude/continuum-resume.log) помечает### resumed in DIR/### end (exit N)вокруг запуска. По завершению — десктопное уведомление.
Ничего не трогает аккаунт, не тратит запрос без спроса, ничего нельзя не прочитать
в нескольких сотнях строк POSIX sh.
Скопируй строку для своей ОС, вставь в терминал, нажми Enter.
Mac или Linux
curl -fsSL https://raw.githubusercontent.com/TropinAlexey/continuum/main/install.sh | shWindows (PowerShell)
irm https://raw.githubusercontent.com/TropinAlexey/continuum/main/install.ps1 | iexЗатем набери continuum status чтобы увидеть сколько батарейки осталось.
Честное предупреждение: эта команда скачивает скрипт из интернета и запускает. Если хочешь сначала посмотреть — правильный инстинкт — открой install.sh / install.ps1, прочитай (он короткий) и запусти руками.
Даёт то, чего на экране лимита никогда не было: предупреждение и выбор.
Когда окно использования заполняется, Claude не молча завершает ход и оставляет тебя гадать. Он останавливается, говорит где мы и спрашивает:
Окно заполнено на 86%, сбрасывается в 21:40. Что делаем?
> Закончить и свернуться довести до рабочего состояния, прогнать тесты, показать diff
Доделать текущий набор задач завершить запланированный пакет, потом стоп — ничего нового
Сохранить и продолжить коммит, потом авто-resume после сброса
Экономный режим без субагентов, без больших файлов, короткие ответы
Только дешёвые задачи доки и коммит-сообщения, тяжёлый анализ отложить
Продолжать как есть проигнорировать предупреждение
Спрашивает на языке, на котором вы работаете. И не достаёт: предупреждение ступенчатое — 80% → 90% → 95% → 99%, срабатывает один раз на каждом уровне. Недельное окно отслеживается отдельно — 70% → 85% → 95%.
Выбрал «сохранить и продолжить» — commitит работу, планирует claude --continue на 21:41,
отдаёт PID. Закрываешь ноутбук. В 21:41, без тебя, сессия продолжает с того же места.
По завершению — десктопное уведомление.
Выбрал «Экономный режим» — устанавливается CONTINUUM_FRUGAL=1, и PreToolUse-хук
принудительно блокирует вызовы субагентов (Agent). Это не просьба — это запрет на
уровне хука.
Однострочник даёт команду continuum в любом терминале. Работает с любым AI-агентом.
Плагин Claude Code добавляет автоматическое предупреждение — часть где Claude сам останавливается на пороге и спрашивает что делать:
/plugin marketplace add TropinAlexey/continuum
/plugin install continuum
Хочешь оба? Ставь оба — однострочник для команды, плагин для автоматики. Не конфликтуют.
continuum status # 5 hours 86.5% resets at 21:40
# 7 days 41.0% resets at 02:00
continuum reset # 21:41 (reset +90s, готово для планирования)
continuum estimate # At this pace, ~2h 15m left before 100%
continuum providers # anthropic, mock, spend
continuum watch # поллинг в отдельной панели; звонок на пороге
continuum history # последние 20 снапшотов использования
continuum cleanup # удалить устаревшие файлы флагов/кэша (>24ч)
continuum resume "$(continuum reset)" "$PWD" "доделать тесты DocumentService"Не используешь Claude Code? continuum watch не требует хуков и плагина — работает в любом
терминале. continuum resume запускает любого агента:
CONTINUUM_RESUME_CMD='codex exec "{prompt}"' continuum resume 21:41 "$PWD" "finish the tests"
CONTINUUM_RESUME_CMD='opencode run "{prompt}"' continuum resume 21:41 "$PWD" "finish the tests"См. docs/harnesses.md — что проверено, что вероятно.
Используется недокументированный эндпоинт с OAuth-токеном.
https://api.anthropic.com/api/oauth/usage — то что вызывает /usage. Это не публичный API
и может измениться без предупреждения. Провайдер anthropic ищет токен в
$CLAUDE_CODE_OAUTH_TOKEN, потом в macOS Keychain, потом в ~/.claude/.credentials.json.
Токен уходит в один заголовок curl, на один хост. Несколько сотен строк шелла — читай
перед тем как доверять.
continuum resume запускает Claude без присмотра, с --permission-mode acceptEdits.
Спит до сброса, потом запускает claude --continue -p "<prompt>" в проекте. Правит код
без наблюдателя. Делай промпт узким. Не направляй на то, что не дал бы мержить незнакомцу.
continuum resume автоматически выбирает лучший планировщик ОС:
| ОС | Планировщик | Переживает ребут |
|---|---|---|
| macOS | launchd (one-shot plist) |
да |
| Linux | systemd-run --user (transient timer) |
да |
| Fallback | nohup sleep |
нет |
По завершению resume — десктопное уведомление (osascript на Mac, notify-send на Linux).
Лог (~/.claude/continuum-resume.log) помечает ### resumed in DIR / ### end (exit N) —
общий для всех проектов, grep по директории чтобы найти свой.
continuum не знает что такое Anthropic. Он спрашивает провайдера — «сколько использовано, когда сброс» — и всё остальное провайдер-агностично.
| Провайдер | Что измеряет | Нужно |
|---|---|---|
anthropic |
Подписочные окна (5ч/7д) | OAuth-токен Claude Code |
spend |
Месячный расход по API-ключу | ANTHROPIC_ADMIN_KEY, CONTINUUM_SPEND_CAP ($ бюджет, по умолчанию 100) |
mock |
Фейковые числа для тестов | ничего |
Провайдер — скрипт, который печатает:
5h 86.5 1783000000
7d 41.0 1783300000
Вот и весь интерфейс. Написать свой — 10 минут:
docs/writing-a-provider.md. Положи в ~/.claude/providers/
и выбери через CONTINUUM_PROVIDER=yours.
CONTINUUM_PROVIDER=anthropic,spend continuum statusЗапускает оба, берёт самую высокую утилизацию как основную линию. Ловит ситуацию «5-часовое окно в порядке, но $40 за сегодня сожжено».
| Shell | Статус | |
|---|---|---|
| macOS | sh |
работает из коробки |
| Linux | sh |
работает из коробки |
| Windows + Git Bash | sh |
работает из коробки |
| Windows без Git Bash | PowerShell | .ps1, подключить ниже |
Claude Code запускает хуки через Git Bash на Windows, откатывается на PowerShell если
Git Bash нет. Две реализации, .sh и .ps1, проверяются одним тест-набором на всех ОС
в CI. Без python, без node, без jq — POSIX sh + curl, или PowerShell 5.1+.
Без Git Bash — переопредели хуки в settings.json:
{
"hooks": {
"Stop": [{ "hooks": [{
"type": "command",
"command": "pwsh -NoProfile -File \"${CLAUDE_PLUGIN_ROOT}/hooks/continuum-check.ps1\"",
"shell": "powershell"
}]}],
"PreToolUse": [{ "hooks": [{
"type": "command",
"command": "pwsh -NoProfile -File \"${CLAUDE_PLUGIN_ROOT}/hooks/frugal-gate.ps1\"",
"shell": "powershell"
}]}]
}
}| Переменная | По умолчанию | Что делает |
|---|---|---|
CONTINUUM_THRESHOLD |
80 |
Порог основного окна (%). Тиры ниже него игнорируются. |
CONTINUUM_TIERS |
80 90 95 99 |
Уровни основного окна. Каждый срабатывает один раз. |
CONTINUUM_THRESHOLD_7D |
70 |
Порог недельного окна (%). |
CONTINUUM_TIERS_7D |
70 85 95 |
Уровни недельного окна. |
CONTINUUM_PROVIDER |
anthropic |
Какого провайдера спрашивать. Через запятую — несколько. |
CONTINUUM_RESUME_CMD |
claude --continue -p "{prompt}" … |
Какого агента будит resume. {prompt} — задача. |
CONTINUUM_DRY_RUN |
не задан | resume печатает команду вместо планирования. |
CONTINUUM_OFF |
не задан | Отключить Stop-хук. |
CONTINUUM_FRUGAL |
не задан | 1 — экономный режим: PreToolUse-хук блокирует Agent. |
CONTINUUM_CACHE_MIN |
10 |
Минуты кэширования ответа провайдера. 0 отключает кэш. |
CONTINUUM_SPEND_CAP |
100 |
Месячный бюджет в $ для провайдера spend. |
ANTHROPIC_ADMIN_KEY |
— | Admin API ключ для провайдера spend. |
Claude Code вызывает Stop-хук каждый раз когда Claude завершает ход. Хук, который печатает
{"decision":"block","reason":"..."} отправляет reason обратно Claude вместо того чтобы дать
ходу закончиться. Вот и весь трюк. Наш reason несёт числа и говорит Claude запустить скилл
session-budget.
Всё остальное — защита от граничных случаев вокруг этой идеи:
- Эндпоинт жёстко лимитирован, а хук запускается после каждого хода. Ответы кэшируются на 10 минут, ошибка ставит маркер на ещё 10 — негативный кэш.
stop_hook_activeпроверяется первым. Claude Code ставит его при повторном запуске хука. Без этой проверки — бесконечный цикл.- Флаг по сессии — каждый уровень срабатывает один раз, не после каждого хода.
- Каждый путь ошибки выходит с 0 и молча. Stop-хук который ошибается или болтает без повода — хуже чем никакого хука.
Ничего не происходит на 80%. Хук срабатывает только на Stop. Проверь: sh tests/run.sh.
Если проходит — плагин не загружен, проверь /plugin.
usage endpoint unavailable. Оффлайн, рейт-лимит (подожди 10 минут — негативный кэш
работает), или токен истёк. Перелогинься в Claude Code.
no OAuth token found. Не залогинен, или credentials лежат не там. Экспортируй
CLAUDE_CODE_OAUTH_TOKEN.
continuum resume не сработал. Проверь ~/.claude/continuum-resume.log — ищи маркеры
### resumed in DIR / ### end (exit N). Лог общий для всех проектов, grep по директории.
На macOS — launchctl list | grep continuum. На Linux —
systemctl --user list-timers | grep continuum. Десктопное уведомление тоже срабатывает
по завершению; если ни osascript ни notify-send не доступны — только лог.
Предупреждение есть, Claude игнорирует. Reason просит Claude запустить скилл; модель
может решить иначе. Понизь CONTINUUM_THRESHOLD.
sh tests/run.sh # 48 тестов, mock-провайдер, без сети
pwsh tests/run.ps1 # тот же набор для PowerShell
CI запускает оба на Linux, macOS и Windows. Что реально помогло бы:
- Провайдер для другого бюджета: OpenAI spend, Gemini quota. См. docs/writing-a-provider.md.
- Подтверждение, работает ли блокирующий
Stop-хук в Codex CLI. docs/harnesses.md честно говорит что не знаем.
Без зависимостей. Каждый путь ошибки — молча.
/plugin uninstall continuum
rm -f /usr/local/bin/continuum
rm -f ~/.claude/.continuum-cache-* ~/.claude/.continuum-warned-* ~/.claude/.continuum-warned7d-* ~/.claude/.continuum-history.log
Или: continuum cleanup удалит только устаревшие файлы (>24ч).
MIT