The team runs inside GitHub Copilot CLI — and natively on Claude Code, OpenAI Codex CLI, and Cursor (see AI Model Runtimes). Clone the repo, open it in your AI runtime, then drive the engagement either through the Pentest Manager agent or the slash-command shortcuts. Every run is read-only by default — enforced by the same guard core on every runtime — and writes all of its output into a single timestamped session folder.
git clone https://github.com/Contoso-State/red-team-agent-orchestration.git
cd red-team-agent-orchestrationPrerequisites¶
Install these once, then verify your machine is ready:
| Requirement | Why | Install / verify |
|---|---|---|
| GitHub Copilot CLI | Hosts the agents, skills, and guardrail (or use Claude Code, Codex, or Cursor) | Copilot CLI install guide |
Azure CLI (az) | Every domain agent runs read-only az queries | Install Azure CLI |
resource-graph extension | Inventory + scope brief run az graph query | az extension add --name resource-graph |
| Node.js ≥ 22.5 | Datastore + report generator use the built-in node:sqlite (no npm install) | nodejs.org |
| Azure sign-in | Assessments run as your identity | az login |
Minimum Azure RBAC on the target scope is Reader + Security Reader; Log Analytics Reader, Directory Reader, and Key Vault Reader improve coverage. Keep it read-only —
assign your identity read roles only.
For a hardened least-privilege setup across both Azure RBAC and Entra ID, see Permissions & Least Privilege.
Run the environment doctor to confirm everything in one shot (it’s read-only and tells you how to fix anything missing):
node tools/preflight/check-environment.mjs1. Define engagement scope¶
Run the guided setup — it lists the subscriptions you can access, asks which single subscription to assess,
and writes engagement.yaml for you:
/setupSingle-subscription contract: one engagement run targets exactly one subscription. To assess additional subscriptions, run a separate engagement.
Prefer to do it by hand? Copy the template instead:
cp engagement.example.yaml engagement.yaml
# Edit engagement.yaml with target subscription, tenant, and permissions2. Start the Pentest Manager¶
/agent redteam-orchestratorThis launches the Orchestrator (Pentest Manager), which dispatches the domain sub-agents for you. The slash commands below are shortcuts that drive the same team.
3. Run reconnaissance¶
/reconThe orchestrator will:
Open a fresh per-run session folder
engagements/<session>/(where<session>=<engagement-id>-<timestamp>) that holds all output for this run and is gitignored.Validate your Azure permissions (preflight).
Enumerate all resources in scope.
Build a resource inventory.
Identify which domain agents to dispatch.
4. Run the full assessment¶
/assessDispatches all domain agents against the inventory. Each agent produces structured findings
in engagements/<session>/findings/raw/. Agents read cached resource config from the
engagement datastore instead of re-querying Azure, so large estates stay fast.
5. Analyze attack paths¶
/attack-pathsCorrelates findings across domains to identify multi-step compromise chains.
6. Generate the report¶
/reportNormalizes findings, deduplicates, reconciles severity, and generates the executive
summary, technical report, normalized findings.json, and an interactive HTML report.
It also folds the run into the datastore’s history and emits a delta.json of what changed
since last time. See Reporting for the full deliverable set and a live sample.
7. Build the presentation deck¶
/deckRenders a PowerPoint-convertible slide deck. Convert it to .pptx with Marp or Pandoc:
npx @marp-team/marp-cli engagements/<session>/reports/assessment-deck.md -o assessment-deck.pptx
# or
pandoc engagements/<session>/reports/assessment-deck.md -o assessment-deck.pptx --slide-level=2/report also emits this deck automatically.
Slash commands¶
| Command | What it does |
|---|---|
/setup | Guided engagement scoping → writes engagement.yaml |
/recon | Preflight + resource inventory |
/assess | Dispatch all in-scope domain agents |
/attack-paths | Correlate findings into attack chains |
/report | Render executive + technical + HTML report + deck |
/deck | Render the slide deck only |
/external (gated) | Active outside-in OWASP Top 10 testing of Azure-discovered URLs/IPs — only in external-active-testing mode |
Next: see the Agent Team that powers these commands, or review Safety & Authorization before running against a real environment.