# glacis-io/autoredteam architecture

> Architecture diagram of the GitHub repository glacis-io/autoredteam, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/glacis-io/autoredteam
- Repository: https://github.com/glacis-io/autoredteam

## Overview

autoredteam is an LLM security evaluation product: users configure a target and launch an attack campaign, then inspect scored, evidence-backed results and optionally harden defenses or emit governance policy. The principal runtime stages are probe generation, target execution, scoring, evidence capture, and reporting; the campaign model is the shared internal data layer. The README documents broader hardening, validation, provider, and training capabilities. Some runtime wiring is unsampled, so only documented or excerpt-supported relationships are shown.

Main entry points: [`campaign_runner.py`](https://github.com/glacis-io/autoredteam/blob/main/campaign_runner.py) (Campaign runner), [`autoharden.py`](https://github.com/glacis-io/autoredteam/blob/main/autoharden.py) (Defense hardening), [`providers/base.py`](https://github.com/glacis-io/autoredteam/blob/main/providers/base.py) (Provider session), [`campaign.py`](https://github.com/glacis-io/autoredteam/blob/main/campaign.py) (Campaign model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_campaign["Campaign workflow"]
  node_cli["CLI<br/>[cli.py]"]
  node_runner["Campaign runner<br/>[campaign_runner.py]"]
  node_campaign_model["Campaign model<br/>[campaign.py]"]
  node_trajectory["Trajectory execution"]
end

subgraph group_targets["Targets and probes"]
  node_attack_gen["Attack generation<br/>[attack.py]"]
  node_pack_registry["Pack registry<br/>[registry.py]"]
  node_pack_base["Pack interface<br/>[base.py]"]
  node_domain_packs["Domain packs"]
  node_target_setup["Target setup<br/>[prepare.py]"]
  node_provider_registry["Provider registry<br/>[registry.py]"]
  node_provider_session["Provider session<br/>[base.py]"]
  node_cloudflare["Cloudflare provider"]
end

subgraph group_assurance["Results and governance"]
  node_scoring["Scoring and judging<br/>[scoring.py]"]
  node_judge_model["Judge model<br/>[judge.py]"]
  node_attestation["Evidence attestation<br/>[attestation.py]"]
  node_reporting["Report generation<br/>[generator.py]"]
end

subgraph group_learning["Hardening and training"]
  node_autoharden["Defense hardening<br/>[autoharden.py]"]
  node_defend["Defend loop<br/>[defend.py]"]
  node_immune["Defense learning<br/>[immune.py]"]
  node_policy["Policy emission<br/>[emit_policy.py]"]
  node_training_data["Training data<br/>[training_data.py]"]
  node_lora["LoRA training<br/>[lora_trainer.py]"]
end

node_user(("Engineer"))
node_target_api(("LLM target"))
node_glacis(("Glacis service"))

node_user -->|"launches"| node_cli
node_cli -.->|"runs campaign"| node_runner
node_runner -.->|"uses model"| node_campaign_model
node_pack_registry -->|"registers packs"| node_pack_base
node_pack_registry -->|"loads built-ins"| node_domain_packs
node_pack_registry -->|"builds campaign"| node_campaign_model
node_attack_gen -.->|"models probes"| node_campaign_model
node_target_setup -.->|"selects provider"| node_provider_registry
node_provider_registry -->|"registers sessions"| node_provider_session
node_cloudflare -->|"implements session"| node_provider_session
node_provider_session -->|"sends requests"| node_target_api
node_trajectory -->|"sends turns"| node_provider_session
node_trajectory -->|"records traces"| node_campaign_model
node_runner -.->|"scores results"| node_scoring
node_scoring -->|"uses local judge"| node_judge_model
node_runner -.->|"records evidence"| node_attestation
node_runner -.->|"writes report"| node_reporting
node_autoharden -->|"uses defenses"| node_defend
node_autoharden -->|"uses learning"| node_immune
node_autoharden -->|"emits policy"| node_policy
node_autoharden -->|"collects examples"| node_training_data
node_training_data -.->|"trains adapters"| node_lora
node_attestation -.->|"submits hashes"| node_glacis

click node_cli "https://github.com/glacis-io/autoredteam/blob/main/cli.py"
click node_runner "https://github.com/glacis-io/autoredteam/blob/main/campaign_runner.py"
click node_campaign_model "https://github.com/glacis-io/autoredteam/blob/main/campaign.py"
click node_attack_gen "https://github.com/glacis-io/autoredteam/blob/main/attack.py"
click node_pack_registry "https://github.com/glacis-io/autoredteam/blob/main/attack_packs/registry.py"
click node_pack_base "https://github.com/glacis-io/autoredteam/blob/main/attack_packs/base.py"
click node_domain_packs "https://github.com/glacis-io/autoredteam/tree/main/attack_packs/domains"
click node_target_setup "https://github.com/glacis-io/autoredteam/blob/main/prepare.py"
click node_provider_registry "https://github.com/glacis-io/autoredteam/blob/main/providers/registry.py"
click node_provider_session "https://github.com/glacis-io/autoredteam/blob/main/providers/base.py"
click node_cloudflare "https://github.com/glacis-io/autoredteam/blob/main/providers/cloudflare_workers.py"
click node_trajectory "https://github.com/glacis-io/autoredteam/blob/main/trajectory_engine.py"
click node_scoring "https://github.com/glacis-io/autoredteam/blob/main/scoring.py"
click node_judge_model "https://github.com/glacis-io/autoredteam/blob/main/models/judge.py"
click node_attestation "https://github.com/glacis-io/autoredteam/blob/main/attestation.py"
click node_reporting "https://github.com/glacis-io/autoredteam/blob/main/reporting/generator.py"
click node_autoharden "https://github.com/glacis-io/autoredteam/blob/main/autoharden.py"
click node_defend "https://github.com/glacis-io/autoredteam/blob/main/defend.py"
click node_immune "https://github.com/glacis-io/autoredteam/blob/main/immune.py"
click node_policy "https://github.com/glacis-io/autoredteam/blob/main/emit_policy.py"
click node_training_data "https://github.com/glacis-io/autoredteam/blob/main/training_data.py"
click node_lora "https://github.com/glacis-io/autoredteam/blob/main/training/lora_trainer.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_runner,node_campaign_model,node_trajectory toneBlue
class node_attack_gen,node_pack_registry,node_pack_base,node_domain_packs,node_target_setup,node_provider_registry,node_provider_session,node_cloudflare toneAmber
class node_scoring,node_judge_model,node_attestation,node_reporting toneMint
class node_autoharden,node_defend,node_immune,node_policy,node_training_data,node_lora toneRose
class node_user,node_target_api,node_glacis toneIndigo
```

## Components

### Campaign workflow

- [CLI](https://github.com/glacis-io/autoredteam/blob/main/cli.py): `cli.py`
- [Campaign runner](https://github.com/glacis-io/autoredteam/blob/main/campaign_runner.py): `campaign_runner.py`
- [Campaign model](https://github.com/glacis-io/autoredteam/blob/main/campaign.py): `campaign.py`
- [Trajectory execution](https://github.com/glacis-io/autoredteam/blob/main/trajectory_engine.py): `trajectory_engine.py`

### Targets and probes

- [Attack generation](https://github.com/glacis-io/autoredteam/blob/main/attack.py): `attack.py`
- [Pack registry](https://github.com/glacis-io/autoredteam/blob/main/attack_packs/registry.py): `attack_packs/registry.py`
- [Pack interface](https://github.com/glacis-io/autoredteam/blob/main/attack_packs/base.py): `attack_packs/base.py`
- [Domain packs](https://github.com/glacis-io/autoredteam/tree/main/attack_packs/domains): `attack_packs/domains`
- [Target setup](https://github.com/glacis-io/autoredteam/blob/main/prepare.py): `prepare.py`
- [Provider registry](https://github.com/glacis-io/autoredteam/blob/main/providers/registry.py): `providers/registry.py`
- [Provider session](https://github.com/glacis-io/autoredteam/blob/main/providers/base.py): `providers/base.py`
- [Cloudflare provider](https://github.com/glacis-io/autoredteam/blob/main/providers/cloudflare_workers.py): `providers/cloudflare_workers.py`

### Results and governance

- [Scoring and judging](https://github.com/glacis-io/autoredteam/blob/main/scoring.py): `scoring.py`
- [Judge model](https://github.com/glacis-io/autoredteam/blob/main/models/judge.py): `models/judge.py`
- [Evidence attestation](https://github.com/glacis-io/autoredteam/blob/main/attestation.py): `attestation.py`
- [Report generation](https://github.com/glacis-io/autoredteam/blob/main/reporting/generator.py): `reporting/generator.py`

### Hardening and training

- [Defense hardening](https://github.com/glacis-io/autoredteam/blob/main/autoharden.py): `autoharden.py`
- [Defend loop](https://github.com/glacis-io/autoredteam/blob/main/defend.py): `defend.py`
- [Defense learning](https://github.com/glacis-io/autoredteam/blob/main/immune.py): `immune.py`
- [Policy emission](https://github.com/glacis-io/autoredteam/blob/main/emit_policy.py): `emit_policy.py`
- [Training data](https://github.com/glacis-io/autoredteam/blob/main/training_data.py): `training_data.py`
- [LoRA training](https://github.com/glacis-io/autoredteam/blob/main/training/lora_trainer.py): `training/lora_trainer.py`

### Other components

- **Engineer**
- **LLM target**
- **Glacis service**

## Connections

- Engineer → CLI: launches
- CLI → Campaign runner: runs campaign
- Campaign runner → Campaign model: uses model (evidence: `campaign.py`)
- Pack registry → Pack interface: registers packs (evidence: `attack_packs/registry.py`)
- Pack registry → Domain packs: loads built-ins (evidence: `attack_packs/registry.py`)
- Pack registry → Campaign model: builds campaign (evidence: `attack_packs/registry.py`)
- Attack generation → Campaign model: models probes
- Target setup → Provider registry: selects provider
- Provider registry → Provider session: registers sessions (evidence: `providers/registry.py`)
- Cloudflare provider → Provider session: implements session (evidence: `providers/cloudflare_workers.py`)
- Provider session → LLM target: sends requests
- Trajectory execution → Provider session: sends turns (evidence: `trajectory_engine.py`)
- Trajectory execution → Campaign model: records traces (evidence: `trajectory_engine.py`)
- Campaign runner → Scoring and judging: scores results
- Scoring and judging → Judge model: uses local judge (evidence: `scoring.py`)
- Campaign runner → Evidence attestation: records evidence
- Campaign runner → Report generation: writes report
- Defense hardening → Defend loop: uses defenses (evidence: `autoharden.py`)
- Defense hardening → Defense learning: uses learning (evidence: `autoharden.py`)
- Defense hardening → Policy emission: emits policy (evidence: `autoharden.py`)
- Defense hardening → Training data: collects examples (evidence: `autoharden.py`)
- Training data → LoRA training: trains adapters (evidence: `training/lora_trainer.py`)
- Evidence attestation → Glacis service: submits hashes
