<?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: James Moceri</title>
    <description>The latest articles on DEV Community by James Moceri (@jmogaming).</description>
    <link>https://dev.to/jmogaming</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%2F3579458%2F94674bfa-6327-4945-9a51-68e600e4ff53.png</url>
      <title>DEV Community: James Moceri</title>
      <link>https://dev.to/jmogaming</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jmogaming"/>
    <language>en</language>
    <item>
      <title>Kubernetes-Style Scan Scheduling Comes to Security Tools (JMo Security v0.8.0)</title>
      <dc:creator>James Moceri</dc:creator>
      <pubDate>Thu, 30 Oct 2025 04:07:14 +0000</pubDate>
      <link>https://dev.to/jmogaming/kubernetes-style-scan-scheduling-comes-to-security-tools-jmo-security-v080-1je1</link>
      <guid>https://dev.to/jmogaming/kubernetes-style-scan-scheduling-comes-to-security-tools-jmo-security-v080-1je1</guid>
      <description>&lt;p&gt;Running security scans manually gets old fast. You start with good intentions — "I'll scan every Friday before release" — but then Friday becomes Saturday becomes "whenever I remember."&lt;/p&gt;

&lt;p&gt;The solution? Automation. But here's the problem: most security tools don't integrate cleanly with CI/CD platforms. You end up writing YAML by hand, copying configs between projects, and maintaining a dozen different cron schedules.&lt;/p&gt;

&lt;p&gt;I built JMo Security to orchestrate 12+ security scanners (Trivy, Semgreg, TruffleHog, Checkov, ZAP, Nuclei, etc.) with a unified CLI. Version 0.8.0 adds the missing piece: &lt;strong&gt;enterprise-grade scheduling and CI/CD integration&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
What's New in v0.8.0

&lt;ul&gt;
&lt;li&gt;1. Kubernetes-Style Schedule Management&lt;/li&gt;
&lt;li&gt;2. GitLab CI/CD Workflow Generation&lt;/li&gt;
&lt;li&gt;3. Slack Notifications&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Why This Matters&lt;/li&gt;

&lt;li&gt;Real-World Use Cases&lt;/li&gt;

&lt;li&gt;Getting Started&lt;/li&gt;

&lt;li&gt;What's Next&lt;/li&gt;

&lt;li&gt;Contributing&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's New in v0.8.0
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Kubernetes-Style Schedule Management
&lt;/h3&gt;

&lt;p&gt;If you've worked with Kubernetes CronJobs, this will feel instantly familiar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a weekly security scan schedule&lt;/span&gt;
jmo schedule create prod-security-audit &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--cron&lt;/span&gt; &lt;span class="s2"&gt;"0 2 * * 1"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--profile&lt;/span&gt; balanced &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--repo&lt;/span&gt; ./myapp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--image&lt;/span&gt; myapp:latest &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--url&lt;/span&gt; https://myapp.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--backend&lt;/span&gt; gitlab-ci &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--slack-webhook&lt;/span&gt; &lt;span class="s2"&gt;"https://hooks.slack.com/services/YOUR/WEBHOOK"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a schedule resource with Kubernetes-style metadata, spec, and status fields:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;prod-security-audit&lt;/span&gt;
  &lt;span class="na"&gt;uid&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;f47ac10b-58cc-4372-a567-0e02b2c3d479&lt;/span&gt;
  &lt;span class="na"&gt;creationTimestamp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025-10-28T14:30:00Z"&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;2&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1"&lt;/span&gt;  &lt;span class="c1"&gt;# Every Monday at 2 AM&lt;/span&gt;
  &lt;span class="na"&gt;jobTemplate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;profile&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;balanced&lt;/span&gt;
      &lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;repo&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./myapp&lt;/span&gt;
        &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp:latest&lt;/span&gt;
        &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://myapp.com&lt;/span&gt;
      &lt;span class="na"&gt;notifications&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;channels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;slack&lt;/span&gt;
            &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://hooks.slack.com/..."&lt;/span&gt;
  &lt;span class="na"&gt;backend&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gitlab-ci&lt;/span&gt;
&lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;lastScheduleTime&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;
  &lt;span class="na"&gt;nextScheduleTime&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025-11-04T02:00:00Z"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Schedules are stored locally in &lt;code&gt;~/.jmo/schedules.json&lt;/code&gt; with secure permissions (0o600). No cloud dependencies.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. GitLab CI/CD Workflow Generation
&lt;/h3&gt;

&lt;p&gt;Once you've defined a schedule, export it to a ready-to-use GitLab CI pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jmo schedule &lt;span class="nb"&gt;export &lt;/span&gt;prod-security-audit &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; .gitlab-ci.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This generates a complete &lt;code&gt;.gitlab-ci.yml&lt;/code&gt; with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Profile-based jobs (fast/balanced/deep)&lt;/li&gt;
&lt;li&gt;Multi-target support (repos, containers, IaC, web apps, K8s clusters)&lt;/li&gt;
&lt;li&gt;Slack notifications on success/failure&lt;/li&gt;
&lt;li&gt;Artifact uploads (JSON findings, HTML dashboard, SARIF reports)&lt;/li&gt;
&lt;li&gt;Pipeline schedules matching your cron syntax&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example generated pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Generated by JMo Security Schedule Manager&lt;/span&gt;
&lt;span class="c1"&gt;# Schedule: prod-security-audit (0 2 * * 1)&lt;/span&gt;

