Управляю мобильной связью через AI-агента: как я создал skill для СберМобайл

Управляю мобильной связью через AI-агента: как я создал skill для СберМобайл

Последние три месяца я живу в парадигме, где обычные мобильные приложения постепенно заменяются текстовыми командами в терминале. Звучит как откат в 90-е, но на практике это быстрее, удобнее и мощнее, чем нажатия по экрану. Рассказываю, как создал skill для управления личным кабинетом СберМобайл через Claude Code, почему это уже второй подобный проект и куда движется эта идея.

Что такое Claude Code Skills

Claude Code — это CLI-агент от Anthropic, который работает в терминале и может писать код, управлять файлами, запускать команды. Главная фишка — система skills (или slash commands). Skill — это markdown-файл, который добавляет Claude новую способность: какие API вызывать, как авторизовываться, что отвечать пользователю.

Файл кладётся в ~/.claude/commands/, вызывается командой /имя-скилла. Claude получает полный контекст: документацию API, примеры запросов, формат ответа. Дальше он сам решает, какие вызовы сделать и как обработать результат. Не нужно ни фронтенда, ни мобильного приложения — только терминал и естественный язык.

Первый опыт: skill для Dodo Pizza

Всё началось с желания заказать пиццу без открытия приложения. Я создал /dodo — и Claude стал моим ассистентом: показывает меню, ищет по названию, отображает корзину и профиль.

Технически skill использует Puppeteer — headless-браузер Chrome. Причина в защите сайта Dodo Pizza: он стоит за ServicePipe, и любые прямые HTTP-запросы блокируются. Авторизация требует видимый браузер и прохождение reCAPTCHA. Это работает, но тяжело: Chrome жрёт память, запуск медленный, капча — ручное вмешательство.

После этого я задумался: а можно ли сделать следующий skill проще — без браузера, без капчи, на чистых REST-вызовах?

Зачем нужен skill для мобильного оператора

Я пользуюсь СберМобайл: часто звоню, раздаю интернет, периодически проверяю остатки. Каждый раз — одни и те же действия: открыть приложение, ждать, переключаться между вкладками. Три нажатия, чтобы узнать, сколько гигабайт осталось. Пять — чтобы посмотреть подключённые услуги.

Хотелось видеть всю информацию сразу: остатки, тариф, услуги, бонусы — одним запросом. Ни одно приложение так не умеет: данные размазаны по экранам. А вот AI-агент может собрать их из нескольких API и дать сводку за один ответ.

Как устроен SberMobile skill

Разведка API

Первый шаг — изучить личный кабинет. Я открыл lk.sbermobile.ru в Chrome DevTools и начал записывать сетевые запросы. Оказалось: это SPA-приложение с базовым API по адресу https://lk.sbermobile.ru/v2/api/. Все данные — в JSON, без антиботов и ServicePipe. Просто REST API с авторизацией. После Dodo Pizza это было как глоток свежего воздуха.

Несколько неочевидных деталей:

  • Токен передаётся в заголовке token, а не в Authorization: Bearer.
  • Номер телефона — 10 цифр без +7, в поле number, а не phone.
  • Все суммы — в копейках: 39000 означает 390 рублей.

Архитектура

Проект состоит из двух слоёв: Python-клиента и набора AI-skills поверх него.

Python-клиент

SberMobileClient — обёртка над requests. Один файл, около 350 строк, единственная зависимость — requests. Поддерживает авторизацию через SMS OTP, автоматически сохраняет и подгружает токен из /tmp/sbermobile_token.json. Все методы — read-only GET-запросы: тариф, остатки, услуги, платежи, промо, семья.

Токен живёт долго, и при следующем запуске клиент использует его автоматически. Не нужно авторизовываться каждый раз.

Skills — атомарные способности агента

Каждый skill — это Python-класс, наследник базового Skill. У него есть имя, описание для LLM (когда и зачем вызывать), JSON Schema входных параметров и метод execute(). Skill может вызывать один или несколько методов клиента и агрегировать результат.

Шесть skills покрывают основные сценарии:

  • Проверка остатков (гигабайты, минуты, SMS).
  • Информация о тарифе и стоимости.
  • Список подключённых услуг.
  • Рекомендации по пополнению и статус бонусов СберСпасибо.
  • Акции и персональные предложения.
  • История платежей.

Все skills — только для чтения. Write-операции (смена тарифа, подключение опций) в API есть, но я сознательно не включил их в публичную версию. Хотя Smart executor умеет запрашивать подтверждение перед изменением данных — эта функция пока отложена.

SKILL.md — точка входа для Claude Code

Файл SKILL.md — это то, что Claude Code читает при вызове /sbermobile. Он содержит инструкции: как создать клиент, какие методы вызывать, как обрабатывать ошибки авторизации. По сути, это промпт, который превращает Claude из универсального ассистента в специалиста по моему личному кабинету.

agent_demo.py — автономный агент

Помимо skill для Claude Code, в проекте есть standalone-агент (examples/agent_demo.py). Это полноценный агентский цикл: пользователь задаёт вопрос, Claude решает, какие skills вызвать, получает данные, формирует ответ. Всё работает на Anthropic Python SDK — всего 130 строк кода. Можно запускать без Claude Code: в Jupyter, на сервере, где угодно.

Вот типичные запросы, которые я использую:

  • «Сколько у меня осталось гигабайт и минут?»
  • «Какой у меня тариф и сколько я плачу?»
  • «Какие услуги у меня подключены?»
  • «Сколько мне пополнить и есть ли бонусы СберСпасибо?»
  • «Какие есть акции или предложения для меня?»

Помогает находить инсайты

Например, агент может проанализировать расход трафика за месяц и предложить более выгодный тариф. Или напомнить, что подключённая опция не используется — и её можно отключить.

Пополнить баланс не заходя в банк

Хотя write-операции пока отключены, сам факт, что агент знает, сколько нужно пополнить, уже экономит время. В будущем можно будет добавить подтверждение и автоматическое пополнение.

Что дальше

У меня уже два работающих skill-а: Dodo Pizza и СберМобайл. Первый — через headless-браузер, второй — через чистые REST-вызовы. Разница в скорости и удобстве — колоссальная. REST-skill отвечает за секунду, браузерный — за 10–15.

Но идея шире. Я вижу это как агентскую систему управления повседневными сервисами. Следующие кандидаты:

  • Банк — остатки, переводы, история операций.
  • Маркетплейс — отслеживание заказов, статус доставки.
  • Транспорт — баланс карты, маршруты.
  • Госуслуги — статус заявлений, записи.

Представьте утренний запрос в терминале: «дай сводку» — и Claude сам обращается к оператору, банку, маркетплейсу и выдаёт одним сообщением: остаток на балансе, статус доставки, сколько гигабайт осталось. Это не футуристика — это рабочий паттерн уже сегодня.

Каждый skill — это одна зависимость (requests или puppeteer), один markdown-файл с промптом и несколько API-вызовов.

Код проекта доступен на GitHub: https://github.com/pocketpet/sbermobile-skill

Читать оригинал