Подключаем российские AI-сервисы к OpenClaw: GigaChat, YandexGPT и Yandex 360

TL;DR

Собрал пять агентов на базе OpenClaw: Jarvis (Claude Sonnet 4.5), Coder и Planner (Claude Opus 4.6), Ruslan (GigaChat-Pro) и Яша (YandexGPT). Все работает через Telegram. Полный код и навыки — на GitHub: openclaw-ru-skills.

Зачем это нужно

OpenClaw — это персональный AI-ассистент с открытым кодом, который умеет в мультиагентность, инструменты и интеграции. Из коробки работает с Claude, GPT, и другими западными моделями. Но что, если хочется добавить российские сервисы?

Эксперимент: создать навыки (skills) для трёх российских AI-сервисов с нуля и задокументировать каждый шаг. Для чистоты эксперимента — отдельный пустой репозиторий.

Архитектура

Telegram → OpenClaw Gateway → ? Jarvis (Claude Sonnet 4.5, главный агент)
                            → ? Coder (Claude Opus 4.6, кодинг)
                            → ? Planner (Claude Opus 4.6 + Extended Thinking)
                            → ? Ruslan (GigaChat-Pro)
                            → ? Яша (YandexGPT)

OpenClaw → yax skill → Yandex 360 (Disk/Calendar/Mail/Telemost)
OpenClaw → Yandex Cloud (TTS/Vision/Translate/ImageGen)

Шаг 1: Базовая настройка OpenClaw

Установка

OpenClaw ставится в три команды:

curl -fsSL https://openclaw.ai/install.sh | sh
openclaw gateway start
openclaw onboard

Процесс onboard проведёт через настройку агента и подключение к Telegram (или другому каналу).

Деплой на Railway

Я использовал Railway (hobby plan, $5/мес). Важные моменты:

  1. Блокировка SMTP портов: Railway блокирует исходящие соединения на порты 25/465/587 — отправка почты через SMTP не работает.

  2. Переменные окружения: Все секреты (API-ключи, токены) — в environment variables.

  3. Персистентность процессов: Прокси-серверы (gpt2giga, yandexgpt) нужно стартовать вручную или через startup script.

Структура проекта

openclaw-ru-skills/
├── gigachat/          # Навык для GigaChat
│   ├── SKILL.md
│   └── scripts/
├── yandexgpt/         # Навык для YandexGPT
│   ├── SKILL.md
│   ├── src/proxy.js   # Translation proxy
│   └── scripts/
└── yax/               # Навык для Yandex 360
    ├── SKILL.md
    └── src/

Шаг 2: GigaChat через gpt2giga

Получение доступа

  1. Регистрация на https://developers.sber.ru/

  2. Создание приложения GigaChat API

  3. Получение Client ID и Client Secret

  4. Scope: GIGACHAT_API_PERS (бесплатный персональный)

Установка прокси

GigaChat не совместим с OpenAI API из коробки. Используем gpt2giga — Python-прокси, который переводит запросы OpenAI → GigaChat:

pip3 install gpt2giga

Запуск

export GIGACHAT_CREDS=$(echo -n "CLIENT_ID:CLIENT_SECRET" | base64)

gpt2giga \
  --gigachat.credentials $GIGACHAT_CREDS \
  --gigachat.scope GIGACHAT_API_PERS \
  --gigachat.verify-ssl-certs false \
  --proxy.port 8443 \
  --proxy.pass-model true

Важно: --gigachat.verify-ssl-certs false нужен, потому что Сбер использует собственный корневой CA.

Конфигурация OpenClaw

Добавляем провайдера в openclaw.json:

{
  "models": {
    "providers": {
      "gigachat": {
        "baseUrl": "http://127.0.0.1:8443",
        "apiKey": "dummy",
        "api": "openai-completions",
        "models": [
          {
            "id": "GigaChat-Max",
            "name": "GigaChat MAX",
            "contextWindow": 32768,
            "maxTokens": 8192
          },
          {
            "id": "GigaChat-Pro",
            "name": "GigaChat Pro",
            "contextWindow": 32768,
            "maxTokens": 4096
          },
          {
            "id": "GigaChat",
            "name": "GigaChat Lite",
            "contextWindow": 8192,
            "maxTokens": 2048
          }
        ]
      }
    }
  },
  "agents": {
    "list": [
      {
        "id": "ruslan",
        "name": "Ruslan",
        "emoji": "?",
        "model": "gigachat/GigaChat-Pro",
        "workspace": "/root/.openclaw/agents/ruslan/workspace"
      }
    ]
  }
}

