Малый проект с Claude Fable 5: от требований до релиза — что сделала ИИ?

AI-заметки  ·   ·  ~10 мин чтения

Разработчик на ноутбуке доводит малый проект до релиза — полный цикл с Claude Fable 5

Вывод сразу: с Claude Fable 5 мы с нуля собрали pulsecheck — CLI, который пакетно проверяет, отвечают ли URL/API, и пишет JSON-отчёт для cron или алертов. Текст в двух частях: сначала зачем инструмент и как выглядит результат (скрин ниже); потом семь шагов — где ИИ писала код, а где без вас нельзя в Claude Code. Чтобы оценить пользу, хватит скрина; чтобы повторить — с шага 1.

Зачем pulsecheck?

Коротко: массово проверить URL без десятка вкладок и ручных curl.

Типичный сценарий: в config.yaml список прод-эндпоинтов (/health, /ping), cron раз в 5 минут. API отдаёт 503 или таймаут — код выхода 1, скрипт алерта или мониторинг срабатывает. Это лёгкая проба, не Datadog — без дашбордов и SMS: только «жива ли эта пачка URL сейчас?» в JSON.

CLI
Терминальный инструмент
7
Шагов сборки
52
Минут до v0.1.0

Три реальных сценария

Забудьте на секунду про Go и YAML: боль — «как понять, что эти сервисы ещё живы». Три случая, ради которых писали pulsecheck:

  • Плановый обход — 5–20 health URL (платёжные webhook, публичные API, внутренний шлюз). Shell for url in …; do curl … не масштабируется. pulsecheck читает один конфиг, отдаёт структурированный JSON, вешаете cron.
  • Перед релизом или дежурством — одна команда: ./pulsecheck -config prod.yaml -o /tmp/pre-deploy.json. Код 0 — деплоите; 1 — стоп.
  • Зонд для существующих алертов — без полного Prometheus код выхода дергает Webhook или почту; JSON — для разбора после.

Не наша зона: история метрик, SMS, мультитенантная консоль — туда observability-платформы. pulsecheck отвечает только на «эта пачка URL жива прямо сейчас?»

Скриншот готового CLI

Так выглядит pulsecheck после всех шагов в терминале Mac: конфиг, пробы, JSON; один сайт вернул 503 — код выхода 1.

Скриншот pulsecheck: ./pulsecheck в терминале, report.json с api.example.com 200 и status.example.com 503
Слева: ./pulsecheck -config config.example.yaml -o report.json; справа: report.json со status_code, задержкой и полем ok.

Три команды у себя:

./pulsecheck -config config.example.yaml -o report.json
echo $?          # 1 = есть мёртвые цели
cat report.json   # смотрим отчёт

Вход, выход, стек

По сути — пакетный curl + один отчёт, собранный в бинарник под cron.

Измерение Суть Пример
Вход YAML со списком URL config.example.yaml
Выход JSON + код процесса report.json; 0=всё ОК, 1=сбой
Использование Cron, pre-release, алерт по exit code */5 * * * * pulsecheck …
Стек Go 1.22, один бинарник Без GUI и БД

Поддерживаете только YAML; пробы и сводка — автоматически:

config.example.yaml
targets:
  - https://api.example.com/health
  - https://status.example.com/ping

Итоговый репозиторий ~400 строк Go:

pulsecheck/
pulsecheck/
├── cmd/pulsecheck/main.go      # -config -o
├── internal/checker/checker.go # HTTP + latency
├── internal/config/config.go   # YAML
├── config.example.yaml
├── Makefile · README.md
└── .github/workflows/ci.yml

Что ИИ делает в 7 шагах

Что такое pulsecheck — ясно; дальше процесс: Claude Fable 5 + Claude Code, пустая папка до tag v0.1.0.

Правило: ИИ пишет код и гоняет тесты; человек задаёт scope, review и подписывает релиз. Промпты копируются как есть; для agent loop хватает Fable 5 (Opus не обязателен — см. сравнение тиров).

Подготовка

  • Go 1.22+go version
  • Claude Code CLI — модель Claude Fable 5 (выбор tier)
  • Пустая директорияmkdir pulsecheck && cd pulsecheck && git init
  • GitHub (опционально) — для удалённого CI на шаге 6

Шаг 1: репо и требования

Вы: три фразы боли → SPEC.md. ИИ может развернуть текст, но вне scope режете вы — иначе появятся Web UI и база.

