Why security agents must be evaluated on their investigation trajectory — not their verdict — and what 120 fully-instrumented SOC episodes taught us about the gap between calling tools and actually understanding an incident.
While building baselines we hit a number that should make anyone suspicious: a bag-of-words classifier reached 1.00 macro-F1 on severity classification on the test split (eval_results.json). Severity labels correlate with surface vocabulary. A SOC analyst's job is to investigate: pull the right logs, build a timeline, distinguish true positives from noise, and commit to a root cause without inventing evidence or isolating a production host "just to be safe".
Hugging Face's Is it agentic enough? argument applies hardest in security: the path is the product.
SOC-AgentBench packages 120 episodes across 12 attack scenarios and 9 log sources. Every episode carries the world and the answer key: gold evidence, gold timeline, and forbidden actions. Seven tools run against episode-local data only, so every trajectory is reproducible.
| Metric | Question it answers |
|---|---|
| Technique micro/macro F1 | Did it identify what the attacker did? |
| Evidence precision / recall | Did it cite the actual relevant events? |
| Root-cause accuracy | Did it understand why the incident happened? |
| Hallucinated evidence rate | Did it invent artifacts? |
| Unsafe action rate | Did it take a forbidden action? |
We compared a classical baseline stack (soc-analyst-baseline) with a tool-calling fine-tune of Qwen2.5-1.5B-Instruct (soc-analyst-tool-use).
| Stage of the investigation | Score |
|---|---|
| Call the right tool with valid arguments | 0.88 |
| Cite the correct evidence | 0.72 |
| Map the correct ATT&CK techniques | 0.68 |
| Identify the correct root cause | 0.58 |
The model learned the syntax of investigation, not its semantics. The test split is 18 episodes — every number carries wide error bars. That is part of the argument: small single-number security benchmarks invite overclaiming.
Evaluating a security agent without an unsafe-action metric in 2026 is like scoring a driving system on "did it arrive?" while ignoring what it hit on the way. See the MCP threat-modeling analysis and the ACL 2026 industry paper.
Grading an investigation is one problem. Teaching one needs orders of magnitude more trajectories: soc-agent-traces-100k, soc-agent-traces-smollm3-3b, and the live investigation demo.
from datasets import load_dataset
import json
ds = load_dataset("alirezaaminzadeh/soc-agent-bench")
episode = ds["test"][0]
alert = json.loads(episode["initial_alert"])
logs = json.loads(episode["log_corpus"])
truth = json.loads(episode["hidden_ground_truth"])
forbidden = episode["forbidden_actions"]
Benchmark Baselines Tool-use model Playground Leaderboard