Перейти к содержимому

Кейс: ActraDeck — возвращаем рискованные действия агента человеку

5 сентября 2026 года на Hacker News появился Show HN проекта ActraDeck с заголовком «Put risky coding-agent actions back in front of a human». Сюжет попал в точку: за предшествующую неделю Manifold Security показала GitSpawn, где агент выполняет код из конфига репозитория до запроса доверия, а Johann Rehberger разобрал атаку на auto mode с вероятностью успеха до 80%. Агенты становятся автономнее, и вопрос «кто держит последнюю кнопку» перестал быть риторическим. ActraDeck — не очередной детектор промпт-инъекций и не песочница, а локальный «кокпит»: он перехватывает рискованную команду агента, держит её до решения человека и при молчании отклоняет сам. Ниже — как проект устроен, что считает рискованным, как поставить рядом с Claude Code и Codex и где проходит его честная граница. Версии и статусы — на момент публикации, 13.09.2026.

Почему это понадобилось: человек уходит из цикла

Линия сюжета безопасности августа—сентября 2026 складывается из одного паттерна — решения всё чаще принимает не человек, а сам агент:

  • GitSpawn (разбор Manifold Security, 01.09): кодинг-агенты запускают git-команды на старте, до workspace-trust промпта, и код из .git/config чужого репозитория выполняется без единого подтверждения.
  • Атака Rehberger на auto mode (кейс 26.08): классификатор Claude Code одобрил создание вредоносного процесса и отказал в команде его остановить — с вероятностью 60–80% агент сам исполнял код из ZIP.
  • Ночные прогоны (опыт mouse.dev) и режимы вроде --dangerously-skip-permissions и --yolo убирают человека из цикла намеренно — ради скорости.

Каждая находка — это «действие, которое произошло, потому что его никто не подтверждал». Общий гайд по защите из таких угроз собран в статье про безопасность ИИ-агентов. ActraDeck атакует проблему с другой стороны: не пытается оценить «злонамеренность» намерения модели, а берёт конкретную опасную операцию и ставит её на паузу до явного ответа оператора.

Что такое ActraDeck

Определение из README проекта на GitHub:

Put risky coding-agent actions back in front of a human. ActraDeck is a local cockpit for Claude Code and Codex. It surfaces detected high-risk actions for review where the agent mode supports approval relay, masks detected secrets before ActraDeck stores them, and keeps each session replayable across agents.

Верните рискованные действия кодинг-агента человеку. ActraDeck — локальный кокпит для Claude Code и Codex. Он выводит обнаруженные действия высокого риска на ревью там, где режим агента поддерживает relay одобрений, маскирует найденные секреты до того, как ActraDeck их сохранит, и хранит каждую сессию воспроизводимой.

README ActraDeck, 05.09.2026

Главный пример в README — именно тот случай, ради которого проект делают:

Claude Code requests:
  rm -rf ./important-directory

[HIGH RISK] recursive filesystem delete detected
[HELD]      waiting for your decision
[DENIED]    no approval received; safe-side timeout
Верх README ActraDeck на GitHub: название, описание и блок с примером HIGH RISK / HELD / DENIED
README ActraDeck (github.com/actradeck/actradeck, 05.09.2026): теглайн «Put risky coding-agent actions back in front of a human» и терминальный пример, где rm -rf ./important-directory перехватывается и отклоняется по таймауту. Реальный скриншот.

Ключевое отличие от обычного permission-промпта агента — кто принимает решение и что происходит при молчании. Встроенные разрешения Claude Code спрашивают у того, кто сидит в терминале; ActraDeck забирает событие в отдельный веб-интерфейс (кокпит) и применяет правило «нет ответа — отказ». Это работает даже в автономных режимах: шлюз перехватывает выбранные категории риска и в --dangerously-skip-permissions, то есть там, где агент по дизайну сам себе всё разрешает.

Насколько зрелый проект: честная оценка