&lt;span class="na"&gt;variables&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;JMO_PROFILE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;balanced"&lt;/span&gt;
  &lt;span class="na"&gt;SLACK_WEBHOOK_URL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://hooks.slack.com/services/YOUR/WEBHOOK"&lt;/span&gt;

&lt;span class="na"&gt;stages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;scan&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;notify&lt;/span&gt;

&lt;span class="na"&gt;jmo-security-scan&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;scan&lt;/span&gt;
  &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;jmogaming/jmo-security:latest&lt;/span&gt;
  &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;jmo scan --profile balanced --repo . --image myapp:latest --url https://myapp.com&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;jmo report ./results --profile&lt;/span&gt;
  &lt;span class="na"&gt;artifacts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;reports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;sast&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;results/summaries/findings.sarif&lt;/span&gt;
    &lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;results/&lt;/span&gt;
    &lt;span class="na"&gt;expire_in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;30 days&lt;/span&gt;
  &lt;span class="na"&gt;only&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;schedules&lt;/span&gt;

&lt;span class="na"&gt;notify-slack-success&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;notify&lt;/span&gt;
  &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;curlimages/curl:latest&lt;/span&gt;
  &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
      &lt;span class="s"&gt;curl -X POST "$SLACK_WEBHOOK_URL" \&lt;/span&gt;
        &lt;span class="s"&gt;-H 'Content-Type: application/json' \&lt;/span&gt;
        &lt;span class="s"&gt;-d "{&lt;/span&gt;
          &lt;span class="s"&gt;\"text\": \"✅ Security scan PASSED: $CI_PIPELINE_URL\",&lt;/span&gt;
          &lt;span class="s"&gt;\"attachments\": [{&lt;/span&gt;
            &lt;span class="s"&gt;\"color\": \"good\",&lt;/span&gt;
            &lt;span class="s"&gt;\"fields\": [&lt;/span&gt;
              &lt;span class="s"&gt;{\"title\": \"Commit\", \"value\": \"$CI_COMMIT_SHORT_SHA\", \"short\": true},&lt;/span&gt;
              &lt;span class="s"&gt;{\"title\": \"Branch\", \"value\": \"$CI_COMMIT_BRANCH\", \"short\": true}&lt;/span&gt;
            &lt;span class="s"&gt;]&lt;/span&gt;
          &lt;span class="s"&gt;}]&lt;/span&gt;
        &lt;span class="s"&gt;}"&lt;/span&gt;
  &lt;span class="na"&gt;only&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;schedules&lt;/span&gt;
  &lt;span class="na"&gt;when&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;on_success&lt;/span&gt;

&lt;span class="na"&gt;notify-slack-failure&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;notify&lt;/span&gt;
  &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;curlimages/curl:latest&lt;/span&gt;
  &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
      &lt;span class="s"&gt;curl -X POST "$SLACK_WEBHOOK_URL" \&lt;/span&gt;
        &lt;span class="s"&gt;-H 'Content-Type: application/json' \&lt;/span&gt;
        &lt;span class="s"&gt;-d "{&lt;/span&gt;
          &lt;span class="s"&gt;\"text\": \"❌ Security scan FAILED: $CI_PIPELINE_URL\",&lt;/span&gt;
          &lt;span class="s"&gt;\"attachments\": [{&lt;/span&gt;
            &lt;span class="s"&gt;\"color\": \"danger\",&lt;/span&gt;
            &lt;span class="s"&gt;\"fields\": [&lt;/span&gt;
              &lt;span class="s"&gt;{\"title\": \"Commit\", \"value\": \"$CI_COMMIT_SHORT_SHA\", \"short\": true},&lt;/span&gt;
              &lt;span class="s"&gt;{\"title\": \"Branch\", \"value\": \"$CI_COMMIT_BRANCH\", \"short\": true}&lt;/span&gt;
            &lt;span class="s"&gt;]&lt;/span&gt;
          &lt;span class="s"&gt;}]&lt;/span&gt;
        &lt;span class="s"&gt;}"&lt;/span&gt;
  &lt;span class="na"&gt;only&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;schedules&lt;/span&gt;
  &lt;span class="na"&gt;when&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;on_failure&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Slack Notifications
&lt;/h3&gt;

&lt;p&gt;Slack integration is built-in. Configure webhooks in your schedule:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;notifications&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;channels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;slack&lt;/span&gt;
      &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://hooks.slack.com/services/YOUR/WEBHOOK"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notifications include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Pipeline status (success/failure)&lt;/li&gt;
