<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Amogetswe Mashele</title>
    <description>The latest articles on DEV Community by Amogetswe Mashele (@amosfinds).</description>
    <link>https://dev.to/amosfinds</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3583762%2F2423b38f-73a2-407d-93e1-f8531614ba2f.jpg</url>
      <title>DEV Community: Amogetswe Mashele</title>
      <link>https://dev.to/amosfinds</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/amosfinds"/>
    <language>en</language>
    <item>
      <title>How Reddit Shaped v1.1 of My Open-Source Secrets Scanner</title>
      <dc:creator>Amogetswe Mashele</dc:creator>
      <pubDate>Fri, 07 Nov 2025 00:44:50 +0000</pubDate>
      <link>https://dev.to/amosfinds/how-reddit-shaped-v11-of-my-open-source-secrets-scanner-2n7b</link>
      <guid>https://dev.to/amosfinds/how-reddit-shaped-v11-of-my-open-source-secrets-scanner-2n7b</guid>
      <description>&lt;p&gt;For the past month I’ve been building a small open-source project:&lt;br&gt;
a local-first secrets scanner that prevents API key leaks before they hit GitHub.&lt;/p&gt;

&lt;p&gt;I posted the early version on Reddit — and honestly, the feedback changed everything.&lt;/p&gt;

&lt;p&gt;The Feedback (What People Asked For):&lt;/p&gt;

&lt;p&gt;“It only catches provider signatures — what about generic JWTs/passwords?”&lt;br&gt;
 “Can I define custom ignore rules per repo?”&lt;br&gt;
 “Can it output SARIF for CI integration?”&lt;br&gt;
 “Pre-commit scanning is great — can I customize false-positive behavior?”&lt;/p&gt;

&lt;p&gt;This was gold.&lt;/p&gt;

&lt;p&gt;So I went back, reworked the scanner, and shipped v1.1.&lt;/p&gt;

&lt;p&gt;What’s New in v1.1?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generic JWT &amp;amp; Password Detection&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The scanner now detects:&lt;/p&gt;

&lt;p&gt;JWTs (header.payload.signature)&lt;/p&gt;

&lt;p&gt;Generic tokens&lt;/p&gt;

&lt;p&gt;suspicious KEY=xxx patterns&lt;/p&gt;

&lt;p&gt;high-entropy secrets&lt;/p&gt;

&lt;p&gt;accidental passwords in code&lt;/p&gt;

