使用说明
BSides Ballarat 2026 — Security Research Assistant
Presenter: Tim Haintz Conference: BSides Ballarat 2026 Status: ✅ Ready to present
What is this?
A "Security Operations Center" inside VS Code — built live as a BSides Ballarat presentation. This project demonstrates how Model Context Protocol (MCP) allows a security researcher to discover, view, and visualize academic vulnerabilities without leaving the IDE.
The entire VS Code environment (settings, extensions, MCP config) is version-controlled in this repo so anyone can clone it and get the same experience.
The Demo (Hero Flow)
- Discovery — Ask the Agent to find the latest paper on a threat (e.g., "Prompt Injection"). → Queries Semantic Scholar via MCP → returns abstract & PDF URL.
- Acquisition & Rendering — Ask the Agent to download and "show" the paper. → Downloads PDF → Custom Extension renders it as an image in the editor.
- Analysis & Visualization — Ask the Agent to explain the attack flow visually. → Multimodal LLM analyses the image → generates a Mermaid diagram → previews it via the Markdown Mermaid extension.
Repository Structure
BSidesBallarat2026/
├── .github/
│ └── agents/
│ └── bsides-researcher.md # Custom Agent definition (main VS Code window)
├── .vscode/
│ ├── mcp.json # Workspace-local MCP server config
│ ├── extensions.json # Recommended VS Code extensions
│ ├── settings.json # Workspace settings
│ ├── launch.json # F5 launch config for Extension Development Host
│ └── tasks.json # Build tasks (compile, watch)
├── extension/ # @bsides-researcher Chat Participant Extension
│ ├── src/
│ ├── package.json
│ └── tsconfig.json
├── servers/
│ └── mcp-slides/ # MCP Apps server — interactive HTML diagrams in chat
│ ├── src/
│ │ ├── index.ts # MCP server (stdio, show_architecture tool)
│ │ └── ui/
│ │ └── architecture.html # Interactive pipeline diagram
│ └── package.json
├── presentation/ # Marp slide deck for the BSides talk
│ ├── slides.md # 12 Marp Markdown slides (20-minute talk)
│ └── theme.css # Custom dark hacker theme
├── skills/ # Reusable workflow skills for discover/acquire/render/analyse
├── papers/ # Downloaded PDFs and analysis Markdown files
├── PDF-Screenshots/ # Page images extracted by PDF Toolkit
├── bsides-researcher.code-workspace # Workspace file for Extension Dev Host
├── .env.example # API key template
├── .gitignore
├── .python-version # Python version pin (managed by uv)
├── pyproject.toml # Python project config & dependencies
├── uv.lock # Lockfile for reproducible installs
├── AGENTS.md # AI coding agent instructions
├── PRD.md # Product Requirements Document
└── README.md # ← You are here
Quick Start
Prerequisites
- VS Code (stable, latest)
- GitHub Copilot Chat subscription
- Python 3.13+ and Node.js 18+
uvfor Python virtual environments and package management- PDF Toolkit VS Code extension for PDF viewing and image extraction
- A Semantic Scholar API key (free)
Setup
-
Clone the repo
git clone https://github.com/timhaintz/BSidesBallarat2026.git cd BSidesBallarat2026 -
Install Python 3.13+ and create the virtual environment
uv python install 3.13 uv sync --group dev -
Open in VS Code — VS Code will prompt you to install the recommended extensions.
code . -
Copy the env template and add your API key:
cp .env.example .env -
Start the MCP servers — Open the Chat view and the servers defined in
.vscode/mcp.jsonwill be available. -
Build and launch the extension
cd extension npm install npm run compilePress Ctrl+Shift+D to open the Run and Debug panel, select "Run @bsides-researcher Extension", then press F5 to launch the Extension Development Host. The
@bsides-researcherparticipant will be available in the Copilot Chat panel in the new window.
Using the Research Assistant
There are two ways to use the BSides Researcher — pick whichever suits your workflow:
| Approach | Runs in | Setup required | Best for |
|---|---|---|---|
| Custom Agent (recommended) | Main VS Code window | Clone the repo, open in VS Code | Daily use, quick start, sharing with others |
| Chat Participant Extension | Extension Development Host (F5) | npm install, npm run compile, F5 |
Polished demo, advanced features (confirmation dialogs, followup buttons) |
Both approaches use the same pipeline: Discover → Acquire → Render → Analyse → Visualise.
Option A: Custom Agent (Recommended)
The Custom Agent works immediately in your main VS Code window — no compilation or separate window needed. Anyone who clones this repo gets it automatically.
Getting Started
- Open this repo in VS Code.
- Open the Chat view (Ctrl+Alt+I).
- Click the Agent dropdown at the bottom of the chat panel.
- Select BSides Researcher from the list.
- Type your research question and press Enter.
Example Prompts
Find the latest papers on prompt injection defenses
Search for research on LLM jailbreaking techniques and download the top 3 papers
Find papers about adversarial attacks on multimodal models, download them,
screenshot the PDFs, and save an analysis with Mermaid diagrams
Get the paper with arXiv ID 2502.05174 and analyse its defense architecture
Compare the approaches in the papers I've already downloaded in the papers/ directory
The Custom Agent will ask for your confirmation before downloading papers and rendering screenshots (human-in-the-loop), then walk you through each step of the pipeline.
Option B: Chat Participant Extension (@bsides-researcher)
The Chat Participant extension provides a more polished experience with slash commands, confirmation dialogs, and clickable followup suggestions. It requires building the extension and running it in the Extension Development Host.
Getting Started
-
Build the extension:
cd extension npm install npm run compile -
Press Ctrl+Shift+D → select "Run @bsides-researcher Extension" → press F5.
-
In the new Extension Development Host window, open the Chat view (Ctrl+Alt+I).
-
Type
@bsides-researcherfollowed by your prompt, or use a slash command.
Slash Commands
| Command | Description | Example |
|---|---|---|
/find |
Search for papers on a topic | @bsides-researcher /find prompt injection defenses |
/download |
Download a paper by arXiv ID | @bsides-researcher /download 2502.05174 melon-provable-defense |
/render |
Extract page screenshots from a PDF | @bsides-researcher /render papers/melon-provable-defense-prompt-injection.pdf |
/workflow |
Run the full pipeline end-to-end | @bsides-researcher /workflow find and analyse papers on prompt injection |
Example Prompts
Discover papers:
@bsides-researcher /find LLM supply chain attacks
Download a specific paper:
@bsides-researcher /download 2502.05174 melon-provable-defense
Render a downloaded PDF as screenshots:
@bsides-researcher /render papers/melon-provable-defense-prompt-injection.pdf
Run the full pipeline (search → download → screenshot → analyse → save):
@bsides-researcher /workflow find and analyse papers on prompt injection defenses
General questions (no slash command):
@bsides-researcher What are the main categories of prompt injection attacks?
Extension-Only Features
- Confirmation dialogs — before each PDF is screenshotted, a "Continue" / "Cancel" dialog appears so you can approve each paper individually.
- Followup suggestions — after screenshots are extracted, clickable buttons appear (e.g., "Analyse melon-provable-defense screenshots") so you can choose which papers to analyse.
- Automatic tool chaining — the agentic loop feeds tool results back into the model so it can use output from one step (e.g., a downloaded filename) as input to the next step (e.g., screenshot that file).
Analysing Screenshots
After rendering a PDF, its page images are saved to PDF-Screenshots/<paper-name>/. To analyse them:
-
If you want a deterministic, demo-safe selection workflow, run the bundled analyse skill helpers first:
.\skills\analyse-paper-screenshots\scripts\list-recent-screenshot-dirs.ps1 .\skills\analyse-paper-screenshots\scripts\select-analysis-images.ps1 -DirectoryName "<paper-dir>" -MaxImages 12 -AsFileRefs -
In the Chat view, type
#file:and select only the recommended screenshot images fromPDF-Screenshots/. -
Ask the agent to analyse the attached images:
Analyse these paper screenshots and create a security research summary with Mermaid diagrams -
The agent reads the images, extracts key findings, and generates Mermaid diagrams for attack/defense flows.
-
The analysis is saved as a Markdown file in
papers/— open Markdown preview (Ctrl+Shift+V) to see the Mermaid diagrams rendered.
Where Things End Up
| Output | Location |
|---|---|
| Downloaded PDFs | papers/<kebab-case-name>.pdf |
| Page screenshots | PDF-Screenshots/<paper-name>/page_001.png, page_002.png, … |
| Analysis Markdown | papers/<topic>-research-analysis.md |
| Mermaid diagrams | Embedded in the analysis Markdown files |
Presentation
The talk is presented entirely from VS Code using Marp for VS Code. Open presentation/slides.md and use the Marp preview to run through the 12 slides.
During the live demo, the MCP Apps server renders an interactive architecture diagram directly in the Copilot Chat panel — showcasing the "BSides Ballarat Research Assistant — Pipeline" with 5 clickable stage cards (Discover → Acquire → Render → Analyse → Visualise). Start the bsidesSlides MCP server from the Chat panel, then invoke the show_architecture tool.
Project Documents
| Document | Purpose |
|---|---|
| PRD.md | Full Product Requirements — architecture, phases, success criteria |
| AGENTS.md | Instructions for AI coding agents working on this repo |
Contributing
This project is being built live for the BSides Ballarat 2026 presentation. Feel free to watch, fork, or open issues/discussions.
CI uses Node.js 22 to install the two locked Node projects without lifecycle scripts,
compile the extension, typecheck the MCP server, run offline behavior tests, and check
for moderate or higher npm advisories. Run npm ci --ignore-scripts and npm test
in extension/; in servers/mcp-slides/, also run npm run typecheck.
The tests use a mocked VS Code API or a local stdio MCP client and require no API keys.
The interactive Copilot/VS Code demo still needs the manual testing described in
AGENTS.md.
CodeQL scans JavaScript/TypeScript (including embedded JavaScript in the architecture
HTML) and GitHub Actions on pull requests, pushes to main, and weekly. PowerShell,
HTML markup, and CSS are outside CodeQL language coverage. There is no repository
Python source to scan; uv.lock contains development tools only.
License
MIT
