VibeScan 🔍
VibeScan is a cross-platform, pre-publish security analysis tool built for the modern AI-assisted development era. It detects hallucinated dependencies, typosquatting ("slopsquatting"), and risky packages before they enter your codebase.
🎯 Why VibeScan?
As developers increasingly rely on LLM code generators, the risk of introducing non-existent or malicious packages has skyrocketed. VibeScan acts as your first line of defense, catching AI hallucinations and slopsquatting attempts before they reach production.
✨ Features
- 🔎 Hallucination Detection: Verifies packages exist in npm and PyPI registries
- 🎭 Typosquatting Defense: Detects names similar to popular packages
- 📊 Risk Scoring: Assigns explainable risk scores (0-100) to each dependency
- ⚡ Fast & Local: Runs in seconds without sending source code to remote servers
- 🔄 Cross-Ecosystem: Supports both Python and Node.js projects
- 🎨 Beautiful Output: Color-coded results with clear explanations
📦 Installation
Python (PyPI)
pip install vibescan
Node.js (npm)
npm install -g vibescan-js
🚀 Usage
Command Line
Scan your current project:
vibescan
Scan a specific directory:
vibescan ./my-project
Enable debug output:
vibescan --debug
Pre-commit Hook
Add to your .pre-commit-config.yaml:
repos:
- repo: local
hooks:
- id: vibescan
name: VibeScan Security Check
entry: vibescan
language: system
pass_filenames: false
always_run: true
CI/CD Integration
GitHub Actions
name: Security Scan
on: [push, pull_request]
jobs:
vibescan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Install VibeScan
run: pip install vibescan
- name: Run VibeScan
run: vibescan
GitLab CI
vibescan:
image: python:3.11
script:
- pip install vibescan
- vibescan
only:
- merge_requests
📊 Risk Scoring
VibeScan assigns risk scores based on multiple factors:
| Score | Severity | Description |
|---|---|---|
| 0-9 | ✅ Safe | No risks detected |
| 10-59 | ⚠️ Suspicious | Review recommended |
| 60-100 | ❌ Critical | Action required |
Risk Factors
- Package doesn't exist: +100 (likely AI hallucination)
- Typosquatting detected: +60 (similar to popular package)
- Suspiciously new (<7 days): +40
- Relatively new (<30 days): +10
🔍 What It Checks
Supported Files
package.json(npm dependencies & devDependencies)requirements.txt(Python packages)
Detection Capabilities
- Registry Verification: Checks if packages exist on npm/PyPI
- Typosquatting: Detects names similar to popular packages:
reactt→ Similar toreactreqeusts→ Similar torequests
- Age Analysis: Flags newly created packages
- Popularity Heuristics: Identifies suspicious low-usage packages
📝 Example Output
=========================================
VibeScan
=========================================
Analyzing dependencies for AI hallucinations and slopsquatting...
Analyzing 5 dependencies...
✓ 3 Safe Dependencies
⚠ 1 Suspicious Dependencies (Review Recommended)
- new-package (npm) - Score: 40/100
* Package is suspiciously new (Created 2 days ago)
❌ 1 Critical Risk Dependencies (Action Required!)
- crypto-secure-hash-v2-hallucinated (npm) - Score: 100/100
* Package does not exist in registry (Likely AI Hallucination/Slopsquat target)
-----------------------------------------
VibeScan detected CRITICAL risks. Build failed.
🧪 Development
Running Tests
# Install dev dependencies
pip install -e .
pip install pytest pytest-mock responses
# Run tests
pytest tests/ -v
Project Structure
vibescan/
├── vibescan/
│ ├── cli.py # Command-line interface
│ ├── parsers.py # Package file parsers
│ ├── scorer.py # Risk scoring logic
│ ├── reporter.py # Output formatting
│ └── checkers/
│ ├── registry_checker.py # Registry verification
│ └── typosquat_checker.py # Typosquatting detection
├── tests/ # Test suite
├── js-wrapper/ # Node.js wrapper
└── setup.py # Python package config
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
📄 License
MIT License - see LICENSE file for details
🔒 Privacy
VibeScan respects your privacy:
- Analyzes code locally
- Only sends package names to public registries for verification
- No proprietary code is transmitted
🎯 Roadmap
- Support for more package managers (Cargo, Go modules)
- Static code analysis (AST) for unusual imports
- Configurable risk thresholds
- JSON output format
- Web dashboard for team visibility
- Integration with popular IDEs
💡 Use Cases
- Pre-commit: Catch risky dependencies before committing
- CI/CD: Block PRs with suspicious packages
- Code Review: Verify external contributions
- Security Audit: Scan existing projects for risks
🙏 Acknowledgments
Built to address the emerging threat of "slopsquatting" - malicious packages targeting AI-generated code suggestions.
Stay safe in the AI coding era! 🛡️
Metadata
Release files for vibescan 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| vibescan-0.1.0.tar.gz | 63.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| vibescan-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 74.6 kB
Release files / vibescan-0.1.0.tar.gz
| Download URL | vibescan-0.1.0.tar.gz |
|---|---|
| Size | 63.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
07b4fefad130914151b560a89910488df80f6411f672c0e3d2968ce79ebd8992
|
|
BLAKE2b-256 checksum How to use checksums |
c1a774aed185d2c57ed6b79b7391d7cedfa24dc26ba2857594995cbf19d02fb5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Release files / vibescan-0.1.0-py3-none-any.whl
| Download URL | vibescan-0.1.0-py3-none-any.whl |
|---|---|
| Size | 11.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9a9eff59cf8fd9690d254bcb505a38ce1df001a944a91910102d445f67262729
|
|
BLAKE2b-256 checksum How to use checksums |
f797256c29d3aff229f3b63d4f459df1549e19a3d141b735039854d36856b7d1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|