[2026-09-29] eagle: personal/plans/balda-callee-prism-plan.md
This commit is contained in:
1 parent
1061e82e0d
commit
dae4d91fcf
1 file changed
+63
@@ -412,6 +412,62 @@ spec:
|
||||
|
||||
---
|
||||
|
||||
### 2.6 Отлов опасных команд: возможные механизмы
|
||||
|
||||
> ⚠️ Исследование 2026-09-29. **Решения нет** — зафиксированы варианты и границы, выбор не сделан.
|
||||
|
||||
**Где физически можно перехватить команду модели:**
|
||||
|
||||
| Место перехвата | Что видит | Кто решает |
|
||||
|---|---|---|
|
||||
| Внутри ACP-сессии (адаптер `dsh-acp`) | **каждую** команду модели | адаптер / обёртка вокруг него |
|
||||
| `Script`-узел в графе | **только** команды сборок/деплоев, вынесенные в граф | граф callee |
|
||||
|
||||
🔴 **Ограничение охвата:** узел `Human` в графе защищает **только** `Script`-шаги. Команды, которые
|
||||
модель запускает внутри своей ACP-сессии (обычный `bash` харнесса), граф **не видит вообще**.
|
||||
Значит «отловить все опасные команды» и «отловить только свои сборки» — принципиально разные
|
||||
объёмы работы: первое требует правки адаптера, второе делается чисто в графе.
|
||||
|
||||
**Механизм 1 — regexp / белый список.**
|
||||
Детерминированно, ~0 мс, не обходится вероятностной ошибкой. Ловит только известные шаблоны
|
||||
(`rm -rf`, обращение к `docker.sock`, `~/.ssh`, `curl | sh`); обфускация обходит.
|
||||
|
||||
**Механизм 2 — Jev (`TypeSafeJev` / типизированная оценка).**
|
||||
Возвращает **числа**, а не решение: `choice` (вероятности по опциям), `score` (0–3 по рубрике),
|
||||
`noul` (0–1 для утверждения). Не LLM, не вызывает инструменты, текст не генерирует.
|
||||
Порог и действие пишет **ваш код**:
|
||||
|
||||
```
|
||||
risk(0–3) / injection(noul) / exfiltration(noul)
|
||||
├─ if risk >= 1.5 || injection >= 0.8 → deny
|
||||
├─ if risk >= 0.5 || exfiltration >= 0.5 → ask
|
||||
└─ иначе → allow
|
||||
```
|
||||
|
||||
🔴 **Если `if` не написан — тул выполнится как обычно.** Jev сам не запрещает и не спрашивает;
|
||||
без обвязки он даёт «команда опасная» и ничего не меняет. Латентность — сотни мс на каждый
|
||||
тул-колл. Вендор позиционирует его как один слой defense-in-depth, не замену sandboxing.
|
||||
|
||||
**Механизм 3 — Script + Human в графе.**
|
||||
Апрув только для того, что само вынесено в `Script`. Внутри ACP-сессии не работает.
|
||||
|
||||
**Граница, которая важнее гейта:** любой из трёх механизмов защищает **действие**, но не
|
||||
**возможность** (§1.1a). Права определяет процесс и монтирование; гейт лишь разрешает
|
||||
выполнить уже технически возможное. Если ключ есть у процесса — он есть всегда.
|
||||
|
||||
**Сопутствующие факты:**
|
||||
|
||||
- `TypeSafeJev` — один из 10 публичных kinds callee ([personal/tech/callee-prism]] §2.1), то есть
|
||||
нативный узел графа; схема порогов выше — из вендорской доки tool-approval.
|
||||
- `permissions.mode` (`allow_all`/`ask`/`deny_all`) — режим разрешений **внутри** ACP-сессии.
|
||||
В Балде `ask` работает для MM, вопрос уходит реплаем в тред (§4).
|
||||
- 🔴 **Не подавать вывод модели в `cmd`/`extraArgs` DynamicRole** — исполнение произвольного кода
|
||||
мимо любого гейта внутри сессии (питфолл 8).
|
||||
- Разбор слоёв привратника: [[Research/Gatekeeper Architecture for Agent Tool Calls]] — подходы 3
|
||||
(OPA), 4 (Cedar), 5 (MCP-прокси), 8 (Jev).
|
||||
|
||||
---
|
||||
|
||||
## 2.5 Карта стека: кто кого дёргает
|
||||
|
||||
> ⚠️ Обновлено под топологию §1 (стек на Mac). Прежний вид — «Балда на Kraken + MCP +
|
||||
@@ -651,6 +707,9 @@ scoped-пакеты так не индексируются.
|
||||
|
||||
## 6. Решения
|
||||
|
||||
> ⚠️ Решения по §2.6 (отлов опасных команд) **не приняты** — это зафиксированное исследование,
|
||||
> не выбор. Развилки ниже помечены явно.
|
||||
|
||||
| # | Вопрос | Решение | Почему |
|
||||
|---|---|---|---|
|
||||
| 1 | Провайдер обеих сторон | DeepSeek | команда Alex |
|
||||
@@ -689,6 +748,10 @@ scoped-пакеты так не индексируются.
|
||||
11. ⚠️ **Node `>= 22.15`** требуется адаптером (в образе 24.21.0).
|
||||
12. ⚠️ **Динамических маунтов на macOS Docker нет** — только `up -d` с пересозданием.
|
||||
Доступ к проектам — через рабочую копию в `~/agents` + git, не через маунт под задачу.
|
||||
13. 🔴 **Граф не видит команды внутри ACP-сессии.** Узел `Human`/`Script` закрывает только то,
|
||||
что само вынесено в граф; обычный `bash` модели идёт мимо (§2.6).
|
||||
14. 🔴 **Jev не запрещает и не спрашивает — он возвращает числа.** Без вашего `if` по порогам
|
||||
тул выполнится как обычно (§2.6).
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in new issue
Block a user