# Как провести threat modeling для ИИ-агента: настройка grim-prompter и готовые промпты

> AI Release · @ai_release1 · https://ai-release.org/guides/kak-provesti-threat-modeling-dlya-ii-agenta-nastroyka-g.html

## TL;DR
- Время выполнения: 40–60 минут
- Уровень сложности: Intermediate
- Понадобится: macOS или Linux с локальным шеллом (терминал), `git`, кодинг-агент в CLI — Claude Code или Codex CLI (или другой агент, поддерживающий локальные файлы), локальная копия репозитория, который вы моделируете, репозиторий `grim-prompter` (лицензия MIT, 36 архитектурных сценариев и 29 методик моделирования угроз)

## Требования и подготовка
![Иллюстрация к разделу «Требования и подготовка»](https://ai-release.org/guides/img/kak-provesti-threat-modeling-dlya-ii-agenta-nastroyka-g-ru-1.jpg?v=1793263788)


Модель угроз (threat model) — это документ «что мы защищаем, от кого и какими контрмерами». Кодинг-агент — CLI-программа, которая читает файлы репозитория и пишет по ним текст/код по вашему указанию.

Что такое `grim-prompter` по фактам из анонса:

| Параметр | Значение |
|---|---|
| Что это | набор промптов для кодинг-агентов |
| Сценарии архитектур | 36 |
| Методики моделирования угроз | 29 |
| Лицензия | MIT |
| Поддерживаемые агенты | Claude Code, Codex CLI, другие кодинг-агенты |
| Где работает | только локальный macOS/Linux-шелл |
| Куда пишет отчёты | отдельная папка в репозитории (в анонсе её имя обрезано — сверьтесь с документацией/README) |

Проверьте до старта:

- [ ] ОС: macOS или Linux. Windows и облачные веб-сессии не подходят — агент должен видеть локальную файловую систему
- [ ] `git` установлен и настроен: `git --version`
- [ ] Кодинг-агент установлен и авторизован в терминале (проверка — он отвечает на `привет`)
- [ ] Права на запись в домашний каталог (`$HOME`) — туда кладутся симлинки skills
- [ ] Локальная копия целевого репозитория, для неё есть доступ на чтение
- [ ] 10–20 МБ свободного места под клон `grim-prompter` и отчёты

**Пример:** целевой проект — `/Users/ivan/projects/support-bot`, это ИИ-агент поддержки на Python. Если ваш репозиторий — как раз такой агент, но вы ещё не разобрались с его устройством, начните с [как превратить обычный чат с LLM в полноценного AI-агента](https://ai-release.org/guides/kak-prevratit-obychnyy-chat-s-llm-v-polnotsennogo-ai-ag.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide) — модель угроз строится поверх понятной архитектуры.

Поток работы: репозиторий → агент читает манифесты зависимостей, точки входа, конфиги → выбирает один из 36 архитектурных сценариев → применяет одну из 29 методик → пишет отчёт в папку.

## Шаг 1. Развернуть grim-prompter локально
![Иллюстрация к разделу «Шаг 1. Развернуть grim-prompter локально»](https://ai-release.org/guides/img/kak-provesti-threat-modeling-dlya-ii-agenta-nastroyka-g-ru-2.jpg?v=1793263797)


**Что сделать:** склонировать репозиторий и убедиться, что каталог `skills/threat-model` существует.

**Зачем:** агент подхватывает инструкции из файлов этого каталога; без клона подключать нечего.

```bash
mkdir -p ~/tools
git clone <URL-репозитория-grim-prompter> ~/tools/grim-prompter
cd ~/tools/grim-prompter
ls -la
ls -la skills/
```

`<URL-репозитория-grim-prompter>` — адрес страницы проекта на GitHub (берётся из анонса/README, не угадывается).

**Как проверить:** в выводе `ls` есть `skills/`, внутри `skills/` — каталог `threat-model`, а также файл лицензии. Плюс проверка целостности:

```bash
test -d ~/tools/grim-prompter/skills/threat-model && echo OK || echo NO
```

Ожидаемый вывод: `OK`. Если `NO` — клон неполный или вы не в корне репозитория.

**Пример:** `ls skills/` печатает `threat-model`; `git -C ~/tools/grim-prompter log -1 --oneline` печатает одну строку с хешем коммита — значит клон живой.

Почему это работает: скилл — обычный каталог с текстовыми инструкциями, агенту достаточно пути к нему.

## Шаг 2. Подключить скилл к агенту через симлинк

**Что сделать:** создать симлинк (ссылка на каталог, не копия) на `skills/threat-model` в каталоге skills вашего агента.

**Зачем:** агент ищет скиллы в фиксированных путях; симлинк избавляет от копирования при обновлениях `grim-prompter`.

Для Claude Code:

```bash
mkdir -p ~/.claude/skills
ln -s ~/tools/grim-prompter/skills/threat-model ~/.claude/skills/threat-model
ls -l ~/.claude/skills/threat-model
readlink -f ~/.claude/skills/threat-model
```

Для прочих агентов, читающих `~/.agents/skills` (в том числе Codex CLI):

```bash
mkdir -p ~/.agents/skills
ln -s ~/tools/grim-prompter/skills/threat-model ~/.agents/skills/threat-model
ls -l ~/.agents/skills/threat-model
```

Для агентов без механизма skills анонс предлагает другой путь — сниппет в `AGENTS.md`. Создайте/дополните файл `AGENTS.md` в корне целевого репозитория:

```markdown
## Модель угроз
При запросе «построй модель угроз» используй инструкции из каталога
~/tools/grim-prompter/skills/threat-model (36 архитектурных сценариев,
29 методик). Отчёт сохраняй в папку отчётов, указанную в README grim-prompter.
```

**Как проверить:** `ls -l` печатает строку со стрелкой `->` и путём `~/tools/grim-prompter/skills/threat-model`, а `readlink -f` — абсолютный путь без ошибок. Ожидаемый вид:

```
lrwxr-xr-x  1 ivan  staff  52 12 мая 10:14 threat-model -> /Users/ivan/tools/grim-prompter/skills/threat-model
```

**Пример:** если вы подключили только `~/.agents/skills`, а работаете в Claude Code — скилл не увидит никто. Создавайте симлинк ровно в тот каталог, который читает ваш агент.

Почему это работает: симлинк — та же директория, только по другому пути; `git pull` в `~/tools/grim-prompter` обновляет промпты без перенастройки.

## Шаг 3. Провести моделирование угроз и проверить отчёт
![Иллюстрация к разделу «Шаг 3. Провести моделирование угроз и проверить отчёт»](https://ai-release.org/guides/img/kak-provesti-threat-modeling-dlya-ii-agenta-nastroyka-g-ru-3.jpg?v=1793263811)


**Что сделать:** запустить агента в корне целевого репозитория и дать два последовательных промпта — выбор архитектурного сценария и построение модели угроз по методике.

**Зачем:** сначала нужно «примерить» репозиторий к одному из 36 сценариев (иначе агент смешает несвязанные допущения), и только потом применять методику.

```bash
cd /Users/ivan/projects/support-bot
claude    # или: codex
```

Промпт №1 — выбор сценария:

```
Работаем в репозитории /Users/ivan/projects/support-bot.
Прочитай манифесты зависимостей (requirements.txt, pyproject.toml), точки входа
(HTTP-роуты, CLI-команды), конфиги и места, где вызываются LLM и хранятся секреты.
Выбери ОДИН из 36 архитектурных сценариев grim-prompter, который точнее всего
описывает этот репозиторий. Ответ: название сценария, 5 строк обоснования,
список прочитанных файлов.
```

Промпт №2 — модель угроз:

```
Примени к выбранному сценарию одну из 29 методик grim-prompter, наиболее
подходящую для ИИ-агента с внешними вызовами LLM. Зафиксируй: активы,
границы доверия, векторы атаки (включая prompt injection и утечку системного
промпта), приоритет каждой угрозы, контрмеры с привязкой к файлам репозитория.
Сохрани отчёт в папку отчётов из README grim-prompter.
```

**Как проверить:** найдите созданный отчёт и убедитесь, что в нём есть все четыре блока.

```bash
ls -lt | head
find . -maxdepth 2 -type d -newermt '-15 minutes'
```

Имя папки отчётов в анонсе обрезано (`threat…`) — сверьтесь с README `grim-prompter`. Ожидаемый результат — новый каталог, а внутри файл вида `threat-model-<дата>.md`; в тексте присутствуют разделы «Активы», «Границы доверия», «Угрозы» с приоритетами, «Контрмеры».

**Пример готового фрагмента отчёта**, который считается успехом:

```
Актив: системный промпт агента поддержки (файл prompts/system.txt)
Граница доверия: HTTP-вход /api/chat -> LLM-провайдер
Угроза: prompt injection через поле user_message, приоритет High
Контрмера: валидация ввода в app/routes.py + фильтр исходящих вызовов
```

Дополнительно прогоните сценарии атак на сам агент по методике из [как проверить LLM-приложение на джейлбрейки](https://ai-release.org/guides/kak-proverit-llm-prilozhenie-na-dzheylbreyki-metodika-t.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide) — модель угроз без проверки гипотез остаётся списком предположений.

Почему это работает: два шага разделяют «понять архитектуру» и «перечислить угрозы», поэтому в отчёте видно, из какого допущения выросла каждая угроза.

## Возможные проблемы и решения

**Проблема. Симлинк не создаётся, потому что путь уже занят**

- Ошибка: `ln: failed to create symbolic link '/Users/ivan/.claude/skills/threat-model': File exists`
- Причина: симлинк (или каталог) с таким именем уже есть — например, от предыдущей установки с другим путём клона.
- Решение: перезаписать ссылку и проверить цель.

```bash
ln -sfn ~/tools/grim-prompter/skills/threat-model ~/.claude/skills/threat-model
readlink -f ~/.claude/skills/threat-model
```

**Проблема. Агент отвечает, что скилла нет**

- Ошибка: `ls: /Users/ivan/.claude/skills/threat-model: No such file or directory` — при этом агент пишет, что не находит инструкции по модели угроз.
- Причина: симлинк создан в `~/.agents/skills`, а запущен агент, читающий `~/.claude/skills` (или наоборот); либо сессия агента была открыта до создания симлинка.
- Решение: создать ссылку в обоих каталогах и перезапустить сессию агента.

```bash
mkdir -p ~/.claude/skills ~/.agents/skills
ln -sfn ~/tools/grim-prompter/skills/threat-model ~/.claude/skills/threat-model
ln -sfn ~/tools/grim-prompter/skills/threat-model ~/.agents/skills/threat-model
ls -l ~/.claude/skills/threat-model ~/.agents/skills/threat-model
```

**Проблема. Отчёт не появился, агент не видит репозиторий**

- Ошибка: агент отвечает вида `I can't access files outside the workspace` или просит вставить файлы вручную; `find . -maxdepth 2 -type d -newermt '-15 minutes'` ничего не находит.
- Причина: запуск не в локальном macOS/Linux-шелле — например, в веб-чате или удалённой сессии; `grim-prompter` по анонсу работает только в локальном шелле.
- Решение: проверить окружение и запустить агента из корня проекта в терминале.

```bash
pwd
ls requirements.txt pyproject.toml 2>/dev/null
uname -s
```

Ожидаемо: `pwd` печатает путь проекта, `uname -s` — `Darwin` (macOS) или `Linux`.

## Резюме и следующие шаги

Разверните `grim-prompter`, подключите `skills/threat-model` симлинком или сниппетом в `AGENTS.md`, затем двумя промптами получите отчёт с активами, границами доверия и приоритезированными угрозами. Дальше закройте High-угрозы контрмерами в коде и повторите прогон, чтобы сравнить отчёты до и после правок.

## FAQ

**Сколько стоит grim-prompter?**
Проект распространяется по лицензии MIT, то есть бесплатно; точные условия — в файле лицензии репозитория.

**Работает ли на Windows?**
По анонсу — только в локальном macOS/Linux-шелле. Для Windows используйте WSL либо Linux-машину.

**Чем отличаются 36 сценариев от 29 методик?**
Сценарии описывают тип архитектуры (что за система перед нами), методики — способ перечисления угроз. Агент сначала выбирает сценарий, затем применяет методику.

**Можно ли использовать не с Claude Code, а со своим агентом?**
Да. Для агентов без механизма skills анонс предлагает сниппет в `AGENTS.md` со ссылкой на каталог `skills/threat-model`; остальным достаточно симлинка в `~/.agents/skills/threat-model`.
