Система кросс-агентной трассировки и диагностики безопасности для LLM-агентов, использующих инструменты: нормализует события трассировки, строит графы происхождения, извлекает цепочки от источника к стоку и выявляет пробелы в защите.
AgentTriage — это система сквозной трассировки и диагностики безопасности для LLM-агентов, использующих инструменты. Она наблюдает за входящими данными из источников, планированием и жизненными циклами инструментов, нормализует их в единый канонический контракт событий, реконструирует упрощённый типизированный граф происхождения (Simplified Typed Provenance Graph, STPG), извлекает цепочку от источника к стоку, определяет вероятный пробел в защите и формирует карточку пробела в защите (Defense-Gap Card).
Этот репозиторий содержит текущую реализацию среды выполнения AgentTriage, пять облегчённых оверлеев для целевых систем, зафиксированные снимки исходного кода соответствующих open-source агентов, один полный прогон поведения из 53 кейсов и один набор из 40 страниц с доказательствами диагностики без разметки.
agenttriage/
canonicalize/ target-neutral event normalization and parent linking
stpg/ STPG construction, slicing, labeling, and compaction
chain/ source-to-terminal chain extraction
attribution/ outcome-aware defense-gap attribution
render/ JSON/Markdown Defense-Gap Card rendering
batch/ target launcher, trace validation, and artifact pipeline
targets/ five target-specific runtime overlays
open-source-agents/ pinned source snapshots governed by upstream licenses
schemas/ trace, canonical-event, and target schemas
contracts/ public acquisition/diagnosis contract
examples/ offline diagnosis examples and safe smoke inputs
data/ sanitized collected cases and label-free evidence pages
Пять целевых агентов — это TaskWeaver, Agent Zero, LangGraph, Goose и Microsoft
Agent Framework. Информация, относящаяся только к конкретному целевому агенту, должна находиться в metadata.<target>;
все события трассировки верхнего уровня используют agenttriage.trace.v0.2, а все драйверы целевых агентов
используют общий интерфейс v0.2.
Пять определений оверлеев и обёртка среды выполнения TaskWeaver соответствуют
последней реализации, выбранной для этого публичного дерева исходного кода. Код хронометража, аннотирования
и кода, предназначенного только для оценщика, намеренно исключён из этого релиза. Ревизии upstream и блокировки зависимостей, специфичные для целевых агентов, остаются доступными в файле version-lock.json каждого целевого агента
и в конфигурации контейнера.
Целевые агенты могут выполнять код и записывать файлы. Используйте только одноразовые Docker-контейнеры, тестовые API-ключи, предоставленные локальные фикстуры и loopback-эндпоинты. Не монтируйте конфиденциальные каталоги хоста и не направляйте примеры на продакшен-системы. См. SECURITY.md.
Хост-пакет имеет одну зависимость времени выполнения — jsonschema. Зависимости целевых агентов
изолированы в их Docker-образах, закреплённых по дайджесту.
cd agenttriage-open-source
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e .
python -m pip install pytest
Проверьте путь без ключей:
pytest -q
agenttriage \
--case examples/sample_case.json \
--output /tmp/agenttriage-offline-demo \
--print-markdown
Офлайн-команда записывает:
raw_events.json
canonical_events.json
executed_chain.json
stpg.json
stpg_slice.json
assessment.json
card.json
card.md
Никогда не редактируйте отслеживаемый файл конфигурации, вписывая в него настоящий ключ. Создавайте только локальные env-файлы, необходимые для тех целей, которые вы собираетесь запускать:
cp .env.example targets/agentzero/.env.local
cp .env.example targets/langgraph/.env.local
cp .env.example targets/goose/.env.local
cp .env.example targets/microsoft_agent_framework/.env.local
cp .env.example targets/taskweaver/.env.local
Заполните DEEPSEEK_API_KEY для режимов реальных моделей Agent Zero, LangGraph, Goose и Microsoft Agent Framework. Заполните LLM_API_KEY для TaskWeaver. Примеры smoke-фикстур Goose/LangGraph/MAF детерминированы и могут запускаться без ключа модели, но раннер всё равно требует наличия настроенного env-файла; пустой скопированный шаблон достаточен для этих фикстур.
Пакетный раннер автоматически собирает отсутствующий образ. Чтобы собрать явно:
docker build -f targets/taskweaver/Dockerfile -t agenttriage-taskweaver:runtime-overlay-v0.3 .
docker build -f targets/agentzero/Dockerfile -t agenttriage-agentzero:v2.4-overlay-v0.2 .
docker build -f targets/langgraph/Dockerfile -t agenttriage-langgraph:1.2.9-overlay-v0.4 .
docker build -f targets/goose/Dockerfile -t agenttriage-goose:1.43.0-overlay-v0.3 .
docker build -f targets/microsoft_agent_framework/Dockerfile -t agenttriage-microsoft-agent-framework:1.11.0-overlay-v0.3 .
Базовые образы и upstream-ревизии фиксируются в каждом
targets/<target>/version-lock.json. Если dockerproxy.net недоступен в
вашем регионе, замените только хост реестра, сохранив закреплённый дайджест.
Каждая цель имеет отдельный каталог prompt/policy в examples/smoke/.
Форма команды одинакова для всех пяти целей:
agenttriage-batch \
--target langgraph \
--prompts examples/smoke/langgraph/prompts.jsonl \
--policy-oracles examples/smoke/langgraph/policy_oracles.jsonl \
--output runs/langgraph-smoke-01 \
--runtime docker \
--instrumentation-mode semantic \
--build \
--timeout-seconds 300
Замените langgraph на taskweaver, agentzero, goose или
microsoft_agent_framework и используйте соответствующий каталог smoke-тестов. Всегда используйте
новый выходной каталог. Каталог кейса содержит вывод драйвера и семантическую
трассировку, а также нормализованные артефакты, управляемые раннером:
driver_result.json
semantic_trace.jsonl
raw_trace.json
trace_validation.json
case.json
driver.stdout.log
driver.stderr.log
artifacts/canonical_events.json
artifacts/executed_chain.json
artifacts/stpg.json
artifacts/stpg_slice.json
artifacts/card.json
artifacts/card.md
Используйте --instrumentation-mode off с теми же входными данными для проверки поведения без трассировки. Этот режим намеренно не создаёт semantic_trace.jsonl.
Каждый драйвер получает:
prompt.json;policy_oracle.json;semantic или off);safe_test_assets.json и изолированный корень материализованных ресурсов;Каждый драйвер владеет только driver_result.json и semantic_trace.jsonl. Общий
раннер проверяет трассировку, создаёт raw_trace.json и case.json,
запускает AgentTriage и записывает артефакты STPG/Card. События вызова и результата
разделяют явный call_id; одна лишь хронологическая смежность не рассматривается как
причинно-следственное доказательство.
TaskWeaver использует ту же облегчённую модель runtime-оверлея, что и остальные четыре цели: закреплённый исходный код upstream не патчится. Runtime-обёртки устанавливаются при запуске процесса и восстанавливаются при выходе. Этот выпуск намеренно не содержит прежний универсальный модуль hook-plan/Instrumentation из AgentTriage или пропатченное дерево исходного кода TaskWeaver; семантические события испускаются только пятью локальными для целей runtime-оверлеями.