Metadata-Version: 2.4
Name: iola-hermes
Version: 0.17.1
Summary: Hermes RU Iola — русскоязычный открытый ИИ-агент
Author: Yakunin
License-Expression: MIT
Requires-Python: <3.14,>=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: openai==2.24.0
Requires-Dist: certifi==2026.5.20
Requires-Dist: python-dotenv==1.2.2
Requires-Dist: fire==0.7.1
Requires-Dist: httpx[socks]==0.28.1
Requires-Dist: rich==14.3.3
Requires-Dist: tenacity==9.1.4
Requires-Dist: pyyaml==6.0.3
Requires-Dist: ruamel.yaml==0.18.17
Requires-Dist: requests==2.33.0
Requires-Dist: jinja2==3.1.6
Requires-Dist: pydantic==2.13.4
Requires-Dist: prompt_toolkit==3.0.52
Requires-Dist: croniter==6.0.0
Requires-Dist: packaging==26.0
Requires-Dist: Markdown==3.10.2
Requires-Dist: PyJWT[crypto]==2.13.0
Requires-Dist: urllib3<3,>=2.7.0
Requires-Dist: tzdata==2025.3; sys_platform == "win32"
Requires-Dist: psutil==7.2.2
Requires-Dist: websockets==15.0.1
Requires-Dist: pathspec==1.1.1
Requires-Dist: fastapi<1,>=0.104.0
Requires-Dist: uvicorn[standard]<1,>=0.24.0
Requires-Dist: python-multipart<1,>=0.0.9
Requires-Dist: ptyprocess<1,>=0.7.0; sys_platform != "win32"
Requires-Dist: pywinpty<3,>=2.0.0; sys_platform == "win32"
Requires-Dist: Pillow==12.2.0
Requires-Dist: concurrent-log-handler==0.9.29; sys_platform == "win32"
Provides-Extra: anthropic
Requires-Dist: anthropic==0.87.0; extra == "anthropic"
Provides-Extra: exa
Requires-Dist: exa-py==2.10.2; extra == "exa"
Provides-Extra: firecrawl
Requires-Dist: firecrawl-py==4.17.0; extra == "firecrawl"
Provides-Extra: parallel-web
Requires-Dist: parallel-web==0.4.2; extra == "parallel-web"
Provides-Extra: fal
Requires-Dist: fal-client==0.13.1; extra == "fal"
Provides-Extra: edge-tts
Requires-Dist: edge-tts==7.2.7; extra == "edge-tts"
Provides-Extra: modal
Requires-Dist: modal==1.3.4; extra == "modal"
Provides-Extra: daytona
Requires-Dist: daytona==0.155.0; extra == "daytona"
Provides-Extra: hindsight
Requires-Dist: hindsight-client==0.6.1; extra == "hindsight"
Provides-Extra: dev
Requires-Dist: debugpy==1.8.20; extra == "dev"
Requires-Dist: pytest==9.0.2; extra == "dev"
Requires-Dist: pytest-asyncio==1.3.0; extra == "dev"
Requires-Dist: mcp==1.26.0; extra == "dev"
Requires-Dist: starlette==1.0.1; extra == "dev"
Requires-Dist: ty==0.0.21; extra == "dev"
Requires-Dist: ruff==0.15.10; extra == "dev"
Requires-Dist: setuptools==81.0.0; extra == "dev"
Provides-Extra: messaging
Requires-Dist: python-telegram-bot[webhooks]==22.6; extra == "messaging"
Requires-Dist: discord.py[voice]==2.7.1; extra == "messaging"
Requires-Dist: aiohttp==3.13.4; extra == "messaging"
Requires-Dist: brotlicffi==1.2.0.1; extra == "messaging"
Requires-Dist: slack-bolt==1.27.0; extra == "messaging"
Requires-Dist: slack-sdk==3.40.1; extra == "messaging"
Requires-Dist: qrcode==7.4.2; extra == "messaging"
Provides-Extra: cron
Provides-Extra: slack
Requires-Dist: slack-bolt==1.27.0; extra == "slack"
Requires-Dist: slack-sdk==3.40.1; extra == "slack"
Requires-Dist: aiohttp==3.13.4; extra == "slack"
Provides-Extra: matrix
Requires-Dist: mautrix[encryption]==0.21.0; extra == "matrix"
Requires-Dist: aiosqlite==0.22.1; extra == "matrix"
Requires-Dist: asyncpg==0.31.0; extra == "matrix"
Requires-Dist: aiohttp-socks==0.11.0; extra == "matrix"
Provides-Extra: wecom
Requires-Dist: defusedxml==0.7.1; extra == "wecom"
Provides-Extra: cli
Requires-Dist: simple-term-menu==1.6.6; extra == "cli"
Provides-Extra: tts-premium
Requires-Dist: elevenlabs==1.59.0; extra == "tts-premium"
Provides-Extra: voice
Requires-Dist: faster-whisper==1.2.1; extra == "voice"
Requires-Dist: sounddevice==0.5.5; extra == "voice"
Requires-Dist: numpy==2.4.3; extra == "voice"
Provides-Extra: pty
Provides-Extra: honcho
Requires-Dist: honcho-ai==2.0.1; extra == "honcho"
Provides-Extra: vision
Provides-Extra: mcp
Requires-Dist: mcp==1.26.0; extra == "mcp"
Requires-Dist: starlette==1.0.1; extra == "mcp"
Provides-Extra: nemo-relay
Requires-Dist: nemo-relay==0.3; extra == "nemo-relay"
Provides-Extra: homeassistant
Requires-Dist: aiohttp==3.13.4; extra == "homeassistant"
Provides-Extra: sms
Requires-Dist: aiohttp==3.13.4; extra == "sms"
Provides-Extra: teams
Requires-Dist: microsoft-teams-apps==2.0.13.4; extra == "teams"
Requires-Dist: aiohttp==3.13.4; extra == "teams"
Provides-Extra: computer-use
Requires-Dist: mcp==1.26.0; extra == "computer-use"
Requires-Dist: starlette==1.0.1; extra == "computer-use"
Provides-Extra: acp
Requires-Dist: agent-client-protocol==0.9.0; extra == "acp"
Provides-Extra: mistral
Requires-Dist: mistralai==2.4.8; extra == "mistral"
Provides-Extra: bedrock
Requires-Dist: boto3==1.42.89; extra == "bedrock"
Provides-Extra: azure-identity
Requires-Dist: azure-identity==1.25.3; extra == "azure-identity"
Provides-Extra: termux
Requires-Dist: python-telegram-bot[webhooks]==22.6; extra == "termux"
Requires-Dist: iola-hermes[cron]; extra == "termux"
Requires-Dist: iola-hermes[cli]; extra == "termux"
Requires-Dist: iola-hermes[pty]; extra == "termux"
Requires-Dist: iola-hermes[mcp]; extra == "termux"
Requires-Dist: iola-hermes[honcho]; extra == "termux"
Requires-Dist: iola-hermes[acp]; extra == "termux"
Provides-Extra: termux-all
Requires-Dist: iola-hermes[termux]; extra == "termux-all"
Requires-Dist: iola-hermes[google]; extra == "termux-all"
Requires-Dist: iola-hermes[homeassistant]; extra == "termux-all"
Requires-Dist: iola-hermes[sms]; extra == "termux-all"
Requires-Dist: iola-hermes[web]; extra == "termux-all"
Provides-Extra: dingtalk
Requires-Dist: dingtalk-stream==0.24.3; extra == "dingtalk"
Requires-Dist: alibabacloud-dingtalk==2.2.42; extra == "dingtalk"
Requires-Dist: qrcode==7.4.2; extra == "dingtalk"
Provides-Extra: feishu
Requires-Dist: lark-oapi==1.5.3; extra == "feishu"
Requires-Dist: qrcode==7.4.2; extra == "feishu"
Provides-Extra: google
Requires-Dist: google-api-python-client==2.194.0; extra == "google"
Requires-Dist: google-auth-oauthlib==1.3.1; extra == "google"
Requires-Dist: google-auth-httplib2==0.3.1; extra == "google"
Provides-Extra: youtube
Requires-Dist: youtube-transcript-api==1.2.4; extra == "youtube"
Provides-Extra: web
Requires-Dist: fastapi==0.133.1; extra == "web"
Requires-Dist: uvicorn[standard]==0.41.0; extra == "web"
Requires-Dist: starlette==1.0.1; extra == "web"
Requires-Dist: python-multipart==0.0.27; extra == "web"
Provides-Extra: all
Requires-Dist: iola-hermes[cron]; extra == "all"
Requires-Dist: iola-hermes[cli]; extra == "all"
Requires-Dist: iola-hermes[pty]; extra == "all"
Requires-Dist: iola-hermes[mcp]; extra == "all"
Requires-Dist: iola-hermes[homeassistant]; extra == "all"
Requires-Dist: iola-hermes[sms]; extra == "all"
Requires-Dist: iola-hermes[acp]; extra == "all"
Requires-Dist: iola-hermes[google]; extra == "all"
Requires-Dist: iola-hermes[web]; extra == "all"
Requires-Dist: iola-hermes[youtube]; extra == "all"
Dynamic: license-file

