Последние 3 месяца живу в парадигме, где повседневные приложения на телефоне постепенно превращаются в текстовые команды в терминале. Звучит как откат в 90-е, но на практике это быстрее, удобнее и мощнее, чем тыкать по вкладкам в мобильном приложении. В этой статье расскажу, как появился skill для управления личным кабинетом СберМобайл через Claude Code/OpenClaw/KimiClaw.
Что такое Claude Code Skills
Claude Code — это CLI‑агент от Anthropic, который живёт в терминале и умеет выполнять задачи: писать код, работать с файлами, запускать команды. Но самое интересное — это система skills (в терминологии Anthropic — slash commands). Skill — это markdown‑файл, который описывает для Claude новую способность: какие API вызывать, как авторизоваться, что отвечать пользователю.
Кладёшь файл в ~/.claude/commands/, вызываешь через /имя‑скилла, и Claude получает контекст: документацию API, примеры вызовов, правила форматирования ответов. Дальше он сам решает, какие запросы отправить и как интерпретировать результат. Не нужно ни фронтенда, ни мобильного приложения — только терминал и естественный язык.
Эксперимент — Dodo Pizza
Всё началось с пиццы. Я захотел заказать Додо Пиццу, не открывая приложение. Написал в терминале /dodo, и Claude стал моим курьерским ассистентом: показывает меню, ищет по названию, показывает корзину и профиль.
Технически Dodo Pizza skill работает через Puppeteer — headless Chrome. Причина проста: сайт dodopizza.ru стоит за ServicePipe (антибот‑защита), и любые прямые HTTP‑запросы получают 403. Приходится эмулировать полноценный браузер. Авторизация вообще требует видимый Chrome с reCAPTCHA. Это работает, но решение тяжёлое: Chrome жрёт память, запуск медленный, а капча требует ручного вмешательства.
После Dodo я задумался: а что если следующий 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. Все суммы — в копейках: 39 000 это 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 поверх него.
Python‑клиент
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') -- токен сохраняется -- дальше всё автоматически
Токен живёт долго, и при следующем запуске клиент подхватывает его сам. Не нужно авторизовываться каждый раз.
Skills — атомарные способности агента
Каждый 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 — точка входа для Claude Code
Файл SKILL.md — это то, что Claude Code читает при вызове /sbermobile. Он содержит инструкции: как создать клиент, какие методы вызывать, как обработать ошибки авторизации. Фактически это prompt, который превращает Claude из универсального ассистента в оператора моего личного кабинета.
agent_demo.py — автономный агент
Помимо skill для Claude Code, в проекте есть standalone‑агент (examples/agent_demo.py). Это полноценный agentic loop: пользователь пишет вопрос, Claude решает какие skills вызвать, получает результат, формулирует ответ. Всё на Anthropic Python SDK — 130 строк кода. Можно запустить без Claude Code, хоть в Jupyter, хоть на сервере.
Демо
Вот пять типичных вопросов, которые я задаю своему оператору через терминал. Каждый ответ — это один или несколько API‑вызовов, которые Claude делает автоматически.
«Сколько осталось пакета»

«Какой у меня тариф и сколько я плачу?»

«Какие услуги у меня подключены?»

«Сколько не хватает»

«Какие есть акции или предложения для меня?»

Помогает найти инсайт

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


Что дальше
Интересно, как традиционные интерфейсы веб‑сайтов и мобильных приложений могут трансформироваться и стать пережитком прошлого. Основная сложность любых интерфейсов — это их адаптация под пользователя и донесение функционала без перегрузки. Кажется, в будущем, где живут агенты, пользовательский интерфейс в классическом понимании теряет свою ценность. Мы переходим на этап гипер‑персонализации, когда пользователь может самостоятельно собрать свой собственный личный кабинет для взаимодействия с конкретным продуктом или его объединение с сторонними.
Кажется, такие сложные трансформации займут годы, но если диффузия фундаментальных моделей и сторонних продуктов продолжится, то мы увидим более глубокую интеграцию и смену юнит‑экономик продуктов.