&lt;p&gt;No more relying only on predefined provider regexes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;.secrets-policy.json Support&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each repo can now define its own policy:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "ignore_patterns": ["tests/*&lt;em&gt;", "&lt;/em&gt;.md"],&lt;br&gt;
  "fail_on_severity": ["HIGH"],&lt;br&gt;
  "false_positives": {&lt;br&gt;
    "env/dev.env": ["123-fake-key"]&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;You can customize:&lt;/p&gt;

&lt;p&gt;what files to ignore&lt;br&gt;
 severity levels that fail CI&lt;br&gt;
 false positives&lt;br&gt;
 local-only overrides&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;SARIF Support (for GitHub / CI)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now you can run:&lt;/p&gt;

&lt;p&gt;python -m app.cli --all --sarif results.sarif&lt;/p&gt;

&lt;p&gt;And upload the report into GitHub’s code scanning interface.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Better CLI UX&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Redacted snippets&lt;/p&gt;

&lt;p&gt;Baseline support&lt;/p&gt;

&lt;p&gt;More precise pattern labels&lt;/p&gt;

&lt;p&gt;Cleaner output&lt;/p&gt;

&lt;p&gt;Better exit codes for CI/pre-commit&lt;/p&gt;

&lt;p&gt;Why Local-First Matters&lt;/p&gt;

&lt;p&gt;Most scanners notify you after pushing to GitHub.&lt;br&gt;
By that time:&lt;/p&gt;

&lt;p&gt;the key is public&lt;br&gt;
 GitHub bots already scraped it&lt;br&gt;
 the damage is done&lt;/p&gt;

&lt;p&gt;Local-first scanning is the missing piece in most workflows.&lt;/p&gt;

&lt;p&gt;Try It&lt;/p&gt;

&lt;p&gt;GitHub repo:&lt;br&gt;
 &lt;a href="https://github.com/AMOSFinds/secrets-scanner" rel="noopener noreferrer"&gt;https://github.com/AMOSFinds/secrets-scanner&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live UI demo (self-hosted version):&lt;br&gt;
 &lt;a href="https://secrets-scanner-jlw2.onrender.com" rel="noopener noreferrer"&gt;https://secrets-scanner-jlw2.onrender.com&lt;/a&gt;&lt;br&gt;
Send a comment to receive the API key to try it out.&lt;/p&gt;

&lt;p&gt;I’d love feedback, especially from DevSecOps folks who care about pre-commit workflows and CI automation.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>security</category>
      <category>opensource</category>
      <category>python</category>
    </item>
    <item>
      <title>I Built an Offline Git Secrets Scanner. No Cloud, No Telemetry, Just Speed</title>
      <dc:creator>Amogetswe Mashele</dc:creator>
      <pubDate>Mon, 03 Nov 2025 20:19:18 +0000</pubDate>
      <link>https://dev.to/amosfinds/i-built-an-offline-git-secrets-scanner-no-cloud-no-telemetry-just-speed-2aeb</link>
      <guid>https://dev.to/amosfinds/i-built-an-offline-git-secrets-scanner-no-cloud-no-telemetry-just-speed-2aeb</guid>
      <description>&lt;p&gt;I’ve been experimenting with DevSecOps tools lately — but wanted to try a challenge of solving a specific problem.&lt;/p&gt;

&lt;p&gt;Most secret scanners only alert you after you’ve already pushed your code.&lt;br&gt;
By then, it’s too late.&lt;/p&gt;

&lt;p&gt;So I decided to build something different:&lt;/p&gt;

&lt;p&gt;A fast, lightweight local-first secrets scanner that runs before commits, works offline, and never sends your code anywhere.&lt;/p&gt;

&lt;p&gt;*Why I Built It&lt;/p&gt;

&lt;p&gt;Every year, thousands of API keys get exposed in public repos.&lt;/p&gt;

&lt;p&gt;Even tools like GitGuardian or Gitleaks don’t stop this fully because:&lt;/p&gt;

&lt;p&gt;Developers forget to run them before pushing&lt;/p&gt;

&lt;p&gt;CI-only scanners catch leaks after the fact&lt;/p&gt;

&lt;p&gt;Some tools require cloud setup or telemetry access&lt;/p&gt;

&lt;p&gt;I wanted a tool that fits naturally into a developer’s workflow,and runs locally.&lt;/p&gt;

&lt;p&gt;*What It Does&lt;/p&gt;

&lt;p&gt;Scans files and commits for API keys, tokens, and credentials&lt;/p&gt;

&lt;p&gt;Runs automatically before commits (python -m app.cli --staged)&lt;/p&gt;

&lt;p&gt;Works as a CLI, pre-commit hook, or self-hosted web UI&lt;/p&gt;

&lt;p&gt;Outputs SARIF reports, supports baselines, and runs fully offline&lt;/p&gt;

&lt;p&gt;Integrates with CI for optional automation&lt;/p&gt;

&lt;p&gt;*New Features Since Launch&lt;/p&gt;

&lt;p&gt;I recently added a few upgrades based on early feedback:&lt;/p&gt;

&lt;p&gt;Baseline support to avoid false positives&lt;/p&gt;

&lt;p&gt;SARIF output for CI integration&lt;/p&gt;

&lt;p&gt;Per-repo config for custom ignore patterns&lt;/p&gt;

&lt;p&gt;Next: --fix mode to auto-redact or hint key rotation&lt;/p&gt;

&lt;p&gt;*Why “Local-First” Matters&lt;/p&gt;

&lt;p&gt;Most teams trust cloud scanners with private code — I wanted to try the opposite of that model.&lt;/p&gt;

&lt;p&gt;Secrets Scanner runs on your machine or on your own server, so:&lt;/p&gt;

&lt;p&gt;No code ever leaves your environment&lt;/p&gt;

&lt;p&gt;You stay compliant and private&lt;/p&gt;

&lt;p&gt;You can integrate it with any workflow&lt;/p&gt;

&lt;p&gt;Quick Demo&lt;/p&gt;

&lt;h1&gt;
  
  
  Pre-commit scan
&lt;/h1&gt;

&lt;p&gt;python -m app.cli --staged&lt;/p&gt;

&lt;h1&gt;
  
  
  Or full repo
&lt;/h1&gt;

&lt;p&gt;python -m app.cli .&lt;/p&gt;

&lt;h1&gt;
  
  
  Optional: generate SARIF
&lt;/h1&gt;

&lt;p&gt;python -m app.cli --sarif report.sarif&lt;/p&gt;

&lt;p&gt;If it finds something:&lt;/p&gt;

&lt;p&gt;HIGH · STRIPE_SECRET_KEY · app/settings.py:42&lt;/p&gt;

&lt;p&gt;Otherwise:&lt;/p&gt;

&lt;p&gt;No secrets found.&lt;/p&gt;

&lt;p&gt;How to Try It&lt;/p&gt;

&lt;p&gt;GitHub: github.com/AMOSFinds/secrets-scanner&lt;/p&gt;

&lt;p&gt;Live demo: secrets-scanner-jlw2.onrender.com&lt;/p&gt;

&lt;p&gt;If you’d like to help test, I have a few private API keys available for early users, just comment below or DM me.&lt;/p&gt;

&lt;p&gt;*What I Learned&lt;/p&gt;

&lt;p&gt;Building this taught me how critical it is to combine developer efficiency with security.&lt;/p&gt;

&lt;p&gt;*Feedback Wanted&lt;/p&gt;

&lt;p&gt;I’m looking for 5–10 testers to try the pre-commit integration and let me know if it is genuinely helpful or lackluster.&lt;/p&gt;

&lt;p&gt;What do you think — is a fully local scanner like this a must-have for small teams?&lt;/p&gt;

</description>
      <category>devops</category>
      <category>security</category>
      <category>python</category>
      <category>opensource</category>
    </item>
    <item>
      <title>A lightweight secrets scanner that catches exposed keys before they reach GitHub</title>
      <dc:creator>Amogetswe Mashele</dc:creator>
      <pubDate>Sun, 26 Oct 2025 23:43:01 +0000</pubDate>
      <link>https://dev.to/amosfinds/a-lightweight-secrets-scanner-that-catches-exposed-keys-before-they-reach-github-3cpp</link>
      <guid>https://dev.to/amosfinds/a-lightweight-secrets-scanner-that-catches-exposed-keys-before-they-reach-github-3cpp</guid>
      <description>&lt;p&gt;Hi,&lt;br&gt;
I’ve been experimenting with DevSecOps tools lately, and noticed that&lt;br&gt;
most secret scanners only alert you after you’ve already pushed to GitHub — when the damage is done.&lt;/p&gt;

&lt;p&gt;So I decided to build a different kind of scanner.&lt;br&gt;
Something fast, lightweight, and developer-first — that runs locally before you even commit code.&lt;/p&gt;

&lt;p&gt;The Problem&lt;/p&gt;

&lt;p&gt;Every year, thousands of API keys and credentials get accidentally committed to public repos.&lt;br&gt;
Even with GitHub’s built-in secret scanning and tools like GitGuardian, leaks still happen because:&lt;/p&gt;

&lt;p&gt;Developers forget to run scans before pushing.&lt;/p&gt;

&lt;p&gt;Most scanners are CI-only (post-commit).&lt;/p&gt;

&lt;p&gt;Setup is overcomplicated for solo devs and small teams.&lt;/p&gt;

&lt;p&gt;I wanted a local-first tool that fits naturally into a workflow — no cloud sync, no telemetry, no “trust us” backend.&lt;/p&gt;

&lt;p&gt;The Solution: Secrets Scanner&lt;/p&gt;

&lt;p&gt;Secrets Scanner is a simple Python + FastAPI tool that:&lt;/p&gt;

&lt;p&gt;Scans repos for hardcoded secrets, keys, and tokens.&lt;/p&gt;

&lt;p&gt;Runs as a pre-commit hook locally (python -m app.cli --staged).&lt;/p&gt;

&lt;p&gt;Works as a CLI or self-hosted web app.&lt;/p&gt;

&lt;p&gt;Integrates with CI pipelines for an extra safety layer.&lt;/p&gt;

&lt;p&gt;Sends optional alerts to Slack when secrets are detected.&lt;/p&gt;

&lt;p&gt;Everything runs on your machine or your server — no data leaves your environment.&lt;/p&gt;

&lt;p&gt;Quick Demo&lt;/p&gt;

&lt;p&gt;Local use:&lt;/p&gt;

&lt;p&gt;python -m app.cli --staged&lt;/p&gt;

&lt;p&gt;If a secret is found, it blocks your commit with a clear message:&lt;/p&gt;

&lt;p&gt;Secret found in .env (STRIPE_SECRET_KEY)&lt;/p&gt;

&lt;p&gt;Otherwise:&lt;/p&gt;

&lt;p&gt;No secrets found.&lt;/p&gt;

&lt;p&gt;You can also deploy the web version (I used Render):&lt;/p&gt;

&lt;p&gt;docker build -t secrets-scanner .&lt;br&gt;
docker run -p 8000:8000 --env-file .env secrets-scanner&lt;/p&gt;

&lt;p&gt;Then visit:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://yourdomain.com/ui" rel="noopener noreferrer"&gt;https://yourdomain.com/ui&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;to scan any repo (public or private, via OAuth).&lt;/p&gt;

&lt;p&gt;Prevent Leaks with Pre-Commit&lt;/p&gt;

&lt;p&gt;To integrate with Git hooks:&lt;/p&gt;

&lt;p&gt;macOS/Linux&lt;/p&gt;

&lt;p&gt;echo '#!/usr/bin/env bash&lt;br&gt;
set -e&lt;br&gt;
python -m app.cli --staged' &amp;gt; .git/hooks/pre-commit&lt;br&gt;
chmod +x .git/hooks/pre-commit&lt;/p&gt;

&lt;p&gt;Windows (PowerShell)&lt;/p&gt;

&lt;p&gt;echo 'python -m app.cli --staged&lt;br&gt;
if ($LASTEXITCODE -ne 0) { exit 1 }' &amp;gt; .git/hooks/pre-commit.ps1&lt;/p&gt;

&lt;p&gt;Now, every time you run git commit, your secrets get scanned automatically.&lt;/p&gt;

&lt;p&gt;Why Local-First Matters&lt;/p&gt;

&lt;p&gt;There’s a big trust gap in third-party scanning tools.&lt;br&gt;
By keeping everything local and open source, you stay in control of your code.&lt;/p&gt;

&lt;p&gt;No API calls, no logging, no vendor lock-in.&lt;br&gt;
You can even host the full service yourself if you want to integrate with a team Slack or private CI setup.&lt;/p&gt;

&lt;p&gt;Tech Stack&lt;/p&gt;

&lt;p&gt;FastAPI for backend&lt;/p&gt;

&lt;p&gt;Python CLI for pre-commit and local scans&lt;/p&gt;

&lt;p&gt;httpx for async GitHub API calls&lt;/p&gt;

&lt;p&gt;Slack webhooks for alerts&lt;/p&gt;

&lt;p&gt;Dockerized for easy self-hosting&lt;/p&gt;

&lt;p&gt;Try It Yourself&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/AMOSFinds/secrets-scanner" rel="noopener noreferrer"&gt;https://github.com/AMOSFinds/secrets-scanner&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live demo: &lt;a href="https://secrets-scanner-jlw2.onrender.com/ui" rel="noopener noreferrer"&gt;https://secrets-scanner-jlw2.onrender.com/ui&lt;/a&gt; or if you want to find out more, visit the homepage: &lt;a href="https://secrets-scanner-jlw2.onrender.com" rel="noopener noreferrer"&gt;https://secrets-scanner-jlw2.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re into DevSecOps or pre-commit automation, I’d love feedback — especially from anyone who’s used GitGuardian or similar SAST tools.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>security</category>
      <category>python</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
