329 lines
20 KiB
Markdown
329 lines
20 KiB
Markdown
|
|
# Анализ: IronClaw (NearAI) + Timeweb — применимость к SeaFare Montana
|
|||
|
|
|
|||
|
|
**Дата:** 22 февраля 2026
|
|||
|
|
**Автор:** AI-аналитик SeaFare Montana
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. ЧТО ТАКОЕ IRONCLAW?
|
|||
|
|
|
|||
|
|
**Rust-based AI-агент** от NearAI (Илья Полосухин — со-автор "Attention Is All You Need", основатель NEAR Protocol). Позиционируется как безопасная замена OpenClaw, который стал катастрофой безопасности (42,000+ открытых инстансов, утечки API ключей, RCE уязвимости).
|
|||
|
|
|
|||
|
|
GitHub: https://github.com/nearai/ironclaw
|
|||
|
|
|
|||
|
|
| Параметр | Значение |
|
|||
|
|
|----------|----------|
|
|||
|
|
| Язык | Rust (96%) |
|
|||
|
|
| Версия | 0.9.0 (21 фев 2026) |
|
|||
|
|
| Возраст | **3 недели** (с 3 фев 2026) |
|
|||
|
|
| Stars | 2,800 |
|
|||
|
|
| Лицензия | Apache 2.0 + MIT |
|
|||
|
|
| Релизы | 8 за 10 дней |
|
|||
|
|
| Open issues | 116 |
|
|||
|
|
|
|||
|
|
### Ключевые фичи:
|
|||
|
|
- **Multi-LLM**: Claude, GPT-4o, Ollama (локальные модели), OpenRouter (300+ моделей)
|
|||
|
|
- **Sandbox изоляция**: Docker-контейнеры для инструментов
|
|||
|
|
- **Шифрование секретов**: AES-256-GCM, ключи в OS keychain
|
|||
|
|
- **Leak detection**: Сканирование ответов на утечку кредов
|
|||
|
|
- **Self-expanding**: Агент сам создаёт инструменты (WASM)
|
|||
|
|
- **Каналы**: CLI, HTTP, Telegram, Slack, Web UI
|
|||
|
|
- **Память**: PostgreSQL + pgvector (векторный поиск)
|
|||
|
|
- **Smart routing**: Failover между LLM провайдерами, circuit breaker
|
|||
|
|
|
|||
|
|
### Архитектура безопасности (6 уровней):
|
|||
|
|
1. Защита от prompt injection (обёртка контента + экранирование)
|
|||
|
|
2. Обнаружение утечек credentials (сканирование перед отдачей)
|
|||
|
|
3. Ограничение длины (защита от buffer overflow)
|
|||
|
|
4. Политики блокировки (настраиваемые правила)
|
|||
|
|
5. Изоляция контейнеров (Docker + capabilities)
|
|||
|
|
6. Прокси-валидация сети (allowlisting)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. КРИТИЧЕСКИЙ АНАЛИЗ: ПОДХОДИТ ЛИ ДЛЯ SEAFARE MONTANA?
|
|||
|
|
|
|||
|
|
### ❌ НЕТ. Вот почему:
|
|||
|
|
|
|||
|
|
#### Проблема 1: ПРИНЦИПИАЛЬНО ДРУГОЙ ПРОДУКТ
|
|||
|
|
|
|||
|
|
IronClaw — это **персональный AI-ассистент общего назначения** (аналог Claude Code / Cursor). Он НЕ:
|
|||
|
|
- Веб-сервис для конечных пользователей
|
|||
|
|
- REST API с аутентификацией
|
|||
|
|
- Мультитенантная платформа (много пользователей одновременно)
|
|||
|
|
|
|||
|
|
SeaFare Montana — это **веб-приложение** (index.html → Flask API → Claude agent → БД). IronClaw не заменяет эту архитектуру. Он заменяет **разработчика**, а не приложение.
|
|||
|
|
|
|||
|
|
#### Проблема 2: ВОЗРАСТ 3 НЕДЕЛИ
|
|||
|
|
|
|||
|
|
- Проекту 20 дней. Ещё не v1.0
|
|||
|
|
- 116 открытых issues
|
|||
|
|
- Schema БД меняется (9 миграций за 20 дней)
|
|||
|
|
- Ни одного задокументированного production deployment
|
|||
|
|
- Никаких security-аудитов
|
|||
|
|
|
|||
|
|
#### Проблема 3: ТРЕБУЕТ RUST + DOCKER
|
|||
|
|
|
|||
|
|
- Наш стек: Python (Flask, Claude API). Команда знает Python
|
|||
|
|
- IronClaw: Rust 1.85+, PostgreSQL 15 + pgvector, Docker обязательно
|
|||
|
|
- Кто будет поддерживать Rust-код при проблемах?
|
|||
|
|
|
|||
|
|
#### Проблема 4: NEAR PROTOCOL / BLOCKCHAIN
|
|||
|
|
|
|||
|
|
- IronClaw по умолчанию аутентифицируется через NEAR AI OAuth
|
|||
|
|
- Блокчейн НЕ обязателен, но экосистема привязана к NEAR
|
|||
|
|
- Крипто-проект = репутационные риски для морской логистики
|
|||
|
|
|
|||
|
|
#### Проблема 5: НЕ РЕШАЕТ НАШИХ РЕАЛЬНЫХ ПРОБЛЕМ
|
|||
|
|
|
|||
|
|
Наши реальные проблемы:
|
|||
|
|
- MarineTraffic API (решается получением ключа, не сменой фреймворка)
|
|||
|
|
- AIS данные (решается через AISStream/AISHub, уже работает)
|
|||
|
|
- UI для выбора груза (уже сделали в v3.9.0)
|
|||
|
|
- Render free tier ограничения (решается VPS, не IronClaw)
|
|||
|
|
|
|||
|
|
IronClaw НЕ даёт нам: доступ к AIS данным, MarineTraffic API, базу портов, маршруты, Equasis. Это всё у нас уже есть.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. ЧТО АЛИК ИМЕЛ В ВИДУ И ПОЧЕМУ ЭТО УЖЕ ЕСТЬ
|
|||
|
|
|
|||
|
|
> "Нужно 1 раз агента обучить... По этой модели с безопасностью и изолированностью всего. С полным понимаем всего контекста меню."
|
|||
|
|
|
|||
|
|
### Разбор по пунктам:
|
|||
|
|
|
|||
|
|
**"Обучить 1 раз"** — LLM не "обучаются" однократно. Они получают system prompt каждый запрос. Наш агент уже делает это: SYSTEM_PROMPT в seafare_agent.py содержит 100+ строк с полным описанием 26 инструментов и правил поведения. Это и есть "обучение".
|
|||
|
|
|
|||
|
|
**"Безопасность и изолированность"** — IronClaw изолирует ИНСТРУМЕНТЫ (shell-команды, файловые операции) в Docker. Наши инструменты — это Python-функции (поиск судов, маршруты, AIS запросы). Они и так безопасны — нет shell access, нет доступа к файловой системе, нет произвольного выполнения кода.
|
|||
|
|
|
|||
|
|
**"Понимание контекста меню"** — Это system prompt + user_context. У нас SYSTEM_PROMPT описывает все 26 инструментов, а user_context инжектирует профиль пользователя и баланс в каждый запрос.
|
|||
|
|
|
|||
|
|
### Вывод: Алик описывает то, что у нас **уже реализовано** через Claude API + tool-calling. IronClaw — это другой способ делать то же самое, но с overhead Rust/Docker/NEAR.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. ЧТО У НАС УЖЕ ЕСТЬ (SeaFare Montana v3.9.0)
|
|||
|
|
|
|||
|
|
| Функция | Статус |
|
|||
|
|
|---------|--------|
|
|||
|
|
| AI-агент с 26 инструментами | ✅ Работает |
|
|||
|
|
| Tool-calling цикл (макс 7 итераций) | ✅ Работает |
|
|||
|
|
| System prompt с полным контекстом | ✅ 100+ строк правил |
|
|||
|
|
| Поиск судов по назначению (AIS destination) | ✅ v3.8.0 |
|
|||
|
|
| Поиск по соседним портам (50 NM) | ✅ v3.8.0 |
|
|||
|
|
| Фильтрация по типу груза (сухой/контейнер/наливной) | ✅ v3.7.1 |
|
|||
|
|
| UI форма выбора груза (3 карточки) | ✅ v3.9.0 |
|
|||
|
|
| Расширяющийся радиус поиска (50→200→500 NM) | ✅ v3.7.0 |
|
|||
|
|
| Кнопки "Показать на карте" | ✅ v3.7.0 |
|
|||
|
|
| AIS провайдер (AISStream + AISHub + Digitraffic) | ✅ Работает |
|
|||
|
|
| Google OAuth + кошелёк USDT | ✅ Работает |
|
|||
|
|
| Мультиязычный интерфейс (EN/RU/ES) | ✅ Работает |
|
|||
|
|
| Sanctions screening + dark fleet detection | ✅ Работает |
|
|||
|
|
| PostgreSQL в продакшене | ✅ Работает |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. TIMEWEB CLOUD (ФРАНКФУРТ, 700 РУБ/МЕС)
|
|||
|
|
|
|||
|
|
### Что получаешь за 700 руб:
|
|||
|
|
- ~2 GB RAM, 1 vCPU, 30-40 GB NVMe SSD
|
|||
|
|
- Frankfurt дата-центр (хорошо для Европа/Каспий)
|
|||
|
|
- Публичный IP, SSH доступ
|
|||
|
|
- Let's Encrypt SSL бесплатно
|
|||
|
|
|
|||
|
|
### Идея VPS — ПРАВИЛЬНАЯ. Решает реальные проблемы Render:
|
|||
|
|
|
|||
|
|
| Проблема Render Free | VPS решает? |
|
|||
|
|
|----------------------|-------------|
|
|||
|
|
| Засыпает через 15 мин → WebSocket рвётся | ✅ VPS всегда включен |
|
|||
|
|
| Daemon threads умирают на gunicorn | ✅ Полный контроль ОС |
|
|||
|
|
| SQLite эфемерный (данные теряются) | ✅ PostgreSQL на VPS |
|
|||
|
|
| Нет cron jobs | ✅ Полный systemd/cron |
|
|||
|
|
|
|||
|
|
### Минусы Timeweb:
|
|||
|
|
- ⚠️ **Российские IP** — Google/PayPal могут блокировать (критично для платежей!)
|
|||
|
|
- ⚠️ Ручное администрирование — нет auto-deploy
|
|||
|
|
- ⚠️ CPU троттлинг на shared VPS (по отзывам)
|
|||
|
|
|
|||
|
|
### РЕКОМЕНДАЦИЯ: Hetzner вместо Timeweb
|
|||
|
|
|
|||
|
|
| Параметр | Timeweb | Hetzner |
|
|||
|
|
|----------|---------|---------|
|
|||
|
|
| Цена | 700 руб (~$8) | €3.79 (~400 руб) |
|
|||
|
|
| RAM | 2 GB | 4 GB |
|
|||
|
|
| vCPU | 1 | 2 |
|
|||
|
|
| SSD | 30-40 GB | 40 GB |
|
|||
|
|
| Локация | Frankfurt | Falkenstein/Frankfurt |
|
|||
|
|
| IP репутация | ⚠️ Российские | ✅ Немецкие |
|
|||
|
|
| SLA | 99.98% | 99.9% |
|
|||
|
|
| Docker | Да | Да |
|
|||
|
|
| Snapshots | Да | Да |
|
|||
|
|
|
|||
|
|
**Hetzner дешевле, мощнее, и без проблем с репутацией IP.**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. ИТОГОВАЯ РЕКОМЕНДАЦИЯ
|
|||
|
|
|
|||
|
|
### IronClaw → ❌ НЕ ВНЕДРЯТЬ
|
|||
|
|
|
|||
|
|
| Причина | Детали |
|
|||
|
|
|---------|--------|
|
|||
|
|
| Не тот продукт | Персональный ассистент ≠ веб-платформа для клиентов |
|
|||
|
|
| Слишком сырой | v0.9.0, 3 недели, 116 issues, ноль production deployments |
|
|||
|
|
| Не решает наших задач | AIS, порты, маршруты — этого в IronClaw нет |
|
|||
|
|
| Лишняя сложность | Rust + Docker + NEAR вместо рабочего Python + Claude API |
|
|||
|
|
| У нас уже есть | Tool-calling, system prompt, 26 инструментов = "обученный агент" |
|
|||
|
|
|
|||
|
|
### VPS миграция → ✅ ДА, но на Hetzner
|
|||
|
|
|
|||
|
|
Переезд с Render free tier на VPS разумен для стабильности AIS WebSocket и daemon threads.
|
|||
|
|
|
|||
|
|
### Что реально нужно делать (по приоритету):
|
|||
|
|
|
|||
|
|
1. **Получить MarineTraffic API ключ** — trial на неделю уже договорились
|
|||
|
|
2. **Интегрировать MT API** в ais_provider.py как premium источник данных
|
|||
|
|
3. **Перенести на Hetzner VPS** когда MT API готов
|
|||
|
|
4. **Настроить CI/CD**: GitHub Actions → SSH deploy на VPS
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7. О КОНТЕЙНЕРОВОЗАХ (ВОПРОС ДАТО)
|
|||
|
|
|
|||
|
|
На MarineTraffic контейнеровозы отображаются **тем же зелёным цветом**, что и сухогрузы (AIS коды 70-79 = "cargo"). Различаются только по текстовому описанию типа судна. Наша система (`classify_vessel_type()` в marinetraffic_parser.py) уже умеет их разделять. В UI форме (v3.9.0) — 3 отдельные карточки: Сухой груз / Контейнеры / Наливной.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 8. РАЗБОР ФИЧ IRONCLAW: ЧТО МОЖНО ВЗЯТЬ ДЛЯ НАШЕГО ПРОЕКТА?
|
|||
|
|
|
|||
|
|
Ниже — критический разбор каждой фичи IronClaw: нужна ли она нам, и если да — нужен ли для этого IronClaw.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 8.1. Multi-LLM (Claude + GPT-4o + Ollama + failover)
|
|||
|
|
|
|||
|
|
**Наш статус**: Только Claude Sonnet. Если Anthropic API упал — всё мертво.
|
|||
|
|
|
|||
|
|
**Полезно?** **ДА, частично.** Failover на другую модель при падении Claude — реальная проблема. Anthropic иногда лежит. Но:
|
|||
|
|
- Реализация: 2-3 часа — добавить `try/except` в `generate_response()`, при ошибке Claude → вызвать OpenAI GPT-4o. System prompt и tools совместимы (OpenAI тоже поддерживает tool-calling).
|
|||
|
|
- Для этого **не нужен IronClaw**. Это 50 строк Python-кода.
|
|||
|
|
- Ollama (локальные модели) — бессмысленно. Llama 3 не потянет 26 инструментов с tool-calling. Качество ответов будет мусор.
|
|||
|
|
|
|||
|
|
**Вердикт: Полезна идея failover. Реализация тривиальная, IronClaw не нужен.**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 8.2. Sandbox изоляция (Docker)
|
|||
|
|
|
|||
|
|
**Наш статус**: Инструменты — Python-функции. `search_vessel()`, `calculate_route()`, `get_position()`. Никакого shell access, никакого exec(), никакого пользовательского кода.
|
|||
|
|
|
|||
|
|
**Полезно?** **НЕТ.** Sandbox нужен когда агент выполняет **произвольный код** от пользователя (как Claude Code выполняет bash-команды). Наш агент вызывает **фиксированные функции** из `_TOOL_DISPATCH` dict. Пользователь не может инжектировать код. Это как ставить бронедверь в комнату без окон и дверей.
|
|||
|
|
|
|||
|
|
**Вердикт: Не нужно. Наша архитектура безопасна by design.**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 8.3. Шифрование секретов (AES-256-GCM)
|
|||
|
|
|
|||
|
|
**Наш статус**: Секреты в `.env` файле (plaintext) локально, через Render Dashboard env vars в проде. Стандартный подход.
|
|||
|
|
|
|||
|
|
**Полезно?** **НЕТ для нашего масштаба.** AES-256 шифрование секретов нужно когда:
|
|||
|
|
- Несколько разработчиков с разными уровнями доступа
|
|||
|
|
- Секреты хранятся в Git (encrypted)
|
|||
|
|
- Compliance требования (SOC 2, HIPAA)
|
|||
|
|
|
|||
|
|
У нас: 1 репо, 1-2 разработчика, `.env` в `.gitignore`. Render Dashboard шифрует env vars автоматически. Overhead шифрования не оправдан.
|
|||
|
|
|
|||
|
|
**Вердикт: Overkill для нашего масштаба.**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 8.4. Leak detection (сканирование на утечку кредов)
|
|||
|
|
|
|||
|
|
**Наш статус**: System prompt говорит агенту "никогда не раскрывай источники данных". Но прямой проверки ответов на наличие API ключей нет.
|
|||
|
|
|
|||
|
|
**Полезно?** **ДА, это стоит сделать.** Простая проверка: перед отдачей ответа пользователю — regex-сканирование на паттерны API ключей (`sk-ant-`, `AISSTREAM_`, пароли). Если Claude случайно "выплюнет" ключ из контекста — мы его поймаем.
|
|||
|
|
|
|||
|
|
Реализация: 15 строк в `generate_response()`.
|
|||
|
|
|
|||
|
|
**Вердикт: Полезная идея. Реализация — 15 минут, IronClaw не нужен.**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 8.5. Self-expanding (агент сам создаёт инструменты)
|
|||
|
|
|
|||
|
|
**Наш статус**: 26 фиксированных инструментов. Новые добавляются разработчиком вручную.
|
|||
|
|
|
|||
|
|
**Полезно?** **НЕТ. ОПАСНО.** Наши инструменты работают с реальными данными: AIS позиции, контакты судовладельцев, финансовые операции (charge_user). Автоматическое создание инструментов:
|
|||
|
|
- Кто проверит что новый инструмент не сломает БД?
|
|||
|
|
- Кто проверит что он не спишет деньги с чужого кошелька?
|
|||
|
|
- Кто проверит что он корректно парсит AIS данные?
|
|||
|
|
|
|||
|
|
Для морской логистики нужны **проверенные, протестированные** инструменты. Не автогенерация.
|
|||
|
|
|
|||
|
|
**Вердикт: Категорически нет. Опасно для финансовых операций.**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 8.6. Каналы (Telegram, Slack, Web UI)
|
|||
|
|
|
|||
|
|
**Наш статус**: Только Web UI (index.html). Для доступа нужен браузер.
|
|||
|
|
|
|||
|
|
**Полезно?** **ДА, Telegram — реально полезен.** Морская индустрия живёт в мессенджерах. Капитан/агент не будет открывать сайт — он напишет в Telegram. Это реальная бизнес-потребность.
|
|||
|
|
|
|||
|
|
НО: Для Telegram-бота **не нужен IronClaw**. Python-библиотека `python-telegram-bot` + наш `generate_response()` = Telegram-бот за 2-3 часа. Вся логика (26 инструментов, AIS, маршруты) уже в `seafare_agent.py`.
|
|||
|
|
|
|||
|
|
**Вердикт: Telegram-бот — отличная идея на будущее. Но это 100 строк Python, не IronClaw.**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 8.7. PostgreSQL + pgvector (векторный поиск)
|
|||
|
|
|
|||
|
|
**Наш статус**: PostgreSQL есть. pgvector — нет. Поиск судов по текстовому совпадению (LIKE '%BOSTON%').
|
|||
|
|
|
|||
|
|
**Полезно?** **МОЖЕТ БЫТЬ, но не сейчас.** pgvector полезен для:
|
|||
|
|
- Семантический поиск: "нужен балкер для зерна рядом с Турцией" → находит суда даже если destination = "ISKENDERUN" (не "TURKEY")
|
|||
|
|
- Поиск по истории чатов: "что мне искали в прошлый раз?"
|
|||
|
|
- Кэш похожих запросов: если кто-то уже искал "grain from Santos" — отдать кэшированный результат
|
|||
|
|
|
|||
|
|
Но наш объём данных пока маленький. 16,553 порта, ~1000 позиций в кэше. Обычный LIKE + индексы справляются. pgvector добавит сложности (установка расширения, embedding model, стоимость embeddings).
|
|||
|
|
|
|||
|
|
**Вердикт: Интересно на перспективу. Сейчас — преждевременная оптимизация.**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 8.8. Smart routing / Failover / Circuit breaker
|
|||
|
|
|
|||
|
|
**Наш статус**: Один провайдер (Claude). Упал — всё стоит. У AIS провайдера уже есть chain (AISStream → AISHub → Digitraffic → MT → stale DB), но у LLM — нет.
|
|||
|
|
|
|||
|
|
**Полезно?** **ДА, это самое полезное из списка.** Паттерн circuit breaker:
|
|||
|
|
- Claude API вернул 5 ошибок подряд → переключиться на GPT-4o на 5 минут
|
|||
|
|
- GPT-4o тоже лёг → вернуть пользователю "сервис временно недоступен" вместо hang
|
|||
|
|
|
|||
|
|
Реализация для нашего проекта — 80 строк Python. Не Rust, не IronClaw.
|
|||
|
|
|
|||
|
|
**Вердикт: Самая полезная идея. Стоит реализовать. IronClaw для этого не нужен.**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 9. СВОДНАЯ ТАБЛИЦА: ЧТО БРАТЬ, ЧТО НЕТ
|
|||
|
|
|
|||
|
|
| Фича IronClaw | Полезна? | Сложность | IronClaw нужен? |
|
|||
|
|
|---------------|----------|-----------|-----------------|
|
|||
|
|
| LLM Failover | **ДА** | ~50 строк Python | Нет |
|
|||
|
|
| Sandbox | Нет | — | — |
|
|||
|
|
| Шифрование | Нет | — | — |
|
|||
|
|
| Leak detection | **ДА** | ~15 строк Python | Нет |
|
|||
|
|
| Self-expanding | **ОПАСНО** | — | — |
|
|||
|
|
| Telegram-бот | **ДА** (будущее) | ~100 строк Python | Нет |
|
|||
|
|
| pgvector | Может быть | Средне | Нет |
|
|||
|
|
| Circuit breaker | **ДА** | ~80 строк Python | Нет |
|
|||
|
|
|
|||
|
|
### 3 вещи которые стоит реализовать (без IronClaw):
|
|||
|
|
|
|||
|
|
1. **LLM Failover** — Claude упал → GPT-4o (~50 строк)
|
|||
|
|
2. **Leak detection** — сканирование ответов на API ключи (~15 строк)
|
|||
|
|
3. **Telegram-бот** — на будущее, когда основной функционал стабилен (~100 строк)
|
|||
|
|
|
|||
|
|
**Общий объём: ~250 строк Python-кода.** Ставить ради этого Rust-проект возрастом 3 недели — как покупать тягач чтобы отвезти пакет молока.
|