Найти в Дзене

Код, который дописывает себя. Как мы подключили Claude Code к Telegram и что из этого вышло

Карпатый написал пост про Claws — новую категорию персональных AI-агентов. Разобрал OpenClaw, его проблемы с безопасностью, выделил NanoClaw как минималистичную альтернативу. Там была очень важная мысль: агент не просто работает — он расширяет сам себя через текстовые инструкции, без правки кода. А что если сделать похожее самим, с нуля, не ставя ничего чужого? Пошли разбираться. Если сказать точнее, то код дописывает Claude Code по команде из Telegram. Но ощущается это именно как самодописывание агента — и это важно. Карпатый формулирует суть подхода: «Код — ничто. Смысл — всё». В NanoClaw есть базовая функциональность — контейнеры, WhatsApp, память, планировщик, около 4000 строк. Но расширяется проект не через код. Хотите поддержку Telegram? Запускаете команду /add-telegram — агент читает инструкцию из обычного текстового файла и дописывает нужное в вашу копию. Никаких конфигов, никаких плагинов — просто описание что нужно сделать. Здесь важно разделить два уровня, которые в NanoClaw
Оглавление

Карпатый написал пост про Claws — новую категорию персональных AI-агентов. Разобрал OpenClaw, его проблемы с безопасностью, выделил NanoClaw как минималистичную альтернативу. Там была очень важная мысль: агент не просто работает — он расширяет сам себя через текстовые инструкции, без правки кода. А что если сделать похожее самим, с нуля, не ставя ничего чужого? Пошли разбираться.

Если сказать точнее, то код дописывает Claude Code по команде из Telegram. Но ощущается это именно как самодописывание агента — и это важно.

Идея NanoClaw: инструкция вместо кода

Карпатый формулирует суть подхода: «Код — ничто. Смысл — всё».

В NanoClaw есть базовая функциональность — контейнеры, WhatsApp, память, планировщик, около 4000 строк. Но расширяется проект не через код. Хотите поддержку Telegram? Запускаете команду /add-telegram — агент читает инструкцию из обычного текстового файла и дописывает нужное в вашу копию. Никаких конфигов, никаких плагинов — просто описание что нужно сделать.

Здесь важно разделить два уровня, которые в NanoClaw работают вместе:

CLAUDE.md — это память агента и правила поведения. Что он должен помнить, как себя вести, что уточнять перед опасными действиями.

.claude/skills/ — это модульные расширения. Каждый файл — инструкция как добавить новую функцию. Запустил /add-telegram — агент прочитал инструкцию и дописал себя.

Первое влияет на поведение. Второе добавляет возможности.

Репозиторий NanoClaw
Разбор концепции от Simon Willison
Интервью с автором NanoClaw о философии проекта

Почему не поставили NanoClaw

Не потому что плохой проект. Просто ставить незнакомый код на сервер с доступом к файлам и мессенджерам — это осознанное решение, которое требует времени и понимания каждой строчки. У нас его не было.

Поэтому взяли идею и собрали своё: минимальное, понятное от начала до конца. Это не замена NanoClaw — другой подход с другими компромиссами.

Что такое Claude Code — коротко

Claude Code — это Claude, у которого есть руки. Читает файлы на сервере, выполняет команды в терминале, ищет в интернете, редактирует код, делает коммиты в git, подключается по SSH к другим машинам.

Ограничение одно: запускается через терминал. Значит, нужен компьютер. Отправить задачу с телефона — нельзя. Это и захотели починить.

Что получилось

Пишешь задачу в Telegram с телефона — Claude Code выполняет на сервере — присылает результат.

Telegram-бот принимает сообщение и передаёт его в Claude Code. Тот выполняет — результат возвращается в чат. Весь Python-код бота около 80 строк.

Как собирали — с нюансами

Сервер. VPS на Ubuntu 24.04, уже был. Claude Code установили через npm install -g @anthropic-ai/claude-code.

