Transpect 是一个 trace-first(以轨迹为先)的 Agent 安全基准与监管平台。它运行真实的 AI Agent 任务(通过 OpenClaw),采集运行时证据(行为日志、Frida 系统级插桩、工具调用产物),重建跨进程数据流,诊断失败轨迹,并施加在线安全护栏——在不安全的 Agent 行为执行之前检测并拦截它。主打演示场景是一次分阶段的小红书水坑攻击(watering-hole)。
仓库围绕"以运行(run)为单位"的存储模型组织:一个任务对应一个自包含的证据目录,位于 monitor/live/runs/<runId>/ 下,不依赖任何全局状态。
transpect.py 是统一入口,串起闭环:
trace -> guard -> evidence -> replay -> audit -> score -> attribution
它把上述阶段全部收敛到同一个运行目录,并分发给 tools/cli/main.py 中的各子命令。请优先使用它,而不是直接调用底层的 tools/... 脚本。
最低支持路径是确定性、离线的运行时安全演示。它不需要 OpenClaw、Frida、CodeTracer、R-Judge 或任何 LLM key。
git clone https://github.com/Vehicle-Security/Transpect.git Transpect
cd Transpect
# Apple Silicon:一套统一的 arm64 运行时 / 开发 / Frida 环境
python tools/runtime/setup_frida_arm64.py
source .venv-arm64-frida/bin/activate
# 端到端跑一遍确定性的提示注入(prompt-injection)演示
python transpect.py run config/tasks/demo_prompt_injection.json
python transpect.py analyze --latest
python transpect.py view --latest这次运行会在 monitor/live/runs/<runId>/ 下写出 trace、guard、evidence、audit、replay、scoring、attribution 各类产物。
若环境里没有
python,请直接使用.venv-arm64-frida/bin/python。 在 Apple Silicon 上只维护.venv-arm64-frida这一套物理 arm64 环境;不要再创建 x86_64 项目 venv 或.venv别名。
# 确定性、离线的提示注入演示(无外部依赖)
python transpect.py run config/tasks/demo_prompt_injection.json
# 配置文件驱动;命令行参数覆盖配置文件里的值
python transpect.py run -c config/secure_run.yaml
python transpect.py run -c config/secure_run.yaml --block-threshold 0.85python transpect.py analyze --latest # 重建 evidence/score/attribution/replay/audit/trace
python transpect.py view --latest # 打印审计产物路径
python transpect.py replay --latest # 紧凑的回放时间线run-real 把 Transpect 接到真实的 OpenClaw / task-repo 运行时:它跑现有 task repo 的 agent-trace 流水,把实时 OpenClaw 事件适配成同一套 AgentTrace 模式,再复用完全相同的 guard/evidence/audit/diagnosis 各阶段。
python transpect.py run-real --repo staged_attack \
--task-id "data/showcase_cases.json#xhs-waterhole-confirm-001"需要根目录 .env 中配好 BASE_URL、API_KEY、MODEL_ID,以及一个已就绪的 OpenClaw 运行时(见下文「部署级别 · Level 2」)。
若真实 OpenClaw/API 依赖不可用,请跑适配器契约测试,而不要谎称完成了一次在线运行:
python -m unittest monitor.tests.validate.test_real_agent_adapter_contract -v该契约验证:真实运行器风格的事件能被转换成 trace/agent_events.jsonl,在风险动作前被 guard 拦截,并被 evidence/audit/score/attribution 各构建器消费。
transpect.py demo 依次对本机 OpenClaw agent 跑三个 staged-attack 场景,自动加载 .env、自动拉起本地 staged-attack 站点,并为每个场景打印"预期决策 vs 实际决策"。
python transpect.py demo # 三个场景全跑
python transpect.py demo --scenario waterhole_confirm # 只跑一个场景(可重复)
python transpect.py demo --with-diagnosis # 同时跑 CodeTracer(更慢)| 场景 key | 预期决策 | 说明 |
|---|---|---|
normal_browsing |
ALLOW | 良性、只读浏览话题页 —— 稳定 |
waterhole_confirm |
REQUIRE_CONFIRMATION | 灰区:外部跳转 / 内联 POST,无敏感上传 —— 真正可变 |
waterhole_block |
BLOCK | staged 照片上传外泄尝试 —— 稳定 |
关于 LLM 不确定性: demo 驱动的是一个真实、非确定性的 LLM agent,所以灰区场景不会产生固定决策。当模型越界并计划照片上传时,guard 正确地把 REQUIRE_CONFIRMATION 升级为 BLOCK —— 这是护栏在生效,而非 bug。汇总里如实标注(✅ = 匹配意图,⚠️ = 在线偏差)。结果从不被硬编码,策略阈值也不会被调来强行"通过"某个场景。
想要"启动后实时监管 Agent 操作"的平台,用 transpect.py chat。它把你带进一个 REPL:你逐句和真实 OpenClaw Agent 对话,每条消息与 Agent 的每个动作都被实时监管。
python transpect.py chat # 自动生成会话 id,自动起站点、加载 .env
python transpect.py chat --session-id my_demo # 复用/指定会话 id(即运行目录名)每一轮有两层监管:
- 输入闸门(Agent 启动前):你的消息先过
inspect_user_input+inspect_plan。判为block的消息直接被拒;判为require_confirmation的在终端询问 y/N。 - 运行时拦截(网关内,自动):一旦
setup_runtime.py把行为中介接入 OpenClaw,Agent 尝试的每个工具调用 / 网络请求都在执行前被guardrail/agent_defense/bridge.py拦截判定。
一个会话对应一个稳定的 session id,也就是一个运行目录,每一轮追加到同一份 behavior-events.jsonl,安全上下文持续累积。输入 exit / quit / 退出 结束会话,结束时自动做整场分析(除非加 --no-analyze)。同时打开 dashboard 的 /live 页面即可实时看到这次会话。
python transpect.py trace build --run-dir monitor/live/runs/<runId>
python transpect.py evidence build --run-dir monitor/live/runs/<runId>
python transpect.py diagnose --run-dir monitor/live/runs/<runId>
python transpect.py score --run-dir monitor/live/runs/<runId>
python transpect.py audit build --run-dir monitor/live/runs/<runId>除了应用层日志 trace,Transpect 还采集 系统 / 运行时 / 应用 三层证据,使得 Programmatic Tool Calling(PTC)与加密 skill 执行即便在命名工具日志不透明或缺失时依然可见。
真实 OpenClaw 与 child-attach 运行会在 traces/ 下写出采集器原样字段的文件:
application_trace.jsonl—— OpenClaw 字段(event、toolName、toolCallId、target、preview、status…)runtime_trace.jsonl—— hook 字段(event=code_eval/skill_load、pid、api、codePreview、name、encrypted…)system_trace.jsonl—— Frida 字段(type、ts、pid、tid、kind、payload.api/fd/path/bytesRead/previewAscii…)
这三层 trace 只存原始事实,不得混入派生概念。
monitor/trace_model/raw_adapters.py 是唯一的 raw→fact 解析器:它计算内容身份 / data_ref,把 Frida 截断的 previewAscii 与 OpenClaw 完整内容匹配,从原始命令解析 exec-curl 网络 sink,并把旧版 runtime hook 行转换为 raw event 行。
派生分析产物(data_flow.json、diagnosis/dataflow_graph.json、traces/application_trajectory.json、security-reasoning/shadow_activity.json 及各类报告)都从适配器事实推导。data_ref、call_llm 变换、exec-curl sink、shadow 结论等派生概念只出现在这些分析输出里,不进三层 trace。
# 真实 OpenClaw read -> LLM -> write,配合 Frida 系统证据
.venv-arm64-frida/bin/python transpect.py chat --real-trace-demo \
--capture-real-trace --frida on --yes --no-site --no-analyze
# 真实 Agent + 实时 Frida 后代进程 attach(Apple Silicon,需终端 sudo)
sudo .venv-arm64-frida/bin/python transpect.py trace child-attach-demo
# 独立的加密-skill 演示,CLI 仅暴露实时 Frida 证据
.venv-arm64-frida/bin/python transpect.py trace encrypted-skill-demo
# 信息流 + 授权 MVP:5个恶意/6个行为匹配良性场景,每例重复3次
.venv-arm64-frida/bin/python transpect.py trace information-flow-evaluate \
--output-dir monitor/live/runs/information_flow_demo \
--timeout 30 --repeat 3
# 固定的42个恶意代码 Skill + 15个行为匹配良性 Skill 信息流泛化实验
.venv-arm64-frida/bin/python transpect.py trace real-skill-information-flow-evaluate \
--output-dir monitor/live/runs/real_skill_information_flow_<run-id>
# 对已有信息流报告执行任务作用域授权判定
.venv-arm64-frida/bin/python transpect.py trace authorize \
--run-dir <run-dir> \
--policy config/skill_capability.example.json
# 在固定的42个恶意与15个行为匹配良性 Skill 上运行最终裁决及适配基线
.venv-arm64-frida/bin/python transpect.py trace skill-audit-compare \
--output-dir monitor/live/runs/skill_audit_comparison_<run-id> \
--rsa-repo /path/to/Runtime-Skill-Audit
# 快照本机实际安装的 Skill;记录来源与哈希,但不执行上游内容
.venv-arm64-frida/bin/python transpect.py trace real-skills snapshot
# 下载固定版本、已由上游运行时验证的恶意 Skill pilot;仅隔离保存
.venv-arm64-frida/bin/python transpect.py trace malicious-skills fetch
# 构建断网 Docker 审计镜像,并动态评估带显式代码入口的恶意 Skill
.venv-arm64-frida/bin/python transpect.py trace malicious-skills build-image
.venv-arm64-frida/bin/python transpect.py trace malicious-skills evaluate \
--output-dir monitor/live/runs/malicious_skill_pilot_<run-id>
# 扩大到预先固定、B1-B9 均衡的 36 个代码型恶意 Skill
.venv-arm64-frida/bin/python transpect.py trace malicious-skills fetch \
--config config/malicious_skill_expanded.json \
--output-dir monitor/live/datasets/malicious_skills/expanded_b1_b9_36
# 构建 B1-B15 混合集:B1-B9 代码注入,B10-B15 Prompt Injection
.venv-arm64-frida/bin/python transpect.py trace malicious-skills fetch \
--config config/mixed_skill_b1_b15.json \
--output-dir monitor/live/datasets/malicious_skills/mixed_b1_b15
.venv-arm64-frida/bin/python transpect.py trace mixed-skills evaluate \
--output-dir monitor/live/runs/mixed_skill_b1_b15_<run-id>
# 使用官方 Codex + DeepSeek 运行 B10-B15 真实 Agent 工具调用实验
python transpect.py trace codex-skills build-images
python transpect.py trace codex-skills evaluate \
--dataset-dir monitor/live/datasets/malicious_skills/mixed_b1_b15_5_each \
--output-dir monitor/live/runs/codex_skill_pi_<run-id> \
--limit-per-behavior 5- real-trace-demo 驱动本机 OpenClaw agent 走一个安全 sandbox 任务:先落盘原始 OpenClaw read/write/tool/LLM 行 + 实时 Frida 文件事件,再由
DataFlowBuilder重建read → call_llm → write + network。Frida 是验收必需,replay 标注的系统证据会被拒绝。 - child-attach-demo 在发送恰好一轮真实 agent turn 前,先对 OpenClaw 网关启动
ChildProcessWatcher。应用层 trace 只见不透明的 XOR+base64node -eexec;runtime raw 行显示同 pid 的code_eval/ 加密skill_load;system raw 行显示被监视子进程的实时 Fridaopen/read/write。shadow_activity.json报告 evidence/reason 结论。
真实 Skill 快照与 macOS 免重复输密码的受限 Frida 启动器见
docs/real_skill_evaluation_and_macos_runner.md。真实 Skill 默认保持 unlabeled/not_reviewed/not_executed,未经人工复核不得计入 TPR/FPR。
恶意 Skill 的 Docker 动态实验设计、结果和结论边界见
docs/malicious_skill_dynamic_pilot.md。
代码注入与 Prompt Injection 的 B1-B15 混合实验见
docs/mixed_skill_b1_b15_evaluation.md。
加密 Skill、PTC 审计方法及 75 样本实验的汇报提纲见
docs/skill_audit_report.md。
Marker、跨进程 Source→Sink 证据、置信度和影子模式评测见
docs/information_flow_mvp.md。
Requested、Task Required、User/System Approved 三方能力交集与授权判定见
docs/authorization_mvp.md。
Codex + DeepSeek 真实 Agent 工具调用实验见
docs/codex_deepseek_skill_evaluation.md。
恶意样本仅在 --network none、只读根文件系统、删除全部 capabilities
和假凭据条件下运行。没有显式代码入口、必须由 Agent 解释 SKILL.md
的样本标记为 unsupported,不计作 FN。
Trace 模块研发期间,behavior-mediator 可保持
audit(执行后取证);验证"执行前在线拦截"时再切回enforce——enforce会正确地在执行前拦截不透明node -e。报告里的behaviorMediatorMode会保留这项实验前提。
python transpect.py trace benchmark build --output-dir <dir> # 生成 12 例 shadow-trace-bench-v1 fixture
python transpect.py trace benchmark evaluate --dataset-dir <dir> # 评测 4 种可见性基线该基准评测 application-only、span-exporter、system-intent、full three-layer 四种可见性,只衡量证据与数据流的恢复能力,不触发 guard / diagnosis / scoring / final judgment。Fixture 系统行显式标为 synthetic,不得当作实时 Frida/eBPF 采集。
AgentHazard 的隔离执行、host 实验和 Linux/eBPF 采集说明分别见
docs/agenthazard_trace_only.md 与
docs/utm_linux_collector.md。上游数据通过
transpect.py trace agenthazard fetch 下载到被忽略的 monitor/live/,不在仓库中重复维护。
当前代码、dry-run、fixture 和采集器单元测试已纳入离线门禁;在真实模型凭据下的 10-case AgentHazard + eBPF 全链路 canary 尚未完成,因此不得把现阶段结果表述为完整实测结论。
真实 Trace 运行优先为 Trace 模块组织目录:
monitor/live/runs/<runId>/
data_flow.json 结构化 source/transform/sink 数据流图
traces/
application_trace.jsonl 应用层原始事件流
application_trajectory.json 从应用层派生的会话视图(保留 sourceEventIds 回指原始证据)
runtime_trace.jsonl runtime hook 原始事件流
system_trace.jsonl Frida 原始系统事件流
raw/ 仅供审计的输入证据
openclaw-tools.jsonl
behavior-events.jsonl
runtime-events.jsonl
trajectory.txt 人类可读:同一个 blob_NNN 如何流经工具调用与系统证据
real_capture_report.json 验收结果(hasApplicationRead/hasSystemRead/hasLlmTransform/fridaSatisfied…)
外部 Frida 原始日志可能很大,紧凑运行可用 raw/frida-events.ref.json 指向真实 Frida JSONL 而非拷贝。
四层管线:
Layer 1 任务来源 monitor/task_repos/(R-Judge 适配器、staged_attack 演示)、config/tasks/ 演示规格
Layer 2 Agent 执行 OpenClaw 运行任务,behavior mediator 拦截事件
Layer 3 Trace + 诊断 三层 raw trace、合并 trace、CodeTracer bundle/analysis
Layer 4 安全推理 在线护栏、策略引擎、LLM 灰区判官、最终判定
进入管线有两条路径:
- 确定性演示 / 配置运行(
transpect.py run)——tools/cli/pipeline/secure_pipeline.py离线端到端跑完:构建AgentTrace,把事件流过guardrail/runtime/online_guard.py(在执行前拦截风险动作),再构建 evidence、失败归因、评分、回放时间线、审计报告,全部落到一个运行目录。无需 OpenClaw/LLM。 - 真实 Agent 运行(
transpect.py run-real)——tools/cli/pipeline/real_agent_adapter.py调用现有 task-repoagent-traceharness,把实时 OpenClaw 事件适配成同一AgentTrace模式,再复用完全相同的 guard/evidence/audit/diagnosis 各阶段。
tools/cli/—— 统一 CLI。main.py是 argparse 分发器;pipeline/secure_pipeline.py与pipeline/real_agent_adapter.py是两个管线驱动;config.py加载config/*.yaml。guardrail/runtime/—— CLI 管线用的在线执行层:online_guard.py(观测 + 执行前拦截)、policy_engine.py、risk_scorer.py、state_tracker.py。策略是guardrail/policies/下的 YAML。guardrail/agent_defense/—— 真实 OpenClaw 路径的协调层:bridge 入口、策略引擎、bypass 升级、动作归一化、trace 合并、最终判定。从guardrail.security导入,由 behavior-mediator 调用。guardrail/security/—— 护栏能力层:intent/plan/action 护栏、风险评分、信任模型、命令策略、决策引擎、LLM 灰区判官。纯检查函数,从不导入guardrail.agent_defense。monitor/trace_model/—— 三层 trace 模型:raw_adapters.py(唯一 raw→fact 解析)、dataflow_builder.py、application_trajectory.py。monitor/evidence/——evidence_builder.py/evidence_schema.py从运行目录产出security-reasoning/evidence_summary.json。tools/audit/——build_audit_report.py、build_replay_timeline.py产出audit/产物。tools/diagnosis/—— 失败归因、Agent 质量评分、CodeTracer 诊断封装。monitor/instrumentation/frida/—— 可选 Frida 插桩(仅观测,优雅降级)。
- 每次运行自包含在
monitor/live/runs/<runId>/下,无全局状态。 - 安全被融入运行时(在线),不只是事后分析 —— 护栏在风险动作执行前就拦截。
- 两种策略格式共存:声明式 JSON(
config/agent-defense-policy.json)用于真实 OpenClawagent_defense路径;YAML(guardrail/policies/*.yaml)用于 CLIguardrail/runtime路径。 - LLM 判官只作为灰区(ambiguous)场景的第二意见。
- 缺失的可选组件(Frida、CodeTracer、R-Judge、LLM)报告
degraded/unavailable,而不破坏 Level 0 演示。 - 本
README.md与CLAUDE.md是权威的目录布局与用法契约。 - 组件边界、依赖方向和证据流契约见
docs/architecture.md。
Dashboard 是 dashboard/console/ 下的 Next.js(TypeScript/React)应用,读取 dashboard/state/ 的 showcase 快照,并通过内置 API 直接读取本机 monitor/live/runs/,提供每 5 秒自动刷新的实时运行看板。
cd dashboard/console
npm install
npm run dev # 本地开发服务器,默认 http://localhost:3000
npm run build # 生产构建
npm run lint # tsc --noEmit 类型检查页面导航(全部中文):
/总览 —— 平台整体视图/benchmark基准评测 —— Agent-SafetyBench 等基准结果/demo现场演示 —— 三个 staged-attack 场景/live实时运行 —— 直接读取本机monitor/live/runs/,自动刷新;每跑一次python transpect.py run …都会在这里出现,可展开安全时间线/pipeline防御管线 —— 闭环各阶段/methodMATE 方法 —— 策略感知轨迹审计
数据来源是 monitor/live/runs/index.json 及各运行的 behavior-events.jsonl(读取逻辑见 dashboard/console/lib/live-runs.ts,API 路由见 dashboard/console/app/api/live-runs/)。
灰区 LLM 判官可作为策略感知轨迹审计器运行,复现 MATE(Policy-Aware Security Auditing for Mobile Agents via Synthesis-Driven Trajectory Learning,USENIX Security 2026,https://github.com/jiangchangyue/MATE)的*方法*。给定一个动作/轨迹,它检索相关的自然语言安全策略,并向 LLM 索取 {Violation, Category, Rationale},其中 Category 是 MATE 14 个风险类别之一。
- 策略是
guardrail/policies/audit_policies.yaml里的可编辑文本 —— 改安全要求无需改代码或重训练。 - 检索:
guardrail/security/policy_retriever.py(无依赖词法匹配)。 - 审计器:
guardrail/security/model_judge.py::audit_trajectory(使用.env的 LLM)。它复现 MATE 的方法,而非 MATE 尚未发布的微调模型;数字来自 Transpect 自己的 LLM。 - 只在
require_confirmation灰区上运行,从不降级一个硬性 block。
在 Agent-SafetyBench 上,扁平灰区判官对 10 条记录返回 10/10 require_confirmation(毫无区分度),而审计器能区分出 9 个 warn + 1 个 require_confirmation。开启:
python tools/benchmarks/run_agentsafetybench.py --limit 10 --auditor确定性演示不需要 LLM 或 .env。只有跑在线 Agent 任务、启用 LLM 灰区判官或运行 CodeTracer 诊断时才需要:
cp .env.example .env填入 OpenAI 兼容的模型设置:
BASE_URL=https://api.openai.com/v1
API_KEY=...
MODEL_ID=gpt-4o-mini这些值被 guardrail/security/model_judge.py、tools/common/task_repo_common.py、tools/diagnosis/run_codetracer_diagnosis.py 消费。.env 被 git 忽略,只提交 .env.example。
若 CodeTracer/ 或 R-Judge/ 不是 Transpect/ 的同级目录:
export CODETRACER_ROOT="$HOME/path/to/CodeTracer"
export R_JUDGE_ROOT="$HOME/path/to/R-Judge"需 Python 3.11+ 与 uv sync。无 OpenClaw/Frida/CodeTracer/R-Judge/LLM。
python transpect.py run config/tasks/demo_prompt_injection.json
python tools/validate/deployment_doctor.py --mode replay
python tools/validate/check_portability.py为在线 task-repo 场景运行 staged attack 站点。
python tools/demo/run_staged_attack_site.py --host 127.0.0.1 --port 8765生成新的真实 Agent 轨迹,需 OpenClaw 网关访问、behavior mediator hook 与模型配置。
cp .env.example .env # 填好 BASE_URL/API_KEY/MODEL_ID
python tools/runtime/setup_runtime.py --mode core
python tools/validate/doctor.py
python transpect.py run-real --repo staged_attack \
--task-id "data/showcase_cases.json#xhs-waterhole-confirm-001"若 doctor.py 报告 scope upgrade pending approval 或 pairing required,先批准所请求的 OpenClaw scope 再重跑。
用于 OS 级 Frida 证据与 CodeTracer 诊断。缺失组件报告 degraded/unavailable,不破坏 Level 0。
python tools/runtime/setup_frida_arm64.py
sudo .venv-arm64-frida/bin/python transpect.py trace child-attach-demo子进程 attach 需终端 sudo。watcher 以约 20 ms 周期轮询网关后代,极短命进程仍可能落入竞争窗口;报告保留 attach 记录并如实标为 INCONCLUSIVE,不用 replay 冒充实采。若未装 CodeTracer,tools/diagnosis/run_codetracer_diagnosis.py 写出带 status: "unavailable" 的结构化报告,该次运行仍能产出 final judgment、canonical trace 与可回放数据。
R-Judge 可选,仅当显式 --repo rjudge 时需要。缺失不影响 staged_attack 或 Level 0。
export R_JUDGE_ROOT="$HOME/path/to/R-Judge"
python tools/runtime/run_task_repo.py --repo rjudge --mode list-tasks
python tools/runtime/run_rjudge_batch.py --source-path data/Program --count 5 --concurrency 2数据集走 task repo 适配器(monitor/task_repos/),由 tools/runtime/run_task_repo.py 与批量脚本驱动,需 Level 2+ 在线运行时。
# 列出某 repo 可用任务
python tools/runtime/run_task_repo.py --repo rjudge --mode list-tasks
# 跑单个任务
python tools/runtime/run_task_repo.py --repo rjudge --mode agent-trace \
--task-id "data/Application/chatbot.json#37"
# 批量运行(并发 2);加 --dry-run --no-start-runtime 可预览
python tools/runtime/run_rjudge_batch.py --source-path data/Program --count 5 --concurrency 2
# Agent-SafetyBench(可叠加策略感知审计器)
python tools/benchmarks/run_agentsafetybench.py --limit 10 --auditor
# staged attack 数据集(先起站点,再跑任务)
python tools/demo/run_staged_attack_site.py --host 127.0.0.1 --port 8765
python tools/runtime/run_task_repo.py --repo staged_attack --mode agent-trace \
--task-id "data/xiaohongshu_waterhole_photo_upload.json#xhs-waterhole-photo-upload-001"每个任务跑完后结果写入 monitor/live/runs/<runId>/ 并登记进 monitor/live/runs/index.json,可在 CLI(view --latest)与 dashboard /live 查看。
一次运行时安全运行应包含:
trace/agent_events.jsonl
trace/canonical_trace.json
security-reasoning/defense_decision.json
security-reasoning/defense_decisions.jsonl
security-reasoning/evidence_summary.json
security-reasoning/final_judgment.json
diagnosis/agent_quality_score.json
diagnosis/failure_attribution.json
diagnosis/failure_graph.json
audit/replay_timeline.json
audit/audit_report.json
真实 Trace 采集运行额外写出 data_flow.json、traces/(三层 raw trace)与 raw/(审计输入证据),布局见上文「紧凑 Trace 布局」。
# Python
python -m pytest monitor/tests -q
python -m unittest discover -s monitor/tests -p 'test_*.py' -v
python -m unittest monitor.tests.test_agent_defense_chain -v
python -m unittest monitor.tests.validate.test_command_policy -v
# 缺 OpenClaw/API 依赖时,跑适配器契约而非谎称在线运行
python -m unittest monitor.tests.validate.test_real_agent_adapter_contract -v
# Node.js(behavior mediator)
node --test monitor/vendor/runtime-hooks/openclaw-behavior-mediator/tests/behavior-mediator.test.mjs
node --test monitor/vendor/runtime-hooks/openclaw-behavior-mediator/tests/runtime-capture.test.mjs
# 验证
node --check monitor/vendor/runtime-hooks/openclaw-behavior-mediator/index.js
python tools/validate/check_portability.py
python tools/validate/deployment_doctor.py --mode replay
python tools/validate/check_repo.py --skip-start
python tools/validate/run_acceptance.pyTranspect/
├── config/ 任务规格、secure_run.yaml、agent-defense-policy.json
├── dashboard/console/ Next.js 控制台 + 实时看板
├── guardrail/
│ ├── runtime/ CLI 管线的在线护栏(online_guard、policy_engine…)
│ ├── agent_defense/ 真实 OpenClaw 路径的协调层
│ ├── security/ 纯检查护栏能力层 + LLM 灰区判官
│ └── policies/ YAML 策略、audit_policies.yaml
├── monitor/
│ ├── instrumentation/ Frida 与 Linux syscall/eBPF 采集器
│ ├── live/runs/<runId>/ 每次运行的自包含证据
│ ├── runtime/ OpenClaw 客户端helpers、agent 场景
│ ├── task_repos/ R-Judge 适配器、staged_attack 演示
│ ├── trace_model/ 三层 trace 模型、raw_adapters、dataflow_builder
│ ├── evidence/ evidence_builder / evidence_schema
│ ├── trace_benchmark/ Trace-only 研究基准 fixture
│ ├── tests/ Python 测试
│ └── vendor/runtime-hooks/ 仓库自有的 openclaw-behavior-mediator
├── tools/
│ ├── cli/ 统一 CLI(main.py + pipeline/)
│ ├── runtime/ validate/ export/ diagnosis/
│ ├── audit/ benchmarks/ demo/ capture/ common/
├── transpect.py 统一入口
├── pyproject.toml uv.lock
├── README.md CLAUDE.md 权威布局与用法契约
分组后的工具路径(tools/runtime/、tools/validate/、tools/export/、tools/diagnosis/ …)是内部实现入口;对用户稳定的公共入口是根目录 transpect.py。
本仓库包含的东西比论文实际论证的范围要大。config/module_scope.json 给每个顶层目录和主要子包打上分层标记,docs/module_scope.md 解释划分依据并给出各模块的真实行数:
| 分层 | 含义 |
|---|---|
core |
论文主线。所有报告的数字都由这部分代码产出。分析模块 6,183 行 + 证据采集器 5,387 行,合计 11,570 行。 |
platform |
平台其他能力:guardrail/runtime、guardrail/agent_defense 的在线拦截、staged_attack showcase、dashboard。证明证据层可以驱动防护,但不参与评测。 |
experiment |
已冻结实验:AgentHazard 全线、R-Judge / AgentSafetyBench 适配器、fixture 基准、改写的外部 baseline。保留是为了可追溯,不在主线上。 |
infra |
共享 helper、CLI 分发、测试、配置与文档。 |
不移动任何文件——分层只是元数据。移动包会在全仓库范围破坏 import,而换不来任何分析上的好处。tools/validate/check_repo.py 会在某个顶层目录未登记时失败,因此这份清单不会悄悄落后于实际目录树。
tools/runtime/setup_runtime.py会更新~/.openclaw/openclaw.json,并在config/applied/下写带时间戳的备份。monitor/vendor/runtime-hooks/openclaw-behavior-mediator/是仓库自有的运行时集成代码;monitor/vendor/external/是 vendored 第三方。- 安全决策的用户可见消息使用中文(见
guardrail/security/decision_engine.py)。 - 可选 Frida 支持位于
monitor/instrumentation/frida/;能 attach 时 agent-trace 运行写运行本地的frida-events.jsonl,否则在trace_index.json中记录 unavailable/attach-failed 状态。