
How to Build a Threat Investigation Agent (8 Systems, One Skill)
An alert fires at 2am. The agent queries 8 systems, builds a timeline, scores severity, and posts an enriched briefing to Slack. The analyst reads one message instead of opening 8 tabs.
The problem: 20 minutes of tab-switching before you start investigating
A page fires at 2am. CrowdStrike shows a suspicious process on a workstation. The on-call SOC analyst opens PagerDuty, acknowledges the alert, then starts the context-gathering:
- 1.CrowdStrike: what process, what host, what user, what detection?
- 2.Splunk: raw logs around the timestamp. Any related events? Lateral movement?
- 3.Okta: did this user authenticate recently? From where? Impossible travel?
- 4.Active Directory: is this user an admin? Service account? What groups?
- 5.VirusTotal: is this hash known malicious? This IP? This domain?
- 6.Jira: is there already a ticket for this host or user?
- 7.Slack #soc-alerts: has anyone else noticed this?
- 8.PagerDuty: who else is on call? Do we need to escalate?
20 minutes of copy-paste across 8 systems. Before the analyst even starts thinking about whether this is real. Half the time it's a false positive they've seen before.
The agent does this in 30 seconds. One message in Slack with context from all 8 systems, a timeline, a severity score, and a recommendation. The analyst reads and decides. Here's how to build it.
Connect 8 systems
Each connection is one command. The agent gets access and understanding.
Initialize and connect
237 total endpoints. Each connection includes curated API docs, entity descriptions, and access rules.
Write the investigation skill
Your SOC's methodology, encoded as markdown.
The investigation methodology
Add the automation trigger
When PagerDuty fires, the automation triggers the threat-investigation skill automatically. The enriched briefing posts to #soc-alerts before the analyst even opens their laptop.
2:14am: an alert fires
CrowdStrike detects a suspicious PowerShell execution on WORKSTATION-47.
The alert fires, the agent enriches
PagerDuty pages Sarah (on-call analyst). Before she opens her laptop, the agent has already posted to #soc-alerts:
- 1. Isolate WORKSTATION-47 immediately (CrowdStrike network containment)
- 2. Disable Marcus's Okta account — credentials likely compromised (impossible travel + C2)
- 3. Check for lateral movement — Marcus has Finance-Read access, check if finance share was accessed
- 4. Block IP 45.33.21.8 at the firewall
- 5. Escalate to Jake Torres (secondary on-call) — this needs two analysts
Sarah investigates
The agent enriched. Now the analyst digs deeper.
Sarah asks follow-up questions
Disable the compromised account
Escalate and page the second analyst
Jake joins and asks his own questions
Containment and handoff
Wrap up the incident at 2:45 AM. Total time: 31 minutes.
Block the C2 IP and notify the manager
Reschedule on-call and close the loop
Close the incident window
The agent learns
This investigation makes every future investigation faster.
Knowledge proposals from the investigation
"IP 45.33.21.8 is associated with Cobalt Strike C2 infrastructure. Add to threat intel blocklist."
"DNS queries from browser sessions to c2.malware-domain.net without subsequent outbound connections are likely compromised ad network hits, not C2 callbacks. Score as LOW, not HIGH."
"When impossible travel is detected and the foreign login is followed by PowerShell execution within 15 minutes, severity should be CRITICAL regardless of user privilege level."
The SOC manager reviews
Next morning. Quality check, cost check, skill tuning.
Session replay: did the agent get it right?
Cost and model optimization
$34.20/month for 89 investigations. Each one saves ~23 minutes of analyst time. At $80/hr fully loaded, that's $2,737/month in analyst time saved. 80:1 ROI.
The full incident timeline
You didn't build most of this
The connections, skills, and knowledge came from the community. You just installed them.
What you installed vs what you wrote
Look back at what we actually built. Out of the 8 connections, 1 skill, and 1 automation, how much was custom?
9 out of 10 components came from the community registry. You wrote one file: the investigation skill. 40 lines of markdown describing how your SOC investigates alerts. Everything else was amodal connect or amodal install.
The community knowledge you got for free
But it goes further. There are knowledge packages too:
Four commands. Your agent now knows:
The complete framework. When the agent sees a PowerShell download-and-execute, it maps it to T1059.001 (Command and Scripting Interpreter: PowerShell) and T1105 (Ingress Tool Transfer). The executive summary includes ATT&CK technique IDs automatically.
340 patterns the community has validated as benign. Vulnerability scanner IPs, backup agents that trigger endpoint alerts, scheduled tasks that look like persistence. Instead of paging an analyst at 2am for a known false positive, the agent auto-scores it LOW and logs it.
The NIST 800-61 incident response framework as a knowledge package. The agent follows standardized containment and eradication procedures. When it recommends isolating a host, it's not making it up. It's following NIST.
Monthly-updated indicators of compromise. Known C2 IPs, malicious domains, file hashes. The agent cross-references these during enrichment. When it flagged 45.33.21.8 as Cobalt Strike C2, that came from the community threat intel package, not VirusTotal alone.
amodal update.And you can override any of it. The community false positive list says a vulnerability scanner IP is benign. But your org uses a different scanner? Override it:
Community knowledge for the 90% that's universal. Your overrides for the 10% that's specific to your environment. Same pattern as every other Amodal package: install the base, override what's yours.
8 connections. 1 skill. The agent doesn't replace the analyst. It gives them a 30-second briefing instead of a 20-minute research project.