Создание агента Ruslan

Второй агент с русскоязычной душой. Создаём файлы в /root/.openclaw/agents/ruslan/workspace/:

IDENTITY.md:

# IDENTITY.md

- Name: Ruslan
- Creature: Российский AI-ассистент
- Vibe: Дружелюбный, знает русский контекст
- Emoji: ?

SOUL.md:

# SOUL.md — Кто ты

Ты Руслан. Российский AI-ассистент на базе GigaChat-Pro.

Говоришь на русском, знаешь русский контекст (кухня, культура, реалии).
Отвечаешь кратко и по делу. Без лишней вежливости.

Проверка

curl -X POST http://localhost:8443/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "GigaChat-Pro",
    "messages": [{"role": "user", "content": "Столица России?"}]
  }'

Ответ: "Москва" (19 токенов).

Подводные камни

  1. gpt2giga зомби: Процессы могут становиться defunct и держать порты. Убиваем через fuser -k 8443/tcp + kill -9.

  2. Credentials в ps aux: CLI-аргументы видны в списке процессов — потенциальная дыра безопасности.

  3. Редиректы 307: Эндпоинт /v1/models возвращает 307 редирект → используем curl -L.

Шаг 3: YandexGPT через translation proxy

Yandex Cloud setup

  1. Создаём service account в Yandex Cloud Console

  2. Генерируем API-ключ

  3. Критично: назначаем роль ai.editor на folder через Access Bindings

Частая ошибка: Добавить разрешения на сервисный аккаунт ≠ назначить роль на folder. YandexGPT проверяет роли на уровне folder, а не разрешения на SA.

yc iam service-account create --name openclaw-sa
SA_ID=$(yc iam service-account get openclaw-sa --format json | jq -r .id)
yc iam api-key create --service-account-id $SA_ID
yc resource-manager folder add-access-binding <FOLDER_ID> \
  --role ai.editor \
  --subject serviceAccount:$SA_ID

Translation proxy

YandexGPT API не совместим с OpenAI. Написал Node.js прокси (zero dependencies), который переводит OpenAI API → YandexGPT API:

  • Принимает запросы на /v1/chat/completions

  • Конвертирует формат OpenAI → YandexGPT

  • Использует Api-Key авторизацию

  • Маппит usage statistics (tokens)

Полный код прокси — в репозитории: yandexgpt/src/proxy.js

Запуск:

cd yandexgpt/src
YANDEX_FOLDER_ID=<folder-id> YANDEX_API_KEY=<api-key> node proxy.js

Прокси слушает на порту 8444.

Конфигурация OpenClaw

{
  "models": {
    "providers": {
      "yandexgpt": {
        "baseUrl": "http://127.0.0.1:8444",
        "apiKey": "dummy",
        "api": "openai-completions",
        "models": [
          {
            "id": "yandexgpt",
            "name": "YandexGPT",
            "contextWindow": 8192,
            "maxTokens": 2048
          },
          {
            "id": "yandexgpt-lite",
            "name": "YandexGPT Lite",
            "contextWindow": 8192,
            "maxTokens": 2048
          },
          {
            "id": "yandexgpt-32k",
            "name": "YandexGPT 32K",
            "contextWindow": 32768,
            "maxTokens": 4096
          }
        ]
      }
    }
  },
  "agents": {
    "list": [
      {
        "id": "yandex",
        "name": "Яша",
        "emoji": "?",
        "model": "yandexgpt/yandexgpt",
        "workspace": "/root/.openclaw/agents/yandex/workspace"
      }
    ]
  }
}

Создание агента Яша

IDENTITY.md:

# IDENTITY.md

- Name: Яша
- Creature: Билингвальный AI-ассистент (русский + английский)
- Vibe: Дружелюбный, нейтральный
- Emoji: ?

Проверка

curl -X POST http://localhost:8444/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "yandexgpt",
    "messages": [{"role": "user", "content": "Столица России?"}]
  }'

Ответ: "Москва." (16 токенов).

Шаг 4: Yandex 360 через yax

OAuth setup

Yandex 360 API требует OAuth. Создаём приложение:

  1. https://oauth.yandex.ru/client/new

  2. Redirect URI: https://oauth.yandex.ru/verification_code (для CLI/ботов)

  3. Выбираем scopes для нужных сервисов:

Сервис

Scope

Что дает

Disk

cloud_api:disk.app_folder

Доступ к app-папке

cloud_api:disk.info

Информация о диске и квоте

Calendar

calendar:all

