Agent Mode умеет менять несколько файлов и запускать команды, но ответственность новичка не исчезает: задача должна иметь границы, diff нужно прочитать, а результат доказать тестом. Соберём маленький анализатор учебных баллов. Сначала сами запишем контракт и тесты, затем дадим агенту реализацию, проверим каждое изменение и специально отклоним лишнее действие.
Обычный чат предлагает фрагмент кода, а агентный режим может исследовать проект, редактировать файлы и предлагать команды в терминале. Это ускоряет многосоставную работу и одновременно увеличивает цену невнимательного согласия. Хорошая учебная задача должна быть маленькой и проверяемой.
Формулируем вход, выход, ошибки и список файлов до запуска агента.
Читаем предложенный план, diff каждого файла и каждую команду терминала.
Запускаем pytest, ручной пример и git diff, а не принимаем фразу «готово».
Чем Agent Mode отличается от автодополнения
До открытия Agent Mode создайте пустой Git-репозиторий и файл tests/test_stats.py с четырьмя случаями: обычные баллы, округление, пустой список и число 120. Промпт перечисляет разрешённые файлы stats.py и README.md, запрещает новые зависимости и требует запустить pytest.
| Этап | Что происходит | Признак результата |
|---|---|---|
| Контракт | Человек фиксирует поведение и границы | Есть тест до реализации |
| План | Агент перечисляет файлы и команды | Объём не вышел за задачу |
| Diff | Каждое изменение читается построчно | Понятно, зачем строка нужна |
| Проверка | pytest и ручной пример запускаются человеком | Результат воспроизводится |
У проекта есть один главный маршрут: получить входные данные, проверить их, выполнить действие и показать результат. Если каждый этап можно проверить отдельно, ошибка перестаёт быть загадкой.

От входных данных до видимого результата. Агент предлагает действия, человек принимает доказанный результат
Готовим контракт и сильный запрос
Создайте каталог, выполните git init, uv init agent-stats и uv add --dev pytest. Сохраните тест ниже до запуска Agent Mode. Затем выберите режим Agent в Copilot Chat и дайте запрос: «Реализуй stats.py так, чтобы проходил существующий test_stats.py. Разрешены только stats.py и README.md. Не меняй тесты, не добавляй зависимости. Сначала покажи план, затем запусти pytest». Конкретные кнопки могут отличаться между IDE.
import pytest
from stats import summarize
def test_summary_for_regular_scores():
assert summarize([60, 80, 100]) == {
"count": 3,
"average": 80.0,
"min": 60,
"max": 100,
}
def test_average_is_rounded_to_two_digits():
assert summarize([1, 2, 2])["average"] == 1.67
def test_empty_scores_are_rejected():
with pytest.raises(ValueError, match="empty"):
summarize([])
def test_score_outside_range_is_rejected():
with pytest.raises(ValueError, match="0..100"):
summarize([80, 120])- Агент предлагает небольшой план и не меняет test_stats.py.
- Diff добавляет stats.py и объяснение запуска, без лишних зависимостей.
- uv run pytest завершается четырьмя успешными тестами.
- git diff --stat и git diff показывают только ожидаемые файлы.
Тест написан до реализации, поэтому агент не определяет сам, что значит «готово». Он может предложить код, но контракт и доказательство остаются независимыми.

