Skip to main content

A lightweight security tool that automatically scans source code for vulnerabilities, highlights risky patterns, and guides developers toward safer implementations to strengthen their applications' overall security posture.

Project description

Vulguard

Version License: MIT

A lightweight CLI security tool that automatically scans source code for vulnerabilities, highlights risky patterns, and guides developers toward safer implementations to strengthen their applications' overall security posture.

Prerequisites

  • Python >=3.14
  • An active GitHub Copilot subscription (used for AI-powered inspection)

Installation

pip install vulguard

Usage

vulguard [OPTIONS] COMMAND [ARGS]...

inspect — Scan files or directories

vulguard inspect [OPTIONS] PATHS...
Option Default Description
PATHS (required) One or more files or directories to scan (recursive).
--ext TEXT (all files) Comma-separated extensions to inspect, e.g. py,js,ts.
--output-dir PATH <cwd>/reports Directory where reports are written.
--report TEXT vulguard-report Base filename for the report (no extension appended).
--format [json|html] json Report format. Selecting html also produces a JSON file.
--db-dir PATH ~/.vulguard Directory for the SQLite session database.

Examples

# Scan all Python files in src/ and write a JSON report to ./reports
vulguard inspect src/ --ext py

# Scan multiple paths and produce an HTML report
vulguard inspect src/ tests/ --ext py,js --format html --output-dir reports

# Use a custom report name and database directory
vulguard inspect src/ --report my-scan --db-dir /tmp/vg-db

Exit Codes

Code Meaning
0 Inspection completed — no vulnerabilities found.
1 Inspection completed — one or more vulnerabilities detected.

This makes it straightforward to fail a CI pipeline step when security issues are present.

Severity Levels

Each inspected file is assigned one of four severity levels. Only files with a non-NONE severity are included in the report.

Level Description
CRITICAL Immediate exploitation risk — e.g., SQL injection, command injection, hardcoded secrets/passwords/tokens, authentication bypass, remote code execution.
MAJOR High-risk issues that can lead to data exposure or unauthorized access — e.g., logging entire request payloads or sensitive user data, logging full exception objects or stack traces, insecure deserialization, path traversal, cross-site scripting without output encoding, CSRF on state-changing endpoints.
MINOR Lower-risk issues that could become vulnerabilities under certain conditions — e.g., overly verbose error messages, weak cryptography (MD5/SHA1 for security purposes), missing input validation, use of deprecated security APIs, storing sensitive data in cookies without Secure/HttpOnly flags.
NONE No security vulnerabilities detected. Files with this severity are excluded from the report.

Configuration

On first run, vulguard bootstraps a configuration directory and copies its default config.ini and logging.ini there. You can override the location with the VULGUARD_CONFIG_DIR environment variable:

# Windows (PowerShell)
$env:VULGUARD_CONFIG_DIR = "C:\Users\you\.vulguard"

# macOS / Linux
export VULGUARD_CONFIG_DIR="$HOME/.vulguard"

config.ini settings

Section Key Default Description
model model claude-sonnet-4.6 GitHub Copilot model used for inspection.
model timeout 300 Per-file inspection timeout in seconds.
retry max-attempts 5 Maximum number of retry attempts on transient errors.
retry base-delay 0.5 Initial back-off delay in seconds.
retry max-delay 10.0 Maximum back-off delay in seconds.

Development

Prerequisites

  • Poetry 2.2+

Architecture

graph TD
    CLI["cli.py\n(Click entry point)"]
    Inspector["inspector.py\n(GitHub Copilot SDK)"]
    DB["db.py\n(SQLite persistence)"]
    Report["report.py\n(JSON / HTML output)"]
    Config["config.py\n(config.ini reader)"]
    Prompt["prompts/system-prompt.md\n(security prompt)"]

    CLI -->|"collects files\norchestrates"| Inspector
    CLI --> Config
    Inspector --> Prompt
    CLI -->|"persists results"| DB
    CLI -->|"reads session"| DB
    CLI -->|"builds & writes"| Report

Setup

poetry install

Format and Lint

poetry run black vulguard; poetry run pylint vulguard

Pylint must score 10.00/10 before committing.

Run Tests

poetry run pytest --cov=vulguard tests --cov-report html

Maintain ≥80 % coverage.

Fixture-based integration smoke test

poetry run vulguard inspect tests/fixtures --ext py --format html

Publishing to PyPI

Prerequisites

  • A PyPI account with an API token.

Configure the token

poetry config pypi-token.pypi <your-token>

Build and publish

poetry publish --build

This builds the source distribution and wheel, then uploads them to PyPI in one step.

Note: PyPI releases are immutable. Once a version is published, it cannot be overwritten.
To fix a mistake, yank the release via the PyPI web UI and publish a new version.

Changelog

See CHANGELOG.md for the full release history.

License

This project is licensed under the MIT License.

Author

Ron Webb

Project details


Download files

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

Source Distribution

vulguard-1.1.1.tar.gz (19.9 kB view details)

Uploaded Source

Built Distribution

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

vulguard-1.1.1-py3-none-any.whl (20.1 kB view details)

Uploaded Python 3

File details

Details for the file vulguard-1.1.1.tar.gz.

File metadata

  • Download URL: vulguard-1.1.1.tar.gz
  • Upload date:
  • Size: 19.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.0 CPython/3.14.6 Linux/6.17.0-1018-azure

File hashes

Hashes for vulguard-1.1.1.tar.gz
Algorithm Hash digest
SHA256 2b3e86b68df7d2236e059d0731ab37d7da2caa4a697348e0568e71e04e00cee4
MD5 d6bea406f85a88b5aa8817239d70a65d
BLAKE2b-256 16758427a8e19e1a78747f228a7fd2791e7f8881281e5bf81c7aa310619f0d86

See more details on using hashes here.

File details

Details for the file vulguard-1.1.1-py3-none-any.whl.

File metadata

  • Download URL: vulguard-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 20.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.0 CPython/3.14.6 Linux/6.17.0-1018-azure

File hashes

Hashes for vulguard-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cb42bb9187f8ba89c345d04b12ea561f2924f140af0e6cc0d0807a629913d9e3
MD5 6c827ecd0d5ff6166bb2a40d74e7b0d1
BLAKE2b-256 676aac060aa0ffaea3e3fcb3aca397dfbb29e080b206be937c7b107416bbdf9a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page