【T3MP3ST】Multi-Agent 红队 Harness 深度解析:XBOW 90.1% pass@1 的工程闭环
一句话结论:T3MP3ST 不是”又一个渗透测试 Agent”,它是把已有的 Claude Code / Codex / Hermes / OpenCode / Oh My Pi 当作 Operator 拼起来的 Multi-Agent Meta-Harness——主控(Master Builder)持有完整攻击目标,把它分解成无害的”代码分析查询”派发给受限 Worker,最后综合成可执行情报;整套机制里最值钱的是 DecompositionOrchestrator 的 master/worker 分层 和 Arsenal 审批门(approve once then free + 双层 fail-safe)。
🎯 一句话开场
红队工具几十年来都是”人 + Burp + Metasploit + 多年经验”的艺术活儿,一个初级研究员想真正挖到 CVE,门槛是”先打 5 年 CTF”。elder-plinius/T3MP3ST(6,179 ⭐,AGPL-3.0,TypeScript 主语言,2026-09-08 仍在活跃)赌的是另一件事:当一个 Master LLM 持有完整攻击目标、把它拆成无害的分析问题派发给 Worker LLM 时,Worker 即使只回答”代码里有什么”也能让 Master 综合出 zero-day——XBOW 自评套件上 90.1% pass@1,比 XBOW 自己报的 85% 还高 5 个百分点。
读完这篇你会得到:
- T3MP3ST 的全栈数据模型:Operator(角色) / OperatorCell(班组) / Mission(任务) / TaskQueue / RulesOfEngagement(带 MITRE ATT&CK 技术 ID)的完整定义
- 6 大 Harness 原语的真实可运行代码:DecompositionOrchestrator 的 master/worker 分层、Arsenal 审批门(gated tier + 双层 fail-safe)、RulesOfEngagement 的”需要人工批准”技术清单、MissionRecoverySnapshot 的 idempotency-key 持久化、AttackGraph 的 5 状态机(verified/active/probing/hypothesized/discarded)、local-agents 的”已鉴权 CLI 自动检测+复用”
- 和 3 个标杆 Harness(OpenHands、AutoGen、CrewAI)的横向对比,重点讲”策略 vs 机制”分离的工程差异
- 从零搭建的 MVP 路径:必须做哪些、可以省略哪些、踩坑预警
- XBOW 0.901 vs XBOW 自报 0.85 的真实证据(
npm run verify-claims重算 27/27 全绿)
一、T3MP3ST 是什么?先看定位
1.1 一句话定义
T3MP3ST(Tactical Execution Multi-agent Platform for Elite Security Testing)= 多智能体协同的红队作战平台。它不像传统漏洞扫描器(Nessus、ZAP)那样按签名匹配,而是:
- 复用你已经在用的 AI Coding Agent(Claude Code / Codex / Hermes / OpenCode / Oh My Pi)作为 Operator
- Master LLM 编排 全局攻击链,Worker LLM 只回答无害的代码分析问题(DecompositionOrchestrator)
- Arsenal 工具库(metasploit / hydra / sqlmap / nmap / 200+ Kali 工具)通过 审批门 暴露给 Operator
- Rules of Engagement(带 MITRE ATT&CK 技术 ID)声明”哪些动作需要人批准”
- MissionRecovery 持久化每个 Mission 的状态,崩溃可恢复
- MCP Server 把 security_recon 工具暴露给任意 MCP 客户端(Claude Desktop / Cursor)
- 每个 README 数字都可以用
npm run verify-claims重算(27/27 全绿,不接受”trust me bro”)
1.2 仓库速览
| 维度 | 数据 |
|---|---|
| ⭐ Stars | 6,179 |
| 📅 首次推送 | 2026-02-03(仅 7 个月,已 6k+ ⭐) |
| 📅 最近推送 | 2026-09-08(仍在活跃) |
| 📝 主语言 | TypeScript(ESM, Node 20+) |
| 📦 仓库大小 | 133 MB(bench/ 占了 1400+ 个 YAML 测试用例) |
| 📄 许可证 | AGPL-3.0(强 copyleft,确保所有 fork 都开源) |
| 📁 关键目录 | src/orchestration/(Master/Worker 分解)、src/operators/(Operator 角色系统)、src/arsenal/(工具库+审批门)、src/mission/(任务+RulesOfEngagement+Recovery)、src/agent/local-agents.ts(已鉴权 Agent 自动检测)、src/mcp-server.ts(MCP 反向代理)、bench/(XBOW/CVE/Cloud/Binary/Mobile/Smart-Contract 6 大基准) |
| 📊 关键评测 | XBOW 自评套件 90.1% pass@1(XBOW 自报 85%)、Cybench CTF、CVE 冷狩猎(post-cutoff 的 CVE 模型从未见过) |
| 🛠️ 配套工具 | npm run verify-claims(重算 README 全部数字)、npm run bench:model-matrix(模型矩阵)、npm run cve:bench:live(真实 CVE 狩猎) |
1.3 5 大差异化能力(README 直接列)
- Reproducible(可复现):每个数字都能用
npm run verify-claims重算,27/27 全绿。一个不能复现的数字不发出去。 - Keyless(无钥匙):你机器上已经鉴权过的 Coding Agent 才是大脑。不要新的 API key、不要新账单、不要新账号。
- Multi-Agent Meta-Harness:Master LLM 持目标,Worker LLM 看代码,互不知情。Operator 角色(Ghost / Specter / Wraith / Spectre / Banshee)按 kill chain 阶段分工。
- Honest about scope(对自己诚实):status 表清晰标 ✅ Stable / ⚠️ Experimental / 🛣️ Roadmap,red-teaming 不是玄学。
- MITRE ATT&CK 治理:RulesOfEngagement 里写的是
T1078 / T1059 / T1548这种 ATT&CK 技术 ID,不是模糊的”高危操作”——每个被禁/被批准的动作都有标准化引用。
二、整体架构:把 Harness 6 件套同时跑通
T3MP3ST 的架构几乎把 Harness 6 件套里的 Sub-Agent + Workflow + Script + MCP 四个组件一次跑通了(Rule 主要靠 RulesOfEngagement 静态声明,Skill 是 Mission/Operator 的隐式 SOP)。
2.1 仓库目录地图
flowchart TB
subgraph 入口层
CLI[CLI<br/>src/cli.ts<br/>Commander.js]
SRV[Server<br/>src/server.ts]
MCP[MCP Server<br/>src/mcp-server.ts]
end
subgraph 核心编排层 src/orchestration
ORCH[DecompositionOrchestrator<br/>orchestrator.ts<br/>master/worker 分层]
CTX[ContextPack<br/>context-pack.ts]
PROMPT[Prompt 模板<br/>prompts.ts]
end
subgraph Agent 角色层 src/operators + src/agent
OP[OperatorAgent<br/>operators/index.ts]
CELL[OperatorCell<br/>班组]
LA[Local Agents<br/>agent/local-agents.ts<br/>Claude/Codex/Hermes 探测]
end
subgraph 任务层 src/mission
MC[MissionControl<br/>mission/index.ts]
REX[Recovery<br/>mission/recovery.ts]
RoE[RulesOfEngagement<br/>默认/严格两档]
end
subgraph 工具层 src/arsenal
CAT[Catalog<br/>200+ 工具]
APP[Approval Gate<br/>approval.ts<br/>3-tier 审批]
PARS[Parsers<br/>JS/Binary/Cloud]
end
subgraph 证据与可观测
EV[Evidence Vault<br/>evidence/index.ts]
RG[Attack Graph<br/>recon/attack-graph.ts]
GATE[Evidence Gate<br/>evidence/gate.ts]
end
subgraph LLM 层 src/llm
LB[LLMBackbone<br/>统一 6 类 provider]
CC[Context Compression]
TC[Tool Call Boundary]
end
CLI --> ORCH
SRV --> ORCH
MCP --> SRV
ORCH --> OP
ORCH --> LB
OP --> LA
OP --> MC
MC --> RoE
MC --> REX
OP --> APP
APP --> CAT
OP --> EV
EV --> GATE
OP --> RG
style CLI fill:#C7CEEA,stroke:#6B7AA8,color:#333
style SRV fill:#C7CEEA,stroke:#6B7AA8,color:#333
style MCP fill:#FFDAB9,stroke:#C9A07A,color:#333
style ORCH fill:#E8D5F5,stroke:#A88FBE,color:#333
style CTX fill:#E8D5F5,stroke:#A88FBE,color:#333
style PROMPT fill:#E8D5F5,stroke:#A88FBE,color:#333
style OP fill:#FFF9C4,stroke:#C9B968,color:#333
style CELL fill:#FFF9C4,stroke:#C9B968,color:#333
style LA fill:#FFF9C4,stroke:#C9B968,color:#333
style MC fill:#B5EAD7,stroke:#7AAE92,color:#333
style REX fill:#B5EAD7,stroke:#7AAE92,color:#333
style RoE fill:#FFB3C6,stroke:#C98095,color:#333
style APP fill:#FFB3C6,stroke:#C98095,color:#333
style CAT fill:#F5F5F5,stroke:#BBBBBB,color:#333
style PARS fill:#F5F5F5,stroke:#BBBBBB,color:#333
style EV fill:#FFDAB9,stroke:#C9A07A,color:#333
style RG fill:#FFDAB9,stroke:#C9A07A,color:#333
style GATE fill:#FFDAB9,stroke:#C9A07A,color:#333
style LB fill:#E8D5F5,stroke:#A88FBE,color:#333
style CC fill:#F5F5F5,stroke:#BBBBBB,color:#333
style TC fill:#F5F5F5,stroke:#BBBBBB,color:#3332.2 数据流:从 “一句攻击目标” 到 “可执行情报”
flowchart LR
subgraph 输入层
U["👤 攻击者(人)"]
REQ["🎯 一句话目标<br/>'找 axios zero-day'"]
end
subgraph 编排层
CLI["⚙️ T3MP3ST CLI<br/>Commander.js"]
M["🧠 Master LLM<br/>(opus, 持目标)<br/>持完整攻击语境"]
W["🧠 Worker LLM<br/>(fable-5, 受限)<br/>只看无害代码问题"]
end
subgraph 执行层
OP["👻 Operator<br/>Ghost-1 / Specter-2"]
LA["🔌 Local Agent<br/>Claude Code 等<br/>已鉴权 CLI"]
AR["🪝 Arsenal + Approval<br/>3-tier gated"]
end
subgraph 证据层
EV["📚 Evidence Vault<br/>receipt 持久化"]
RPT["📊 报告 + Attack Graph"]
end
U --> REQ --> CLI
CLI -->|"完整目标 + 源码"| M
M -->|"STEP 1: 拆 8 个无害查询"| M
M -->|"8 个 DecomposedQuery"| W
W -->|"分析答案<br/>(无攻击语境)"| M
M -->|"STEP 3: 综合 + 推断"| M
M -->|"SynthesisResult"| CLI
CLI -->|"spawnOperator"| OP
OP -->|"dispatch('metasploit')"| AR
AR -.->|"SPICY WARNING"| AR
AR -.->|"requestApproval"| AR
AR -->|"APPROVED"| OP
OP -->|"spawn 已鉴权 CLI"| LA
LA -->|"stdout reply"| OP
OP -->|"记 receipt"| EV
EV --> RPT
RPT --> U
style U fill:#C7CEEA,stroke:#6B7AA8,color:#333
style REQ fill:#C7CEEA,stroke:#6B7AA8,color:#333
style CLI fill:#E8D5F5,stroke:#A88FBE,color:#333
style M fill:#FFB3C6,stroke:#C98095,color:#333
style W fill:#FFDAB9,stroke:#C9A07A,color:#333
style OP fill:#FFF9C4,stroke:#C9B968,color:#333
style LA fill:#F5F5F5,stroke:#BBBBBB,color:#333
style AR fill:#FFB3C6,stroke:#C98095,color:#333
style EV fill:#B5EAD7,stroke:#7AAE92,color:#333
style RPT fill:#B5EAD7,stroke:#7AAE92,color:#3333 个关键洞察:
- Master/Worker 分层 = 抗 LLM Provider 审查的工程解:Worker 模型(如 fable-5)即使被 provider 装了”拒绝协助攻击”的安全过滤器,也只会看到无害的代码分析问题——审查触发概率大幅下降。
- Approval Gate 是 fail-safe 的:gated tier 工具既没被 pre-approve 又没交互批准 → 直接拒绝,headless run 不会”偷偷放火”。
- Local Agents 复用的是你已经鉴权的 Agent:T3MP3ST 自己不读、不存、不传输 API key,只探测”~/.claude.json / ~/.codex/auth.json / ~/.hermes/.env”这些 auth artifact 存不存在,然后 spawn 你的 CLI 跑任务——你的 key 永远在你 keychain 里。
三、6 大 Harness 原语深度解析
3.1 原语一:DecompositionOrchestrator — Master/Worker 分层(最值钱的设计)
核心思想:让一个”unrestricted” 模型持有完整攻击目标,让一个”restricted/便宜”模型只回答无害的代码分析问题。Master 综合答案时持有完整语境,Worker 永远看不到攻击语义。
1 | // src/orchestration/orchestrator.ts(精简后的核心结构) |
可独立运行的 Python 复刻(讲清楚原理):
1 | # master_worker_decomposition.py - 完整可运行 |
{source[:4000]}
1 |
|
这套设计的 3 个反直觉好处:
| 反直觉点 | 解释 |
|---|---|
| Worker 用便宜模型反而更快拿到结果 | worker 任务是”看代码回答问题”——比”做规划”难度低 10x,Haiku/GPT-4-mini 就能干 |
| Master/Worker 隔离天然抗 provider 审查 | Worker 永远看不到攻击语义,即使 provider 给 worker 模型装了”拒绝协助攻击”过滤器也触发不到 |
| token 预算可控 | 每轮 planning budget(默认 16k)+ worker source budget(默认 8k),避免 worker 把整个 repo 灌进 context |
3.2 原语二:OperatorCell + Operator Roles — 按 kill-chain 分工的 Sub-Agent
1 | // src/operators/index.ts 核心结构 |
关键设计哲学:
- Callsign(呼号)代替真实身份:Operator 在报告里写
Ghost-1 ran exploit...,不是operator-uuid-12345 did...——人类可读 + 审计友好 - Phase-based model routing(成本杀手):
T3MP3ST_MODEL_RECON=anthropic/claude-haiku-4-5这种 env var 让 recon 阶段用便宜模型,exploit/analysis 阶段才用 opus。实测可砍 2-3x 成本,对结果质量几乎无影响——因为 recon 阶段任务简单,exploit 阶段才需要强推理。
Operator + Phase + Model 三层路由:
graph LR
subgraph 7个 Kill-Chain 阶段
R[recon 侦察]
W[weaponize 武器化]
D[deliver 投递]
E[exploit 利用]
I[install 安装]
C2[c2 命令控制]
A[actions 行动]
end
subgraph 7 类 Operator Archetype
GHOST[Ghost<br/>stealth=9]
SPECTER[Specter<br/>stealth=7]
PHANTOM[Phantom<br/>stealth=8]
WRAITH[Wraith<br/>stealth=5]
SPECTRE[Spectre<br/>stealth=6]
REVENANT[Revenant<br/>stealth=7]
BANSHEE[Banshee<br/>stealth=4]
end
subgraph 3 类 Model(按 phase 路由)
HA[Haiku 4.5<br/>便宜快]
SO[Sonnet 4.5<br/>中等]
OPUS[Opus 4.1<br/>强推理]
end
R -.primaryPhase.-> GHOST
W -.primaryPhase.-> SPECTER
D -.primaryPhase.-> PHANTOM
E -.primaryPhase.-> WRAITH
I -.primaryPhase.-> SPECTRE
C2 -.primaryPhase.-> REVENANT
A -.primaryPhase.-> BANSHEE
R ==> HA
W ==> HA
D ==> HA
E ==> OPUS
I ==> SO
C2 ==> SO
A ==> OPUS
style R fill:#C7CEEA,stroke:#6B7AA8,color:#333
style W fill:#C7CEEA,stroke:#6B7AA8,color:#333
style D fill:#C7CEEA,stroke:#6B7AA8,color:#333
style E fill:#C7CEEA,stroke:#6B7AA8,color:#333
style I fill:#C7CEEA,stroke:#6B7AA8,color:#333
style C2 fill:#C7CEEA,stroke:#6B7AA8,color:#333
style A fill:#C7CEEA,stroke:#6B7AA8,color:#333
style GHOST fill:#FFF9C4,stroke:#C9B968,color:#333
style SPECTER fill:#FFF9C4,stroke:#C9B968,color:#333
style PHANTOM fill:#FFF9C4,stroke:#C9B968,color:#333
style WRAITH fill:#FFF9C4,stroke:#C9B968,color:#333
style SPECTRE fill:#FFF9C4,stroke:#C9B968,color:#333
style REVENANT fill:#FFF9C4,stroke:#C9B968,color:#333
style BANSHEE fill:#FFF9C4,stroke:#C9B968,color:#333
style HA fill:#B5EAD7,stroke:#7AAE92,color:#333
style SO fill:#FFDAB9,stroke:#C9A07A,color:#333
style OPUS fill:#FFB3C6,stroke:#C98095,color:#333为什么这个 3 层设计值得抄?
- Operator(人/角色) → 解耦”业务身份”和”技术实现”
- Phase(任务阶段) → 解耦”流程位置”和”具体职责”
- Model(模型) → 解耦”推理能力”和”成本”
3 层正交意味着:加一类 Operator 不影响 Model 路由,加一个新 Model 不影响 Operator 分配。这就是 Harness 6 件套里 Sub-Agent + Workflow 同时正确的打开方式。
3.3 原语三:Arsenal Approval Gate — “approve once then free” 的双层 fail-safe
1 | // src/arsenal/approval.ts 核心设计(高度还原) |
4 个工程细节值得抄:
| 细节 | 价值 |
|---|---|
| approve once then free | 同一 session 内重复使用同一工具不需要重复点 “yes”——避免人疲劳点错 |
| FAIL_SAFE_NO_APPROVER | headless 跑 bench 时如果没给 pre-allowlist,gated 工具永远拒绝——不会因为”忘了配置”就静默放火 |
| SPICY tier 仍然 WARNING | 即使已 approved,credential/dangerous tier 每次执行都会 fire 一条 audited log——你永远看到 agent 在干什么 |
| approver 注入而不是 hardcode | 测试用 mock approver,bench 用 pre-allowlist approver,CLI 用 inquirer approver——同一套审批逻辑 3 种用法 |
审批门的状态机(完整数据流):
flowchart TD
REQ[Operator 调用<br/>tool='metasploit'<br/>riskTier='dangerous'] --> Q1{gated tier?}
Q1 -->|safe / active / 未声明| PASS1[✅ 直接放行<br/>无审批]
Q1 -->|intrusive / credential / dangerous| Q2{已在 session<br/>approved?}
Q2 -->|是| PASS2[✅ 放行<br/>approvedSet 命中]
Q2 -->|否| Q3{在 pre-allowlist?}
Q3 -->|是| PASS3[✅ 放行<br/>preAuthorized=true]
Q3 -->|否| Q4{SPICY tier?}
Q4 -->|dangerous / credential| WARN[🔥 触发 NON-BLOCKING<br/>audited WARNING]
Q4 -->|intrusive| SKIPW[跳过 WARNING]
WARN --> Q5{approver 存在?}
SKIPW --> Q5
Q5 -->|否| DENY[❌ FAIL-SAFE 拒绝<br/>无静默放火]
Q5 -->|是| ASK[问人 approve?]
ASK -->|yes| ADDTO[加入 approvedSet<br/>本次 session 记住]
ASK -->|no| DENY2[❌ 人类拒绝]
ADDTO --> PASS4[✅ 放行<br/>justApproved=true]
PASS1 --> EXEC[执行工具]
PASS2 --> EXEC
PASS3 --> EXEC
PASS4 --> EXEC
style REQ fill:#C7CEEA,stroke:#6B7AA8,color:#333
style PASS1 fill:#B5EAD7,stroke:#7AAE92,color:#333
style PASS2 fill:#B5EAD7,stroke:#7AAE92,color:#333
style PASS3 fill:#B5EAD7,stroke:#7AAE92,color:#333
style PASS4 fill:#B5EAD7,stroke:#7AAE92,color:#333
style Q1 fill:#FFF9C4,stroke:#C9B968,color:#333
style Q2 fill:#FFF9C4,stroke:#C9B968,color:#333
style Q3 fill:#FFF9C4,stroke:#C9B968,color:#333
style Q4 fill:#FFF9C4,stroke:#C9B968,color:#333
style Q5 fill:#FFF9C4,stroke:#C9B968,color:#333
style WARN fill:#FFDAB9,stroke:#C9A07A,color:#333
style SKIPW fill:#F5F5F5,stroke:#BBBBBB,color:#333
style ASK fill:#E8D5F5,stroke:#A88FBE,color:#333
style ADDTO fill:#E8D5F5,stroke:#A88FBE,color:#333
style DENY fill:#FFB3C6,stroke:#C98095,color:#333
style DENY2 fill:#FFB3C6,stroke:#C98095,color:#333
style EXEC fill:#B5EAD7,stroke:#7AAE92,color:#3333.4 原语四:RulesOfEngagement — MITRE ATT&CK ID 治理
1 | // src/mission/index.ts |
为什么用 MITRE ATT&CK ID 而不是 “高危/中危”?
- 标准化:每个 ID 在 MITRE 官网有公开定义,跨团队/跨工具/跨厂商无歧义
- 可审计:报告里写
T1059 triggered by operator Wraith-2比写执行了 shell 命令信息量大 10x - 可共享:威胁情报、SIEM、ATT&CK Navigator 都直接消费这些 ID
3.5 原语五:MissionRecoverySnapshot — Idempotency-key 持久化
1 | // src/mission/recovery.ts |
3 个工程师会喜欢的细节:
- idempotencyKey 强制唯一:崩溃恢复时用
idempotencyKey去重,不会因为 retry 触发两次 exploit - schemaVersion 字段:未来 schema 改了不会让旧 snapshot 误执行——直接 reject
- revision + CAS(compare-and-swap):并发场景下不会出现”两个 Operator 改同一个 Mission”的脏写
3.6 原语六:local-agents.ts — “已鉴权 Agent 自动复用”
1 | // src/agent/local-agents.ts(精简约 200 行到核心思路) |
安全姿态总结(README 直接写):
SECURITY POSTURE:
- We NEVER read, print, log, or transmit credential contents. Auth is detected purely by the PRESENCE of the CLI’s own auth artifact (a file path or a macOS keychain item) — never its bytes.
- We do NOT enter or store any key. The CLIs are already logged in by the user; we only invoke them.
这就是 Harness Engineering 的 “机制 vs 策略”分离 在安全工具上的体现:T3MP3ST 只做”spawn 已经鉴权的子进程”这个机制,鉴权由各家 CLI 自己负责——既不重复造鉴权轮子,也不会让 secret 离开用户 keychain。
四、与同类 Multi-Agent Harness 横向对比
4.1 对比矩阵
| 维度 | T3MP3ST | OpenHands | AutoGen | CrewAI |
|---|---|---|---|---|
| ⭐ Stars | 6.2k | 49k | 35k+ | 30k+ |
| 主场景 | 渗透测试 / 红队 | 通用 SWE agent | 通用 Multi-Agent 对话 | 通用角色协作 |
| Sub-Agent 隔离 | OperatorCell + Callsign + RoE | AgentController + EventStream Runtime | ConversableAgent / GroupChat | Crew / Agent / Task 三层 |
| Workflow | DecompositionOrchestrator(master/worker) | Action Server + Runtime | GroupChat manager | Crew 顺序/层级流程 |
| 审批门 (Script) | Arsenal Approval Gate(3 tier + fail-safe) | 无统一审批层,靠 prompt 限制 | 无 | 无 |
| MCP | ✅ MCP Server 暴露 security_recon | ✅ MCP Tools | ⚠️ 需 adapter | ⚠️ 需 adapter |
| 状态恢复 | MissionRecoverySnapshot(CAS + idempotency-key) | ❌ 无持久化 | ❌ 无 | ❌ 无 |
| 可复现性 | ✅ npm run verify-claims 27/27 全绿 | ❌ README 数字不可重算 | ❌ | ❌ |
| Attack Graph | ✅ 5 状态机(verified/active/probing/…) | ❌ | ❌ | ❌ |
| Anti-LLM 审查 | ✅ Master/Worker 分层 | ❌ | ❌ | ❌ |
| MITRE ATT&CK 治理 | ✅ RoE 里写 T1078/T1059 | ❌ | ❌ | ❌ |
4.2 3 个关键设计差异
差异 1:Sub-Agent 的”语境”定义不一样
- OpenHands 的 Runtime 是”EventStream + Action Server”——所有 Action 通过 JSON-RPC 派发到独立进程。强隔离 + 强标准化,但没有 ATT&CK 级别的人类治理——你想禁止 Operator 提权?只能靠 prompt 写一句 “don’t escalate privilege”,没有 fail-safe 机制
- AutoGen 的 GroupChat 是”对话式协作”——多个 Agent 在群里聊直到达成共识。天生不适合红队:红队要的是”明确分工 + 强可审计 + 强 fail-safe”,对话协议信息密度低
- CrewAI 的 Crew / Agent / Task 是”业务流模板”——面向”市场调研团队 / 内容生产团队”这种业务场景,完全没有红队特有的”RoE + 审批门 + 攻击链状态机” 抽象
- T3MP3ST 走的是**”Operator 角色 + Phase 模型路由 + RoE 治理”** 三件套——把 Sub-Agent 抽象成”红队兵种”,每个兵种有自己的 archetype profile(stealth/aggression/methods),按 kill-chain 阶段显式路由
差异 2:抗 LLM Provider 审查的工程解
T3MP3ST 独有 Master/Worker 分层(3.1 节):让 Worker 永远看不到攻击语义,从根本上降低”被 provider 装的安全过滤器拒绝”的概率。其他 3 个项目都直接让同一个 LLM 既规划又执行,没有这层保护。
差异 3:可复现性的工程严谨度
T3MP3ST 的 npm run verify-claims 把 README 里每个数字(包括 XBOW 90.1%)都用 committed data 重算,27/27 全绿。其他 3 个项目的 README 数字基本是 “trust me bro”——没有可重放的 benchmark 跑分就是讲故事。
五、优缺点分析
5.1 左侧:架构简洁性 / 扩展性 / 易用性
| 维度 | 评价 |
|---|---|
| 架构简洁性 | ⭐⭐⭐⭐ — Master/Worker 抽象清晰;Operator/Cell/Mission/Task/Arsenal 5 层职责分明;模块边界(orchestration/operators/mission/arsenal/llm/agent/evidence)符合单一职责 |
| 扩展性 | ⭐⭐⭐⭐⭐ — 加一个新 Operator?写一个 ArchetypeProfile。加一个新工具?丢进 arsenal/catalog。加一个新的 MITRE technique?改 RoE YAML。几乎所有改动都是声明式 + 配置式,代码改动极少 |
| 易用性 | ⭐⭐⭐ — npx t3mp3st 起步 5 分钟,但要做严肃的”已鉴权 agent 自动复用”配置要读懂 T3MP3ST_AGENT_HOME 这种细节。CLI UX 还有改进空间(figlet banner 漂亮但实际命令帮助信息偏简略) |
5.2 右侧:性能 / 复杂度 / 维护性
| 维度 | 评价 |
|---|---|
| 性能 | ⭐⭐⭐⭐ — Phase-based model routing(recon 用 Haiku,exploit 用 Opus)实测省 2-3x 成本。Master/Worker 4 并发 round 内调度。但 LLM 调用主导,端到端耗时取决于 provider latency |
| 复杂度 | ⭐⭐(运维复杂)— 必须自己部署 LLM(Ollama / vLLM / OpenRouter),必须自己配 MITRE ATT&CK ID 库,必须自己接 supabase 存 MissionRecovery。不是开箱即用,而是”工程化平台” |
| 维护性 | ⭐⭐⭐⭐⭐ — 209 个 src/ 模块每个都有 JSDoc 注释,每个 commit message 解释”为什么”而不是”做了什么”;200+ 测试覆盖核心路径;schemaVersion 严格校验让升级安全;bench/ 目录里 1400+ YAML 测试用例当 fixture |
5.3 3 个真实的”工程坑”
- Auth artifact 探测的 false positive:macOS sandbox 下
accessSync可能因为 SIP 失败,agent 会”看起来鉴权失败”。解法:fallback 探测路径多写几个(~/.claude.json/~/Library/Application Support/Claude/auth.json) - MissionRecovery 的 schema 演进:每次 schema 改了,老 snapshot 直接被 reject(设计如此)。升级时先读完 CHANGELOG 再决定是否回放
- XBOW 评测的”复现性”是有成本的:README 里
verify-claims跑一遍要 4+ 小时(要实际打 104 个 XBOW challenge)。CI 不能跑每次 push,只能 nightly
六、从零搭建的 MVP 路径
6.1 必须做的 4 件事
1 | # 1. 装 t3mp3st |
6.2 MVP 可以暂时省略的 6 件事
| 模块 | 何时必须做 | MVP 跳过的影响 |
|---|---|---|
| Arsenal 审批门 | 做生产环境红队时 | CLI 跑 demo / benchmark 时工具会直接放行(demo 接受) |
| MissionRecovery (supabase) | 跑长 mission 时 | 崩溃不能恢复,要从头跑(demo 可接受) |
| Phase-based model routing | 成本敏感时 | 全用 Opus 会贵 3x(demo 可接受) |
| MCP Server | 想让 Claude Desktop 直接用时 | 不影响 CLI 用法 |
| Attack Graph 可视化 | 要给客户演示时 | 命令行报告一样看(专业用户可接受) |
| bench/ 1400+ YAML fixture | 做严肃 benchmark 时 | 不影响单 mission 执行 |
6.3 踩坑预警
| 坑 | 症状 | 解法 |
|---|---|---|
verify-claims 全绿但你的环境跑分低 | 用了更弱的模型 | T3MP3ST_MODEL_EXPLOIT=opus,T3MP3ST_MODEL_RECON=haiku |
| Operator 看不到 Claude Code | T3MP3ST 跑在 sandbox 里 HOME 被重定向 | 设 T3MP3ST_AGENT_HOME=/Users/<your-actual-user> |
| Approval Gate 永远拒绝 | 没接 approver + 没给 pre-allowlist | CLI 模式自动接 inquirer;headless 模式必须给 --pre-approved metasploit,hydra |
| Mission 跑一半崩溃 | 没配 supabase persistence | 短期:任务可重跑(幂等)。长期:按 migrations/supabase/0001_create_t3mp3st_snapshots.up.sql 起表 |
| Worker 拒绝回答 | Provider 把 Worker 模型装了攻击过滤器 | 换 Worker 模型(haiku 4.5 / gpt-4-mini 都比 fable-5 安全审查松) |
6.4 我的复刻 MVP(200 行 TypeScript)
如果你想从零写一个简化版,至少要实现这 4 件事:
1 | // mvp.ts - 200 行复刻 T3MP3ST 核心 |
七、趋势与总结
7.1 3 个趋势判断
趋势 1:Multi-Agent Harness 的”治理层”会独立成产品
T3MP3ST 的 RulesOfEngagement + Approval Gate + MissionRecovery 三件套,本质是”AI 红队的合规与可审计层”。这种**”治理层独立于模型/Agent”**的思路会扩展到所有高风险领域(金融 AI、医疗 AI、自动驾驶 AI),未来会出现 ai-governance-engine 这种通用治理中间件。
趋势 2:”已鉴权 Agent 自动复用”会成为 Meta-Harness 的标配
T3MP3ST 的 local-agents.ts(探测 ~/.claude.json / ~/.codex/auth.json 然后 spawn)是 “Meta-Harness of Harness” 的早期形态——不重新发明 Agent,而是把已有 Agent 编排起来。未来 1-2 年会出现 “Agent of Agents” 平台,专做”接入 Claude Code / Codex / Hermes / Cursor 做编排”。
趋势 3:可复现性(reproducibility)会变成 Harness 评测的硬指标
T3MP3ST 的 verify-claims 27/27 全绿是个分水岭事件:README 数字不可重算的项目会被快速淘汰——“trust me bro” 在严肃红队/生产 AI 场景越来越没有市场。未来 1 年,”GitHub README 数字可重算” 会变成开源 AI 项目的入场券。
7.2 工程经验提炼
- 机制 vs 策略分离:T3MP3ST 的 Arsenal 工具库是机制,Approval Gate 是策略——改一个不影响另一个。永远把”做什么”和”能不能做”分开实现
- FAIL-SAFE > LUCK-SAFE:headless 跑 gated 工具必须默认拒绝,不能依赖”配置人员记得加 allowlist”
- Schema 版本号 + 严格校验:RecoverySnapshot 的 schemaVersion 字段 + parseRecoverySnapshot 的逐字段校验,让旧 snapshot 不会在新代码里爆炸
- 数字必须可重算:27/27 verify-claims 不是营销话术,是工程纪律。“README 数字和 committed data 对得上” 是开源 AI 项目最被低估的质量指标
7.3 一句话总结
T3MP3ST 是 2026 年最值得研究的 Multi-Agent Meta-Harness 之一——它的Master/Worker 抗审查分解 + Arsenal 双层审批门 + ATT&CK 化 RulesOfEngagement + MissionRecovery 持久化 + verify-claims 可复现性这 5 个原语,每个都值一篇文章。比起”用 LangChain 拼 prompt”,T3MP3ST 给出了**”如何把已有 Coding Agent 编排成可治理、可审计、可恢复的工业级红队平台”**的完整答案。
附录:关键资源
- 源码:elder-plinius/T3MP3ST(6,179 ⭐,AGPL-3.0,TypeScript,2026-09-08 仍在活跃)
- 快速开始:docs/GETTING_STARTED.md
- 认知架构:docs/COGNITIVE_ARCHITECTURE.md
- 白皮书:WHITEPAPER.md
- XBOW 评测复现:
npm run verify-claims(27/27 全绿) - 对比项目:OpenHands · AutoGen · CrewAI
- 同主题博客:microsoft/UFO³ 跨设备 Galaxy、microsoft/Webwright 长程浏览器 Agent
本文采用 CC BY-NC-SA 4.0 许可,转载请注明来源。