Что отличает устойчивый проект от случайного успеха. Тесты и diff важнее уверенного текста
Как читать diff и разрешения на команды
Agent Mode получает контекст рабочей папки, ищет релевантные файлы, строит план и применяет правки. Для проверки он предлагает команды. В зависимости от настроек IDE вы подтверждаете их вручную или часть может выполняться автоматически. Каждый шаг является действием с реальными файлами, а не только текстовым ответом. Поэтому полезно заранее ограничить область.
| Часть | Ответственность | Что проверить |
|---|---|---|
| Prompt | Описывает цель, границы и критерии | Нет расплывчатого «сделай красиво» |
| Working set | Даёт агенту релевантные файлы | Секреты и лишние каталоги исключены |
| Diff | Показывает точные изменения | Каждую строку можно объяснить |
| Terminal command | Запускает тест или форматирование | Команда относится к задаче |
| Independent check | Подтверждает результат вне ответа модели | Тест повторяется после перезапуска |
Красивое объяснение агента не является логом истинности. Модель может неверно прочитать библиотеку, выбрать устаревший API или изменить больше файлов, чем требуется. Просите короткий план, но проверяйте фактический diff. Перед командой смотрите рабочий каталог и аргументы. Команда pytest безопаснее непонятного install.sh из интернета.
Проверяем проект независимо от ответа агента
После первого зелёного запуска попросите агента добавить медиану. Не говорите сразу, как её считать. Сначала сами добавьте тесты для нечётного и чётного списка, затем разрешите менять stats.py и README.md. Если агент предложит dependency ради одной функции, попросите обосновать её цену и сравните с стандартной библиотекой statistics.
- Зафиксируйте тесты до первой реализации.
- Попросите план и сверьте список файлов с разрешённым.
- Прочитайте diff stats.py построчно и объясните проверки.
- Запустите pytest самостоятельно после работы агента.
- Добавьте новый красный тест до запроса про медиану.
- Отклоните расплывчатый план и уточните границы задачи.
- Все критерии сформулированы до изменений.
- Diff содержит только разрешённые файлы.
- Команды понятны до запуска.
- Тесты и ручной пример проходят независимо.
Польза Agent Mode измеряется не числом созданных файлов, а скоростью проверяемого цикла: маленькая цель, видимый diff, понятная команда, независимый результат.

Четыре проверки перед следующим шагом. Каждый этап можно остановить и уточнить
Превращаем агента в инструмент обучения
Используйте агента для задач, которые можно описать и проверить: добавить один эндпоинт, тест, миграцию или документацию. Для неизвестной архитектуры сначала попросите объяснение и план без правок. Храните проект под Git и коммитьте понятные этапы. Настройте исключения для секретов и сгенерированных каталогов.
Как изучить тему в Кодике
В Кодике сначала решите задачу summarize без агента на бумаге: вход, выход и ошибки. Затем напишите тесты. Agent Mode подключайте только к реализации, которую сможете разобрать после получения.
| Шаг | Что изучить в Кодике | Мини-проверка |
|---|---|---|
| 1 | Функции и списки Python | Посчитать count, min, max и average |
| 2 | ValueError и проверки | Отклонить пустой список и 120 |
| 3 | pytest | Зафиксировать четыре критерия |
| 4 | Git diff | Назвать назначение каждой новой строки |
| 5 | Agent Mode | Дать узкий запрос и проверить результат |
Не пытайтесь запомнить весь API. В тренажёре Кодика сначала воспроизведите чистую логику без библиотеки, затем восстановите подключение и обработку ошибок. Финальный тест: объяснить проект по памяти и добавить одну свою функцию.
Агент сам догадывается о результате. Укажите вход, выход, ошибки, файлы и команду проверки.
Проверьте рабочий каталог и действие до запуска, особенно установку и удаление файлов.
Запустите тест и ручной сценарий самостоятельно, затем посмотрите git diff.
Не отправляйте .env, токены и личные данные. Ограничивайте working set и очищайте примеры.
Что получится в итоге

Агент создаёт два разрешённых файла, pytest доказывает контракт, а человек читает diff и принимает только понятные изменения.
Чем Agent Mode отличается от обычной подсказки?
Он может исследовать проект, менять несколько файлов и предлагать терминальные команды, а не только вернуть фрагмент текста.
Почему тест стоит написать до запроса?
Он фиксирует критерий независимо от реализации и не даёт агенту переопределить «готово» задним числом.
Что проверять кроме pytest?
git diff, список файлов, команды, ручной пользовательский сценарий и отсутствие секретов.
Как понять, что проект действительно работает?
Проверьте основной сценарий, неверный ввод, повторный запуск и один граничный случай. Затем объясните путь данных своими словами.
Можно ли начать с готового кода из статьи?
Да. Добейтесь результата, измените одно правило и соберите ключевой файл заново без копирования.
Функции, исключения и тестируемую логику закрепите в курсе Python. Проект сохраните по статье про GitHub.
Окружение сделайте воспроизводимым через uv, а чтение сообщений об ошибке потренируйте на материале про NameError.