Skill для Claude Code: управление мобильной связью через терминал | AiManual
AiManual Logo Ai / Manual.
28 Мар 2026 Гайд

Как создать skill для Claude Code: управление мобильной связью через терминал

Пошаговый гайд по созданию навыка для Claude Code 3.0. Автоматизируйте управление услугами оператора через терминал с Puppeteer. Актуально на 2026 год.

Когда веб-интерфейс тормозит вашу жизнь

Зайти в личный кабинет оператора, чтобы проверить баланс или подключить опцию. Казалось бы, пара кликов. На деле – капча, двухфакторная аутентификация, бесконечная загрузка и интерфейс, который меняется раз в полгода. Теряете по 10 минут на то, что должно занимать 10 секунд.

Графические интерфейсы для рутинных задач – это атавизм. Особенно когда вы работаете в терминале. Переключаться между браузером и консолью, копировать логины и пароли – это разрывает поток. Решение лежит на поверхности: заставить Claude Code делать эту работу за вас.

Главная идея не в том, чтобы слепо накликивать интерфейс. Мы создаем текстовый протокол поверх веб-сервиса. Вы говорите Claude "баланс", а он парсит сайт, извлекает данные и возвращает чистый текст. Без браузера. Без ожидания. Это принципиально другой подход к взаимодействию.

1 Готовим инструменты: Puppeteer и Node.js

Puppeteer – это не просто библиотека для скрапинга. Это полный контроль над Chromium. С его помощью можно имитировать любые действия пользователя: клики, ввод текста, навигацию. В 2026 году Puppeteer достиг версии 25, и его API стал стабильнее, хотя документация все так же запутанна.

Первое, что нужно сделать – создать отдельный проект. Не лепите скрипт в общую папку с навыками Claude. Это нарушит изоляцию и усложнит отладку.

mkdir ~/projects/mobile-skills
cd ~/projects/mobile-skills
npm init -y
npm install puppeteer@25.0.0

Почему отдельный проект? Потому что ваш skill для Claude – это лишь обертка, интерфейс. Логика работы с сайтом должна жить в автономном скрипте. Это принцип единственной ответственности. Если API оператора изменится, вы правите один скрипт, а не переписываете весь навык.

💡
В Claude Code 3.0 появилась улучшенная поддержка Subagents. Вы можете делегировать выполнение сложных скриптов отдельным агентам, что идеально ложится на нашу архитектуру. Подробнее об этом в статье "Архитектура Claude Code: как управлять контекстом, Subagents и писать эффективный CLAUDE.md".

2 Пишем скрипт-невидимку для оператора

Здесь большинство спотыкаются. Они пытаются написать универсальный скрипт для всех операторов. Не делайте так. Сфокусируйтесь на своем провайдере. Его логика авторизации и структура DOM уникальны.

Создайте файл mts.js (пример для МТС). Основная задача – пройти три этапа: вход в кабинет, навигация к нужному разделу, парсинг данных. Используйте puppeteer.launch({ headless: 'new' }) – это новый режим безголового Chrome, который стабильнее и быстрее.

const puppeteer = require('puppeteer');

async function getBalance(login, password) {
  const browser = await puppeteer.launch({ headless: 'new' });
  const page = await browser.newPage();
  
  // Устанавливаем реалистичные заголовки
  await page.setUserAgent('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36');
  
  try {
    await page.goto('https://login.mts.ru', { waitUntil: 'networkidle2' });
    
    // Ждем появление формы
    await page.waitForSelector('#login');
    await page.type('#login', login);
    await page.type('#password', password);
    await page.click('#submit-btn');
    
    // Ожидаем редирект в личный кабинет
    await page.waitForNavigation({ waitUntil: 'domcontentloaded' });
    
    // Здесь может быть двухфакторная аутентификация
    // Нужно реализовать логику для ее обработки
    
    // Извлекаем баланс
    await page.waitForSelector('.balance-value');
    const balance = await page.$eval('.balance-value', el => el.textContent.trim());
    
    return { success: true, balance: balance };
  } catch (error) {
    return { success: false, error: error.message };
  } finally {
    await browser.close();
  }
}

// Экспортируем функцию для использования в CLI
if (require.main === module) {
  const [login, password] = process.argv.slice(2);
  getBalance(login, password).then(console.log);
} else {
  module.exports = { getBalance };
}

Обратите внимание на блок try...catch...finally. Браузер должен закрываться в любом случае, даже при ошибке. Иначе у вас в системе будут копиться процессы Chrome.

Никогда не храните пароли в коде. Никогда. Передавайте их через переменные окружения или аргументы командной строки. В следующем разделе я покажу, как Claude Code может безопасно управлять секретами.

Типичные ошибки в скриптах Puppeteer

  • Слишком короткие таймауты. waitForSelector по умолчанию ждет 30 секунд. На медленных сайтах этого может не хватить. Устанавливайте явно { timeout: 60000 }.
  • Игнорирование динамического контента. Если данные подгружаются через AJAX, используйте waitForResponse или waitForFunction.
  • Прямые селекторы. Классы в интерфейсах операторов меняются часто. Используйте селекторы по данным-атрибутам или ролям ARIA, если они есть.

3 Создаем ядро навыка: файл skill.md

Skill в Claude Code – это markdown-файл с особыми секциями. Он описывает, что может делать ваш агент и какие команды выполнять. Не путайте с CLAUDE.md – это другой уровень абстракции.

Создайте файл mobile-provider.skill.md в директории навыков Claude Code (обычно ~/.claude-code/skills/). Структура должна быть четкой.

