MaunPrekshak — मौन प्रेक्षक
"The Silent Observer. Nothing hides from it."
MaunPrekshak (मौन = Silent, प्रेक्षक = Observer) is a fast, privacy-first Python security toolkit designed to catch vulnerabilities, exposed credentials, and insecure code patterns right in your terminal.
⚡ Highlights
- 🔍 Dependency Vulnerabilities (SCA): Real-time CVE discovery against OSV.dev across Python (
poetry.lock,Pipfile.lock,uv.lock,requirements.txt,pyproject.toml,Pipfile), JavaScript/Node.js (package-lock.json,yarn.lock,pnpm-lock.yaml,package.json), Go modules (go.sum,go.mod), and Rust crates (Cargo.lock,Cargo.toml) for deep transitive dependency tracking. CI fails as soon as any finding meets the selected severity threshold. - 🔑 Entropy & Regex Secrets Detection: 40+ high-precision regex detectors (including OpenAI
sk-proj-, Anthropicsk-ant-, HuggingFacehf_, GitLabglpat-, GitHub Fine-Grained PATgithub_pat_, Discord, HashiCorp Vault, AWS, Stripe) PLUS Shannon entropy token analysis ($H \ge 4.5$ Base64 / $H \ge 3.0$ Hex) for un-prefixed tokens and private keys, with zero false-positives for UUIDs, URLs, and dummy values. - 🛡️ Static Code Analysis (SAST): 30 AST security rules (MP001–MP030) covering code execution, SQL injection, disabled SSL/TLS verification, wildcard network binding (
0.0.0.0), insecure/tmpfile creation, unsafe deserialization, paramiko AutoAddPolicy SSH MitM, unverified JWT decoding, world-writable chmod permissions, legacy XML XXE parsers, tarfile Zip Slip (CVE-2007-4559), urllib SSRF, ECB cipher modes, dill bytecode execution, Jinja2/Mako SSTI, pandas.read_pickle code execution, missing secure cookie flags, and hardcoded cryptographic IV/salt. - ⚡ Git Staged, Diff & Baseline Scanning: Fast pre-commit mode via
--staged, diff checks via--diff, and legacy debt suppression via--baseline. - 🎨 Rich Terminal & SARIF Export: Formatted console output with risk gauges, and standard OASIS SARIF 2.1.0, JSON, or Markdown export.
- 🔒 100% Privacy & Local-First: Scans run entirely on your local CPU. Your source code never leaves your machine.
- 🤖 Optional AI Remediation: Plug in your Google Gemini API key for instant root-cause analysis and remediation steps.
🚀 Quick Start
Installation
pip install maunprekshak
🐧 Linux (1-Line Standalone Install — No Python Required)
curl -sSL https://raw.githubusercontent.com/PramanKasliwal/maunprekshak/main/install.sh | bash
🪟 Windows (1-Line PowerShell Install — Configures PATH Automatically)
irm https://raw.githubusercontent.com/PramanKasliwal/maunprekshak/main/install.ps1 | iex
🐍 Via PyPI (Any OS)
pip install maunprekshak
# or using pipx (recommended for Windows & Ubuntu 24.04+)
pipx install maunprekshak
pipx ensurepath
Windows Tip: If
mpis not recognized after a standardpip install, run directly via the Python module:python -m maunprekshak scan . # or using py launcher py -m maunprekshak scan .Or permanently add Python's
Scripts\folder to your user PATH via PowerShell:$scriptsDir = python -c "import sysconfig; print(sysconfig.get_path('scripts'))" [Environment]::SetEnvironmentVariable("PATH", "$([Environment]::GetEnvironmentVariable('PATH', 'User'));$scriptsDir", "User")
Basic Scan
Scan the current directory:
mp scan .
Fast Scan without AI (No API Key Required)
mp scan . --no-ai
Export Results to SARIF, JSON, or Markdown
# Export standard OASIS SARIF 2.1.0 for GitHub Code Scanning
mp scan ./my-project --output sarif --output-file results.sarif
# Export as JSON for pipelines
mp scan ./my-project --output json > report.json
# Export formatted Markdown
mp scan ./my-project --output markdown > SECURITY.md
CI/CD Mode (Exit with Non-Zero on Threshold Breach)
# Fail CI build if any CRITICAL issue is found
mp scan . --ci --fail-on critical
# Fail CI build on HIGH or CRITICAL issues
mp scan . --ci --fail-on high
# A single HIGH or CRITICAL finding is enough to fail; the risk score remains informational
🐙 GitHub Actions & Code Scanning (SARIF)
Run MaunPrekshak in your GitHub workflow and get native inline alerts in GitHub's Security ➔ Code Scanning tab:
name: Security Scan
on: [push, pull_request]
jobs:
maunprekshak:
runs-on: ubuntu-latest
permissions:
security-events: write # Needed for SARIF upload
contents: read
steps:
- uses: actions/checkout@v4
- name: Run MaunPrekshak Security Scan
uses: PramanKasliwal/maunprekshak@v0.6.1
with:
fail-on: high
output: sarif
sarif-file: results.sarif
- name: Upload to GitHub Code Scanning
uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: results.sarif
🪝 Pre-Commit Hook
Prevent secrets, leaked API keys, and AST flaws from ever reaching Git. Add to your .pre-commit-config.yaml:
repos:
- repo: https://github.com/PramanKasliwal/maunprekshak
rev: v0.6.1
hooks:
- id: maunprekshak
args: ["--staged", "--fail-on", "high"]
⚙️ Configuration File (.maunprekshak.toml)
Generate a starter configuration file with:
mp init
Or customize .maunprekshak.toml (or [tool.maunprekshak] in pyproject.toml):
[scanner]
# Directories to exclude from scans
exclude = ["tests", "fixtures", ".venv", "node_modules"]
# Default CI failure threshold: "critical", "high", "medium", or "low"
fail_on = "high"
# Disable Gemini AI remediation (fully offline)
no_ai = false
# Ignore specific SAST check IDs
ignore_rules = ["MP010"]
🖥️ Sample Console Output
╭──────────────────────────────────────────────────────────────────────────────╮
│ Risk Level: HIGH (Score: 78) │
╰──────────────────────────────────────────────────────────────────────────────╯
┌──────────────────────────────────────────────────────────────────────────────┐
│ Scan Summary │
├──────────────┬──────────┬─────────┬────────┬───────┬────────────────────────┤
│ Module │ CRITICAL │ HIGH │ MEDIUM │ LOW │ Total │
├──────────────┼──────────┼─────────┼────────┼───────┼────────────────────────┤
│ Dependencies │ 1 │ 2 │ 0 │ 0 │ 3 vulnerabilities │
│ Secrets │ 1 │ 1 │ 0 │ 0 │ 2 exposed credentials │
│ SAST │ 0 │ 3 │ 4 │ 1 │ 8 insecure patterns │
└──────────────┴──────────┴─────────┴────────┴───────┴────────────────────────┘
Top Findings:
[CRITICAL] CVE-2023-32681 — requests==2.25.1 (Fixed in 2.31.0)
[HIGH] AWS Access Key ID exposed in config.py:12
[HIGH] MP004: subprocess.run() called with shell=True in deploy.py:45
📖 CLI Command Reference
| Option | Default | Description |
|---|---|---|
path |
. |
Directory or project path to scan |
--only |
all |
Restrict scan to: deps, secrets, or sast |
--output |
console |
Output format: console, json, markdown, pdf, sarif |
--output-file |
stdout |
Write report directly to a file |
--ci |
false |
Compact machine-readable summary + exit code |
--fail-on |
critical |
Fail when any finding reaches critical, high, medium, or low |
--no-ai |
false |
Skip AI summary generation (instant execution) |
--exclude |
None |
Comma-separated directories to exclude |
--staged |
false |
Scan only git staged files (instant pre-commit mode) |
--diff |
None |
Scan only files modified against a git ref (e.g. HEAD~1, main) |
--baseline |
None |
Path to baseline JSON report to suppress existing findings |
🤖 Bringing Your Own Gemini AI Key (Optional)
If you'd like AI-generated remediation summaries, set your Gemini API key in your environment or a .env file:
export GEMINI_API_KEY="AIzaSy..."
mp scan .
Get a free API key at Google AI Studio.
🤝 Contributing
We welcome community contributions! Please read our CONTRIBUTING.md to get started.
- Found a bug or missing a secret pattern? Open an Issue.
- Want to contribute a new SAST check? PRs are warmly welcomed!
🔒 Security Policy
We take security vulnerabilities seriously. Please review our SECURITY.md for details on supported versions and how to responsibly report vulnerabilities privately.
📄 License
Distributed under the MIT License. See LICENSE for details.
In ancient Sanskrit, मौन (Maun) signifies the all-knowing silence, and प्रेक्षक (Prekshak) is the ever-vigilant observer. MaunPrekshak protects your code quietly, thoroughly, and without compromise.
Release files for maunprekshak 0.6.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| maunprekshak-0.6.1.tar.gz | 44.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| maunprekshak-0.6.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 78.8 kB
Release files / maunprekshak-0.6.1.tar.gz
| Download URL | maunprekshak-0.6.1.tar.gz |
|---|---|
| Size | 44.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8f341691d7ffc3ad6bdd72c567c691595df9735040b03d4ba37ae961c79735c8
|
|
BLAKE2b-256 checksum How to use checksums |
17913ae4aafede483319c33b454c1a70c9c47917d07bc702c73a616e6c65ec21
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Release files / maunprekshak-0.6.1-py3-none-any.whl
| Download URL | maunprekshak-0.6.1-py3-none-any.whl |
|---|---|
| Size | 33.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
495844bfbb2437e49165b8d244ec294910a650a6edf1bc48ce3006334558373c
|
|
BLAKE2b-256 checksum How to use checksums |
9aa9521cf53cbeca0e92e6705ebf9458ca4e78c5ffaac41017a80434860e18cb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|