ActraDeck — молодой инструмент, и это надо говорить прямо, без приукрашивания.

  • Публичный запуск — Show HN от 05.09.2026 (тред 49573255). Репозиторий на GitHub открыт недавно, проект до этого развивался приватно.
  • Версия — v0.9.0 (релиз от 01.09.2026, до Show HN), npm-пакет actradeck@0.9.0, Docker-образ ghcr.io/actradeck/actradeck. Лицензия Apache-2.0, код — TypeScript (pnpm monorepo).
  • Статус в собственном README: «early, active development (pre-1.0). Detection is best-effort, not a sandbox or an absolute security boundary» — ранняя активная разработка, детекция «по возможности», это не песочница и не абсолютная граница безопасности.

Показательна и история коммитов: в логе видна цепочка chore(oss-sync): sync from private … — проект выкладывался в открытый доступ из приватного репозитория. По звёздам и форкам на GitHub он пока малозаметен, а в день запуска тред на Hacker News был практически пустым — 2 очка и ни одного комментария. То есть перед нами не проверенный годами продукт, а свежий open-source инструмент, который стоит пробовать с расчётом на то, что многое ещё будет меняться.

Что работает сегодня: таблица возможностей по режимам подключения
Таблица «What works today» из README: для Claude Code в Attach-режиме доступен relay одобрений, для Codex в Attach — только наблюдение; полноценный relay у Codex включается в Managed Mode. Реальный скриншот.

Что ActraDeck считает рискованным

Проект использует закрытое публичное перечисление категорий риска — политики не содержат «сырых» команд, а классификатор сопоставляет операцию с категориями. Категории из документации approval policy:

