В прогоне курса агент получил задание собрать бота и через 5,2 минуты и 26 ходов отчитался: код готов, тесты написаны. Команда установки библиотек тут же упала с ошибкой. На просьбу «почини» агент ещё 3,3 минуты создавал файлы install_*.bat, install_*.ps1, INSTALL.md, manual_test.py и в конце посоветовал перейти на Python 3.12. Ошибку он так и не исправил. В этом уроке ты соберёшь того же бота и увидишь, где агента надо остановить.
Чему научишься в этом уроке:
• подготовить проект: папка, токен, ID владельца, виртуальное окружение;
• дать агенту задание так, чтобы он не закрепил старые версии;
• остановить агента, который «чинит» обходными файлами, и дать ему точную ошибку;
• запустить бота у себя и проверить его в Telegram.
Шаг 0. Папка проекта
Как в уроке 1.3: создай папку Документы\projects\bot-kodium и положи в неё scenariy.md из урока 2.2. Открой PowerShell именно в этой папке. Все команды ниже набирай в этом окне PowerShell, а не в чате Claude Code.
Шаг 1. Токен бота и ID владельца
Бот в Telegram создают у @BotFather (это служебный бот Telegram, который выдаёт другим ботам имя и токен). Как это сделать по шагам, показано в уроке трека 2 «Подключение Telegram». Токен вставь в файл .env в папке проекта руками, как в уроке 1.6: строка BOT_TOKEN=<твой токен>.
Второе значение: числовой ID владельца в Telegram, по нему бот присылает уведомления. Добавь строку ADMIN_ID= пустой; узнать ID попроси агента после первого запуска, например так: «выведи в терминал chat id того, кто нажал /start». И помни ограничение Telegram: бот может написать человеку, только если тот сам хоть раз нажал у него /start. Владелец должен сделать это до первой заявки.
Шаг 2. Виртуальное окружение
Виртуальное окружение похоже на отдельную коробку с библиотеками для одного проекта. Бот кладёт в неё свои версии и не мешает другим проектам на компьютере. Создай его в PowerShell, в папке bot-kodium, до задания агенту:
py -m venv .venv
Появится папка .venv. Теперь в том же окне запусти агента командой claude: он откроется в папке проекта и увидит scenariy.md. Папка .venv в git не нужна: попроси агента добавить её в .gitignore. Если агент предлагает ставить библиотеки «в систему», напомни ему про .venv.
Шаг 3. Задание агенту
Отдай агенту задание. Это задание прогона курса с двумя строками, которые добавлены после ошибки: про свежие версии и про .venv. Номер версии Python подставь свой: узнай его командой py --version из урока 1.2. SQLite в задании это база данных в одном файле, подробнее о ней в уроке 2.4.
«Собери Telegram-бота приёма заявок для онлайн-школы “Кодиум” по сценарию из scenariy.md: /start → согласие кнопками (Согласен, Не согласен, Прочитать согласие) → имя → телефон с проверкой формата → курс кнопками (Python, Веб-разработка, Нейросети, Пока не знаю). Заявку сохраняй в SQLite и отправляй уведомление владельцу, его ID возьми из .env; если ADMIN_ID пустой, бот не падает, а печатает в терминал chat id того, кто нажал /start. Библиотека aiogram 3. Токен бота и ID владельца только в .env. Используй свежие версии библиотек, не закрепляй старые; Python у меня <твоя версия>, зависимости ставь в .venv этого проекта. Напиши тесты. Готово, когда тесты проходят и ты написал, как запустить бота.»
Два слова из задания. requirements.txt это список библиотек проекта с версиями, по нему их ставят на любом компьютере. Тесты это маленькие программы, которые агент пишет, чтобы проверить свой код; запустить их можно просьбой «прогони тесты», в ответе будет итог вроде «7 passed». Почему важна строка про версии: агент учился на старом коде и по привычке пишет в requirements.txt версии, которые помнит. В прогоне он закрепил aiogram==3.13.1 и такие же старые зависимости. Под Python 3.14 у них нет готовых сборок, и установка падала на библиотеках aiohttp и pydantic-core. Свежая aiogram 3.31.0 работает на Python от 3.10 до 3.14.
Шаг 4. Когда агент «чинит» не то
Признаки, что агент ушёл в обход: он создаёт новые файлы-установщики вместо правки requirements.txt, пишет инструкции «как поставить вручную», советует сменить Python или переустановить систему. Это сигнал остановиться. Нажми Esc в окне Claude Code: клавиша прерывает текущий ход агента, проект при этом не ломается. Потом напиши коротко и точно:
«Стоп. Удали install_*.bat, install_*.ps1, INSTALL.md и manual_test.py. Python не меняем, он <твоя версия>. Ошибка установки: <последние строки ошибки из терминала>. Поставь в .venv свежие версии aiogram и зависимостей без жёстких старых номеров и обнови requirements.txt.»
Главное в этом сообщении: точный текст ошибки и запрет на обходы. Без ошибки агент гадает, а гадает он тем же способом, что и в прошлый раз. В прогоне курса агент второй раз не справился, и зависимости поставили руками в .venv: встали aiogram 3.31.0, aiohttp 3.14.4 и pydantic_core 2.46.5. Точные команды той установки курс не записал, поэтому вместо них дай агенту узкое задание:
«Поставь в .venv последнюю версию aiogram командой pip из этого .venv, без номеров версий. Потом запиши в requirements.txt версии, которые реально встали, и прогони тесты. Ничего другого не меняй.»
Так requirements.txt совпадёт с тем, что стоит у тебя. В прогоне тестов было 7, прошли все 7.

