Skip to main content

Vigilo

CI Python 3.10+ License: MIT PyPI version

Vigilo is a fast, zero-configuration static security scanner for Python. It detects exploitable vulnerability patterns (CWEs) in first-party code using AST traversal combined with local data-flow analysis to minimize false positives.

Runs across Linux, macOS, and Windows — either via pip or as a standalone binary with no Python installation required.


Why Vigilo?

  • High-Signal over High-Noise: Traditional linters (like Bandit) flag safe string constants and standard library calls indiscriminately. Vigilo uses local data-flow analysis to distinguish harmless constants from untrusted dynamic inputs.
  • Zero Configuration: Drop it directly into your workflow or CI pipeline with vigilo scan . or vigilo .. No YAML rule authoring or database setup required.
  • Zero Runtime Dependencies: Built strictly on Python's standard library. Lightweight and instantaneous.
  • First-Party Code Focus: While tools like pip-audit scan third-party dependencies for CVEs, Vigilo scans your code for logic and injection flaws.

Installation & Quickstart

Option A: Install via PyPI (Python 3.10+)

pip install vigilo

Option B: Standalone Executable (No Python Required)

Pre-built standalone single-file executables are available for Linux, macOS, and Windows on the Releases Page:

  • Linux (x86_64): vigilo-linux-x86_64
  • macOS: vigilo-macos
  • Windows (x86_64): vigilo-windows-x86_64.exe

Verifying Checksums

Every release includes a SHA256SUMS.txt file to verify binary integrity:

# Verify checksum on Linux/macOS
sha256sum -c SHA256SUMS.txt

Note on Antivirus Alerts: Standalone executables are bundled with PyInstaller. Some heuristic antivirus engines or Windows SmartScreen may occasionally flag newly published PyInstaller binaries as unfamiliar. This is a known false positive with packed binaries. You can verify the integrity using the SHA256 checksum or install via pip install vigilo to run from source.


Usage

Scan the current directory:

vigilo scan .

Or use the shortcut alias:

vigilo .

Generate structured JSON output for CI/CD pipelines:

vigilo scan . --format json

Filter by minimum severity:

vigilo scan . --min-severity high

Include code correctness diagnostics (syntax errors, undefined names, unclosed resources):

vigilo scan . --correctness
# or run the dedicated diagnose subcommand:
vigilo diagnose .

Exclude specific directories or glob patterns:

vigilo scan . --exclude "tests/*" --exclude "migrations/*"

Python API

from vigilo import scan

# Security scan (default)
findings = scan("src/")

# Security + Correctness scan
all_findings = scan("src/", include_correctness=True)

for finding in findings:
    print(
        f"[{finding.severity.upper()}] {finding.detector.id} {finding.detector.name} ({finding.detector.category})"
    )
    print(f"  Location: {finding.location}")
    print(f"  Fix: {finding.fix_hint}")

Supported Detectors

Security Vulnerabilities (Default)

ID CWE Vulnerability Severity Target APIs
VIGILO-001 CWE-89 SQL Injection HIGH db.execute(), cursor.execute(), text(), raw()
VIGILO-002 CWE-78 OS Command Injection HIGH subprocess.*(shell=True), os.system(), os.popen()
VIGILO-003 CWE-94 Code Injection HIGH eval(), exec(), compile()
VIGILO-004 CWE-502 Unsafe Deserialization HIGH pickle.loads(), yaml.load(), marshal.loads()
VIGILO-005 CWE-22 Path Traversal HIGH open(), os.open(), io.open()

Code Correctness Diagnostics (Opt-In with --correctness or diagnose)

ID Issue Severity Description
VIGILO-C01 Syntax & Indentation Error HIGH Python parse failure or bad indentation
VIGILO-C02 Undefined Name Usage MEDIUM Use of unbound or misspelled variable/name
VIGILO-C03 Unused Import / Variable LOW Unused imported module or assigned local variable
VIGILO-C04 Unclosed File Resource MEDIUM Raw open() call without context manager (with)
VIGILO-C05 Bare Except Clause MEDIUM Blanket except: catch masking critical errors

CLI Reference

usage: vigilo [-h] [--version] {scan,diagnose} ... [target] [--format {text,json}]
              [--min-severity {low,medium,high}] [--exclude EXCLUDE] [--correctness]
              [--no-color]

Commands:
  scan                  Scan target directory or file for security vulnerabilities
  diagnose              Run code correctness diagnostics (syntax, undefined names, resources)

Options:
  target                Directory or file to scan (default: '.')
  --format, -f          Output report format: 'text' or 'json' (default: 'text')
  --min-severity, -s    Minimum severity threshold: 'low', 'medium', 'high' (default: 'low')
  --correctness, -c     Include code correctness diagnostics alongside security checks
  --exclude, -e         Exclude path matching glob pattern (repeatable)
  --no-color            Disable ANSI terminal coloring
  --version, -V         Show version and exit
  --help, -h            Show help and exit

Exit Codes

Code Meaning
0 Clean — no vulnerabilities found at or above --min-severity
1 Vulnerabilities detected
2 Execution or path error

Contributing

We welcome contributions! Please review our Contributing Guide, Code of Conduct, and Security Policy.


License

Distributed under the MIT License. Copyright (c) 2026 Sanjiv - Vigilo.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vigilo-0.2.2.tar.gz (38.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vigilo-0.2.2-py3-none-any.whl (31.4 kB view details)

Uploaded Python 3

File details

Details for the file vigilo-0.2.2.tar.gz.

File metadata

  • Download URL: vigilo-0.2.2.tar.gz
  • Upload date:
  • Size: 38.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for vigilo-0.2.2.tar.gz
Algorithm Hash digest
SHA256 9c2ff0ef9908caa21bce8d089e24779837ca22d50edd8dcc611bc06da12abace
MD5 3e8a4c27d37ab065863aba10dd7ee4af
BLAKE2b-256 fcf36b0cbb291b7b86ceacfa20e378f1508ebbd71e410aa8f532f5a4a2709b11

See more details on using hashes here.

Provenance

The following attestation bundles were made for vigilo-0.2.2.tar.gz:

Publisher: release.yml on Sanjiv215/VIGILO-Python-Package

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vigilo-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: vigilo-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 31.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for vigilo-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 894daf7e3a4899d8ed5c31fb8e293c8d685da62d0c6fd53a2c8890fb2c795ef1
MD5 c0345ef693b04f523732f4d04c0fff44
BLAKE2b-256 3b0fc28c3434c37a1cda6124b64135a283e98ab3ce950528971ce140de4bcf7a

See more details on using hashes here.

Provenance

The following attestation bundles were made for vigilo-0.2.2-py3-none-any.whl:

Publisher: release.yml on Sanjiv215/VIGILO-Python-Package

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.3.1

2 files

0.3.0

2 files

This release

0.2.2 This release

2 files

0.2.1

2 files

0.2.0

2 files

0.1.1

2 files

0.1.0

2 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