[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 Карта стека: кто кого дёргает
|
## 2.5 Карта стека: кто кого дёргает
|
||||||
|
|
||||||
> ⚠️ Обновлено под топологию §1 (стек на Mac). Прежний вид — «Балда на Kraken + MCP +
|
> ⚠️ Обновлено под топологию §1 (стек на Mac). Прежний вид — «Балда на Kraken + MCP +
|
||||||
@@ -651,6 +707,9 @@ scoped-пакеты так не индексируются.
|
|||||||
|
|
||||||
## 6. Решения
|
## 6. Решения
|
||||||
|
|
||||||
|
> ⚠️ Решения по §2.6 (отлов опасных команд) **не приняты** — это зафиксированное исследование,
|
||||||
|
> не выбор. Развилки ниже помечены явно.
|
||||||
|
|
||||||
| # | Вопрос | Решение | Почему |
|
| # | Вопрос | Решение | Почему |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| 1 | Провайдер обеих сторон | DeepSeek | команда Alex |
|
| 1 | Провайдер обеих сторон | DeepSeek | команда Alex |
|
||||||
@@ -689,6 +748,10 @@ scoped-пакеты так не индексируются.
|
|||||||
11. ⚠️ **Node `>= 22.15`** требуется адаптером (в образе 24.21.0).
|
11. ⚠️ **Node `>= 22.15`** требуется адаптером (в образе 24.21.0).
|
||||||
12. ⚠️ **Динамических маунтов на macOS Docker нет** — только `up -d` с пересозданием.
|
12. ⚠️ **Динамических маунтов на macOS Docker нет** — только `up -d` с пересозданием.
|
||||||
Доступ к проектам — через рабочую копию в `~/agents` + git, не через маунт под задачу.
|
Доступ к проектам — через рабочую копию в `~/agents` + git, не через маунт под задачу.
|
||||||
|
13. 🔴 **Граф не видит команды внутри ACP-сессии.** Узел `Human`/`Script` закрывает только то,
|
||||||
|
что само вынесено в граф; обычный `bash` модели идёт мимо (§2.6).
|
||||||
|
14. 🔴 **Jev не запрещает и не спрашивает — он возвращает числа.** Без вашего `if` по порогам
|
||||||
|
тул выполнится как обычно (§2.6).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user