Чтение/запись событий календаря

Mail

mail:imap_full

Чтение почты через IMAP

mail:smtp

Отправка почты через SMTP

Telemost

telemost-api:conferences.create

Создание видеоконференций

? Выбирайте только нужные scopes. Большинству пользователей нужны только Disk + Calendar.

? Полный список scopes: https://yandex.ru/dev/id/doc/ru/codes/scopes

Установка yax

cd /openclaw/skills
git clone https://github.com/smvlx/openclaw-ru-skills
cd openclaw-ru-skills/yax
npm install --include=dev
npx tsc

Аутентификация

node dist/index.js auth \
  --client-id 79ccb7ad7edc4fa5b0b6602e93ff9958 \
  --redirect-uri https://oauth.yandex.ru/verification_code

Открывается браузер, вводим код, токен сохраняется в ~/.openclaw/yax/token.json.

Примеры использования

Yandex Disk:

yax disk info       # 49 GB свободно
yax disk list /     # Список файлов
yax disk upload local.txt /remote.txt
yax disk mkdir /test

Yandex Calendar (CalDAV):

yax calendar list                              # Список календарей
yax calendar create "Встреча" "2026-02-14" "11:00:00" "12:00:00" "Описание" "Europe/Moscow"

Используется прямое CalDAV API Yandex.Calendar с OAuth авторизацией. Реализация включает:

  • Auto-discovery логина через https://login.yandex.ru/info

  • PROPFIND для определения путей календарей

  • Правильные CalDAV пути: /calendars/{login}@yandex.ru/events-{id}/{uid}.ics

  • Поддержка timezone (VTIMEZONE block в ICS)

Yandex Mail (IMAP/SMTP):

yax mail  # Показывает информацию об ограничениях

Yandex не предоставляет HTTP API для почты, только IMAP/SMTP (порты 993/465). Работает локально, но порты заблокированы на облачных платформах типа Railway.

Yandex Telemost (видеоконференции):

OAuth scope telemost-api:conferences.create уже включен в настройки. Требует платную подписку Yandex 360 (403 на бесплатных аккаунтах).

Шаг 5: Мультиагентность

OpenClaw поддерживает несколько агентов из коробки. Каждый агент:

  • Имеет собственную модель

  • Имеет собственный workspace (файлы, память)

  • Имеет собственную душу (SOUL.md, IDENTITY.md)

Конфигурация

{
  "tools": {
    "agentToAgent": {
      "enabled": true,
      "allow": ["ruslan", "yandex", "coder", "planner"]
    }
  },
  "agents": {
    "defaults": {
      "model": {
        "primary": "anthropic/claude-sonnet-4-5"
      }
    },
    "list": [
      {
        "id": "main",
        "subagents": {
          "allowAgents": ["ruslan", "yandex", "coder", "planner"]
        }
      },
      {
        "id": "ruslan",
        "model": "gigachat/GigaChat-Pro"
      },
      {
        "id": "yandex",
        "model": "yandexgpt/yandexgpt"
      },
      {
        "id": "coder",
        "model": "anthropic/claude-opus-4-6"
      },
      {
        "id": "planner",
        "model": "anthropic/claude-opus-4-6",
        "thinking": "max"
      }
    ]
  }
}

Использование

В Telegram:

Пользователь: @OpenClawBot попроси Руслана написать стих про Байкал

Jarvis: [запускает subagent ruslan]
Ruslan: [пишет стих на GigaChat-Pro]
Jarvis: [возвращает результат]

Результаты тестирования

GigaChat-Pro (Ruslan ?)

Тест: "Столица России?"
Ответ: "Москва" (19 токенов, 1.2 сек)

Тест: "Напиши стих про Москву" (4 строки)
Ответ: Осмысленный стих, хорошая рифма, русский контекст. 150 токенов.

YandexGPT (Яша ?)

Тест: "Столица России?"
Ответ: "Москва." (16 токенов, 0.8 сек)

Тест: "Explain machine learning" (English)
Ответ: Корректный ответ на английском, но слегка "русифицированный" стиль (особенность модели).

Yandex Disk (yax)

  • ✅ Информация о диске

  • ✅ Список файлов

  • ✅ Загрузка/скачивание

  • ✅ Создание папок

  • ❌ Публичные ссылки (не тестировалось)

Yandex Calendar (yax)

  • ✅ Список календарей (CalDAV API с auto-discovery)

  • ✅ Список событий (протестировано с реальным событием)

  • ✅ Создание событий (протестировано, работает с правильными CalDAV путями)

