PocketCoder-A1: Как я заставил свой Claude работать в три смены. ai agent.. ai agent. autonomous coding.. ai agent. autonomous coding. Claude.. ai agent. autonomous coding. Claude. claude code.. ai agent. autonomous coding. Claude. claude code. coding agent.. ai agent. autonomous coding. Claude. claude code. coding agent. DevOps.. ai agent. autonomous coding. Claude. claude code. coding agent. DevOps. llm.. ai agent. autonomous coding. Claude. claude code. coding agent. DevOps. llm. Open source.. ai agent. autonomous coding. Claude. claude code. coding agent. DevOps. llm. Open source. PocketCoder.. ai agent. autonomous coding. Claude. claude code. coding agent. DevOps. llm. Open source. PocketCoder. python.. ai agent. autonomous coding. Claude. claude code. coding agent. DevOps. llm. Open source. PocketCoder. python. автоматизация.. ai agent. autonomous coding. Claude. claude code. coding agent. DevOps. llm. Open source. PocketCoder. python. автоматизация. искусственный интеллект.. ai agent. autonomous coding. Claude. claude code. coding agent. DevOps. llm. Open source. PocketCoder. python. автоматизация. искусственный интеллект. Управление продуктом.. ai agent. autonomous coding. Claude. claude code. coding agent. DevOps. llm. Open source. PocketCoder. python. автоматизация. искусственный интеллект. Управление продуктом. Управление проектами.

ИИ не заменяет людей, люди просто больше работают. Так давайте хотя бы ночью пусть работает ИИ.


Так вышло, что я плачу 100 евро в месяц на Claude Code. Солидная сумма, которая растворяется практически момоментально, когда твой аккаунт превращается в полигон из 10+ проектов, где 7-8 мои, а 2-3 моей жены.

Шеринг подписки вообще занятие затратное, но мне не жалко.

Так вышло, что я попал в некую зависимость от написания проектов с Claude – мне постоянно хочется что-то в нем создать. Не скажу, что у меня низкая нагрузка на работе – совсем нет. Просто легкость реализации проектов на Opus 4.6 и высокая подписка на продукт , провоцирует мой мозг нагружать ИИшку 24/7. Доходит до абсурда – перед сном стараюсь делать заготовки задач, которые планирую выполнить завтра, максимально при этом заставляя Claude потратиться в токенах на анализ и изучение проекта. То, чего днем стараюсь избегать, потому что могу попасть на ограничение по использованию.

Именно во время одной из моих “планерок” я подумал – блин, классно было бы Claude настроить на то, чтобы я ему выписывал задачи, а он бы за ночь мне это выполнил, а не просто спланировал, как я делаю это сейчас. Ну и в идеале, чтобы он еще и сам проверил свой результат.

Так появился PocketCoder-A1: автономный coding agent с верификацией, веб-дашбордом и поддержкой нескольких провайдеров. 7086 строк Python, 15 модулей, ни одного фреймворка.

PocketCoder-A1: Как я заставил свой Claude работать в три смены - 1

1. Зачем это вообще нужно

На самом деле, мысли мои пошли еще дальше, хотя первые макеты я сел делать в тот же вечер, когда петух клюнул меня за известное место.

Задумка такая. Я работаю над одним проектом, а в голове крутятся мысли по другому: “надо добавить провайдер DeepSeek”, “переписать конфиг”, “написать тесты”.

И задачи то выписал. Но руки дойдут через неделю. А подписка за one hundred bucks тикает.

Я попробовал OpenClaw. Не сработало, даже с хорошей моделью. С ним , кстати, у меня вообще ничего не вышло. Может криво подключил, может что-то ещё, но результат нулевой. Я бы вообще написал отдельную статью про этих ребят, потому что ни один проект, даже простой парсер сайта, у меня на нем не получился.

PocketCoder-A1: Как я заставил свой Claude работать в три смены - 2

Тогда я решил написать своё. Идея простая: написал задачи, ушёл гулять или спать, вернулся с результатом. Агент работает сессиями, сохраняет состояние, берёт следующую задачу сам. После каждой сессии запускается реальная проверка: pytest, py_compile, проверка файлов на диске. Веб-дашборд показывает что происходит в реальном времени. Основной провайдер Claude Max, плюс Claude API и Ollama как экспериментальные.

Сделан прежде всего для себя. Я реально этим уже пользуюсь, но выложил в open source, вдруг кому-то тоже пригодится.


2. Что такое PocketCoder-A1

Расшифрую странную букву A в названии. Это Authonomous, ну то есть автономный. А 1, как первая версия. Вдруг зайдет , а надо будет писать обновления.

CLI + веб-дашборд. Установка:

pip install pocketcoder-a1

Инициализация на любом проекте:

pca init /path/to/your-project
pca ui

Открывается дашборд на http://localhost:7331. Добавляешь задачи, нажимаешь Start Agent, агент работает автономно.

Отличие от PocketCoder v1 (моего предыдущего проекта): v1 это CLI-агент для локальных моделей, интерактивный. A1 это автономный менеджер задач + исполнитель. Нажал кнопку, ушёл. Совсем другой продукт. Мб в будущем подумаю, как его поженить с ним.

