- BrainTools - https://www.braintools.ru -
Последние 3 месяца живу в парадигме, где повседневные приложения на телефоне постепенно превращаются в текстовые команды в терминале. Звучит как откат в 90-е, но на практике это быстрее, удобнее и мощнее, чем тыкать по вкладкам в мобильном приложении. В этой статье расскажу, как появился skill для управления личным кабинетом СберМобайл через Claude Code/OpenClaw/KimiClaw, почему это уже второй такой проект, и куда это всё движется.
Claude Code – это CLI-агент от Anthropic, который живёт в терминале и умеет выполнять задачи: писать код, работать с файлами, запускать команды. Но самое интересное – это система skills (в терминологии Anthropic – slash commands). Skill – это markdown-файл, который описывает для Claude новую способность: какие API вызывать, как авторизоваться, что отвечать пользователю.
Кладёшь файл в ~/.claude/commands/, вызываешь через /имя-скилла, и Claude получает контекст: документацию API, примеры вызовов, правила форматирования ответов. Дальше он сам решает, какие запросы отправить и как интерпретировать результат. Не нужно ни фронтенда, ни мобильного приложения – только терминал и естественный язык.
Всё началось с пиццы. Я захотел заказать Додо Пиццу, не открывая приложение. Написал в терминале /dodo, и Claude стал моим курьерским ассистентом: показывает меню, ищет по названию, показывает корзину и профиль.
Технически Dodo Pizza skill работает через Puppeteer – headless Chrome. Причина проста: сайт dodopizza.ru [1] стоит за ServicePipe (антибот-защита), и любые прямые HTTP-запросы получают 403. Приходится эмулировать полноценный браузер. Авторизация вообще требует видимый Chrome с reCAPTCHA. Это работает, но решение тяжёлое: Chrome жрёт память [2], запуск медленный, а капча требует ручного вмешательства.
После Dodo я задумался: а что если следующий skill можно сделать чище – без браузера, без капчи, на чистых REST-вызовах?
Я пользуюсь СберМобайл. Звоню много, раздаю интернет с телефона, периодически проверяю остатки. Каждый раз это одна и та же последовательность: открыть приложение, подождать пока загрузится, потыкать по вкладкам. Три нажатия, чтобы узнать сколько гигабайт осталось. Пять нажатий, чтобы посмотреть какие услуги подключены.
А ещё я хотел видеть всю картину разом: остатки, тариф, подключённые услуги, бонусы – одним вопросом. Ни одно мобильное приложение так не умеет, потому что информация размазана по разным экранам. AI-агент может собрать данные из нескольких API-эндпоинтов и дать сводку за один ответ.
Первый шаг – понять, как устроен личный кабинет. Я открыл lk.sbermobile.ru [3] в Chrome DevTools и начал записывать сетевые запросы. SPA-приложение, база API – https://lk.sbermobile.ru/v2/api/ [4]. Все данные приходят в JSON. Никакого антибота, никакого ServicePipe – просто REST API за авторизацией. После Dodo Pizza это было как глоток свежего воздуха.
Несколько неочевидных вещей, на которые я наткнулся:
Токен передаётся в заголовке token: значение, а не в стандартном Authorization: Bearer. Номер телефона – 10 цифр без +7, в поле number, а не phone. Все суммы – в копейках: 39000 это 390 рублей.
В итоге получилась такая структура:
sbermobile-skill/
|-- client/
| |-- __init__.py
| |-- sbermobile_client.py # REST-клиент
|-- skills/
| |-- base.py # Базовый класс Skill
| |-- account/ # get_balance, get_remainders
| |-- tariff/ # get_current, list_available
| |-- services/ # list_current, get_campaigns
|-- examples/
| |-- agent_demo.py # Интерактивный AI-агент
|-- docs/
| |-- api-reference.md
|-- SKILL.md # Описание для Claude Code
|-- requirements.txt # requests
|-- README.md
Два слоя: Python-клиент (SberMobileClient) и набор AI-skills поверх него.
SberMobileClient – это обёртка над requests. Один файл, ~350 строк, зависимость одна – requests. Поддерживает авторизацию через SMS OTP, автоматически сохраняет и подгружает токен из /tmp/sbermobile_token.json. Все методы – read-only GET-запросы: тариф, остатки, услуги, платежи, промо, семья.
Авторизация выглядит так:
c = SberMobileClient()
c.request_otp('+79XXXXXXXXX') -- SMS уходит на телефон
c.submit_otp('+79XXXXXXXXX', '1234') -- токен сохраняется
-- дальше всё автоматически
Токен живёт долго, и при следующем запуске клиент подхватывает его сам. Не нужно авторизовываться каждый раз.
Каждый skill – это Python-класс, наследник базового Skill. У него есть имя, описание для LLM (когда и зачем вызывать), JSON Schema входных параметров и метод execute(). Skill может вызывать один или несколько методов клиента и агрегировать результат.
Шесть skills покрывают основные сценарии:
account.get_balance -- рекомендуемое пополнение, автоплатёж, бонусы СберСпасибо
account.get_remainders -- остатки пакетов: ГБ, минуты, SMS
tariff.get_current -- текущий тариф + доступные для перехода
tariff.list_available -- витрина тарифов
services.list_current -- подключённые опции
services.get_campaigns -- промо-акции, персональные предложения
Все skills read-only. Write-операции (смена тарифа, подключение опции) в API существуют, но я сознательно их не реализовал в публичной версии. Smart executor умеет запрашивать подтверждение пользователя перед write-операциями, но пока эта механика ждёт своего часа.
Файл SKILL.md [5] – это то, что Claude Code читает при вызове /sbermobile. Он содержит инструкции: как создать клиент, какие методы вызывать, как обработать ошибки [6] авторизации. Фактически это prompt, который превращает Claude из универсального ассистента в оператора моего личного кабинета.
Помимо skill для Claude Code, в проекте есть standalone-агент (examples/agent_demo.py [7]). Это полноценный agentic loop: пользователь пишет вопрос, Claude решает какие skills вызвать, получает результат, формулирует ответ. Всё на Anthropic Python SDK – 130 строк кода. Можно запустить без Claude Code, хоть в Jupyter, хоть на сервере.
Вот пять типичных вопросов, которые я задаю своему оператору через терминал. Каждый ответ – это один или несколько API-вызовов, которые Claude делает автоматически.



