Skip to main content

Argus - ADK Threat-Modeling Agent

CI PyPI version Python 3.11+ License: MIT

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_tool enforces structured stage outputs.
  • element_validation_tool filters threats that do not reference real model elements.
  • risk_rating_tool converts agent-assigned OWASP factor scores into deterministic severity.
  • report_render_tool renders 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.

Metadata

Release files for argus-agent 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for argus-agent 0.3.0
File Size Uploaded
argus_agent-0.3.0.tar.gz 52.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for argus-agent 0.3.0
File Interpreter ABI Platform
argus_agent-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 103.3 kB

Release files / argus_agent-0.3.0.tar.gz

Download URL argus_agent-0.3.0.tar.gz
Size 52.1 kB
Tags Source
SHA-256 checksum
How to use checksums
efa2552b99e7bcf96926216f4f4877528857304dc39710a4b8dd867825dd39c0
BLAKE2b-256 checksum
How to use checksums
8b3ac5e493b5c494b5c6e7db0658e342adfebe63713130901df56f32a5339ba9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 28, 2026.

Transparency log

Release files / argus_agent-0.3.0-py3-none-any.whl

Download URL argus_agent-0.3.0-py3-none-any.whl
Size 51.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dd7b117a193cfc33dba3d81571e71dfe821dcab33660a5a62a14040de25b2f6f
BLAKE2b-256 checksum
How to use checksums
25cfab7238a77d91a85f2b0cab984d21f483f389f5df0b15b487b90ace31d0cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 28, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page