&lt;li&gt;📊 Commit info (SHA, branch, author)&lt;/li&gt;
&lt;li&gt;🔍 Findings count (when available)&lt;/li&gt;
&lt;li&gt;🔗 Direct link to pipeline&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Before v0.8.0, you had three options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Manual scans&lt;/strong&gt; — Inconsistent, easy to forget&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hand-written CI/CD YAML&lt;/strong&gt; — Error-prone, hard to maintain across projects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Third-party services&lt;/strong&gt; — Expensive, cloud dependencies, vendor lock-in&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now you have a fourth option:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Declarative schedules&lt;/strong&gt; stored locally&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-generated CI/CD configs&lt;/strong&gt; for GitLab (GitHub Actions coming soon)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero cloud dependencies&lt;/strong&gt; (except Slack webhooks, optional)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;100% open source&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Real-World Use Cases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Use Case 1: Multi-Environment Security Gates
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Dev environment: Fast scans on every commit&lt;/span&gt;
jmo schedule create dev-security &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--cron&lt;/span&gt; &lt;span class="s2"&gt;"*/15 * * * *"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--profile&lt;/span&gt; fast &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--repo&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--backend&lt;/span&gt; gitlab-ci

&lt;span class="c"&gt;# Staging: Balanced scans nightly&lt;/span&gt;
jmo schedule create staging-security &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--cron&lt;/span&gt; &lt;span class="s2"&gt;"0 1 * * *"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--profile&lt;/span&gt; balanced &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--repo&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--image&lt;/span&gt; staging:latest &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--url&lt;/span&gt; https://staging.example.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--backend&lt;/span&gt; gitlab-ci &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--slack-webhook&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$STAGING_SLACK_WEBHOOK&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Production: Deep scans weekly&lt;/span&gt;
jmo schedule create prod-security &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--cron&lt;/span&gt; &lt;span class="s2"&gt;"0 2 * * 0"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--profile&lt;/span&gt; deep &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--repo&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--image&lt;/span&gt; prod:latest &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--url&lt;/span&gt; https://example.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--k8s-context&lt;/span&gt; prod &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--backend&lt;/span&gt; gitlab-ci &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--slack-webhook&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PROD_SLACK_WEBHOOK&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Use Case 2: Compliance Automation
&lt;/h3&gt;

&lt;p&gt;JMo Security auto-enriches findings with 6 compliance frameworks (OWASP Top 10, CWE Top 25, NIST CSF 2.0, PCI DSS 4.0, CIS Controls v8.1, MITRE ATT&amp;amp;CK). Schedule weekly compliance reports:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jmo schedule create compliance-weekly &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--cron&lt;/span&gt; &lt;span class="s2"&gt;"0 9 * * 1"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--profile&lt;/span&gt; balanced &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--repo&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--image&lt;/span&gt; app:latest &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--terraform-state&lt;/span&gt; infrastructure.tfstate &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--backend&lt;/span&gt; gitlab-ci &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--slack-webhook&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$COMPLIANCE_SLACK_WEBHOOK&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pipeline artifacts include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;COMPLIANCE_SUMMARY.md&lt;/code&gt; — Cross-framework compliance status&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;PCI_DSS_COMPLIANCE.md&lt;/code&gt; — PCI DSS 4.0 detailed report&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;attack-navigator.json&lt;/code&gt; — MITRE ATT&amp;amp;CK Navigator heatmap&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Use Case 3: GitOps Workflow
&lt;/h3&gt;

&lt;p&gt;Commit schedules to version control:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create schedules&lt;/span&gt;
jmo schedule create security-scan &lt;span class="nt"&gt;--cron&lt;/span&gt; &lt;span class="s2"&gt;"0 2 * * *"&lt;/span&gt; &lt;span class="nt"&gt;--profile&lt;/span&gt; balanced &lt;span class="nt"&gt;--repo&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# Export to GitLab CI&lt;/span&gt;
jmo schedule &lt;span class="nb"&gt;export &lt;/span&gt;security-scan &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; .gitlab-ci.yml

&lt;span class="c"&gt;# Commit and push&lt;/span&gt;
git add .gitlab-ci.yml
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"ci: add automated security scans"&lt;/span&gt;
git push

&lt;span class="c"&gt;# GitLab automatically picks up the pipeline schedule&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Architecture Deep Dive
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Storage
&lt;/h3&gt;

&lt;p&gt;Schedules are stored in &lt;code&gt;~/.jmo/schedules.json&lt;/code&gt; with strict permissions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"schedules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"metadata"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"prod-security-audit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"f47ac10b-58cc-4372-a567-0e02b2c3d479"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"creationTimestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-10-28T14:30:00Z"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"spec"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"schedule"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0 2 * * 1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"jobTemplate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"backend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gitlab-ci"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"nextScheduleTime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-11-04T02:00:00Z"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Cron Validation
&lt;/h3&gt;