Категория Что ловит По умолчанию
recursive-rm rm -rf, find -delete/-exec, массовое удаление файлов вкл
disk-destroy mkfs, dd, shred, wipefs, parted, запись в блочные устройства вкл
history-rewrite git push --force, git reset --hard, git clean -f вкл
db-drop DROP TABLE/DROP DATABASE/DROP SCHEMA/TRUNCATE TABLE, dropdb, mysqladmin … drop, dropDatabase(, FLUSHALL/FLUSHDB вкл
fork-bomb самовоспроизводящиеся shell-паттерны вкл
secret-egress сетевая передача (curl/wget/nc/scp…) с секретом прямо в команде вкл
high-risk-other прочие высокорисковые или структурно неразбираемые исполнения (подстраховка) вкл
inline-code sh -c, python -c, eval, curl \| sh, подстановки команд вкл
perm-change chmod -R, всемирно-записываемые chmod, рекурсивный chown выкл
secret-file-edit правки .env, *.pem, id_rsa, kubeconfig выкл
external-tool MCP-вызовы, WebFetch выкл
migrate-prod миграции БД, упоминания «production» выкл

Пресет по умолчанию — восемь включённых категорий: необратимые операции с большим радиусом поражения плюс произвольное инлайн-исполнение кода. Четыре выключенные склонны к ложным срабатываниям, поэтому их включают осознанно. Важная деталь реализации: db-drop — это буквальный список SQL-форм, а не семантический детектор. Разработчики сами пишут в документации, что db.collection.drop() в Mongo или DROP TABLESPACE не распознаются — категория работает как «пол, а не гарантия».

Как проходит цикл одобрения

Поток approval relay: агент → детектор HIGH RISK → HELD → человек → APPROVED или DENIED (таймаут = отказ)
Поток approval relay в ActraDeck. Рискованная операция уходит в карточку одобрения в кокпите; нет ответа — таймаут резолвится в отказ, никогда в молчаливое разрешение. Авторская схема по документации ActraDeck.

Цикл короткий:

  1. Агент (Claude Code или Codex) запрашивает операцию.
  2. Сайдкар на машине классифицирует её структурно и определяет категории риска.
  3. Если категория пересекается с включённым набором — событие уходит в Approval Inbox кокпита с пометкой [HELD].
  4. Человек в веб-интерфейсе выбирает: allow, deny или allow-for-session.
  5. Решение релеится обратно агенту. Нет ответа — [DENIED] no approval received; safe-side timeout.

Правило «таймаут = отказ» — принципиальное. Для автономных прогонов это значит, что сессия без присмотра не «зависает на разрешении», а безопасно деградирует: операция не выполняется. Механизм называется bypass/YOLO gate и включён по умолчанию: он перехватывает оператора-выбранные категории даже в --dangerously-skip-permissions / --yolo. Claude Code чтит deny от хуков даже при bypassPermissions, поэтому для него это реальное предотвращение, а не алерт. Полностью выключить шлюз можно переменной ACTRADECK_BYPASS_CATASTROPHIC_GATE=0.

Для каких агентов и в каких режимах

Подключение агента бывает двух видов — Attach и Managed. Таблица из README выше показывает разницу:

  • Claude Code (Attach) — наблюдение + relay одобрений. Запуск агента не меняется: cd ~/project && claude, сессия появляется в кокпите.
  • Codex (Attach) — только наблюдение: релиз одобрений остаётся в собственном TUI Codex. Детекция видит, но не может заблокировать.
  • Codex (Managed) — ActraDeck сам запускает Codex через App Server и мостит его approval-запросы в кокпит: ./scripts/actradeck codex "refactor the payment module". Managed Mode принимает одну команду и работает в foreground; перехватить уже запущенную Attach-сессию он не может.

То есть «вернуть решение человеку» в полном смысле слова сегодня можно для Claude Code (в Attach) и для Codex (в Managed). Для Codex в обычном Attach это пока страховка с аудитом, а не блокировка.

Маскирование секретов: два слоя

Вторая задача ActraDeck — не сохранять секреты, которые мелькают в выводе агента. Маскирование двухслойное:

Два слоя маскирования секретов: сайдкар до записи и безусловный backend-слой до сохранения
Путь события: вывод агента → сайдкар маскирует распознанные credentials → redact-before-emit в append-only лог → backend-слой повторно маскирует всё, что пришло извне. Авторская схема по README ActraDeck.
  1. Сайдкар (до локального сохранения и передачи) — маскирует распознанные секреты, прежде чем событие попадёт в локальный лог.
  2. Backend-слой (до записи в хранилище) — безусловно применяет маскирование ещё раз ко всему, что получено через публичный ingestion-контракт. Это важно для сторонних адаптеров: они достигают backend-редакции только после первого сетевого перехода.

Сам проект прямо пишет: «masks detected secrets before ActraDeck stores them» — то есть маскируется распознанное, а не всё подряд. Детекция секретов построена на структурном и паттерновом сопоставлении, и у неё есть границы (ниже в ограничениях).

Аудит и replay

Третья функция — локальный аудит, который можно пересматривать. События пишутся в append-only локальную историю (embedded PostgreSQL PGlite, каталог ~/.actradeck/pgdata по умолчанию). Из кокпита можно:

  • посмотреть, что агент пытался сделать и как ответил оператор;
  • выгрузить аудит в HTML, Markdown или JSON с SHA-256 манифестом целостности;
  • включить опциональное подписание Ed25519 (со специально задокументированной областью действия).

Общая статистика использования (./scripts/actradeck usage --since 30d) отдаёт только дневные агрегаты в UTC и не содержит содержимого аудита. Центральная телеметрия выключена по умолчанию, а включается явно через Settings → Privacy или CLI.

Установка: три пути

Первый — попробовать без установки агентов. Docker-образ поднимает кокпит с встроенной демо-кнопкой:

docker run --rm \
  -p 127.0.0.1:55400:55400 \
  -v actradeck_pgdata:/data \
  ghcr.io/actradeck/actradeck:latest

Открываете http://localhost:55400 и жмёте «Run the 30-second safety demo»: синтетическая разрушительная команда проходит весь путь — детект → карточка одобрения → маскирование → аудит. Команда при этом никогда не выполняется.

Второй — нативная установка рядом с реальными агентами. Требуется git, Node.js 22.16+ и pnpm, отдельная база данных не нужна:

curl --proto '=https' --tlsv1.2 -fsSL \
  https://raw.githubusercontent.com/actradeck/actradeck/main/scripts/install.sh | sh

Дальше — запуск всех слоёв (./scripts/actradeck up) и обычный старт агента. Кокпит слушает http://localhost:55400 (backend :55410). Инсталлятор — это загрузка и исполнение скрипта, поэтому README советует сначала скачать и прочитать его, а затем запускать; есть и верифицированный путь с проверкой контрольной суммы релиза (ACTRADECK_VERIFY=1 ACTRADECK_REF=v0.9.0 sh install.sh).

Третий — для тех, кто не хочет тянуть зависимости: npx actradeck@latest demo печатает синтетический предпросмотр цикла detect → hold → deny → redact → record без сетевых и файловых побочных эффектов.

Настройка политик под свои репозитории

Машина-дефолт и пер-репозиторные правила задаются в разделе «Approval policy» кокпита: например, гейтить migrate-prod только в продакшн-репо или полностью отключить гейт в черновом репозитории (пустой набор категорий = «не гейтить этот репо»). Политики сохраняются в ~/.actradeck/approvals/policy.json (права 0600), а ключевая деталь: хранилище «memory-authoritative» — демоны читают файл один раз при старте и не перечитывают его на лету. Агент, который отредактирует policy.json посреди сессии, не сможет ослабить живой гейт. Обратная сторона: ручные правки файла требуют перезапуска демона, изменения через UI применяются сразу.

Опциональный постоянный allowlist (ACTRADECK_PERSIST_APPROVALS=1) позволяет выбрать «разрешать и в будущих сессиях» — в allowlist.json пишется SHA-256 подпись команды (не сама команда) с TTL по умолчанию 7 дней. Структурный гейт не даёт занести в allowlist опасное: команды с пайпами и подстановками (curl … | sh), sudo/su, инлайн-исполнение (sh -c, node -e), публикацию, сетевые передачи, деструктивные команды файловой системы. Эти категории никогда не получают опцию постоянного разрешения, сколько раз их ни одобряй.

Практический чек-лист внедрения

  1. Начните с демо, чтобы увидеть цикл целиком: Docker-образ или npx actradeck@latest demo.
  2. Поставьте нативную установку на машину с Node 22.16+ и pnpm; проверьте ./scripts/actradeck doctor.
  3. Запустите claude в обычном режиме — сессия появится в кокпите с состоянием и pending-одобрениями.
  4. Для Codex с полноценным relay используйте Managed Mode: ./scripts/actradeck codex "…", а не голый codex.
  5. Оставьте пресет по умолчанию на первую неделю, потом включите perm-change и secret-file-edit, если ложных срабатываний мало.
  6. Настройте пер-репо политики: продакшн-репозиторий гейтить жёстче, черновик — свободнее.
  7. Проверьте реакцию на таймаут: запустите автономную сессию и не отвечайте на карточку — операция должна отклоняться сама.
  8. Смотрите аудит после ночных прогонов: что агент пытался сделать и как среагировал гейт.

Ограничения — честно

Проект сам перечисляет их в README в разделе «Honest limits», и их стоит повторить целиком:

  • Это не песочница. Классификация риска и маскирование — структурный и паттерновый матчинг best-effort. Новые, обфусцированные или опосредованные интерпретатором формы могут быть пропущены. Статус проекта — pre-1.0, активная разработка.
  • Relay зависит от агента и режима. Codex в Attach-режиме остаётся observe-only: детекция видит, но не блокирует. Полноценное «вернуть человеку» для Codex — только Managed Mode.
  • Секрет-детекция ловит инлайн. curl --data @.env (передача файла-ссылки) не распознаётся как secret-egress — то же ограничение, что у маскирования. Включение категорий secret-file-edit и inline-code сужает, но не закрывает этот зазор.
  • Модель угроз — один оператор. По умолчанию это локальная файловая система и loopback. Любой, у кого есть права вашего OS-пользователя, может выполнять команды и напрямую, в обход ActraDeck.
  • Memory-authoritative — пол, а не защита от противника. Агент может исполнять код вообще вне сайдкара; гейт управляет только тем, что проходит через хуки ActraDeck.
  • Не enterprise-платформа. Это не многопользовательский control plane для компаний, не полный shell-сэндбокс и не гарантия распознавания каждого секрета.
  • Платформа ещё сырая. macOS-путь через launchd помечен в документации как экспериментальный (структурно проверен, но ещё не гонялся на реальном Mac); часть функций меняется между релизами 0.x.

Для российского разработчика отдельно важно: ограничения самих агентов, которых ActraDeck оборачивает, он не снимает. Если Claude Code или Codex недоступны из вашего региона — «вернуть решение человеку» не поможет с самим доступом.

Российские реалии

Сам ActraDeck в России работает без ограничений: это open-source проект под Apache-2.0, ставится локально и по умолчанию слушает только loopback — облачного аккаунта не требуется. GitHub, npm и raw.githubusercontent.com из РФ доступны без VPN, так что и установка, и сборка из исходников штатные. Платить не за что — проект бесплатный, подписки нет.

Ограничения начинаются там, где в дело вступают оборачиваемые агенты:

  • Claude Code (Anthropic) — Россия не входит в список поддерживаемых стран: claude.ai, подписка и API из российского IP без VPN не работают, оплата российскими картами невозможна. Реальные пути — зарубежные/виртуальные карты, посредники, крипта. Практика запуска Claude в dev-контейнерах из РФ разобрана в гайде на DTF.
  • Codex (OpenAI) — та же картина: из российских IP напрямую не работает, оплата — зарубежными картами. Подробно про оплату ChatGPT/Codex из РФ — гайд Tehrevizor на Habr.
  • Обходной путь для теста ActraDeck без Claude/Codex — в проекте есть адаптеры для opencode и Gemini CLI (оба пока observe-only), а это инструменты, работающие из РФ. Наблюдение, маскирование и аудит можно проверить на них, relay одобрений — нет.

Русскоязычных разборов именно ActraDeck на момент публикации нет: поиск по Habr и vc.ru пуст, проект появился на неделе. Общие материалы по безопасности кодинг-агентов в рунете есть — серия про LLM-песочницы с Docker на Habr, корпоративная песочница от МТС на Habr, но именно этот инструмент ещё не освещён.

Вывод

ActraDeck — ответ на конкретную дыру, которую показали находки августа—сентября: чем автономнее агент, тем чаще решение о разрушительном действии принимает не человек. Инструмент не пытается сделать модель «послушнее» — он возвращает оператору последнее слово по операциям с большим радиусом поражения и применяет правило «нет ответа — отказ». Плюс к этому маскирование секретов и append-only аудит, который можно пересматривать.

Стоит отдавать себе отчёт в зрелости: проект выложен публично 05.09.2026, версия 0.9.0, статус pre-1.0, детекция — best-effort, а не песочница. Для продакшн-контура одного ActraDeck мало: он страхует от катастрофических команд и утёкших секретов в выводе, но не заменяет изоляцию. Разумная связка на сентябрь 2026 — ActraDeck как «стоп-кран» поверх уже существующей защиты: песочницы для ИИ-агентов, схема изолированного агента с agent-only ключом (кейс Micah Lee) и флаг --restricted для Claude Code. Дальше по теме безопасности — общий гайд и разбор GitSpawn.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка / 5. Количество оценок:

Оценок пока нет. Поставьте оценку первым.

Добавить комментарий

Adblock
detector