1.9 KiB
1.9 KiB
Принцип: нет жестких запретов в коде
Требование
В проекте не должно быть hardcoded-запретов вида:
if tool == "command.run": deny
if sql contains "DELETE": deny
if action == "filesystem": deny
Так делать нельзя.
Правильный подход
Код должен классифицировать действие и спросить policy engine.
action → classify → policy.check → decision
Policy decision:
{
"decision": "allow | confirm | manual | disabled_by_config",
"reason": "string",
"requires_confirmation": true,
"preview": {}
}
Пример
Команда:
file.write D:/Projects/test.txt
Tool возвращает metadata:
{
"risk_level": "write",
"resource": "filesystem",
"preview_available": true
}
Policy проекта:
{
"filesystem": {
"mode": "confirm"
}
}
Результат:
Нужно подтверждение.
Если policy:
{
"filesystem": {
"mode": "full_auto"
}
}
Результат:
Выполнить сразу.
Режимы
full_auto — выполнять без подтверждения
confirm — спросить подтверждение
manual — показать план и ждать ручного запуска
disabled — отключено настройкой
disabled допустим только как настройка проекта, а не как зашитый запрет.
Зачем
Пользователь сам выбирает уровень риска.
Система не должна становиться бесполезной из-за того, что разработчик заранее запретил все потенциально опасные действия.