И да, скоро обнова выйдет на обычный Pocketcoder!


3. Архитектура

Весь проект это 15 Python-модулей. Ни одного фреймворка. HTTP-сервер на стандартном http.server, JSON это стандартный json, файлы через pathlib. Единственные внешние зависимости это playwright для E2E тестов и опционально anthropic / ollama для альтернативных провайдеров.

3.1 Общая схема

Вот как работает система целиком, от pca start до завершения:

Полный цикл агента

Полный цикл агента

Агент запускается, захватывает baseline (снимок валидации ДО работы), собирает промпт, работает через Claude CLI, парсит результат в реальном времени, верифицирует. Если всё ок, принимает результат. Если нет, инжектит ошибки в следующую сессию и пытается снова. Разберём каждый кусок.

3.2 Claude CLI как subprocess

Ядро системы это запуск Claude CLI как subprocess. Звучит просто, но в этой части скрывались самые коварные проблемы.

Claude CLI subprocess: флаги, парсинг, callback

Claude CLI subprocess: флаги, парсинг, callback

Финальный вариант запуска:

import os, subprocess

env = os.environ.copy()
env.pop("CLAUDECODE", None)  # без этого nested sessions падают

proc = subprocess.Popen(
    ["claude", "-p", prompt,
     "--dangerously-skip-permissions",
     "--no-session-persistence",
     "--max-turns", "25",
     "--verbose",
     "--output-format", "stream-json"],
    cwd=str(project_dir),
    env=env,
    stdout=subprocess.PIPE,
    stderr=subprocess.STDOUT,
    text=True,
    bufsize=1,
)

Почему именно так? Claude Code ставит переменную CLAUDECODE=1 в окружении. Subprocess наследует это, внутренний claude видит переменную и падает: “cannot launch inside another session”.

Флаг

Зачем

-p prompt

Неинтерактивный режим

--dangerously-skip-permissions

Автоподтверждение всех tool_use

--no-session-persistence

Не засорять историю сессий

--max-turns 25

Защита от бесконечной работы

--verbose

Обязательно с stream-json + -p

--output-format stream-json

NDJSON поток вместо буферизации

С stream-json Claude выдаёт NDJSON, по одному JSON-объекту на строку:

{"type":"assistant","message":{"content":[{"type":"tool_use","name":"Read","input":{"file_path":"/src/app.py"}}]}}
{"type":"rate_limit_event","usage":{"input_tokens":12400,"output_tokens":3200}}
{"type":"result","result":"Task completed successfully."}

Парсер классифицирует каждое событие и отправляет в дашборд.tool_use с именем Read становится типом “read” (синий), Bash это “bash” (фиолетовый), thinking это жёлтый. Всего 8 типов иконок.

3.3 Верификация: “Не верим на слово”

Самая важная часть системы. Пока тестировал, агент раньше времени писал completed. Ну то есть сделал 1-2 запроса и хватит с меня – ИИ считает, что доделал свою работу. Тут на самом деле есть объяснение. Когда делаешь запрос по API, то у тебя идет 1 запрос=1 ответ. А когда запрос поступает из WEBа, то система под капотом автоматом делает минимальный reasoning, а где-то может свои кастомные skills подтянуть(инсутркции как работать с теми или иными модулями эффективнее. Популярно очень на Excel/Word, но на самом деле не только).

Трёхуровневая верификация

Трёхуровневая верификация

Когда агент говорит “COMPLETED”, мы не верим. Запускается трёхуровневая проверка.

Уровень 1, BLOCKING. Если хоть одна проверка не прошла, сессия не принимается: py_compile на все .py файлы, pytest, проверка что файлы реально на диске, проверка success_criteria из задачи.

Уровень 2, WARNING. Результат только логируется: ruffbuildgit diff.

Уровень 3, ANTI-LOOP. Защита от бесконечного цикла. Мы тут сжигать токены хотим, но все таки эффективно :)
Перед первой сессией делаем baseline, снимок всех существующих проблем. Старые баги не считаются. Если агент не может починить проблему за 5 попыток, задача помечается BLOCKED, агент переходит к следующей. При retry ошибки инжектятся прямо в промпт: “VERIFICATION FAILED, attempt 2/5, BLOCKING: tests 2 failed”.

3.4 Провайдеры

Три провайдера, общий pipeline

Три провайдера, общий pipeline

Провайдер

Как работает

Требует

claude-max

CLI subprocess, Stream-JSON, все нативные инструменты

Claude Max подписка

claude-api

Anthropic SDK, agentic loop, 6 инструментов

API ключ

ollama

Текстовый стриминг, без 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.

Кстати, недавно написал статью с той же компанией про автоматизацию работы с рекламациями с помощью ИИ: https://habr.com/ru/articles/1011494/

Шаг 1: Пустая страница, 5 задач за 30 секунд

Открываю дашборд. Страница Tasks пустая:

Пустая страница задач

Пустая страница задач

Вместо того чтобы вручную формулировать задачи, использую AI Transform. Просто пишу сырой текст: “хочу клонировать epotos-templates, посмотреть как настроены провайдеры, добавить блок переключения с llama на deepseek…”

