
도구를 사용하는 LLM 에이전트를 위한 교차 에이전트 추적 및 보안 진단 시스템으로, 추적 이벤트를 정규화하고, 출처 그래프를 구축하며, 소스-투-싱크 체인을 추출하고, 방어 격차를 귀속시킵니다.
AgentTriage는 도구를 사용하는 LLM 에이전트를 위한 교차 에이전트 추적 및 보안 진단 시스템입니다. 이 시스템은 소스 인그레스, 계획 및 도구 수명 주기를 관찰하고, 이를 하나의 표준 이벤트 계약으로 정규화하며, 단순화된 타입 지정 프로버넌스 그래프(STPG, Simplified Typed Provenance Graph)를 재구성하고, 소스-투-싱크 체인을 추출하며, 예상되는 방어 격차를 귀속시키고, 방어 격차 카드(Defense-Gap Card)를 렌더링합니다.
이 저장소에는 현재 AgentTriage 런타임 구현, 다섯 개의 경량 타깃 오버레이, 해당 오픈소스 에이전트의 고정된 소스 스냅샷, 하나의 완전한 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 런타임 래퍼는 이 공개 소스 트리에 선택된
최신 구현에 해당합니다. 타이밍, 주석, 평가자 전용 코드는 의도적으로 이 릴리스에서
제외됩니다. 대상별 업스트림 리비전과 의존성 잠금은 각 대상의
version-lock.json과 컨테이너 구성에서 계속 확인할 수 있습니다.
대상 에이전트는 코드를 실행하고 파일을 작성할 수 있습니다. 일회용 Docker 컨테이너, 테스트 전용 API 키, 제공된 로컬 픽스처, 루프백 엔드포인트만 사용하십시오. 민감한 호스트 디렉터리를 마운트하거나 예제를 프로덕션 시스템으로 향하게 하지 마십시오. 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
실제 키로 추적되는 구성 파일을 절대 편집하지 마십시오. 실행하려는 대상에 필요한 로컬 환경 파일만 생성하십시오:
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
Agent Zero, LangGraph, Goose, Microsoft Agent Framework의 실제 모델 모드에 사용할 DEEPSEEK_API_KEY를 채웁니다. TaskWeaver에는 LLM_API_KEY를 채웁니다. 샘플 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 .
이미지 베이스와 업스트림 리비전은 각
targets/<target>/version-lock.json에 고정되어 있습니다. 사용 중인 지역에서 dockerproxy.net을 사용할 수 없는 경우, 고정된 다이제스트는 유지한 채 레지스트리 호스트만 교체하십시오.
각 타깃에는 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는 다른 네 대상과 동일한 경량 런타임 오버레이 모델을 사용합니다: 고정된 업스트림 소스는 패치되지 않습니다. 런타임 래퍼는 프로세스 시작 시 설치되고 종료 시 복원됩니다. 이 릴리스에는 AgentTriage의 이전 범용 훅 플랜/계측 모듈이나 패치된 TaskWeaver 소스 트리가 의도적으로 포함되지 않습니다; 시맨틱 이벤트는 다섯 개의 대상 로컬 런타임 오버레이에 의해서만 발생합니다.
targets/<id>/target.yaml, driver.py, Dockerfile, overlay.json, version-lock.json을 생성하세요. 공개 스키마를 재사용하고, 대상별 필드는 metadata.<id>에만 배치하세요. 소스 인그레스, 공유 call_id가 있는 도구 호출/결과, 터미널 상태, 인자 필드, 명시적 필드 계보를 캡처하세요. 대상별 최상위 이벤트 필드를 추가하지 마세요.
data/behavior-collection에는 다섯 대상에 걸친 한 번의 완전한 반복에서 나온 53개의 안전한 케이스가 포함되어 있습니다. 샘플에는 원시/시맨틱 트레이스와 AgentTriage STPG/Card 아티팩트가 포함되지만, 내부 실행 제어 및 효율성 요약은 제외됩니다.
data/diagnosis-evidence-pages에는 하나의 40페이지 예측 블라인드 증거 세트(page-set-1)가 포함되어 있습니다. 공개된 페이지에는 레이블, 모델 신원, 판정, 참조, 예측, 합의 또는 점수가 포함되지 않습니다. 두 데이터 디렉터리 모두 정제된 공개 샘플입니다. data/README.md를 참조하세요.
변경 사항을 게시하기 전에 다음을 실행하세요:
python scripts/scan_release.py .
pytest -q
스캐너는 시크릿, 로컬 절대 경로, 중국어 텍스트, 공개 릴리스/데이터 매니페스트, 금지된 실험 디렉터리, 중첩된 Git 메타데이터, 그리고 GitHub의 100 MiB 제한을 초과하는 파일을 거부합니다.
AgentTriage 코드는 Apache-2.0입니다. 다섯 개의 스냅샷은 각자의 업스트림 라이선스와 고지를 유지합니다. THIRD_PARTY_NOTICES.md를 참조하세요. 이들의 포함이 이들을 AgentTriage의 라이선스로 재라이선스하는 것은 아닙니다.