# stanleynull/autohunter architecture

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

- Interactive diagram: https://gitdiagram.com/stanleynull/autohunter
- Repository: https://github.com/stanleynull/autohunter

## Overview

AutoHunter is a continuously running, multi-agent vulnerability-research platform: users configure and start tasks, targets are collected and prioritized, workers investigate them with LLM-directed tools, AI review filters findings, and people make final review decisions. Approved findings can trigger broad validation against similar targets. The console exposes task, findings, intelligence, settings, and runtime views. The README documents the main agent workflow; the sampled source and SOURCE INDEX identify the orchestrator, persistence, tool, API, and frontend layers. Some UI-to-API wiring and unsampled subsystem details are therefore shown only as unverified links or omitted.

Main entry points: [`app/orchestrator.py`](https://github.com/stanleynull/autohunter/blob/main/app/orchestrator.py) (Task orchestrator), [`frontend/src/App.vue`](https://github.com/stanleynull/autohunter/blob/main/frontend/src/App.vue) (Web console), [`app/agents/reviewer.py`](https://github.com/stanleynull/autohunter/blob/main/app/agents/reviewer.py) (AI reviewer), [`app/agents/worker.py`](https://github.com/stanleynull/autohunter/blob/main/app/agents/worker.py) (Target worker)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Research workflow"]
  node_collector["Target collector<br/>[collector.py]"]
  node_engines["Discovery engines"]
  node_worker["Target worker<br/>[worker.py]"]
  node_reviewer["AI reviewer<br/>[reviewer.py]"]
  node_proof["Ownership proof<br/>[write_proof.py]"]
  node_killsweep["Broad validation<br/>[killsweep.py]"]
  node_escalation["Impact escalation<br/>[escalate.py]"]
end

subgraph group_runtime["Agent runtime"]
  node_orchestrator["Task orchestrator<br/>[orchestrator.py]"]
  node_tools["Security tools<br/>[executor.py]"]
  node_llm["LLM client<br/>[client.py]"]
end

subgraph group_platform["Platform services"]
  node_api["HTTP API<br/>[main.py]"]
  node_task_api["Task controls<br/>[tasks.py]"]
  node_finding_api["Finding review API<br/>[findings.py]"]
  node_settings["Runtime settings"]
  node_database[("Persistent task state<br/>[models.py]")]
end

subgraph group_console["Review console"]
  node_console["Web console<br/>[App.vue]"]
  node_results["Reviewed findings<br/>[VulnsView.vue]"]
  node_board["Task dashboard<br/>[BoardView.vue]"]
  node_intel_view["Intelligence view<br/>[IntelView.vue]"]
end

node_operator(("Task operator"))
node_llm_provider{{"LLM provider"}}
node_finding_review(("Human reviewer"))

node_operator -.->|"configures tasks"| node_console
node_console -.->|"requests data"| node_api
node_api -->|"routes tasks"| node_task_api
node_api -->|"routes findings"| node_finding_api
node_task_api -->|"controls runs"| node_orchestrator
node_task_api -->|"reads task state"| node_database
node_orchestrator -->|"schedules collection"| node_collector
node_collector -.->|"searches targets"| node_engines
node_orchestrator -->|"dispatches targets"| node_worker
node_worker -->|"requests decisions"| node_llm
node_worker -->|"executes tools"| node_tools
node_llm -.->|"calls provider"| node_llm_provider
node_orchestrator -->|"sends findings"| node_reviewer
node_reviewer -->|"requests assessment"| node_llm
node_reviewer -->|"checks ownership"| node_proof
node_reviewer -.->|"returns review"| node_finding_api
node_finding_api -->|"requests deepen"| node_orchestrator
node_finding_review -.->|"reviews results"| node_console
node_console -.->|"shows findings"| node_results
node_orchestrator -->|"starts broad validation"| node_killsweep
node_killsweep -->|"validates targets"| node_worker
node_orchestrator -.->|"coordinates escalation"| node_escalation
node_orchestrator -->|"persists workflow state"| node_database
node_orchestrator -->|"loads configuration"| node_settings
node_console -.->|"shows task activity"| node_board
node_console -.->|"shows intelligence"| node_intel_view

click node_console "https://github.com/stanleynull/autohunter/blob/main/frontend/src/App.vue"
click node_api "https://github.com/stanleynull/autohunter/blob/main/app/main.py"
click node_task_api "https://github.com/stanleynull/autohunter/blob/main/app/api/tasks.py"
click node_finding_api "https://github.com/stanleynull/autohunter/blob/main/app/api/findings.py"
click node_orchestrator "https://github.com/stanleynull/autohunter/blob/main/app/orchestrator.py"
click node_collector "https://github.com/stanleynull/autohunter/blob/main/app/agents/collector.py"
click node_engines "https://github.com/stanleynull/autohunter/tree/main/app/engines"
click node_worker "https://github.com/stanleynull/autohunter/blob/main/app/agents/worker.py"
click node_tools "https://github.com/stanleynull/autohunter/blob/main/app/tools/executor.py"
click node_llm "https://github.com/stanleynull/autohunter/blob/main/app/llm/client.py"
click node_reviewer "https://github.com/stanleynull/autohunter/blob/main/app/agents/reviewer.py"
click node_proof "https://github.com/stanleynull/autohunter/blob/main/app/agents/write_proof.py"
click node_killsweep "https://github.com/stanleynull/autohunter/blob/main/app/agents/killsweep.py"
click node_escalation "https://github.com/stanleynull/autohunter/blob/main/app/agents/escalate.py"
click node_settings "https://github.com/stanleynull/autohunter/blob/main/app/settings_service.py"
click node_database "https://github.com/stanleynull/autohunter/blob/main/app/db/models.py"
click node_results "https://github.com/stanleynull/autohunter/blob/main/frontend/src/views/VulnsView.vue"
click node_board "https://github.com/stanleynull/autohunter/blob/main/frontend/src/views/BoardView.vue"
click node_intel_view "https://github.com/stanleynull/autohunter/blob/main/frontend/src/views/IntelView.vue"

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_collector,node_engines,node_worker,node_reviewer,node_proof,node_killsweep,node_escalation,node_finding_review toneBlue
class node_orchestrator,node_tools,node_llm toneAmber
class node_api,node_task_api,node_finding_api,node_settings,node_database toneMint
class node_console,node_results,node_board,node_intel_view,node_operator toneRose
class node_llm_provider toneIndigo
```

## Components

### Research workflow

- [Target collector](https://github.com/stanleynull/autohunter/blob/main/app/agents/collector.py): `app/agents/collector.py`
- [Discovery engines](https://github.com/stanleynull/autohunter/tree/main/app/engines): `app/engines`
- [Target worker](https://github.com/stanleynull/autohunter/blob/main/app/agents/worker.py): `app/agents/worker.py`
- [AI reviewer](https://github.com/stanleynull/autohunter/blob/main/app/agents/reviewer.py): `app/agents/reviewer.py`
- [Ownership proof](https://github.com/stanleynull/autohunter/blob/main/app/agents/write_proof.py): `app/agents/write_proof.py`
- [Broad validation](https://github.com/stanleynull/autohunter/blob/main/app/agents/killsweep.py): `app/agents/killsweep.py`
- [Impact escalation](https://github.com/stanleynull/autohunter/blob/main/app/agents/escalate.py): `app/agents/escalate.py`

### Agent runtime

- [Task orchestrator](https://github.com/stanleynull/autohunter/blob/main/app/orchestrator.py): `app/orchestrator.py`
- [Security tools](https://github.com/stanleynull/autohunter/blob/main/app/tools/executor.py): `app/tools/executor.py`
- [LLM client](https://github.com/stanleynull/autohunter/blob/main/app/llm/client.py): `app/llm/client.py`

### Platform services

- [HTTP API](https://github.com/stanleynull/autohunter/blob/main/app/main.py): `app/main.py`
- [Task controls](https://github.com/stanleynull/autohunter/blob/main/app/api/tasks.py): `app/api/tasks.py`
- [Finding review API](https://github.com/stanleynull/autohunter/blob/main/app/api/findings.py): `app/api/findings.py`
- [Runtime settings](https://github.com/stanleynull/autohunter/blob/main/app/settings_service.py): `app/settings_service.py`
- [Persistent task state](https://github.com/stanleynull/autohunter/blob/main/app/db/models.py): `app/db/models.py`

### Review console

- [Web console](https://github.com/stanleynull/autohunter/blob/main/frontend/src/App.vue): `frontend/src/App.vue`
- [Reviewed findings](https://github.com/stanleynull/autohunter/blob/main/frontend/src/views/VulnsView.vue): `frontend/src/views/VulnsView.vue`
- [Task dashboard](https://github.com/stanleynull/autohunter/blob/main/frontend/src/views/BoardView.vue): `frontend/src/views/BoardView.vue`
- [Intelligence view](https://github.com/stanleynull/autohunter/blob/main/frontend/src/views/IntelView.vue): `frontend/src/views/IntelView.vue`

### Other components

- **Task operator**
- **LLM provider**
- **Human reviewer**

## Connections

- Task operator → Web console: configures tasks
- Web console → HTTP API: requests data
- HTTP API → Task controls: routes tasks (evidence: `app/main.py`)
- HTTP API → Finding review API: routes findings (evidence: `app/main.py`)
- Task controls → Task orchestrator: controls runs (evidence: `app/api/tasks.py`)
- Task controls → Persistent task state: reads task state (evidence: `app/api/tasks.py`)
- Task orchestrator → Target collector: schedules collection (evidence: `app/orchestrator.py`)
- Target collector → Discovery engines: searches targets
- Task orchestrator → Target worker: dispatches targets (evidence: `app/orchestrator.py`)
- Target worker → LLM client: requests decisions (evidence: `app/agents/worker.py`)
- Target worker → Security tools: executes tools (evidence: `app/agents/worker.py`)
- LLM client → LLM provider: calls provider
- Task orchestrator → AI reviewer: sends findings (evidence: `app/orchestrator.py`)
- AI reviewer → LLM client: requests assessment (evidence: `app/agents/reviewer.py`)
- AI reviewer → Ownership proof: checks ownership (evidence: `app/agents/reviewer.py`)
- AI reviewer → Finding review API: returns review
- Finding review API → Task orchestrator: requests deepen (evidence: `app/api/findings.py`)
- Human reviewer → Web console: reviews results
- Web console → Reviewed findings: shows findings
- Task orchestrator → Broad validation: starts broad validation (evidence: `app/orchestrator.py`)
- Broad validation → Target worker: validates targets
- Task orchestrator → Impact escalation: coordinates escalation (evidence: `app/orchestrator.py`)
- Task orchestrator → Persistent task state: persists workflow state (evidence: `app/orchestrator.py`)
- Task orchestrator → Runtime settings: loads configuration (evidence: `app/settings_service.py`)
- Web console → Task dashboard: shows task activity
- Web console → Intelligence view: shows intelligence