Ввод текста в AI Transform

Ввод текста в AI Transform

Нажимаю Transform:

Обработка

Обработка

Через несколько секунд 5 структурированных задач с описаниями и критериями успеха:

Предпросмотр 5 задач

Предпросмотр 5 задач

Нажимаю “Add Selected”, задачи созданы с приоритетами #1-#5:

5 задач созданы

5 задач созданы

Шаг 2: Запуск

Dashboard. 0/5 задач, IDLE. Нажимаю Start Agent:

Dashboard перед стартом

Dashboard перед стартом

Детали первой задачи до начала работы:

Детали задачи

Детали задачи

Настройки, выбираю claude-api, ввожу API ключ:

Настройки провайдера

Настройки провайдера

Шаг 3: Агент работает

В логе появляются строки в реальном времени. THINK, BASH, READ:

Агент работает, live log

Агент работает, live log

Task Detail: 11 tool calls, лог заполняется:

Детали задачи, агент работает

Детали задачи, агент работает

Шаг 4: Первый результат

1/5 задач выполнена. Зелёная галочка. Агент автоматически перешёл к следующей:

1 задача выполнена

1 задача выполнена

Агент анализирует кодовую базу, читает ollama.ts, ai-client.ts, грепает localhost:11434:

Анализ кодовой базы

Анализ кодовой базы

Шаг 5: Прогресс

2/5 задач выполнены, task_016 in progress:

2 выполнены, 1 в работе

2 выполнены, 1 в работе
Чистый вид

Чистый вид

Агент проектирует архитектуру провайдеров:

Проектирование архитектуры

Проектирование архитектуры

Шаг 6: Сообщение агенту

Пока агент работает, печатаю в форму “Message to Agent”, хочу чтобы он ещё и документацию написал:

Набираю сообщение

Набираю сообщение

Сообщение в очереди, агент прочитает на следующей сессии:

Сообщение отправлено

Сообщение отправлено

Шаг 7: Всё готово

5/5 задач! Агент ещё работает, обрабатывает моё сообщение про документацию:

5/5 задач, агент ещё работает

5/5 задач, агент ещё работает

Верификация пройдена, агент пишет документацию:

Верификация + документация

Верификация + документация

Обновляет CLAUDE.md, создаёт MEMORY.md:

Пишет документацию

Пишет документацию

Финал

COMPLETED. 5/5 задач, 12 сессий, 23 файла изменено:

COMPLETED

COMPLETED

Светлая тема

Дашборд работает в обеих темах:

Задачи, светлая

Задачи, светлая
Dashboard, светлая

Dashboard, светлая
Лог, светлая

Лог, светлая
Детали задачи, светлая

Детали задачи, светлая

5. Dashboard

3491 строка чистого Python. Ни React, ни Vue, ни Flask. Стандартныйhttp.server + string.Template. Весь CSS, JavaScript и HTML в одном файле.

8 страниц

Страница

URL

Что делает

Dashboard

/

6 карточек метрик, Start/Stop, live log, Quick Add

Tasks

/tasks

Список + drag-and-drop + bulk add + AI Transform

Task Detail

/task/{id}

Полный вид + логи + метрики + Start/Stop/Delete

Sessions

/sessions

История сессий с метриками

Activity Log

/log

Хронология действий

Settings

/settings

Провайдер, API ключ, параметры

Commits

/commits

Git история с иконками типов

Transform

/transform

Сырой текст, AI, задачи

6 карточек метрик

Карточка

Данные

Tasks

2/5 done + прогресс-бар

Session

#3 + WORKING/IDLE/COMPLETED

Tokens

12.4K in / 3.2K out + прогресс контекста

Cost

$0.08 за сессию

Duration

48s (live timer, тикает каждую секунду)

Files

3 modified

Лог стилизован под macOS Terminal. Тёмный фон, моноширинный шрифт, 8 типов иконок (read/edit/write/bash/thinking/text/metric/verify). Обновляется через AJAX каждые 2 секунды.

Полный REST API на 24 endpoints. Можно мониторить из скриптов:

curl http://localhost:7331/api/status | python -m json.tool
curl "http://localhost:7331/api/log?since=0" | python -m json.tool

6. Выводы и что дальше

PocketCoder-A1 работает. 5 задач на реальном проекте за 13 минут автономно. С верификацией, с live-логом, с возможностью отправить сообщение агенту прямо во время работы.

Автономные сессии работают: нажал Start, ушёл, вернулся к результату, а верификация реально ловит врущего агента за руку на трёх уровнях: blocking, warning, anti-loop. Dashboard показывает всё в реальном времени. Queue Message позволяет писать агенту пока он работает.

В разработке: auto-checkpoint при 70% контекста, git integration (ветки + atomic commits), PyPI + uv release.


PocketCoder-A1 это про open source.

GitHub: github.com/Chashchin-Dmitry/pocketcoder-a1


Буду рад за лайк и подписку на канал :) https://t.me/notes_from_cto

Наш сайт: https://bvmax.ru/ai

Автор: Dmitrii-Chashchin

Источник