Pentesterra DevGuard — pre-push security audit CLI agent
Project description
Pentesterra DevGuard
Pre-push security audit CLI agent for developers.
Installation
pip install pentesterra-devguard
Or download the pre-built archive:
curl -LO https://www.pentesterra.com/devguard.tar.gz
pip install devguard.tar.gz
Quick Start
# 1. Initialize with your API key (get it from Pentesterra dashboard)
pentesterra-devguard init
# 2. Run a scan in your project directory
cd /path/to/your/project
pentesterra-devguard scan
# 3. View results
pentesterra-devguard results <scan_id>
Commands
| Command | Description |
|---|---|
init |
Configure API URL and DevGuard API key |
scan [path] |
Collect project data and submit a security scan |
status <scan_id> |
Check scan status |
results <scan_id> |
View detailed scan results |
projects |
List registered projects |
scans |
List recent scans |
quota |
View quota usage |
update |
Download and install the latest CLI version |
Auto-update
The CLI checks for updates on every scan (at most once per 24 hours) and shows a notice when a newer version is available:
ℹ DevGuard v1.X.X is available — run: pentesterra-devguard update
Updates are downloaded from api.pentesterra.com, SHA256-verified before installation, and applied via pip.
VS Code / Cursor / Windsurf Extension
DevGuard is also available as an IDE extension.
Option A — VS Code Marketplace (recommended, auto-updates)
code --install-extension pentesterra.pentesterra-devguard
Marketplace installs update automatically through VS Code's built-in update mechanism.
Option B — Download .vsix from our site (also auto-updates)
# VS Code
code --install-extension devguard.vsix
# Cursor
cursor --install-extension devguard.vsix
# Windsurf
windsurf --install-extension devguard.vsix
Download: https://www.pentesterra.com/devguard.vsix
When installed from our site, the extension checks for updates automatically (once per 24 hours) and offers a one-click update with SHA256 integrity verification.
Zero-setup
The extension automatically downloads and installs the CLI on first use — no separate pip install required. On subsequent launches the extension verifies the CLI is present; if not found, it prompts to install.
The extension uses the CLI as a subprocess for all analysis — same Python core, same detection quality.
Scan Options
pentesterra-devguard scan . --project my-app --mode deep --no-wait
--project, -p— Project alias (default: directory name)--mode, -m—standardordeep--wait/--no-wait— Wait for analysis to complete (default: wait)--timeout— Max seconds to wait (default: 120)--dry-run— Show payload without uploading
JSON Output
All commands support --json for machine-readable output (used by IDE extensions):
pentesterra-devguard --json scan .
pentesterra-devguard --json results <scan_id>
pentesterra-devguard --json quota
Output format:
{"ok": true, "data": {...}}
{"ok": false, "error": "message", "code": "NOT_CONFIGURED"}
What Gets Collected
Privacy-first: No source code is ever transmitted.
- Dependencies — Package names and versions from lockfiles (npm, pip, go, ruby, php, rust)
- Secrets metadata — Type, file path, line number, masked value (actual secrets are NOT sent)
- Misconfigurations — Known config issues (Dockerfile, .env, docker-compose)
- Project metadata — Tech stack hints, file count
Supported Lockfiles
package-lock.json,yarn.lock(Node.js)requirements.txt,Pipfile.lock,poetry.lock(Python)go.sum(Go)Gemfile.lock(Ruby)composer.lock(PHP)Cargo.lock(Rust)
For Developers: Publishing to PyPI
Prerequisites
# Install build tools
pip install build twine
Setup (one-time)
Create publish_config.ini:
[pypi]
api_token = pypi-your-token-here
Get your token from: https://pypi.org/manage/account/token/
Note: publish_config.ini is already in .gitignore and won't be committed.
Quick Publish
# 1. Update version in pentesterra_devguard/__init__.py
# 2. Publish (PyPI + website artifacts)
python build_release_assets.py
This will:
- Build wheel + source distribution → Publish to PyPI
- Build devguard.tar.gz + devguard.vsix for the website
- Update API configs with SHA256 checksums
To skip PyPI publication:
python build_release_assets.py --skip-pypi
Automated Release Script
./release.sh 1.3.56
The script will:
- Update version in
__init__.py - Show git status for review
- Ask for confirmation
- Build and publish to PyPI
- Verify publication
Publish Options
# Full release (PyPI + website artifacts) — DEFAULT
python build_release_assets.py
# Only website artifacts (no PyPI)
python build_release_assets.py --skip-pypi
# Only PyPI (skip tar.gz/vsix)
python build_release_assets.py --skip-tar --skip-vsix --skip-config
Build core
python -m build
pip install ./dist/pentesterra_devguard-1.4.21.tar.gz
Documentation
PYPI_PUBLISH.md— Detailed publishing guideRELEASE_CHECKLIST.md— Step-by-step release checklistQUICK_PUBLISH.txt— Quick reference card
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 pentesterra_devguard-1.4.24.tar.gz.
File metadata
- Download URL: pentesterra_devguard-1.4.24.tar.gz
- Upload date:
- Size: 337.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de22bb9f7dedbb49d68d085e35463fc51fe150b7b5e1afd21a6fff3094b3f407
|
|
| MD5 |
268c9e3a64bc72d36e9ff6c080df7c4c
|
|
| BLAKE2b-256 |
c42f6a28998501af581e823083401579e01d6a6156cbe5d3f39d40f72e4e8324
|
File details
Details for the file pentesterra_devguard-1.4.24-py3-none-any.whl.
File metadata
- Download URL: pentesterra_devguard-1.4.24-py3-none-any.whl
- Upload date:
- Size: 334.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
606c36261916b0219e736c7f1de10449fbf33a94c05c4d0012745682a7fa08d2
|
|
| MD5 |
595b60c755472c96c41a9c23f969202f
|
|
| BLAKE2b-256 |
a2b3ff38f2fcaac2035bbabf3e6ebb1b9762f4a3695ec13ceaeacc13dc68fdff
|