Skip to main content

Rapid sanity checking for Vibe Coded Projects

Project description

👾 helpfulGremlin

Sanity check your vibes before you git push.

Build Status

I built helpfulGremlin because I wanted a lightweight, zero-config CLI utility to scan my codebase for sensitive artifacts—API keys, secrets, tokens, and private keys—before they are accidentally exposed. It's designed for "vibe-coding" where velocity is high, acting as a friendly guardrail.

Recently, I extended it to also check for bad security practices (like eval(), pickle.load(), or disabling SSL verification), making it more than just a secret scanner.

🚀 Quick Start

Run it instantly using uv (no installation required):

# Run in the current directory
uvx helpfulGremlin

Or install it globally:

uv tool install helpfulGremlin
helpfulGremlin .

🛠 Usage

# Scan the current directory
helpfulGremlin

# Scan a specific directory or file
helpfulGremlin ./src/my_script.py

# Verbose mode (see every file checked)
helpfulGremlin . --verbose

# Run with multiple worker processes (for large repos)
helpfulGremlin . --workers 4

🏗 Architecture & Design Decisions

1. Python & uv First

I chose Python for its rich ecosystem of text processing and regex libraries. Typically, Python tools are hard to distribute, but with uv, helpfulGremlin can be run ephemerally (uvx) without messing up your system python.

2. Hybrid Detection Engine

I implemented a two-layer detection strategy:

  • Layer 1: Regex Signatures: Fast pattern matching for known secrets (AWS, OpenAI, Stripe, etc.). Patterns are externalized in src/helpfulgremlin/patterns.yaml.
  • Layer 2: Entropy Analysis: Uses Shannon Entropy to detect high-randomness strings (like passwords or unknown API keys) that don't match specific regexes. This catches weird custom secrets others miss.

3. Smart Context Awareness

I designed the scanner to be intelligent about where it looks:

  • Context-Aware Scanning: Security checks are scoped to file types (e.g., Python-specific checks like eval() only run on .py files). This keeps performance high.
  • Gitignore Support: Automatically parses your .gitignore to avoid scanning node_modules, venv, etc.
  • Binary Skipping: Detects and skips binary files to save CPU.
  • Large File Protection: Skipping files > 5MB to prevent memory exhaustion.
  • Remediation: It doesn't just say "Error"; it suggests how to fix it (e.g., "Move this hardcoded key to an environment variable").

4. Modern UX (textual / rich)

I used the rich library to provide beautiful, emoji-enriched terminal output, progress bars, and tables. Security tools shouldn't be boring 1990s textual walls.

🕵️ Detected Patterns

helpfulGremlin currently detects:

  • Cloud Providers: AWS (Access/Secret Keys), Google Cloud API Keys, Google Cloud Service Accounts, Azure Storage Keys (opt-in).
  • Databases: PostgreSQL, MySQL, MongoDB, and Redis URIs.
  • AI/ML: OpenAI, Anthropic, Gemini, HuggingFace, Replicate.
  • Services: Stripe, Slack, Twilio, Salesforce, Facebook.
  • Security Best Practices:
    • Unsafe Checks: eval(), exec(), shell=True
    • Unsafe Deserialization: pickle.load()
    • Insecure SSL/TLS: verify=False, Node NODE_TLS_REJECT_UNAUTHORIZED
    • Insecure Environments: Flask/Django debug=True, Docker USER root
    • Web Risks: dangerouslySetInnerHTML (XSS), formatted SQL queries (SQLi)
    • Weak Hashing: MD5
    • Insecure Network Binding: 0.0.0.0
  • Generic: PEM Private Keys, SSH Private Keys, JWT Tokens, Generic "api_key" variable assignments.
  • Unknowns: High-entropy strings (> 4.2 bits of randomness).

⚙️ Configuration

You can customize the detection rules by editing the patterns.yaml file inside the package.

📦 License

MIT

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

helpfulgremlin-0.1.4.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

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

helpfulgremlin-0.1.4-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

Details for the file helpfulgremlin-0.1.4.tar.gz.

File metadata

  • Download URL: helpfulgremlin-0.1.4.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.0 {"installer":{"name":"uv","version":"0.11.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for helpfulgremlin-0.1.4.tar.gz
Algorithm Hash digest
SHA256 e295f5b3cad8aea849b73194aa7c8f996e0ff817b87de45fde36f6c50ca97dda
MD5 a083fadf4e3b601929507a0c9a3c34a0
BLAKE2b-256 4c78a59ffa698b4b89892b3d44da852b74cd68da1568ffb0b94a295694cf305c

See more details on using hashes here.

File details

Details for the file helpfulgremlin-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: helpfulgremlin-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 11.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.0 {"installer":{"name":"uv","version":"0.11.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for helpfulgremlin-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 ef4747f0b535d65d314044c2eb74464135205f6e38f96287c1b6bd257f34c691
MD5 ff8993ef0aae0901d07b4ee91a6aefb1
BLAKE2b-256 9af39c4440dfddb7ac8b37eb1d3c65f2f32e48ccde4a0ecba969f4e880665f2b

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