Разделы · 10/11
Рецепты
Готовые примеры — прогресс деплоя, сборка Xcode, мониторинг сервера, таймер, очередь задач, подтверждение агента.
Каждый рецепт — какая интеграция нужна (поля и шаблон карточки, см.
Типы полей) и рабочий код. Токен везде читается из
SPARKU_TOKEN_<АДРЕС> — см. CLI sparku.
1. Прогресс деплоя в CI с вспышкой при ошибке#
Интеграция: deploy, шаблон карточки «Прогресс». Поля: progress
(progress), stage (state: running/done/failed), title (text).
#!/bin/bash
# deploy.sh — запускается в CI
set -euo pipefail
sparku push deploy title="api · prod" stage=running progress=0
total_steps=5
for step in $(seq 1 $total_steps); do
./run-step.sh "$step" || {
sparku push deploy stage=failed
sparku notify deploy "Деплой упал на шаге $step" --state failed --color red
exit 1
}
sparku push deploy progress="$(( step * 100 / total_steps ))%"
done
sparku push deploy stage=done progress=100%
sparku notify deploy "Деплой готов" --state done
2. Сборка Xcode / swift build#
Интеграция: build, шаблон «Статус». Поля: phase (state:
building/testing/passed/failed), title (text).
#!/bin/bash
# build.sh
sparku push build title="SparkU" phase=building
if ! xcodebuild -scheme SparkU -destination 'platform=macOS' build 2>build.log; then
sparku push build phase=failed
sparku notify build "Сборка упала" --state failed --color red
exit 1
fi
sparku push build phase=testing
if ! xcodebuild -scheme SparkU -destination 'platform=macOS' test 2>test.log; then
sparku push build phase=failed
sparku notify build "Тесты упали" --state failed --color red
exit 1
fi
sparku push build phase=passed
sparku notify build "Сборка и тесты зелёные" --state passed
3. Мониторинг сервера на Python раз в N секунд#
Интеграция: server, шаблон «Шкалы». Поля: cpu (number, 0–100, %),
memory (number, 0–100, %), latency (number, мс).
#!/usr/bin/env python3
import http.client, json, os, socket, time
TOKEN = os.environ["SPARKU_TOKEN_SERVER"]
class SparkU(http.client.HTTPConnection):
def __init__(self):
super().__init__("sparku")
def connect(self):
self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
self.sock.connect(os.path.expanduser("~/.sparku/run/api.sock"))
def push(fields):
api = SparkU()
api.request("POST", "/v1/integrations/server/fields", json.dumps(fields), {
"Authorization": f"Bearer {TOKEN}",
"Content-Type": "application/json",
})
response = api.getresponse()
response.read()
def read_metrics():
# замените на реальный сбор метрик (psutil, /proc, ssh на прод и т. д.)
import random
return {"cpu": random.uniform(10, 90), "memory": random.uniform(30, 80), "latency": random.uniform(40, 300)}
while True:
push(read_metrics())
time.sleep(5)
Запуск в фоне: nohup python3 monitor.py & или через launchd/systemd — сокет
переживает перезапуск скрипта, следующий push просто восстановит значения.
4. Таймер / обратный отсчёт одним push#
Интеграция: timer, шаблон «Таймер». Поле: until (time).
Таймер тикает внутри SparkU — повторять push раз в секунду не нужно, достаточно
одного вызова с моментом окончания:
# отсчёт 25 минут (Pomodoro)
sparku push timer until=+25m
# конкретный момент в ISO 8601
sparku push timer until=2026-09-28T15:00:00Z
Отменить отсчёт — sparku end timer.
5. Очередь задач (список)#
Интеграция: queue, шаблон «Список». Поле: tasks (list).
#!/bin/bash
# queue.sh — обновляет список задач сборки
tasks_json() {
cat <<'JSON'
[
{"title": "Сборка iOS", "subtitle": "шаг 3 из 5", "value": "60%", "state": "running"},
{"title": "Тесты API", "subtitle": "412 из 420", "value": "98%", "state": "done"},
{"title": "Миграция БД", "subtitle": "staging", "state": "failed"},
{"title": "Деплой лендинга", "subtitle": "в очереди"}
]
JSON
}
sparku push queue "tasks:=$(tasks_json)"
tasks:=... — двоеточие перед = в sparku push говорит CLI разобрать значение
как JSON, а не как строку (см. CLI sparku).
6. Агент спрашивает перед опасной командой#
Интеграция: agent, диалоги включены в настройках, карточка не обязательна.
#!/bin/bash
# cleanup-branch.sh — вызывается ИИ-агентом (Claude Code, Codex и т. п.) из shell
set -euo pipefail
if sparku ask agent "Удалить ветку feature/old и закрыть PR #42?" \
--accept Удалить --decline "Не трогать" --timeout 5m; then
git push origin --delete feature/old
gh pr close 42
else
echo "отменено человеком" >&2
exit 1
fi
Подробнее про коды выхода ask и раздел «Для ИИ-агентов» — Вопросы человеку.
7. Обёртка if sparku ask … для любой команды#
Интеграция: та же agent, что и в рецепте 6, — одна интеграция для всех
подтверждений в терминале.
#!/bin/bash
# confirm.sh — обёртка: спрашивает и выполняет любую команду
# использование: ./confirm.sh "Удалить node_modules?" rm -rf node_modules
question=$1; shift
if sparku ask agent "$question"; then
"$@"
else
echo "отменено" >&2
exit 1
fi
./confirm.sh "Перезапустить прод-сервер?" ssh prod 'sudo systemctl restart api'