раздел 03 · подстраница 5
Первая реальная задача
Хватит теории. Делаем сквозной сценарий "от нуля до пофикшенного бага за 10 минут". Цель - почувствовать, как Claude Code читает файлы, правит, запускает тесты, проверяет результат.
Что будем делать
Создадим Python-скрипт с классическим off-by-one багом в функции sum_range. Попросим Claude найти ошибку, починить, написать тесты и убедиться, что тесты проходят.
Никаких внешних зависимостей - только Python 3 и Claude Code.
Шаг 1 - подготовка папки (1 минута)
В терминале:
mkdir ~/claude-first-task && cd ~/claude-first-task
Создаём файл math_utils.py с багом:
# math_utils.py
def sum_range(start, end):
"""Сумма всех целых чисел от start до end ВКЛЮЧИТЕЛЬНО."""
total = 0
for i in range(start, end): # bug: должно быть end + 1
total += i
return total
if __name__ == "__main__":
# ожидаем 15 (1+2+3+4+5), а получим 10 (1+2+3+4)
print(sum_range(1, 5))
Запустим - убедимся, что баг проявляется:
python3 math_utils.py
# 10 ← а должно быть 15
Шаг 2 - запускаем Claude (1 минута)
claude
Если это первый запуск в этой папке - сделаем /init:
> /init
Claude посмотрит на содержимое (один файл math_utils.py) и создаст короткий CLAUDE.md. Хорошая привычка - в новой папке всегда начинать с /init.
Шаг 3 - формулируем задачу (1 минута)
Переключимся в plan-режим, чтобы Claude сначала рассказал план, а не сразу полез править:
Shift+Tab до состояния [mode: plan].
Теперь промпт:
> в @math_utils.py есть баг: sum_range(1, 5) возвращает 10,
а должно 15 (сумма 1..5 включительно). Найди причину,
предложи фикс, потом покрой функцию pytest-тестами:
обычные случаи, граничные (start == end), отрицательные числа.
Шаг 4 - читаем план (2 минуты)
Claude прочитает файл и выдаст что-то вроде:
План:
1. Прочитать math_utils.py - подтвердить наличие бага в range().
2. Заменить range(start, end) на range(start, end + 1).
3. Создать tests/test_math_utils.py с pytest-тестами:
- test_basic_sum: sum_range(1, 5) == 15
- test_single: sum_range(7, 7) == 7
- test_negative: sum_range(-3, 3) == 0
4. Запустить pytest, убедиться что всё зелёное.
Approve plan? [y/n]
Если план выглядит разумно - y. Если что-то не нравится - можно ответить "добавь ещё тест на start > end - функция должна возвращать 0" и Claude дополнит план.
Шаг 5 - наблюдаем за работой (3 минуты)
После approve Claude автоматически выйдет из plan-режима и начнёт исполнять. В терминале будут появляться tool-calls:
● Read(math_utils.py)
● Edit(math_utils.py)
- for i in range(start, end):
+ for i in range(start, end + 1):
● Bash(mkdir -p tests) [y/n]?
> y
● Write(tests/test_math_utils.py)
● Bash(pip install pytest) [y/n]?
> y
● Bash(python3 -m pytest tests/ -v)
===== 3 passed in 0.04s =====
Если вы в accept-edits - подтверждения на Edit не будет, только на Bash. Поведение режимов разобрано в отдельной главе.
Шаг 6 - проверяем результат (2 минуты)
Сначала глазами:
cat math_utils.py
cat tests/test_math_utils.py
Убеждаемся, что range(start, end + 1) встал, тесты осмысленные. Запускаем сами, не доверяя Claude на слово:
python3 math_utils.py # должно быть 15
python3 -m pytest tests/ -v # все тесты должны быть green
Если что-то не так - возвращаемся в Claude и говорим прямо:
> тест test_negative падает: sum_range(-3, 3) даёт 0, но pytest ожидает -3+...+3 = 0, всё ок.
но мне нужен ещё кейс на start > end, добавь.
Claude дополнит тесты, перезапустит pytest.
Шаг 7 - финальная проверка через /verify
Это необязательно для такой простой задачи, но полезно как привычка:
> /verify
Claude ещё раз запустит код и тесты "глазами свежего агента", чтобы убедиться, что всё реально работает, а не только в его голове.
Что вы только что увидели
За 10 минут вы:
- Создали проект с нуля.
- Прошли через
/init,Shift+Tab(plan-режим),@fileупоминание. - Получили план до правок, одобрили его.
- Увидели как Claude читает, правит, создаёт файлы, ставит зависимости, гоняет тесты.
- Проверили результат руками.
- Закрыли цикл через
/verify.
Это базовый workflow для любой задачи сложнее однострочника. Дальше курса - просто масштабирование того же цикла.
Антипаттерны
- Пропустить
/init. Без него Claude каждый раз заново открывает проект. - Не использовать plan-режим на новой задаче. План занимает минуту и спасает от 10 минут переделок.
- Не запускать код руками после Claude. Модель уверенно скажет "тесты прошли", даже если pytest не установлен. Доверяй, но проверяй.
Полезные ссылки
- pytest docs - быстрый старт по pytest
- Quickstart - официальный quickstart Claude Code
- Plan mode - подробнее про plan-режим