# Управление мобильной связью (МТС)

## Описание
Навык для проверки баланса, управления тарифом и подключения услуг оператора МТС через терминал. Работает через headless Chrome.

## Команды
- `check balance` – показывает текущий баланс и остатки по пакетам.
- `activate option [name]` – подключает указанную услугу (например, "безлимитный YouTube").
- `change tariff [tariff_id]` – переключает на другой тарифный план.

## Внешние зависимости
- Node.js 18+
- Puppeteer 25
- Скрипт `~/projects/mobile-skills/mts.js`

## Переменные окружения
- `MTS_LOGIN` – номер телефона для входа
- `MTS_PASSWORD` – пароль от личного кабинета

## Реализация команды check balance
```bash
export LOGIN="$MTS_LOGIN"
export PASSWORD="$MTS_PASSWORD"
node ~/projects/mobile-skills/mts.js "$LOGIN" "$PASSWORD" | jq -r '.balance'
```

## Безопасность
Пароли никогда не сохраняются на диск. Используются только переменные окружения сессии.

Обратите внимание на использование jq для парсинга JSON вывода. Это стандартная практика в терминальных сценариях. Если вы не знакомы с jq, самое время изучить – это мощнейший инструмент для работы с JSON в командной строке.

💡
Формат skill.md постоянно развивается. В Claude Code 3.0 добавили секцию ## Interactive для диалоговых навыков. Чтобы глубже понять философию навыков, прочитайте "Claude Skills: инструкция по созданию переиспользуемых промптов".

4 Интеграция: заставляем Claude Code работать с секретами

Claude Code не должен знать ваш пароль. Но он должен уметь его безопасно получить. Решение – менеджер секретов операционной системы или .env файлы.

Создайте файл ~/.env.mts (и добавьте его в .gitignore!):

MTS_LOGIN=79161234567
MTS_PASSWORD=your_strong_password_here

Модифицируйте команду в skill.md, чтобы она загружала переменные:

set -a; source ~/.env.mts; set +a
node ~/projects/mobile-skills/mts.js "$MTS_LOGIN" "$MTS_PASSWORD"

Теперь, когда вы говорите Claude "check balance", он выполнит эту команду, подставив секреты из защищенного файла. Сам Claude никогда не видит пароль в открытом виде в своем контексте.

Внимание! Есть реальная угроза: трояны в skill.md файлах. Злоумышленники могут создавать навыки, которые крадут ваши секреты или ключи. Всегда проверяйте содержимое skill.md файлов, особенно скачанных из ненадежных источников. Подробнее об этой опасности читайте в расследовании про трояны.

Что делать, когда оператор блокирует скрапинг

Раньше можно было просто парсить HTML. Сейчас операторы используют Cloudflare, капчи и детекторы ботов. Есть несколько обходных путей:

  1. Использовать официальное API. Некоторые операторы имеют скрытые или внутренние API для мобильных приложений. Через инструменты разработчика в браузере найдите сетевые запросы и воспроизведите их. Это законно, если вы используете свои данные.
  2. Подключить службу обхода капч. Например, 2Captcha или Anti-Captcha. Puppeteer поддерживает их интеграцию, но это платно.
  3. Имитировать поведение человека. Добавьте случайные задержки между действиями, двигайте мышью, прокручивайте страницу. В Puppeteer есть page.mouse.move() и page.evaluate(() => window.scrollBy()).

Но лучший вариант – написать бота, который использует API. Это надежнее и быстрее. Если API нет, то создание навыка становится инженерной задачей по обратной разработке.

Почему это работает лучше, чем любое GUI-приложение

Вы открываете терминал. Пишете: claude -s mobile check balance. Через три секунды получаете ответ: "Баланс: 342.15 руб. Интернет: 12.7 ГБ из 20".

Никаких окон. Никаких загрузок. Текст.

Этот подход масштабируется. Добавьте команду для отправки USSD-запросов. Или для автоматической оплаты счета при низком балансе. Или для анализа статистики использования за месяц. Все через текстовые команды, которые можно комбинировать в скрипты.

Вы превращаете громоздкий веб-сервис в набор простых UNIX-утилит. Каждая делает одну вещь, но делает хорошо. Это философия, которую мы утеряли в эпоху монолитных приложений.

💡
Хотите ускорить взаимодействие с Claude Code? Изучите полный гайд по горячим клавишам. Сочетания клавиш экономят десятки кликов в день.

Следующий уровень: автономный агент для управления связью

Представьте, что ваш навык вырос. Он не просто выполняет команды, а следит за состоянием счета. При балансе ниже 100 рублей он отправляет уведомление в Telegram. При исчерпании трафика автоматически подключает дополнительный пакет. Это уже не инструмент, а автономный агент.

Для этого нужно добавить в skill.md секцию ## Cron Jobs и настроить планировщик задач. Или использовать более продвинутые возможности Claude Code, такие как фоновые Subagents.

Именно к этому все идет. Текстовые интерфейсы возвращаются, потому что они программируемы. Потому что их можно автоматизировать до уровня, где человек вмешивается только в исключительных случаях.

Ваш навык для управления мобильной связью – первый шаг к этому будущему. Где каждый сервис, каждое устройство имеет текстовый протокол. И где Claude Code становится универсальным пультом управления цифровой жизнью.

Начните с баланса. Потом добавьте управление тарифом. Затем – историю платежей. Через месяц у вас будет полная замена личному кабинету. И вы больше никогда не откроете браузер для этих задач.

Подписаться на канал