У меня уже два работающих skill-а: Dodo Pizza и СберМобайл. Первый – через headless-браузер, второй – через чистые REST-вызовы. Разница в удобстве разработки и скорости работы – колоссальная. REST-skill отвечает за секунду, браузерный – за 10-15.
Но идея шире. Я вижу это как агентскую систему управления повседневными приложениями. Вот что хочу перевести в skills дальше:
Банк – остатки, переводы, история операций. Маркетплейс – отслеживание заказов, статус доставки. Транспорт – баланс карты, маршруты. Госуслуги – статус заявлений, записи.
Представьте утренний запрос в терминале: “дай сводку” – и Claude сам обращается к оператору, банку, маркетплейсу и выдаёт одним сообщением: остаток на балансе, статус доставки, сколько гигабайт осталось. Это не футуристика, это рабочий паттерн уже сегодня.
Каждый skill – это одна зависимость (requests или puppeteer), один markdown-файл с промптом и несколько API-вызовов.
Код проекта целиком – на GitHub: https://github.com/pocketpet/sbermobile-skill [8]
Автор: leviva23
Источник [9]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/27900
URLs in this post:
[1] dodopizza.ru: http://dodopizza.ru
[2] память: http://www.braintools.ru/article/4140
[3] lk.sbermobile.ru: http://lk.sbermobile.ru
[4] https://lk.sbermobile.ru/v2/api/: https://lk.sbermobile.ru/v2/api/
[5] SKILL.md: http://SKILL.md
[6] ошибки: http://www.braintools.ru/article/4192
[7] demo.py: http://demo.py
[8] https://github.com/pocketpet/sbermobile-skill: https://github.com/pocketpet/sbermobile-skill
[9] Источник: https://habr.com/ru/articles/1016328/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1016328
Нажмите здесь для печати.