# Strix через RouterAI: автономный пентест-агент на своей модели (Claude, GPT-6, GLM)

## Strix

Strix — open-source агент для автономного пентеста (репозиторий [usestrix/strix](https://github.com/usestrix/strix), лицензия Apache 2.0). Он запускает команду агентов, которые изучают код, API и веб-приложение, ищут уязвимости и проверяют их рабочим proof-of-concept в изолированной песочнице, а затем собирают отчёт с описанием и рекомендациями по исправлению. Принцип тот же, что у [автономного ИИ-агента](/pages/avtonomnyy-ii-agent): модель сама планирует шаги и вызывает инструменты.

Strix работает поверх LiteLLM, поэтому модель подключается переменными окружения. Через RouterAI вы получаете в одном агенте Claude, GPT, GLM и DeepSeek из [каталога моделей](/models), работу из России без VPN и оплату в рублях.

> **Только законное использование.** Strix активно атакует цели, которые вы ему указали. Запускайте его только против своих систем или тех, на которые есть явное письменное разрешение, и в согласованных границах. Для тренировки используйте заведомо уязвимые учебные приложения вроде OWASP Juice Shop. Несанкционированное тестирование незаконно в большинстве юрисдикций. Эта статья описывает только настройку и чтение отчёта.

## Требования

- Docker (запущенный): в нём работает песочница агента на базе Kali Linux
- Linux, macOS или Windows (установщик поддерживает Windows через `.zip`-сборку)
- API-ключ из [личного кабинета](/settings/keys)
- Достаточно памяти и диска для образа песочницы: образ скачивается при первом запуске

Сам Strix запускается на хосте как CLI. Docker нужен ему, чтобы поднять контейнер-песочницу с браузером, прокси Caido и набором утилит, поэтому запускать сам CLI внутри контейнера не нужно.

## Установка

Рекомендуемый способ из документации проекта — установочный скрипт:

```bash
curl -sSL https://strix.ai/install | bash
```

Альтернатива — pipx:

```bash
pipx install strix-agent
```

Скрипт устанавливает бинарник `strix`. Образ песочницы (по умолчанию `ghcr.io/usestrix/strix-sandbox`, его можно заменить переменной `STRIX_IMAGE`) Strix скачивает автоматически при первом запуске. Обновление: `strix --update`.

## Подключение к RouterAI

Strix читает три переменные. Они есть в [справочнике по конфигурации](https://docs.strix.ai/advanced/configuration):

| Переменная | Что задаёт | Значение для RouterAI |
| --- | --- | --- |
| `STRIX_LLM` | Модель в формате LiteLLM | `openai/anthropic/claude-sonnet-5.5` (префикс `openai/`, см. ниже) |
| `LLM_API_KEY` | Ключ провайдера | Ваш ключ RouterAI |
| `LLM_API_BASE` | Адрес API | `https://routerai.ru/api/v1` |

### Формат id модели

LiteLLM выбирает провайдера по первому сегменту id. Для OpenAI-совместимого шлюза нужен префикс `openai/`, а дальше — id модели из каталога без изменений. Поэтому `anthropic/claude-sonnet-5.5` из каталога превращается в `openai/anthropic/claude-sonnet-5.5`. Без префикса `openai/` LiteLLM пошлёт запрос по протоколу Anthropic на неверный адрес и вернёт 404.

### Настройка переменных

Ключ не нужно печатать в команде: так он попадёт в историю оболочки. Прочитайте его без эха в переменную текущей сессии:

```bash
read -rs -p "RouterAI API key: " LLM_API_KEY && export LLM_API_KEY
export LLM_API_BASE="https://routerai.ru/api/v1"
export STRIX_LLM="openai/anthropic/claude-sonnet-5.5"
export STRIX_API_TYPE="chat_completions"
```

Если ключ уже лежит в менеджере секретов или в `~/.zshrc`, достаточно `export LLM_API_KEY="$ROUTERAI_API_KEY"`. Значение `sk-xxxxxxxxxxxxxxxx` в примерах — заглушка.

`STRIX_API_TYPE=chat_completions` нужен потому, что Strix для части моделей по умолчанию ходит в Responses API, а собственный `LLM_API_BASE` этого выбора не меняет ([документация](https://docs.strix.ai/advanced/configuration)). RouterAI отдаёт модели каталога через Chat Completions по адресу `/api/v1`.

Strix запоминает настройки в `~/.strix/cli-config.json`, так что при следующих запусках переменные можно не задавать заново. Проверьте, что файл не попадёт в git и в бэкапы с открытым доступом.

### Отдельная модель для дедупликации

Strix проверяет, не повторяет ли новая находка уже записанную. Эту задачу можно отдать дешёвой модели через `STRIX_DEDUPE_MODEL`, не трогая агентов, которые ведут тестирование. Для отдельной модели задайте ключ и адрес явно:

```bash
export STRIX_DEDUPE_MODEL="openai/z-ai/glm-5.3-flash"
export DEDUPE_LLM_API_KEY="$LLM_API_KEY"
export DEDUPE_LLM_API_BASE="https://routerai.ru/api/v1"
```

## Выбор модели

Агент делает длинные цепочки вызовов: разведка, чтение кода, запросы к цели, проверка находки. Контекст растёт с каждым шагом, поэтому важны большое окно (у всех моделей таблицы оно около 1 млн токенов) и надёжный вызов инструментов. Об уровне рассуждений читайте в статье про [reasoning-модели](/pages/reasoning-modeli).

Все id проверены по [каталогу RouterAI](/models); цены за токены смотрите там же.

| Модель | Для чего |
| --- | --- |
| `z-ai/glm-5.3` | Основная для длинных прогонов: проект рекомендует GLM-5.3 в своей документации |
| `deepseek/deepseek-v4.1-flash-1017` | Дешёвый вариант для `quick` и `standard`, он же в списке рекомендуемых у Strix |
| `anthropic/claude-sonnet-5.5` | Разбор сложных цепочек и написание отчёта |
| `openai/gpt-6-astra` | Максимальная мощность для критичных целей ([GPT-6: Luna, Sol, Astra](/pages/gpt-6-luna-sol-astra-routerai)) |
| `z-ai/glm-5.3-flash`, `anthropic/claude-haiku-5.5` | Рутинные шаги и роль `STRIX_DEDUPE_MODEL` ([обзор Haiku 5.5](/pages/claude-haiku-5-5-obzor)) |

> **Важно про отказы.** Документация Strix предупреждает: у флагманских моделей OpenAI, Anthropic и Google включены защитные классификаторы, и без программ допуска для кибербезопасности (Daybreak у OpenAI, Cyber Verification Program у Anthropic) они отказываются от большинства наступательных задач. Если агент отвечает отказами или просто «топчется на месте», смените модель на GLM или DeepSeek либо получите допуск у разработчика модели.

Сколько стоит прогон, зависит от режима, размера цели и модели: у цен за миллион токенов в [каталоге](/models) разброс в сотни раз (от GLM 5.3 Flash и DeepSeek V4.1 Flash до GPT-6 Astra). Точную цифру для небольшого репозитория смотрите по первому запуску в `quick` с лимитом. Ограничьте расходы флагом `--max-budget` (в долларах для оценки Strix) и режимом `--scan-mode quick`; при достижении лимита неинтерактивный запуск завершается корректно со статусом `stopped`. Если Strix не знает цену вашей модели, задайте её переменными `STRIX_LLM_INPUT_COST_PER_MTOK` и `STRIX_LLM_OUTPUT_COST_PER_MTOK`, иначе бюджет считается неточно.

## Проверка подключения

Перед боевым прогоном убедитесь, что RouterAI отвечает и модель есть в каталоге:

```bash
curl -s https://routerai.ru/api/v1/models -H "Authorization: Bearer $LLM_API_KEY" | head -c 200
```

При старте Strix сам проверяет модель коротким запросом. При ошибке он показывает `LLM CONNECTION FAILED`, ждать ответа он готов `LLM_PREFLIGHT_TIMEOUT` секунд (по умолчанию 30).

## Первый прогон на учебной цели

Для практики возьмите [OWASP Juice Shop](https://github.com/juice-shop/juice-shop) — намеренно уязвимое приложение, которое официально запускается в Docker:

```bash
docker run --rm -p 3000:3000 bkimminich/juice-shop
```

Опубликованный порт открывает приложение для всех интерфейсов хоста. Запускайте его на личной машине или в изолированной сети и остановите после теста.

Затем запустите Strix. Режим `quick` занимает минуты, `standard` — от получаса до часа, `deep` (по умолчанию) — до нескольких часов:

```bash
strix --target http://<адрес-хоста>:3000 --scan-mode quick --max-budget 5
```

Адрес цели должен быть доступен из контейнера песочницы, а не только из вашего терминала: `localhost` внутри контейнера указывает на сам контейнер, поэтому используйте IP-адрес хоста в локальной сети. В документации Strix нет отдельной инструкции для целей на хосте, проверьте доступность адреса на своей конфигурации Docker.

Для CI и серверов добавьте `-n`: Strix работает без интерфейса, выводит находки и завершается с кодом `0` (чисто), `1` (ошибка) или `2` (найдены уязвимости). С флагом `--fail-on high` код `2` возвращается только при находках уровня high и выше.

## Что смотреть в отчёте

Результаты каждого запуска лежат в `strix_runs/<имя-запуска>/`: `vulnerabilities.json`, `vulnerabilities.csv`, `findings.sarif` (SARIF 2.1.0) и отдельный Markdown-файл на каждую находку. Открыть их в локальной панели можно командой:

```bash
strix view
```

Панель привязана к `127.0.0.1` и печатает ссылку с токеном; не передавайте её посторонним.

На что обратить внимание в каждой находке:

- **Серьёзность и CVSS.** Начните с critical и high, остальное разберите после.
- **Где найдено.** Эндпоинт, параметр или файл с номером строки — по этому адресу вы будете чинить.
- **Подтверждение.** Strix приводит результат проверки в песочнице. Находка с подтверждением надёжнее, чем предположение по коду.
- **Рекомендации.** Описание причины и способ исправления. Исправляйте код в своём репозитории, а не вслепую применяйте предложенные правки.
- **Повторы.** Если похожие находки дублируются, задайте отдельную модель дедупликации.

Локальную директорию Strix монтирует в песочницу с правом записи, то есть агент может менять реальные файлы (кроме `.git`). Закоммитьте или спрячьте изменения до запуска по папке с кодом.

## Решение проблем

### Модель не найдена или 404

Почти всегда виноват id без префикса. Нужно `openai/anthropic/claude-sonnet-5.5`, а не `anthropic/claude-sonnet-5.5`: во втором случае LiteLLM идёт по протоколу Anthropic, и сервер отвечает `404 page not found`. Проверьте и `LLM_API_BASE`: нужен адрес с `/v1`, то есть `https://routerai.ru/api/v1`.

### 401 Unauthorized

Strix читает ключ из `LLM_API_KEY`, а не из `ROUTERAI_API_KEY` или `OPENAI_API_KEY`. Убедитесь, что переменная экспортирована в том же терминале, и что в `~/.strix/cli-config.json` не осталось старого значения. Ключ должен быть скопирован целиком из [личного кабинета](/settings/keys).

### 402 Payment Required

Недостаточно средств на балансе: пополните его в разделе [Биллинг](/settings/billing).

### Docker не найден или не запущен

Strix завершится с ошибкой, если команда `docker` недоступна. Запустите Docker Desktop или службу `docker` и проверьте `docker ps`. Если на машине мало ресурсов, песочница с браузером и прокси может не стартовать или быть убита по памяти: увеличьте лимит памяти для Docker и закройте лишнее.

### Таймауты на большом репозитории

Запросы к модели ограничены `LLM_TIMEOUT` (по умолчанию 300 секунд), число повторов при сбоях — `STRIX_LLM_MAX_RETRIES` (5). Для больших целей используйте `--scan-mode quick` или `standard`, уменьшите область (`--target` на каталог, а не на весь монорепозиторий), ограничьте число шагов `--max-turns` и поднимите `LLM_TIMEOUT`.

### Агент не делает ничего полезного

Если модель выводит вызовы инструментов обычным текстом, а не структурированным `tool_calls`, Strix не может их выполнить ([документация](https://docs.strix.ai/llm-providers/local)). Выберите модель с надёжной поддержкой инструментов из таблицы выше.

## Что дальше

- [Каталог моделей](/models) — подберите модель и сравните цены
- [Аутентификация](/docs/guides/overview/authentication) — управление API-ключами
- [Вайб-кодинг в Crush](/pages/vibe-coding-crush) — другой CLI-агент через RouterAI
- [Документация Strix](https://docs.strix.ai) и [справочник по CLI](https://docs.strix.ai/usage/cli)