Шаг 5. Первый запуск у себя
Попроси агента: «запусти бота из .venv». Пока окно открыто, бот работает; закроешь его или выключишь компьютер, бот замолчит. Круглосуточно он заработает на сервере в уроке 2.5.
Открой бота в Telegram и пройди сценарий, как человек из рекламы. Проверь, как минимум, три вещи:
- /start → приветствие «Кодиума» и кнопки согласия;
- после «Согласен» вопрос об имени, а телефон «12345» отбивается словами «Номер телефона указан некорректно» с примером формата;
- курсы приходят кнопками: Python, Веб-разработка, Нейросети, Пока не знаю.
Если не сделал ADMIN_ID, уведомление владельцу не придёт. Узнай ID, впиши его в .env и перезапусти бота.
Шаг 6. Найди то, что не поймали тесты
В прогоне живая проверка нашла баг, о котором тесты молчали: имя принимается любое, даже «/startАнна Проверка» с командой внутри. Телефон бот проверял, имя нет. Это нормальная ситуация: тесты проверяют то, о чём агент подумал, а ты проверяешь то, что сделает живой человек. Ещё одно: в первой версии прогона согласие стояло в конце сценария. Если твой агент тоже поставил его после имени и телефона, не переделывай сейчас: готовое задание на перенос будет в первом шаге урока 2.4.
Ещё одна особенность из прогона: Telegram Web иногда восстанавливает черновик в поле ввода, и новый текст склеивается со старым. Так и получилось «/startАнна». Это поведение клиента Telegram, а не бота, но проверка имени всё равно нужна: человек тоже может ошибиться.
Если не получилось
- Видишь: установка падает на aiohttp или pydantic-core. Почему: в requirements.txt закреплены старые версии без сборок под твой Python. Что сделать: шаг 4, свежие версии в .venv.
- Видишь: агент создаёт install-файлы или советует сменить Python. Почему: он не видит точной ошибки и пробует обходы. Что сделать: Esc, сообщение из шага 4 с текстом ошибки.
- Видишь: бот молчит на /start. Почему: бот не запущен или токен в .env с пробелом или кавычками. Что сделать: проверь, что окно с ботом открыто и строка начинается с BOT_TOKEN= без пробелов.
- Видишь: заявки нет у владельца. Почему: пустой ADMIN_ID или владелец ни разу не нажал /start. Что сделать: впиши ID, владелец жмёт /start, перезапусти бота.
- Видишь: в имени оказалась команда «/start…». Почему: нет проверки имени или склеился черновик Telegram Web. Что сделать: миссия ниже.
Контрольный вопрос. Агент второй раз не смог поставить зависимости и создал файл INSTALL.md с советом перейти на Python 3.12. Что делаешь?
Подсказка: Чего не хватало агенту, чтобы починить по-настоящему?
На курсе задания проверяются автоматически. Решить первое задание бесплатно → · Подобрать курс
Контрольный вопрос. Тесты агента прошли 7 из 7. Ты отправил боту имя «/startАнна» и он его принял. Какой вывод верный?
Подсказка: Кто нашёл баг: тесты или живая проверка?
На курсе задания проверяются автоматически. Решить первое задание бесплатно → · Подобрать курс
Контрольный вопрос. Бот работает у тебя на компьютере. Вечером ты выключил ноутбук. Что увидит человек, который ночью нажмёт /start?
Подсказка: Где выполняется код бота в этом уроке?
На курсе задания проверяются автоматически. Решить первое задание бесплатно → · Подобрать курс
Задание. МИССИЯ «Сломай и почини». Собери бота по шагам урока и запусти у себя. Затем попробуй сломать его как живой человек: отправь телефон «12345» и имя, которое начинается с «/». Если бот принял такое имя, дай агенту задание: проверять имя (не пустое, не длиннее 60 символов, не начинается с «/»), отвечать понятной фразой и добавить тест на эту проверку. Перезапусти бота и повтори. Принято, если: приложены снимки чата, где телефон «12345» отбит и имя с «/» отбито понятной фразой; снимок итога тестов, где все прошли; файл requirements.txt, где aiogram 3.31.0 или новее; 2–3 предложения, какой фразой ты попросил агента исправить имя. На снимках не виден токен.
Подсказка: Если агент снова ушёл в install-файлы, вернись к шагу 4 и пришли ему точную ошибку.
✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.
На курсе задания проверяются автоматически. Решить первое задание бесплатно → · Подобрать курс
Что дальше
Бот принимает имя, телефон и курс у тебя на компьютере. В следующем уроке доведём заявку до владельца целиком: согласие с датой, файл на Яндекс Диске и база, которая не теряет старые заявки.
Итог:
• до задания агенту: токен и ADMIN_ID в .env, .venv в папке проекта;
• в задании строка «свежие версии, не закрепляй старые», иначе установка падает;
• агента, который чинит обходами, останавливаешь и даёшь точную ошибку;
• живая проверка ловит то, чего не ловят тесты.