&lt;p&gt;Uses &lt;code&gt;croniter&lt;/code&gt; library for full cron syntax support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Standard 5-field cron (&lt;code&gt;0 2 * * 1&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Extended syntax (ranges, steps, lists)&lt;/li&gt;
&lt;li&gt;Timezone support (UTC default)&lt;/li&gt;
&lt;li&gt;Next run calculation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Backend Abstraction
&lt;/h3&gt;

&lt;p&gt;Designed for extensibility:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;gitlab-ci&lt;/strong&gt; (v0.8.0)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;github-actions&lt;/strong&gt; (planned v0.9.0)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;local-cron&lt;/strong&gt; (planned v0.9.0)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;jenkins&lt;/strong&gt; (community request)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Option 1: Docker (Zero Installation)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull jmogaming/jmo-security:0.8.0
docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;:/scan"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  jmogaming/jmo-security:0.8.0 &lt;span class="se"&gt;\&lt;/span&gt;
  schedule create my-scan &lt;span class="nt"&gt;--cron&lt;/span&gt; &lt;span class="s2"&gt;"0 2 * * *"&lt;/span&gt; &lt;span class="nt"&gt;--profile&lt;/span&gt; balanced &lt;span class="nt"&gt;--repo&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Option 2: PyPI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;jmo-security&lt;span class="o"&gt;==&lt;/span&gt;0.8.0
jmo schedule create my-scan &lt;span class="nt"&gt;--cron&lt;/span&gt; &lt;span class="s2"&gt;"0 2 * * *"&lt;/span&gt; &lt;span class="nt"&gt;--profile&lt;/span&gt; balanced &lt;span class="nt"&gt;--repo&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Option 3: GitHub Clone
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/jimmy058910/jmo-security-repo.git
&lt;span class="nb"&gt;cd &lt;/span&gt;jmo-security-repo
make dev-deps
jmo schedule create my-scan &lt;span class="nt"&gt;--cron&lt;/span&gt; &lt;span class="s2"&gt;"0 2 * * *"&lt;/span&gt; &lt;span class="nt"&gt;--profile&lt;/span&gt; balanced &lt;span class="nt"&gt;--repo&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Upgrade Notes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Breaking Changes:&lt;/strong&gt; None. v0.8.0 is fully backward-compatible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New Dependencies:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;croniter&amp;gt;=2.0&lt;/code&gt; (cron parsing)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;types-croniter&lt;/code&gt; (type hints)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install with: &lt;code&gt;pip install --upgrade jmo-security[scheduling]&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;v0.9.0 Roadmap:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions workflow generation&lt;/li&gt;
&lt;li&gt;Local cron integration&lt;/li&gt;
&lt;li&gt;Schedule templating (reusable schedule configs)&lt;/li&gt;
&lt;li&gt;Multi-region scheduling (different timezones per schedule)&lt;/li&gt;
&lt;li&gt;Schedule dependency chains ("run scan B after scan A succeeds")&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;See full roadmap:&lt;/strong&gt; &lt;a href="https://github.com/jimmy058910/jmo-security-repo/blob/main/ROADMAP.md" rel="noopener noreferrer"&gt;ROADMAP.md&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;JMo Security is 100% open source (MIT OR Apache-2.0 dual-licensed). Contributions welcome:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🐛 Report bugs: &lt;a href="https://github.com/jimmy058910/jmo-security-repo/issues" rel="noopener noreferrer"&gt;GitHub Issues&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💡 Feature requests: &lt;a href="https://github.com/jimmy058910/jmo-security-repo/discussions" rel="noopener noreferrer"&gt;GitHub Discussions&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🔧 Pull requests: &lt;a href="https://github.com/jimmy058910/jmo-security-repo/blob/main/CONTRIBUTING.md" rel="noopener noreferrer"&gt;CONTRIBUTING.md&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Looking to hire?&lt;/strong&gt; I'm a recent cybersecurity bootcamp graduate (Michigan Tech × Institute of Data, October 2025) actively seeking cybersecurity/DevSecOps roles. JMo Security started as my capstone project and evolved into a production-grade platform. &lt;a href="https://linkedin.com/in/jimmy058910" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Support the Project
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;⭐ Star on GitHub: &lt;a href="https://github.com/jimmy058910/jmo-security-repo" rel="noopener noreferrer"&gt;jimmy058910/jmo-security-repo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💚 Support on Ko-fi: &lt;a href="https://ko-fi.com/jmogaming" rel="noopener noreferrer"&gt;ko-fi.com/jmogaming&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💰 Sponsor on GitHub: &lt;a href="https://github.com/sponsors/jimmy058910" rel="noopener noreferrer"&gt;github.com/sponsors/jimmy058910&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📧 Subscribe to newsletter: &lt;a href="https://jmotools.com/subscribe.html" rel="noopener noreferrer"&gt;jmotools.com/subscribe.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Documentation: &lt;a href="https://docs.jmotools.com" rel="noopener noreferrer"&gt;docs.jmotools.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Blog: &lt;a href="https://blog.jmotools.com" rel="noopener noreferrer"&gt;blog.jmotools.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/jimmy058910/jmo-security-repo" rel="noopener noreferrer"&gt;github.com/jimmy058910/jmo-security-repo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;PyPI: &lt;a href="https://pypi.org/project/jmo-security/" rel="noopener noreferrer"&gt;pypi.org/project/jmo-security/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Docker Hub: &lt;a href="//hub.docker.com/r/jmogaming/jmo-security"&gt;hub.docker.com/r/jmogaming/jmo-security&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cybersecurity</category>
      <category>devops</category>
      <category>gitlab</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Why I Built a Free Security Scanner That Makes Sense</title>
      <dc:creator>James Moceri</dc:creator>
      <pubDate>Fri, 24 Oct 2025 22:25:00 +0000</pubDate>
      <link>https://dev.to/jmogaming/why-i-built-a-free-security-scanner-that-makes-sense-2cn7</link>
      <guid>https://dev.to/jmogaming/why-i-built-a-free-security-scanner-that-makes-sense-2cn7</guid>
      <description>&lt;p&gt;I just completed the Institute of Data / Michigan Tech Cybersecurity program, and for my capstone project, I scanned 22 random GitHub repositories with 4 secrets scanning tools.&lt;/p&gt;

&lt;p&gt;The results shocked me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🚨 &lt;strong&gt;1,562 security findings&lt;/strong&gt; across 22 repos&lt;/li&gt;
&lt;li&gt;🔴 &lt;strong&gt;5 CRITICAL verified secrets&lt;/strong&gt; (live API keys, active tokens)&lt;/li&gt;
&lt;li&gt;🟠 &lt;strong&gt;579 HIGH severity issues&lt;/strong&gt; (hardcoded credentials, weak crypto, injection flaws)&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;Only 3.5% false positive rate&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But here's the real problem: &lt;strong&gt;I had to manually parse 4 different JSON formats, spend 3-4 hours aggregating results, and then map findings to compliance frameworks (OWASP, PCI DSS, NIST) by hand.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each one of those 5 critical secrets was a potential data breach waiting to happen. And most developers don't even know their secrets are exposed until it's too late.&lt;/p&gt;

&lt;p&gt;So I built a solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Security Scanning Is Unnecessarily Complicated
&lt;/h2&gt;

&lt;p&gt;During my bootcamp, I researched "Vibe Coding" platforms—tools like Replit, Lovable, and AI code generators that let anyone build apps without traditional coding. These platforms are amazing for accessibility, but they introduce serious vulnerabilities.&lt;/p&gt;

&lt;p&gt;Here's what frustrated me: &lt;strong&gt;how are non-technical users supposed to catch security issues?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most security scanners assume you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A dedicated security team&lt;/li&gt;
&lt;li&gt;Deep knowledge of tool configurations&lt;/li&gt;
&lt;li&gt;Time to learn 5+ different tools&lt;/li&gt;
&lt;li&gt;$$$/year for commercial platforms&lt;/li&gt;
&lt;li&gt;A Linux/macOS environment (Windows users? Good luck.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For solo developers, small teams, and bootcamp graduates like me, this was a non-starter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I needed a tool that just worked.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: JMo Security
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;JMo Security&lt;/strong&gt; is an open-source security audit toolkit that integrates 11+ industry-standard scanners into one unified platform.&lt;/p&gt;

&lt;p&gt;Instead of juggling Trivy, Semgrep, TruffleHog, OWASP ZAP, and 7 other tools, you get one command and one dashboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Makes It Different
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Multi-Target Scanning (One Command, Six Asset Types)
&lt;/h4&gt;

&lt;p&gt;Most scanners only work on Git repositories. JMo scans:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📦 &lt;strong&gt;Repositories&lt;/strong&gt; (local Git repos)&lt;/li&gt;
&lt;li&gt;🐳 &lt;strong&gt;Container images&lt;/strong&gt; (Docker/OCI)&lt;/li&gt;
&lt;li&gt;☁️ &lt;strong&gt;IaC files&lt;/strong&gt; (Terraform, CloudFormation, Kubernetes manifests)&lt;/li&gt;
&lt;li&gt;🌐 &lt;strong&gt;Live websites&lt;/strong&gt; (DAST with OWASP ZAP)&lt;/li&gt;
&lt;li&gt;🦊 &lt;strong&gt;GitLab repos&lt;/strong&gt; (with TruffleHog verified secrets)&lt;/li&gt;
&lt;li&gt;⎈ &lt;strong&gt;Kubernetes clusters&lt;/strong&gt; (live cluster scanning)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example: Scan your app, its container, and your production website in one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jmo scan &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--repo&lt;/span&gt; ./myapp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--image&lt;/span&gt; myapp:latest &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--url&lt;/span&gt; https://myapp.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--k8s-context&lt;/span&gt; prod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; One unified dashboard with deduplicated findings across all targets.&lt;/p&gt;
&lt;h4&gt;
  
  
  2. Compliance Automation (No More Manual Mapping)
&lt;/h4&gt;

&lt;p&gt;Remember those 3-4 hours I spent manually mapping findings to compliance frameworks? JMo does it automatically.&lt;/p&gt;

&lt;p&gt;Every finding is auto-tagged with &lt;strong&gt;six compliance frameworks&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OWASP Top 10 2021&lt;/strong&gt; - Web application security risks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CWE Top 25 2024&lt;/strong&gt; - Most dangerous software weaknesses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NIST Cybersecurity Framework 2.0&lt;/strong&gt; - Federal compliance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PCI DSS 4.0&lt;/strong&gt; - Payment card industry standards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CIS Controls v8.1&lt;/strong&gt; - Critical security controls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MITRE ATT&amp;amp;CK&lt;/strong&gt; - Adversary tactics and techniques&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Real talk:&lt;/strong&gt; This feature alone saved me 40+ hours during my capstone. What used to take days now takes 5 minutes.&lt;/p&gt;
&lt;h4&gt;
  
  
  3. Beginner-Friendly (5-Minute First Scan)
&lt;/h4&gt;

&lt;p&gt;Interactive wizard guides first-time users:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jmotools wizard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The wizard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detects your environment (Docker available? Use that!)&lt;/li&gt;
&lt;li&gt;Recommends scan profiles (fast/balanced/deep)&lt;/li&gt;
&lt;li&gt;Auto-discovers repositories and URLs&lt;/li&gt;
&lt;li&gt;Shows command preview before running&lt;/li&gt;
&lt;li&gt;Opens results when done&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;No security knowledge required.&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  4. Windows Support (Docker Mode)
&lt;/h4&gt;

&lt;p&gt;Most security tools don't work on Windows. JMo's Docker mode delivers &lt;strong&gt;100% tool coverage&lt;/strong&gt; on Windows/WSL2:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;:/scan ghcr.io/jimmy058910/jmo-security:latest &lt;span class="se"&gt;\&lt;/span&gt;
  scan &lt;span class="nt"&gt;--repo&lt;/span&gt; /scan/myapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Zero installation. Full tool suite. Works everywhere.&lt;/p&gt;
&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;p&gt;JMo uses a two-phase architecture:&lt;/p&gt;
&lt;h4&gt;
  
  
  Phase 1: Scan
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Runs 11 tools in parallel (configurable threads)&lt;/li&gt;
&lt;li&gt;Writes raw JSON outputs to &lt;code&gt;results/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Supports timeouts and retries for flaky tools&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Phase 2: Report
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Normalizes all findings to a unified schema&lt;/li&gt;
&lt;li&gt;Deduplicates by fingerprint ID&lt;/li&gt;
&lt;li&gt;Enriches with compliance frameworks&lt;/li&gt;
&lt;li&gt;Generates dashboard, SARIF, JSON, Markdown&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Tools Orchestrated (v0.7.0)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Secrets:&lt;/strong&gt; TruffleHog (verified secrets), Nosey Parker (deep scanning)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SAST:&lt;/strong&gt; Semgrep (multi-language), Bandit (Python-specific)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SBOM + Vuln:&lt;/strong&gt; Syft (SBOM), Trivy (CVE scanning)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IaC:&lt;/strong&gt; Checkov (policy-as-code)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dockerfile:&lt;/strong&gt; Hadolint (best practices)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DAST:&lt;/strong&gt; OWASP ZAP (web security), Nuclei (API security)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime:&lt;/strong&gt; Falco (container/K8s monitoring)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fuzzing:&lt;/strong&gt; AFL++ (coverage-guided fuzzing)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Real-World Example
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; Audit a web app before production launch.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Scan repo + Docker image + live staging environment&lt;/span&gt;
jmo scan &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--repo&lt;/span&gt; ./webapp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--image&lt;/span&gt; webapp:staging &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--url&lt;/span&gt; https://staging.myapp.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--profile-name&lt;/span&gt; balanced &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--results-dir&lt;/span&gt; ./audit

&lt;span class="c"&gt;# Generate compliance report&lt;/span&gt;
jmo report ./audit &lt;span class="nt"&gt;--profile&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;dashboard.html&lt;/code&gt; — Interactive findings with suggested fixes&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;COMPLIANCE_SUMMARY.md&lt;/code&gt; — Auto-mapped to OWASP/NIST/PCI DSS&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;findings.sarif&lt;/code&gt; — Upload to GitHub Security tab&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;timings.json&lt;/code&gt; — Performance profiling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; 15 minutes (vs. 8+ hours manually running tools)&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Open Source?
&lt;/h2&gt;

&lt;p&gt;I'm building this in public for three reasons:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Security tools should be accessible.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not everyone has $$$/year for commercial scanners. Those 5 critical secrets I found? They were in open-source projects maintained by solo developers and small teams. They deserve enterprise-grade security without the enterprise price tag.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. I'm learning (and I want feedback).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After 12+ years in operational management, I'm bringing that process-oriented mindset to cybersecurity. I want experienced engineers to tear this apart, suggest improvements, and help me build something truly useful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. I believe in giving back.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The open-source community helped me many times over my lifetime. This is my way of contributing—and hopefully making security less painful for the next person.&lt;/p&gt;
&lt;h3&gt;
  
  
  Current Status
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;272 tests passing&lt;/strong&gt; (91% coverage)&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;v0.7.0 released&lt;/strong&gt; (privacy-first telemetry, multi-target wizard)&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;PyPI package&lt;/strong&gt; (&lt;code&gt;pip install jmo-security&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Docker images&lt;/strong&gt; (3 variants: full/slim/alpine)&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;CI/CD ready&lt;/strong&gt; (GitHub Actions examples included)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  What's Next
&lt;/h3&gt;

&lt;p&gt;I'm actively working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scheduled scans with cron support&lt;/li&gt;
&lt;li&gt;Machine-readable diff reports (compare scans over time)&lt;/li&gt;
&lt;li&gt;Plugin system for custom tools&lt;/li&gt;
&lt;li&gt;Policy-as-Code integration (OPA)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See the full roadmap: &lt;a href="https://github.com/jimmy058910/jmo-security-repo/blob/main/ROADMAP.md" rel="noopener noreferrer"&gt;ROADMAP.md&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Try It Yourself
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Quick Start (Docker - Zero Installation):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;:/scan ghcr.io/jimmy058910/jmo-security:latest &lt;span class="se"&gt;\&lt;/span&gt;
  scan &lt;span class="nt"&gt;--repo&lt;/span&gt; /scan/myrepo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Quick Start (Local Install):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;jmo-security
jmotools wizard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/jimmy058910" rel="noopener noreferrer"&gt;
        jimmy058910
      &lt;/a&gt; / &lt;a href="https://github.com/jimmy058910/jmo-security-repo" rel="noopener noreferrer"&gt;
        jmo-security-repo
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      JMo Security Suite - Terminal-first security audit toolkit with many tools, multi-target scanning, &amp;amp; compliance
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;JMo's Security Audit Tool Suite&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;
   &lt;a rel="noopener noreferrer" href="https://github.com/jimmy058910/jmo-security-repo/assets/jmo-logo.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fjimmy058910%2Fjmo-security-repo%2Fassets%2Fjmo-logo.png" alt="JMo Security Audit Tool Suite" width="220"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jimmy058910/jmo-security-repo/actions/workflows/ci.yml?query=branch%3Amain" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/jimmy058910/jmo-security-repo/actions/workflows/ci.yml/badge.svg?branch=main" alt="Tests"&gt;&lt;/a&gt;
&lt;a href="https://app.codecov.io/gh/jimmy058910/jmo-security-repo" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e86d969bf907692f3c79f74decd1161f82f2626c08052d41e79ec8d2e7422118/68747470733a2f2f636f6465636f762e696f2f67682f6a696d6d793035383931302f6a6d6f2d73656375726974792d7265706f2f6272616e63682f6d61696e2f67726170682f62616467652e737667" alt="codecov"&gt;&lt;/a&gt;
&lt;a href="https://pypi.org/project/jmo-security/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b5b113a90ee5a947d5ff3856a0d7232e0caa281661e89e036da1084154da4846/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f6a6d6f2d73656375726974792e737667" alt="PyPI version"&gt;&lt;/a&gt;
&lt;a href="https://pypi.org/project/jmo-security/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/def0a4716fee1246c98b7bd0ee9baf60fd61ff042038f6d07e91e04a453f8cf9/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f6a6d6f2d73656375726974792e737667" alt="Python Versions"&gt;&lt;/a&gt;
&lt;a href="https://opensource.org/licenses/MIT" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f39131127545ad7907bcecba201dabc10b0b32199c4a45b16a35959a3eb21da4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542532304f522532304170616368652d2d322e302d626c75652e737667" alt="License: MIT OR Apache-2.0"&gt;&lt;/a&gt;
&lt;a href="https://hub.docker.com/r/jmogaming/jmo-security" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1a3469f40a1fae83d07810b1234d25b3d9552b20fdd7ca4106acc11a21a56eda/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6a6d6f67616d696e672f6a6d6f2d7365637572697479" alt="Docker Pulls"&gt;&lt;/a&gt;
&lt;a href="https://github.com/jimmy058910/jmo-security-repo" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ed87c41cd3f4caacfbe8e0707dc0e03360c388048314c33d5838a0969d1b988d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f6a696d6d793035383931302f6a6d6f2d73656375726974792d7265706f3f7374796c653d736f6369616c" alt="GitHub Stars"&gt;&lt;/a&gt;
&lt;a href="https://docs.jmotools.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5b32dacc44d07984dcc1de654273926bf78516dcbcf27271b3998deaced9bfd5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f63732d52656164546865446f63732d626c75652e737667" alt="Documentation"&gt;&lt;/a&gt;
&lt;a href="https://blog.jmotools.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c3620cb277ed58d1c524189d36c7ec1e4f2ecdfcd1f4f2f053008f3edc2b88d2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f626c6f672d486173686e6f64652d3239363246462e737667" alt="Blog"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📬 Stay Updated &amp;amp; Support&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://jmotools.com/subscribe.html" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6421d30e89db7b24b329c1a3f6cda05a4b0ed6df8f7bba3e0d16c990480b8334/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f2546302539462539332541375f4e6577736c65747465722d5375627363726962652d363637656561" alt="Newsletter"&gt;&lt;/a&gt;
&lt;a href="https://ko-fi.com/jmogaming" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b0a6f864d635bc158bb267a3be523aa96ec223067a191bb1486053c98e75563e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f2546302539462539322539415f4b6f2d2d66692d537570706f72742d6666356535623f6c6f676f3d6b6f2d6669266c6f676f436f6c6f723d7768697465" alt="Ko-fi"&gt;&lt;/a&gt;
&lt;a href="https://github.com/sponsors/jimmy058910" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6514015aec0cdc50392511c53062fd1b18c88015cefbb25a159cef32997d0e50/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f2546302539462539322542305f53706f6e736f722d4769744875622d6561346161613f6c6f676f3d676974687562266c6f676f436f6c6f723d7768697465" alt="GitHub Sponsors"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Get security tips and updates delivered to your inbox:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🚀 New feature announcements&lt;/li&gt;
&lt;li&gt;💡 Real-world security case studies &amp;amp; exclusive guides&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://jmotools.com/subscribe.html" rel="nofollow noopener noreferrer"&gt;Subscribe to Newsletter&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://ko-fi.com/jmogaming" rel="nofollow noopener noreferrer"&gt;Support Full-Time Development&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A terminal-first, cross-platform security audit toolkit that orchestrates multiple scanners (secrets, SAST, SBOM, IaC, Dockerfile) with a unified Python CLI, normalized outputs, and an HTML dashboard.&lt;/p&gt;
&lt;p&gt;👉 New here? Read the comprehensive User Guide: &lt;a href="https://github.com/jimmy058910/jmo-security-repo/docs/USER_GUIDE.md" rel="noopener noreferrer"&gt;docs/USER_GUIDE.md&lt;/a&gt;
Docs hub: &lt;a href="https://github.com/jimmy058910/jmo-security-repo/docs/index.md" rel="noopener noreferrer"&gt;docs/index.md&lt;/a&gt;
Project homepage: &lt;a href="https://jmotools.com" rel="nofollow noopener noreferrer"&gt;jmotools.com&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Origin Story:&lt;/strong&gt; Built as my capstone project for &lt;strong&gt;Institute of Data × Michigan Tech University's Cybersecurity Bootcamp&lt;/strong&gt; (graduated October 2025). Now a production-grade security platform. &lt;strong&gt;Actively seeking cybersecurity/DevSecOps roles&lt;/strong&gt; — let's connect! Issues and PRs welcome.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thinking about contributing? See &lt;a href="https://github.com/jimmy058910/jmo-security-repo/CONTRIBUTING.md" rel="noopener noreferrer"&gt;CONTRIBUTING.md&lt;/a&gt; for setup and coding standards. For publishing, see &lt;a href="https://github.com/jimmy058910/jmo-security-repo/docs/RELEASE.md" rel="noopener noreferrer"&gt;docs/RELEASE.md&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Roadmap &amp;amp; history:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Latest:&lt;/strong&gt; ROADMAP #2 (Interactive Wizard) ✅ Complete - see &lt;a href="https://github.com/jimmy058910/jmo-security-repo/docs/examples/wizard-examples.md" rel="noopener noreferrer"&gt;docs/examples/wizard-examples.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Completed steps (summary): see &lt;a href="https://github.com/jimmy058910/jmo-security-repo/CHANGELOG.md" rel="noopener noreferrer"&gt;CHANGELOG.md&lt;/a&gt; → ROADMAP…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/jimmy058910/jmo-security-repo" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




&lt;ul&gt;
&lt;li&gt;📖 Documentation: &lt;a href="https://docs.jmotools.com" rel="noopener noreferrer"&gt;docs.jmotools.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💼 LinkedIn: &lt;a href="https://www.linkedin.com/in/jimmy-moceri/" rel="noopener noreferrer"&gt;linkedin.com/in/jimmy-moceri&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💚 Support: &lt;a href="https://ko-fi.com/jmogaming" rel="noopener noreferrer"&gt;ko-fi.com/jmogaming&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💰 Sponsor: &lt;a href="https://github.com/sponsors/jimmy058910" rel="noopener noreferrer"&gt;github.com/sponsors/jimmy058910&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Get Updates
&lt;/h3&gt;

&lt;p&gt;I'm sharing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-world security case studies&lt;/li&gt;
&lt;li&gt;New feature announcements&lt;/li&gt;
&lt;li&gt;Behind-the-scenes development stories&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://jmotools.com/subscribe.html" rel="noopener noreferrer"&gt;Subscribe to Newsletter&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://github.com/jimmy058910" rel="noopener noreferrer"&gt;Follow on GitHub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;If you're juggling multiple security tools, paying for commercial scanners, or just starting in cybersecurity, &lt;strong&gt;I built this for you.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Those 5 critical secrets I found during my capstone? They're still out there. In production. Waiting to be exploited.&lt;/p&gt;

&lt;p&gt;Security teams shouldn't spend hours juggling tools. They should spend that time fixing vulnerabilities.&lt;/p&gt;

&lt;p&gt;JMo Security is 100% open-source, self-hosted, and free. No vendor lock-in. No data leaves your machine. No PhD in cybersecurity required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'm currently seeking a Cybersecurity, DevSecOps, or Application Security roles&lt;/strong&gt; where I can combine hands-on technical skills with a process-oriented mindset.&lt;/p&gt;

&lt;p&gt;I'd love your feedback—issues, PRs, and stars are all welcome. Let's connect if you're building security teams that value both technical depth and operational excellence.&lt;/p&gt;

&lt;p&gt;Let's make security accessible to everyone.&lt;/p&gt;

&lt;p&gt;— James (JMo) Moceri&lt;/p&gt;

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