Вывод сразу: с 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.
Три реальных сценария
Забудьте на секунду про 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 -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; пробы и сводка — автоматически:
targets: - https://api.example.com/health - https://status.example.com/ping
Итоговый репозиторий ~400 строк Go:
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 и база.
Прочитай требования и сгенерируй 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 тянет почти всё.
Прочитай 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, чинит, повторяет — самый «проектный» шаг.
В 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
Типичный фрагмент от ИИ:
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, go test ./... остаётся зелёным: 1. Поле JSON latency → latency_ms (SPEC) 2. Worker pool для URL, max 10 параллельно 3. stdout — только путь к отчёту; warn в stderr
ИИ: pool, переименование, логи. Вы: решать, нужны ли эти три пункта — это не делегируется.
Приёмка: тесты зелёные; ручной прогон JSON на живом URL.
Шаг 5: конфиг и README
Вы: документация, которую ops скопирует без правок.
Сгенерируй config.example.yaml и README.md : - Установка: go install или go build - Примеры, таблица кодов 0/1/2 - Пример cron на 5 минут с логом - Без выдуманных подкоманд
Приёмка: живые URL в примере, команды из секции скриншота, поля JSON на месте.
Шаг 6: GitHub Actions
Вы: push на GitHub; ИИ дописывает workflow и читает логи падений.
Дополни .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.
Тарифы и цены