ИИ не заменяет людей, люди просто больше работают. Так давайте хотя бы ночью пусть работает ИИ.
Я плачу 100 евро в месяц за подписку на Claude Code. Солидная сумма, которая моментально растворяется, когда аккаунт превращается в полигон для 10+ проектов — 7–8 моих, 2–3 — жены.
Шеринг подписки — занятие затратное, но мне не жалко. Я попал в зависимость от создания проектов с Claude. Мне постоянно хочется что-то запустить, хотя на работе нагрузка далеко не низкая.
Лёгкость реализации задач на Opus 4.6 и высокая стоимость подписки провоцируют меня грузить ИИ 24/7. Доходит до абсурда: перед сном я готовлю задачи на завтра, чтобы Claude потратил максимум токенов на анализ и изучение проекта — то, чего днём я избегаю из-за ограничений по использованию.
Во время одной из таких «планерок» я подумал: было бы здорово настроить Claude так, чтобы он не просто планировал задачи, а выполнял их за ночь — и сам проверял результат.
Так родился PocketCoder-A1 — автономный coding agent с системой верификации, веб-дашбордом и поддержкой нескольких провайдеров. 7086 строк Python, 15 модулей, без единого фреймворка.
1. Зачем это нужно
Идея появилась не сразу, но первые наброски я начал в тот же вечер.
Часто я занят одним проектом, а в голове крутятся мысли о другом: «надо добавить провайдер DeepSeek», «переписать конфиг», «написать тесты». Задачи я записываю, но руки до них доходят только через неделю. А подписка тем временем «тикает».
Я пробовал OpenClaw — не сработало. Даже с хорошей моделью. Ни один проект, включая простой парсер сайта, у меня не заработал. Возможно, я что-то настроил неправильно, но результат — нулевой.
Тогда я решил написать своё решение. Идея простая: выписать задачи, уйти спать или гулять, вернуться — и получить готовый результат.
Агент работает сессиями, сохраняет состояние, берёт следующую задачу автоматически. После каждой сессии запускается реальная проверка: pytest, py_compile, проверка файлов на диске. Веб-дашборд показывает всё в реальном времени.
Основной провайдер — Claude Max. Также поддерживаются Claude API и Ollama — пока в экспериментальном режиме.
Создано для себя. Я уже этим пользуюсь. Но выложил в open source — вдруг кому-то пригодится.
2. Что такое PocketCoder-A1
Буква A — от Autonomous, то есть автономный. А 1 — как первая версия. Вдруг проект зайдёт, и понадобятся обновления.
Это CLI + веб-дашборд. Установка простая. Инициализируешь на любом проекте — и дашборд открывается на http://localhost:7331.
Добавляешь задачи, нажимаешь Start Agent — и агент работает автономно.
Отличие от PocketCoder v1: предыдущая версия — это CLI-агент для локальных моделей, работающий в интерактивном режиме. A1 — автономный менеджер задач и исполнитель. Нажал кнопку — и ушёл. Это совсем другой продукт. Возможно, в будущем я объединю их.
Кстати, скоро выйдет обновление и для обычного PocketCoder.
3. Архитектура
Проект состоит из 15 Python-модулей. Ни одного фреймворка. HTTP-сервер — на стандартном http.server, JSON — через встроенный модуль, файлы — через pathlib.
Единственные внешние зависимости: playwright для E2E-тестов и, опционально, anthropic/ollama для альтернативных провайдеров.
3.1 Общая схема
От pca start до завершения:
- Агент запускается, делает baseline (снимок состояния до начала работы).
- Собирает промпт, запускает Claude CLI как subprocess.
- Парсит результат в реальном времени.
- Запускает верификацию.
- Если всё ок — принимает результат. Если нет — инжектит ошибки в следующую сессию и пробует снова.
3.2 Claude CLI как subprocess
Ядро системы — запуск Claude CLI как subprocess. Звучит просто, но скрывало коварные проблемы.
Финальный вариант запуска включает ключи:
--dangerously-skip-permissions— обход проверок прав.--no-session-persistence— не засорять историю сессий.--max-turns 25— защита от бесконечной работы.--output-format stream-json— NDJSON-поток вместо буферизации.
Переменная CLAUDECODE=1 в окружении ломает вложенный запуск, поэтому она удаляется.
С stream-json Claude выдаёт по одному JSON-объекту на строку. Парсер классифицирует события: tool_use, bash, thinking — и отправляет в дашборд. Всего 8 типов иконок.
3.3 Верификация: «Не верим на слово»
Самая важная часть. Раньше агент писал «completed» слишком рано — после 1–2 запросов. Объяснение простое: в веб-интерфейсе Claude может использовать встроенные навыки и автоматически завершать задачу.
Когда агент говорит «COMPLETED» — мы не верим. Запускается трёхуровневая проверка.
Уровень 1, BLOCKING: если провалена хоть одна проверка — сессия не принимается. Включает:
py_compileдля всех .py-файлов,pytest,- проверку, что файлы реально созданы на диске,
- проверку
success_criteriaиз задачи.
Уровень 2, WARNING: результат только логируется — ruff, build, git diff.
Уровень 3, ANTI-LOOP: защита от бесконечного цикла. Перед первой сессией делается baseline — снимок текущих проблем. Старые баги не учитываются.
Если агент не может починить проблему за 5 попыток — задача помечается как BLOCKED, агент переходит к следующей. При повторной попытке в промпт добавляется сообщение: “VERIFICATION FAILED, attempt 2/5, BLOCKING: tests 2 failed”.
3.4 Провайдеры
- claude-max: CLI subprocess, stream-json, все нативные инструменты. Требует подписку на Claude Max.
- claude-api: через Anthropic SDK, 6 инструментов, текстовый стриминг, без tool calling.
- Ollama: локальный запуск, экспериментальный.
Claude Max — основной провайдер. Остальные пока в сыром состоянии. Если проект заинтересовал — помогите привести их в порядок. Я не уверен, что справлюсь сам.
3.5 Real-time поток данных
Claude CLI выдаёт NDJSON. Парсер в loop.py кладёт события в AGENT_LOG_BUFFER. AJAX-запросы к /api/log забирают лог каждые 2 секунды. Браузер рисует в реальном времени.
Метрики обновляются параллельно: rate_limit_event влияет на sessionmetrics, /api/status отдаёт данные каждые 3 секунды в 6 карточек. Таймер в интерфейсе тикает каждую секунду через JavaScript.
3.6 Жизненный цикл задачи
Три способа создать задачу:
- Через CLI:
pca task add. - Через форму Quick Add на дашборде.
- Через AI Transform: вводишь сырой текст, ИИ разбивает его на структурированные задачи с приоритетами и критериями успеха.
Приоритеты меняются drag-and-drop. Состояния задач: PENDING, IN PROGRESS, DONE, BLOCKED.
4. Кейс: epotos-templates
Реальный пример. epotos-templates — проект для компании: обработка документов и генерация шаблонов. Нужно было добавить переключение провайдеров — с Ollama на DeepSeek. Я записал мысли в свободной форме и запустил A1.
Шаг 1: Пустая страница, 5 задач за 30 секунд
Открываю дашборд. Страница Tasks пустая. Вместо ручного ввода использую AI Transform.
Пишу: «хочу клонировать epotos-templates, посмотреть как настроены провайдеры, добавить блок переключения с llama на deepseek…»
Нажимаю Transform. Через несколько секунд — 5 структурированных задач с описаниями и критериями успеха. Добавляю их с приоритетами #1–#5.
Шаг 2: Запуск
На дашборде: 0/5 задач, статус — IDLE. Нажимаю Start Agent.
Выбираю провайдер claude-api, ввожу API-ключ.
Шаг 3: Агент работает
В логе появляются события в реальном времени: THINK, BASH, READ.
В деталях задачи — 11 вызовов инструментов, лог заполняется.
Шаг 4: Первый результат
1/5 задач выполнено. Зелёная галочка. Агент автоматически переходит к следующей.
Он анализирует код, читает ollama.ts, ai-client.ts, ищет localhost:11434.
Шаг 5: Прогресс
2/5 задач выполнены. Задача task_016 в работе. Агент проектирует архитектуру провайдеров.
Шаг 6: Сообщение агенту
Пока агент работает, я пишу в форму Message to Agent: «напиши документацию».
Сообщение попадает в очередь. Агент прочитает его в следующей сессии.
Шаг 7: Всё готово
5/5 задач выполнено! Агент ещё работает — обрабатывает моё сообщение.
Верификация пройдена. Агент пишет документацию, обновляет CLAUDE.md, создаёт MEMORY.md.
Статус: COMPLETED. 5 задач, 12 сессий, 23 изменённых файла.
Светлая тема
Дашборд поддерживает тёмную и светлую темы.
5. Dashboard
3491 строка чистого Python. Без React, Vue или Flask. Используется http.server и string.Template. Весь CSS, JavaScript и HTML — в одном файле.
Возможности:
- 6 карточек метрик, кнопки Start/Stop, live-лог, Quick Add.
- Список задач с drag-and-drop, массовым добавлением и AI Transform.
- Детали задачи: полный лог, метрики, управление.
- История сессий с метриками.
- Activity Log — хронология действий.
- Настройки провайдера, API-ключ, параметры.
- Git-история с иконками типов действий.
- Страница
/transform— из сырого текста в задачи.
6 карточек метрик
- 2/5 done + прогресс-бар.
- Приоритет #3 + статус (WORKING/IDLE/COMPLETED).
- 12.4K in / 3.2K out + прогресс контекста.
- $0.08 за сессию.
- 48s (live-таймер, обновляется каждую секунду).
- 3 modified.
Лог стилизован под macOS Terminal: тёмный фон, моноширинный шрифт, 8 типов иконок (read/edit/write/bash/thinking/text/metric/verify). Обновляется через AJAX каждые 2 секунды.
Полный REST API — 24 эндпоинта. Можно мониторить из скриптов.
6. Выводы и что дальше
PocketCoder-A1 работает. 5 задач на реальном проекте — за 13 минут, полностью автономно. С верификацией, live-логом, возможностью отправить сообщение агенту во время работы.
Автономные сессии — реальность: нажал Start, ушёл, вернулся — и получил результат. Верификация ловит «врущего» агента на трёх уровнях: blocking, warning, anti-loop. Дашборд показывает всё в реальном времени. Через Queue Message можно писать агенту, пока он работает.
В планах: auto-checkpoint при 70% заполненности контекста, интеграция с Git (ветки + atomic commits), релиз через PyPI и uv.
PocketCoder-A1 — это open source.