Подводные камни и решения

Проблема

Причина

Решение

gpt2giga зомби-процессы

Defunct processes держат порты

fuser -k 8443/tcp && kill -9 <PID>

GigaChat 402 Payment Required

Квота бесплатного тира исчерпана

Нужен платный доступ или новые credentials

YandexGPT 403

Неправильный FOLDER_ID в env

Проверить YANDEX_FOLDER_ID

IAM разрешения ≠ роли

Permissions на SA ≠ roles на folder

yc resource-manager folder add-access-binding

Railway блокирует SMTP

Закрыты порты 25/465/587

Использовать HTTP API (если есть)

Telemost 403

Требуется Yandex 360 подписка

Недоступно на обычных аккаунтах

gpt2giga credentials leak

CLI args в ps aux

Использовать env vars или файл

npm devDependencies

npm install пропускает dev-зависимости

npm install --include=dev

CalDAV неправильные пути

Запись на /calendars/events/ дает 404

Использовать /calendars/{login}@yandex.ru/events-{id}/

Итоги

Что работает

GigaChat (все модели: Lite, Pro, Max) через gpt2giga
YandexGPT (все модели: lite, default, 32k) через custom proxy
Yandex Disk (info, list, upload, download, mkdir)
Yandex Calendar (list, read, create events с timezone support)
Yandex Mail (через IMAP/SMTP, но порты заблокированы на PaaS платформах)
Yandex Telemost (create, info, modify)
Мультиагентность (Jarvis + Ruslan + Яша)
Agent-to-agent communication (subagents, sessions_send)

Ограничения

⚠️ Yandex Mail: Работает через IMAP/SMTP, но порты 993/465 заблокированы на Railway и аналогичных PaaS
⚠️ Yandex Telemost: Требует платную подписку Yandex 360 (403 на бесплатных аккаунтах)

Ссылки

Комментарии (8)


  1. rPman
    16.02.2026 12:31

    А на практике, старшие модели от yandex и и сбербанк имеют хотя бы пользу? они держат контекст в чате, способны к верному структурному выводу без кандалов structured outputs генератора? Как часто ваши агенты не смогут найти ожидаемый текст в ответе модели?


    1. smvlx Автор
      16.02.2026 12:31

      Хороший вопрос. Я сам был немного удивлён, но старшие модели Яндекса и Сбера на практике показали себя вполне адекватно для простых и средних задач — в том числе на английском языке.

      Контекст удерживается не только за счёт самой модели, но и за счёт памяти OpenClaw: у каждого агента есть своя история и состояние, которые мы явно прокидываем в запросы. Это сильно снижает требования к «идеальной» контекстной способности модели.

      По структурным выводам: для большинства рутинных сценариев (поиск, сбор, первичный анализ, суммаризация) они справляются без жёсткой привязки к structured outputs. Случаи, когда агент не находит ожидаемый фрагмент в ответе, бывают, но пока это скорее редкие edge-cases, а не системная проблема.

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


      1. rPman
        16.02.2026 12:31

        вы пробовали подключить топовую модель от yandex к openhands? или mini-swe-agent?


        1. smvlx Автор
          16.02.2026 12:31

          Не пробовал, для разработки использую Claude Opus 4.6 и иногда Codex.


  1. Dirlandets
    16.02.2026 12:31

    Спасибо за наводки! Прикидывал (пока в уме) как бы яндекс диск интегрировать, а оно вон как просто (главное чтобы не стер все нафиг)

    У меня обсидиан синкается через яндекс диск, вот как раз нехватающий кусочек!


    1. smvlx Автор
      16.02.2026 12:31

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

      При необходимости дальше можно аккуратно расширять права под конкретные сценарии.


  1. Pavel_Vibe
    16.02.2026 12:31

    Спасибо за табличку с подводными камнями — вот это реально полезно. Сам наступал на грабли с IAM-ролями в Yandex Cloud: полчаса искал почему 403, оказалось роль на SA навесил, а не на folder. Классическая яндексовая магия.

    Кстати, не пробовали вместо gpt2giga использовать LiteLLM? Он тоже умеет в прокси для нестандартных провайдеров, и там хотя бы supervisord не нужен — демонизируется нормально.


    1. smvlx Автор
      16.02.2026 12:31

      Спасибо!
      Готовлю еще одну статью, там подводных камней будет кратно больше чем тут :)

      Нет, пробовал только gpt2giga. У LiteLLM не видел поддержку gigachat из коробки, поэтому пришлось бы делать кастомный коннектор, а это по сути gpt2giga