Авторизация — и здесь серая зона. Claude Code авторизуется через OAuth-токен аккаунта (подписка Max) — это не API-ключ из консоли Anthropic, а сессионный токен. Мы скопировали ~/.claude/.credentials.json с локальной машины на сервер. Работает, но Anthropic эту схему явно не описывает как поддерживаемую. Риск, который приняли осознанно для личного инструмента.

Бот. Python, aiogram 3, ~80 строк. Принимает сообщение, вызывает claude -p "текст" через subprocess, возвращает ответ.

Нюанс с root. Флаг --dangerously-skip-permissions не работает под root. Создали пользователя claudebot — Claude Code работает от его имени.

Память через CLAUDE.md. Создали файл в домашней директории пользователя claudebot. Claude Code читает его при каждом запуске — там прописано кто мы, какие проекты, что спрашивать перед опасными операциями. Это первый уровень «инструкции вместо кода»: через CLAUDE.md агент уже меняет поведение и учитывает правила.

Расписание. Cron-скрипт запускает Claude в 9:00 и отправляет утренний дайджест AI-новостей. Это заодно показало что Telegram — не единственный интерфейс: того же Claude можно дёргать и по расписанию.

Что умеет прямо сейчас

  • Отвечает на вопросы через Telegram
  • Выполняет bash-команды на сервере
  • Ищет свежую информацию в интернете
  • Читает и редактирует файлы — в том числе свой собственный код
  • Работает с git — коммиты, пуши, анализ изменений
  • Присылает утренний дайджест по расписанию
  • Помнит инструкции и контекст через CLAUDE.md

Из реальных запросов:

  • «Что жрёт память на сервере?» — запустит анализ, ответит
  • «Добавь в бота команду /status» — сам отредактирует код и предложит перезапуск (в зависимости от правил в CLAUDE.md)
  • «Найди свежие новости про AI» — поищет, пришлёт саммари
  • «Задеплой проект X» — скопирует, установит зависимости, запустит

Безопасность — и честно про ограничения

Важно понимать: здесь «сам» — это не автономность без ограничений. Агент действует по запросу, в рамках прав пользователя claudebot и правил из CLAUDE.md. Это не песочница уровня контейнеров — осознанный компромисс в пользу простоты и прозрачности.

Что сделали:

  • Бот отвечает только одному user ID
  • Claude работает от claudebot, не от root — это существенно снижает риски: доступ ограничен правами этого пользователя, а не всей системой. Но это не изоляция: при доступе к shell и сети риск остаётся
  • В CLAUDE.md прописаны правила поведения — это soft-guardrails, инструкции для модели, а не технические ACL. Критичные ограничения дублируем на уровне OS: права пользователя, sudoers, firewall
  • Явные запреты в правилах: rm -rf, изменение firewall, SSH-конфигов, отправка данных наружу

Понятный — не значит безопасный по умолчанию. Мы сознательно выбрали простоту вместо контейнерной изоляции и компенсируем это ограничениями на уровне системы и правилами в CLAUDE.md.

Что дальше — и при чём здесь идея Карпатого

CLAUDE.md уже работает как первый уровень «инструкции вместо кода». Следующий шаг — вынести расширения в .claude/skills/ и сделать модульные инструкции, которые агент подключает по команде. Тогда /add-что-то будет читать инструкцию и дописывать себя — ровно как в NanoClaw, только поверх нашей более простой базы.

Ещё в планах:

  • История диалогов — уже работает базовая версия, в планах расширить
  • Доступ к домашнему компу — через Tailscale или reverse SSH, одной фразой деплоить с локалки на сервер
  • Мониторинг — диск или память на пределе → агент сам пришлёт алерт

Итого

~80 строк Python, один systemd-сервис, файл с инструкциями — и полноценный ИИ-агент в Telegram, который умеет всё что умеет терминал, плюс думает.

Не замена NanoClaw — другой подход, проще и без контейнерной изоляции. Зато понятный от начала до конца, и он уже умеет дописывать себя по инструкциям.

Подробнее про Claws как явление на русском.