Argus — AI threat-modeling agent (multi-agent, skills)
Project description
Argus - ADK Threat-Modeling Agent
Argus turns PRDs, design docs, feature docs, RFCs, ADRs, and architecture notes into developer-facing threat model reports. It uses a Google ADK multi-agent workflow for security reasoning, exact-reference skills for grounding, and deterministic tools for schema validation, model element binding, OWASP severity calculation, and final Markdown rendering.
Install
The package is named argus-agent; the command is argus.
uv tool install argus-agent
Or:
pip install argus-agent
For local development from this repository:
uv sync
uv tool install --reinstall .
Quick Start
Argus accepts one readable UTF-8 text document. It does not ingest directories, GitHub URLs, OpenAPI specs, Terraform, or binary files in this version.
Bash:
export GEMINI_API_KEY="your-api-key"
argus path/to/design.md
PowerShell:
$env:GEMINI_API_KEY = "your-api-key"
argus path/to/design.md
cmd.exe:
set GEMINI_API_KEY=your-api-key
argus path\to\design.md
If --out is omitted, Argus writes the report to <input>.threatmodel.md.
argus path/to/design.md --out path/to/design.threatmodel.md
Configuration
Config precedence is:
CLI flags > exported environment > .env > built-in defaults
GEMINI_API_KEY is required and is intentionally environment-only. Do not pass API keys as
CLI arguments.
| Setting | Env var | CLI flag | Default |
|---|---|---|---|
| Gemini API key | GEMINI_API_KEY |
none | required |
| Reasoning model | ARGUS_PRO_MODEL |
--pro-model |
gemini-2.5-pro |
| Lighter model | ARGUS_FLASH_MODEL |
--flash-model |
gemini-2.5-flash |
| One model for all stages | none | --model |
none |
| Temperature | ARGUS_TEMPERATURE |
--temperature |
0.1 |
Cheap smoke test:
argus path/to/design.md --model gemini-3.1-flash-lite
Use separate models for deeper and lighter stages:
argus path/to/design.md --pro-model gemini-2.5-pro --flash-model gemini-2.5-flash
Use a local .env file:
GEMINI_API_KEY=your-api-key
ARGUS_PRO_MODEL=gemini-2.5-pro
ARGUS_FLASH_MODEL=gemini-2.5-flash
ARGUS_TEMPERATURE=0.1
Use 1Password CLI:
op run --env-file=.env -- argus path/to/design.md --out path/to/design.threatmodel.md
Progress Output
Interactive terminals show a progress bar with the current stage and elapsed time. Non-TTY execution prints concise stage lines. Disable progress output with:
argus path/to/design.md --no-progress
Workflow stages:
input document
-> ingestion_agent
-> architecture_zone_agent
-> entry_point_agent
-> scenario_enumeration_agent
-> schema_validation_agent
-> element_binding_agent
-> false_positive_validation_agent
-> control_challenge_agent
-> risk_rating_agent
-> report_agent
-> Markdown report
Output
The report includes:
- Architecture summary and data-flow view.
- Confirmed threats ranked by severity.
- STRIDE category, affected element, attack path, and mitigating controls.
- Ruled-out findings when the false-positive gate rejects a candidate.
- Assumptions, open questions, coverage notes, and limitations.
Security Design
- Agents perform document understanding, zone mapping, entry-point discovery, scenario enumeration, false-positive validation, control challenge, and risk-factor assignment.
schema_validation_toolenforces structured stage outputs.element_validation_toolfilters threats that do not reference real model elements.risk_rating_toolconverts agent-assigned OWASP factor scores into deterministic severity.report_render_toolrenders the final Markdown report; the report agent does not freehand it.- Exact-reference OWASP, ATLAS, AIUC-1, and risk-rating skill corpora are packaged under
argus.skill_corpus.
Troubleshooting
Missing API key:
GEMINI_API_KEY is required. Set it in the environment or a .env file.
Fix it by exporting GEMINI_API_KEY, creating .env, or using op run --env-file=.env.
Wrong command shape:
argus path/to/design.md
Do not use argus run; the installed CLI is intentionally flat.
Model capacity or rate-limit errors:
argus path/to/design.md --model gemini-3.1-flash-lite
Unreadable input:
Input must be a readable UTF-8 text document.
Convert the source document to text or Markdown before running Argus.
Local Development
uv sync
uv run pytest
uv run ruff check .
The live Gemini test is opt-in so normal test runs remain deterministic:
ARGUS_RUN_LIVE=1 uv run pytest -m live
Project Layout
argus/
agents/ - ADK workflow, stage schemas, runner, and tools
models.py - SystemModel, Actor, Component, DataFlow, Control
threats.py - ProposedThreats, VerifiedThreats, element binding
rating.py - RatedThreat, ThreatStatus, rate_threats
risk.py - OWASP Risk Rating factor-to-severity matrix
context.py - SystemModel to structured agent context
security/ - untrusted input guard
skill_corpus/ - packaged exact-reference skills
skills.py - skill loader
skills_router.py - just-in-time skill selection from SystemModel tags
report.py - Markdown report renderer
config.py - runtime config resolver
cli.py - Typer CLI
tests/ - unit, integration, and opt-in live tests
Contributing and Security
See CONTRIBUTING.md for development setup and PR guidance.
If you discover a vulnerability, follow SECURITY.md. Do not open a public issue for security reports.
Releasing
uv version --bump patch
uv version 0.1.1
License
This project is licensed under the MIT License. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file argus_agent-0.3.0.tar.gz.
File metadata
- Download URL: argus_agent-0.3.0.tar.gz
- Upload date:
- Size: 52.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
efa2552b99e7bcf96926216f4f4877528857304dc39710a4b8dd867825dd39c0
|
|
| MD5 |
bce5c6b0c583d31642fa9c47c84c4080
|
|
| BLAKE2b-256 |
8b3ac5e493b5c494b5c6e7db0658e342adfebe63713130901df56f32a5339ba9
|
Provenance
The following attestation bundles were made for argus_agent-0.3.0.tar.gz:
Publisher:
release.yml on thedevappsecguy/argus
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
argus_agent-0.3.0.tar.gz -
Subject digest:
efa2552b99e7bcf96926216f4f4877528857304dc39710a4b8dd867825dd39c0 - Sigstore transparency entry: 1995725964
- Sigstore integration time:
-
Permalink:
thedevappsecguy/argus@7d00019d726f7d0284a323d1f3e61edebfaf8c7a -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/thedevappsecguy
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@7d00019d726f7d0284a323d1f3e61edebfaf8c7a -
Trigger Event:
release
-
Statement type:
File details
Details for the file argus_agent-0.3.0-py3-none-any.whl.
File metadata
- Download URL: argus_agent-0.3.0-py3-none-any.whl
- Upload date:
- Size: 51.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd7b117a193cfc33dba3d81571e71dfe821dcab33660a5a62a14040de25b2f6f
|
|
| MD5 |
9cd028e4597aa7b98924891c53b8bd69
|
|
| BLAKE2b-256 |
25cfab7238a77d91a85f2b0cab984d21f483f389f5df0b15b487b90ace31d0cb
|
Provenance
The following attestation bundles were made for argus_agent-0.3.0-py3-none-any.whl:
Publisher:
release.yml on thedevappsecguy/argus
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
argus_agent-0.3.0-py3-none-any.whl -
Subject digest:
dd7b117a193cfc33dba3d81571e71dfe821dcab33660a5a62a14040de25b2f6f - Sigstore transparency entry: 1995726050
- Sigstore integration time:
-
Permalink:
thedevappsecguy/argus@7d00019d726f7d0284a323d1f3e61edebfaf8c7a -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/thedevappsecguy
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@7d00019d726f7d0284a323d1f3e61edebfaf8c7a -
Trigger Event:
release
-
Statement type: