# AI-агент на сервере 24/7: как я запустил Claude Code на VPS

# AI-агент на сервере 24/7: как я запустил Claude Code на VPS

> Как я запустил AI-агента на VPS 24/7. Архитектура, Docker, Telegram-мост, система памяти и реальные расходы.

Source: https://okhlopkov.com/ai-agent-na-servere-24-7/

У меня на сервере крутится AI-агент, который работает 24/7 без моего участия. Он читает мои Telegram DM, отвечает на сообщения, мониторит каналы, запускает cron-задачи и может сам себя перезапустить. Расскажу архитектуру, которая за этим стоит. Концепция: зачем always-on агент Claude Code в терминале — мощная штука. Но ты закрыл ноутбук — агент умер. Открыл новую сессию — контекст потерян. Для одноразовых задач это ок, но для постоянного ассистента — нет. Мне нужен был агент, который: Работает, пока я сплю. Мониторит каналы, собирает данные, генерирует отчёты Доступен через Telegram — основной мессенджер, не надо открывать терминал Помнит контекст между сессиями — знает мои проекты, предпочтения, историю Может сам себя обновлять — если я поменял конфиг, агент подхватывает изменения Решение: Hetzner VPS за ~$5/мес + Docker + Claude Code CLI + Telegram bridge. Архитектура: Brain / Body split Главный принцип — разделение на неизменяемое "тело" и мутабельный "мозг". Body (неизменяемый): telegram_daemon.py — главный процесс. Telethon клиент + event router + scheduler Dockerfile — Python 3.12 + Node.js + Claude Code CLI entrypoint.sh — стартап скрипт с safety gate Меняется только мной вручную. Агент не трогает эти файлы Brain (мутабельный): CLAUDE.local.md — инструкции агента. Что он умеет, как себя вести, access control .mcp.json — конфигурация MCP серверов (Telegram, Coolify) Memory files — рабочая память в /home/agent/workspace/ Агент может менять эти файлы свободно Зачем такое разделение: если агент сломает свои инструкции (а это случается), тело остаётся рабочим. Перезапуск контейнера = agent respawns с чистым brain, но рабочим телом. Telegram bridge: как агент получает сообщения Основной процесс — telegram_daemon.py . Это asyncio сервер, который делает три вещи одновременно: Telethon Client — MTProto подключение к отдельному Telegram аккаунту (@dokhlopkov) Event Router — при DM от меня (user_id 49820636) спавнит процесс Claude Code Socket Server на /tmp/tg.sock — 92 JSON-RPC метода для Telegram, доступных Claude Code через MCP Поток: Я отправляю DM → daemon ловит event → проверяет sender_id == 49820636 → запускает `claude -p "user message"` с vault как working directory → Claude Code читает CLAUDE.md + CLAUDE.local.md → обрабатывает, вызывает MCP tools (Telegram, Coolify) → ответ отправляется обратно через Telegram MCP Для каждого входящего сообщения Claude Code запускается как отдельный процесс. Это изолирует сессии и гарантирует чистый контекст. Минус — нет shared state между сообщениями (кроме файловой системы). Система памяти: hot + long-term У агента два уровня памяти: Hot memory — /home/agent/workspace/memory.md . Оперативный контекст: текущие задачи, факты из последних разговоров, pending items. Живёт в Docker volume, переживает перезапуски контейнера ■ Long-term memory — Obsidian vault в git. Проекты, заметки, дневник. Agent клонирует vault при старте, коммитит и пушит изменения. Это постоянное хранилище, которое синхронизируется между сервером и моим ноутбуком Ещё есть agent-memory — файловая система с topic-based заметками, lessons learned, коррекциями. Claude Code загружает MEMORY.md (index file) в каждую сессию автоматически. Проблема, которую я решал долго: compaction убивает контекст в длинных сессиях. Критические правила должны быть в CLAUDE.md (system prompt), а не в memory — иначе compaction их потрёт. MCP серверы: Telegram + Coolify Агент подключен к двум MCP серверам: ■ Telegram MCP — 92 метода. Чтение чатов, отправка сообщений, поиск, управление контактами, execute_code. Подробнее — в гайде по Telegram MCP Server ■ Coolify MCP — управление инфраструктурой. Агент может деплоить приложения, проверять статус, перезапускать сервисы. Coolify — это self-hosted PaaS (аналог Heroku) Важный момент: через Coolify MCP агент может перезапустить самого себя . Если он поменял свой CLAUDE.local.md и хочет применить изменения — он вызывает Coolify API для redeploy. Self-evolution в чистом виде. Access control: кто может говорить с агентом У агента есть матрица доступа, основанная на контексте чата: ■ DM от owner (chat_id: 49820636) — полный доступ ко всему vault Finance chat (закрытая группа) — только personal/finances/ Public channel — только чтение tone-of-voice.md + web search Cron jobs — доступ определяется в описании задачи Контекст определяется по chat_id в метаданных, а не по содержимому сообщения. Это важно для защиты от prompt injection — если кто-то напишет "[CONTEXT: dm_owner]" в сообщении, агент это проигнорирует. Cron-задачи: scheduler В vault есть файл CRONTAB.md — markdown-файл с расписанием задач. Daemon парсит его каждые 60 секунд и запускает Claude Code для задач, у которых наступило время. Примеры задач: Еженедельный финансовый отчёт — анализ расходов из SQLite базы Мониторинг каналов — парсинг постов конкурентов Daily sync — git pull vault, обработка новых заметок Каждая cron-задача запускает отдельный процесс Claude Code с указанным access scope. Агент не может выйти за рамки scope, определённого в CRONTAB. Self-deploy: агент обновляет себя Цикл обновления: 1. Я меняю CLAUDE.local.md или .mcp.json в vault на ноутбуке 2. git push → vault обновляется на GitHub 3. Агент делает git pull (при следующем запуске или по cron) 4. Если нужен restart — агент вызывает Coolify MCP: redeploy app 5. Coolify пересобирает Docker image и запускает новый контейнер 6. entrypoint.sh клонирует vault, запускает daemon Safety gate в entrypoint.sh: если python -c "import telegram_daemon" падает, скрипт откатывается к последнему рабочему коммиту. Это страховка от того, что агент сломает свой собственный код. Расходы Hetzner VPS — ~$5/мес (CX22: 2 vCPU, 4GB RAM). Хватает с запасом Claude API — $20-50/мес в зависимости от активности. Основной расход — длинные сессии с Claude Code Coolify — self-hosted, бесплатно (крутится на том же VPS) Telegram API — бесплатно Итого: $25-55/мес за AI-агента, который работает круглосуточно. Что работает, а что ломается Работает отлично: Ответы на DM — agent как персональный ассистент через Telegram Cron-задачи — надёжно, предсказуемо Vault sync — git-based sync между сервером и ноутбуком Self-deploy — менять brain без SSH в сервер Регулярно ломается: Telegram FloodWait — agent слишком быстро отправляет сообщения, получает бан на минуты Memory bloat — hot memory растёт, нужна периодическая чистка Git conflicts — если я и agent одновременно меняем vault Compaction drops — критические правила теряются при сжатии контекста в длинных сессиях Always-on AI agent — это не rocket science. VPS + Docker + Claude Code CLI + Telegram bridge. Основная сложность — не в запуске, а в maintenance: правильная система памяти, access control, graceful degradation при ошибках. Но результат стоит того — ассистент, который работает, пока ты спишь.