<p align="center">
  <img src="assets/iola-hermes-banner.png" alt="Hermes RU Iola" width="100%">
</p>

# Hermes RU Iola

**Hermes RU Iola** — русскоязычный публичный форк
[NousResearch/Hermes Agent](https://github.com/NousResearch/hermes-agent).
Проект адаптирует Hermes Agent для русскоязычных пользователей, развивает
установку через npm, desktop-сборки для Windows/Linux, русскую локализацию,
дополнительных провайдеров моделей и интеграции с мессенджерами.

Проект не связан с Nous Research, не поддерживается ими и не является
официальной сборкой Hermes Agent. Оригинальный проект доступен в репозитории
[nousresearch/hermes-agent](https://github.com/NousResearch/hermes-agent).
Лицензия MIT и уведомления об авторских правах upstream сохранены.

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

Проект находится в активной адаптации под русскоязычную аудиторию. Уже
подготовлены npm-установка, русская локализация основных интерфейсов,
брендинг **Hermes RU Iola**, поддержка YandexGPT и GigaChat, а также базовая
инфраструктура для будущих провайдеров моделей и мессенджеров.

## Установка через npm

```bash
npm install -g iola-hermes
iola-hermes
```

npm-пакет устанавливает Python backend из этого репозитория:

```text
https://github.com/yasg1988/iola-hermes
```

Команда `iola-hermes` запускает Hermes CLI через Python-модуль
`hermes_cli.main`. Команда `hermes` также остаётся доступной при установке
через Python packaging для совместимости с upstream.

## Установка из исходников

```bash
git clone https://github.com/yasg1988/iola-hermes.git
cd iola-hermes
py -3.13 -m pip install -e . --no-deps
iola-hermes
```

Проект требует Python `>=3.11,<3.14`. На Windows рекомендуется Python 3.13,
если Python 3.14 уже установлен как версия по умолчанию.

Для нативной установки на Windows используйте PowerShell-скрипт
`scripts/install.ps1`.

## Desktop

Desktop-приложение основано на Electron-сборке upstream Hermes. Имя приложения,
идентификаторы релиза и ссылки обновления переведены на **Hermes RU Iola**.

Планируемые форматы сборок:

- Windows: `nsis`, `msi`
- Linux: `AppImage`, `deb`, `rpm`

Скрипты сборки находятся в `apps/desktop/package.json`.

## Русификация

Русский язык включён как основной для пользовательского опыта форка. Перевод
охватывает CLI, web/desktop-интерфейсы, TUI, установочные сценарии и
документацию проекта.

Названия внешних сервисов и провайдеров, например OpenAI, Nous Research,
Slack, Discord, Matrix и Telegram, сохраняются без перевода.

## Провайдеры моделей

Hermes RU Iola использует plugin-подход upstream. Для простых
OpenAI-compatible провайдеров не нужно менять ядро проекта: достаточно
добавить provider plugin.

В форке уже добавлены провайдеры:

- **YandexGPT** — нужен `YANDEX_API_KEY` и `YANDEX_FOLDER_ID`; endpoint по
  умолчанию: `https://ai.api.cloud.yandex.net/v1`.
- **GigaChat** — нужен готовый `GIGACHAT_AUTH_KEY` или пара
  `GIGACHAT_CLIENT_ID` + `GIGACHAT_CLIENT_SECRET`; дополнительно можно выбрать
  `GIGACHAT_SCOPE` (`GIGACHAT_API_PERS`, `GIGACHAT_API_B2B` или
  `GIGACHAT_API_CORP`). Hermes RU Iola автоматически получает короткоживущий
  access token для OpenAI-compatible endpoint
  `https://gigachat.devices.sberbank.ru/api/v1`.

Оба провайдера отображаются в начале списка выбора модели. Настроить их можно
через мастер `iola-hermes setup` или `iola-hermes model`.

Документы:

- `docs/iola-provider-roadmap.md`
- `docs/templates/model-provider-plugin/`

## Мессенджеры

Интеграции с мессенджерами развиваются через gateway adapters и plugin path.
Сначала сохраняется совместимость с upstream-платформами, затем добавляются
новые адаптеры и русские инструкции настройки.

## Планы

- Дособрать Windows/Linux desktop-релизы и проверить установщики на чистых
  машинах.
- Расширять набор OpenAI-compatible провайдеров через plugin-шаблон.
- Расширить русские инструкции для Telegram, Matrix, Discord, Slack и других
  gateway-интеграций.
- Поддерживать синхронизацию с upstream без потери русской локализации.

## Лицензия

Проект распространяется по лицензии MIT. См. `LICENSE`.