Промпт Claude Code (шаг 1)
Прочитай требования и сгенерируй SPEC.md без лишних фич:

- Инструмент pulsecheck, CLI Go 1.22
- Список URL из YAML, параллельный HTTP GET
- JSON-отчёт в путь -o
- Поля: url, status_code, latency_ms, ok
- Таймаут 5 с, PULSECHECK_TIMEOUT для override
- Коды: 0 всё ОК, 1 сбой, 2 ошибка конфига
- Вне scope: GUI, БД, Docker, push алертов

ИИ: SPEC.md. Вы: нет лишних фич; в spec есть go test ./... как приёмка.

Приёмка: cat SPEC.md — разделы must / non-goals / exit codes на месте.

Шаг 2: каркас

Вы: просите только структуру, без бизнес-логики. Fable 5 тянет почти всё.

Промпт (шаг 2)
Прочитай SPEC.md, init module github.com/you/pulsecheck.
Только каркас, логика — stub:
- cmd/pulsecheck/main.go парсит -config и -o
- internal/config читает YAML
- internal/checker пустой
- Makefile: test, lint, build
- .github/workflows/ci.yml заглушка
go build ./... должен проходить, без реального HTTP.

ИИ: ~8 файлов. Время: ~6 минут.

Приёмка:

go build ./...
./pulsecheck -h   # help на экране

Шаг 3: пробы и тесты

Вы: сначала тесты, потом код. Агент крутит go test, чинит, повторяет — самый «проектный» шаг.

Промпт (шаг 3)
В internal/checker:
1. checker_test.go с httptest: 200, 500, timeout
2. checker.go: GET, status_code, latency_ms
3. Крутить go test ./... до зелёного
4. main.go: config → checker → JSON в -o

Типичный фрагмент от ИИ:

internal/checker/checker.go (фрагмент)
func CheckURL(ctx context.Context, client *http.Client, url string) Result {
    start := time.Now()
    req, _ := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
    resp, err := client.Do(req)
    if err != nil {
        return Result{URL: url, OK: false, LatencyMs: time.Since(start).Milliseconds()}
    }
    defer resp.Body.Close()
    ok := resp.StatusCode >= 200 && resp.StatusCode < 300
    return Result{
        URL: url, StatusCode: resp.StatusCode,
        LatencyMs: time.Since(start).Milliseconds(), OK: ok,
    }
}

В прогоне Fable 5 сделала 3 итерации go test и сама починила timeout, не дошедший до HTTP client.

Приёмка: go test ./... -v — 12 table-driven кейсов зелёные.

Шаг 4: review

Вы: reviewer — список замечаний, не ручной патч (иначе не проверяете итерацию агента).

Промпт review (шаг 4)
Исправь по review, go test ./... остаётся зелёным:
1. Поле JSON latency → latency_ms (SPEC)
2. Worker pool для URL, max 10 параллельно
3. stdout — только путь к отчёту; warn в stderr

ИИ: pool, переименование, логи. Вы: решать, нужны ли эти три пункта — это не делегируется.

Приёмка: тесты зелёные; ручной прогон JSON на живом URL.

Шаг 5: конфиг и README

Вы: документация, которую ops скопирует без правок.

Промпт (шаг 5)
Сгенерируй config.example.yaml и README.md :
- Установка: go install или go build
- Примеры, таблица кодов 0/1/2
- Пример cron на 5 минут с логом
- Без выдуманных подкоманд

Приёмка: живые URL в примере, команды из секции скриншота, поля JSON на месте.

Шаг 6: GitHub Actions

Вы: push на GitHub; ИИ дописывает workflow и читает логи падений.

Промпт (шаг 6)
Дополни .github/workflows/ci.yml :
- go test -race ./...
- golangci-lint run
- go 1.22
При падении lint — читай лог, чини, recommit.

Первый lint поймал unused import — Fable 5 прочитала CI и удалила. На Mac 16 ГБ -race уходит в swap: гоняйте на GitHub Runner или Cloud Mac — та же логика, что и выбор среды Claude Code.

Приёмка: CI зелёный на GitHub.

Шаг 7: приёмка и tag

Только вы: smoke test и tag. CHANGELOG-черновик может ИИ; подпись релиза — человек.

