This is a polished demo flow from a cold start to an impressive finish.
The goal is to show:
- structured memory in SurrealDB
- LangGraph orchestration
- persistent thread state
- graph-backed attack-path reasoning
Tell a story like this:
“ThreatGraph takes a seeded enterprise environment, grounds it in ATT&CK and CVE intelligence, and lets a stateful agent investigate exposure using a persistent SurrealDB-backed graph.”
Run:
export SURREALDB_URL="file://$(pwd)/.context/demo.db"
export SURREALDB_NS="threatgraph"
export SURREALDB_DB="main"
python3 ingest.py
streamlit run app.py --server.address 127.0.0.1 --server.port 8501What to say:
- “This is not a static screenshot. I am building the graph now.”
- “The ingest loads ATT&CK, the enterprise environment, software links, and CVE relationships.”
Point out:
- node/edge counts
- thread ID
- LangSmith tracing status
- recent investigation history
What to say:
- “This thread ID is the persistent investigation key.”
- “SurrealDB is storing both the graph and the investigation state.”
Ask:
Which asset is most exposed?
What to highlight:
- query classification
- threat assessment
- workflow state
- evidence bundle
- ranked assets
What to say:
- “This is not just an LLM answer.”
- “The result is grounded in graph evidence assembled from assets, software versions, CVEs, controls, and threat vectors.”
Move to the Exposure tab.
What to show:
- the top asset
- total score
- CVE and KEV counts
What to say:
- “The score is not just CVSS.”
- “It includes business criticality, crown-jewel status, network zone, controls, and non-software threats.”
Move to the Attack Graph tab.
Turn on:
- threat groups
- controls
- threat vectors
- attack paths
Open:
Detailed Attack Path Data
What to show:
- path risk
- route
- top CVEs
- top threat groups
What to say:
- “This tab is not just network topology.”
- “The path candidates come from exploit-sequence logic over the evidence graph.”
Back in Analyst, ask:
tell me about Cleaver
What to show:
- matched group
- group exposure result
- relevant internal assets
What to say:
- “The system can resolve named threat groups and map them onto internal assets through ATT&CK software and evidence bundles.”
Without changing the thread ID, ask:
Now give me remediation steps for that one
What to show:
- same thread ID
- prior context reused
- matched asset preserved
- new playbook returned
What to say:
- “This is the persistent-state part of the hackathon story.”
- “The follow-up is not stateless; it reloads the investigation context from SurrealDB.”
Say this clearly:
- “SurrealDB is the structured memory layer.”
- “LangGraph is the workflow/orchestration layer.”
- “The agent is stateful.”
- “The answers are evidence-backed.”
- “The graph and investigation history persist across turns.”
If time is short:
- show sidebar thread ID
- ask
Which asset is most exposed? - open Attack Graph detail expander
- ask follow-up
Now give me remediation steps for that one
That is enough to demonstrate the core.