go test ./...
make build
./pulsecheck -config config.example.yaml -o /tmp/report.json
cat /tmp/report.json | jq .
git add -A && git commit -m "feat: pulsecheck v0.1.0"
git tag -a v0.1.0 -m "first release: YAML-driven HTTP health probe"
git push && git push --tags

pulsecheck готов: CLI под cron, ~52 минуты от пустой папки.

После v0.1

Сознательно нет: Slack-алерты, Prometheus exporter, Docker-образ. Новые issue — новый цикл Fable: сначала замкнуть контур, потом расширять.

Разделение ИИ / человек

Шаг Fable 5 Человек
1 Требования Структурирует устный brief Обрезает scope, коды выхода
2 Каркас 8 файлов, build OK Версия Go, имя модуля
3 Реализация Тесты + checker + main Покрытие vs SPEC
4 Review Патчи по списку Пишет список
5 Доки README + пример Гоняет copy-paste
6 CI Workflow + fix lint Определяет «зелёное»
7 Релиз Черновик CHANGELOG Smoke + tag

Около 78 % поставляемого кода — от ИИ; scope, review и tag остаются человеческими при любом модели.

Матрица выбора

Если вы… Подход Почему
Впервые ведёте полный проект с ИИ Эти 7 шагов + приёмка каждый раз Быстрее абстрактных споров о моделях
Ops / внутренний CLI как pulsecheck Go + agent loop Fable 5 Самопроверяющиеся тесты
SaaS с пользовательскими данными ИИ черновик + security review Opus Ответственность за прод не делегируется
Фича в существующем репо Пропустить шаг 2, войти через Issue Каркас уже есть
Mac 16 ГБ + долгий CI Агент локально, race на Cloud Mac Swap не спутать с «медленной моделью»
Демо руководству за неделю Сначала зафиксировать non-goals в SPEC Иначе агент раздует scope

Рекомендуемые связки

  • Solo — Fable 5 на шагах 2–6; Cursor Tab для мелких правок; Opus только на внешние поверхности.
  • Малая команда — шаблон репо с чеклистом из 7 фаз; agent на прод-workflow Claude Code.
  • Экономия токенов — SPEC и CHANGELOG через Gemini Flash; кодовый цикл — Fable 5; маршрутизация OpenRouter.

С MCP агент тянет Issues и контекст мониторинга, Fable 5 правит репо — шаг 7 релиза лучше подписывать вручную.

Типичные ошибки

  • Чат без цели проекта — ИИ даёт общие советы; сначала «pulsecheck в одной фразе».
  • Бизнес-логика уже на шаге 2 — каркас и код смешаны, тесты страдают.
  • Пропуск шага 4 — имена JSON и мусор в stdout уедут в прод.
  • Tag без шага 7 — без smoke это не релиз.
  • race + agent на 16 ГБ — тормозит RAM, не модель; CI на удалённый runner.

FAQ

Какую задачу решает pulsecheck?

«Отвечает ли эта пачка URL прямо сейчас?» — без самописных shell-циклов и тяжёлой платформы. Подходит для малых команд и pre-release.

Чем отличается от UptimeRobot или Prometheus?

pulsecheck — CLI на вашей машине, конфиг у вас, без SaaS; остальное — полноценный мониторинг. Здесь — достаточно и можно править код.

Есть публичный репозиторий?

Это разбор полётов + воспроизводимый туториал; семи промптов достаточно, побайтовый diff не цель.

Где ИИ сделала больше всего?

Шаг 3 (тесты + код) и 2 (каркас); 1 и 7 — в основном человек.

Чем отличается от Tab-дополнения в Cursor?

Tab — один файл; целый проект — Claude Code, много файлов + тесты. См. Copilot vs Cursor.

Итог

Продукт: pulsecheck — YAML, пробы, report.json (скрин выше). Процесс: семь шагов Fable 5, ~78 % Go от ИИ, человек на scope, review и tag. Чтобы ответить «тянет ли ИИ малый инструмент?» — хватит скрина и таблицы; чтобы повторить — копируйте шаг 1.

ZavCloud · Cloud Mac

Гонять CI pulsecheck на Cloud Mac

Выделенный Mac mini M4: Claude Code пишет код, GitHub Actions гоняет test -race на том же macOS-узле — шаг 6 не упирается в 16 ГБ локальной RAM.

Тарифы и цены
Cloud Mac Аренда Mac mini онлайн