<?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>Forem: Tevin Harris</title>
    <description>The latest articles on Forem by Tevin Harris (@ivproduced).</description>
    <link>https://forem.com/ivproduced</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%2F3774208%2F908e6d6b-814b-49df-a359-28c8db9d2f2f.png</url>
      <title>Forem: Tevin Harris</title>
      <link>https://forem.com/ivproduced</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ivproduced"/>
    <language>en</language>
    <item>
      <title>OSCALFlow: Automate NIST 800-53 Compliance Documentation from Your Codebase</title>
      <dc:creator>Tevin Harris</dc:creator>
      <pubDate>Mon, 16 Feb 2026 05:08:11 +0000</pubDate>
      <link>https://forem.com/ivproduced/oscalflow-automate-nist-800-53-compliance-documentation-from-your-codebase-554a</link>
      <guid>https://forem.com/ivproduced/oscalflow-automate-nist-800-53-compliance-documentation-from-your-codebase-554a</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;OSCALFlow - a GitHub CLI extension for automating federal compliance docs (NIST 800-53, FedRAMP). &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/ivproduced/OSCALFlow" rel="noopener noreferrer"&gt;https://github.com/ivproduced/OSCALFlow&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've ever had to document compliance controls manually, you know it's brutal. Security teams can spend 200+ hours per system just filling out paperwork. I built this to scan codebases and auto-detect which controls are already implemented.&lt;/p&gt;

&lt;p&gt;The interesting part: I used &lt;code&gt;gh copilot&lt;/code&gt; to build features that call &lt;code&gt;gh copilot&lt;/code&gt; inside the tool. So the CLI extension I made with Copilot now uses Copilot to validate code and suggest implementations. Pretty meta.&lt;/p&gt;

&lt;p&gt;What it does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;gh oscal scan&lt;/code&gt; - Detects 50+ controls from your code (150+ patterns across 8 languages)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gh oscal scan --ai-validate&lt;/code&gt; - Shells out to &lt;code&gt;gh copilot explain&lt;/code&gt; to verify if implementations actually meet NIST requirements&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gh oscal suggest&lt;/code&gt; - Detects your stack and calls &lt;code&gt;gh copilot suggest&lt;/code&gt; for implementation guidance&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gh oscal generate&lt;/code&gt; - Creates OSCAL System Security Plan templates&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gh oscal export&lt;/code&gt; - Exports HTML reports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I tested it on a real federal system (FedChat) and got 19.8% auto-detection - 48 controls documented automatically, saving about 24 hours of work. Not perfect coverage but way better than starting from zero.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🎬 Video Walkthrough:&lt;/strong&gt; &lt;a href="https://youtu.be/3vqtV-HDFg4" rel="noopener noreferrer"&gt;https://youtu.be/3vqtV-HDFg4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Video: &lt;a href="https://youtu.be/3vqtV-HDFg4" rel="noopener noreferrer"&gt;https://youtu.be/3vqtV-HDFg4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gh extension &lt;span class="nb"&gt;install &lt;/span&gt;ivproduced/oscalflow
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Basic scan example:&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="nv"&gt;$ &lt;/span&gt;gh oscal scan Test_Case/FedChat

Found 58 signals → 48 controls &lt;span class="o"&gt;(&lt;/span&gt;19.8% coverage&lt;span class="o"&gt;)&lt;/span&gt;
Time saved: ~24 hours

✓ AC-2 &lt;span class="o"&gt;(&lt;/span&gt;Account Management&lt;span class="o"&gt;)&lt;/span&gt;
✓ AU-3 &lt;span class="o"&gt;(&lt;/span&gt;Audit Record Content&lt;span class="o"&gt;)&lt;/span&gt;
✓ SC-5 &lt;span class="o"&gt;(&lt;/span&gt;Denial of Service Protection&lt;span class="o"&gt;)&lt;/span&gt;
... &lt;span class="o"&gt;(&lt;/span&gt;48 total&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where it gets interesting - AI validation:&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="nv"&gt;$ &lt;/span&gt;gh oscal scan &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--ai-validate&lt;/span&gt; &lt;span class="nt"&gt;--ai-limit&lt;/span&gt; 5

AI validating with gh copilot...

✅ AU-3 &lt;span class="o"&gt;[&lt;/span&gt;VERIFIED]
   Found: Audit middleware
   AI says: &lt;span class="s2"&gt;"Logs include user_id, timestamp, action, IP. 
            Meets AU-3 requirements."&lt;/span&gt;

✅ SC-5 &lt;span class="o"&gt;[&lt;/span&gt;VERIFIED]
   Found: Rate limiting
   AI says: &lt;span class="s2"&gt;"express-rate-limit prevents resource exhaustion. 
            Complies with SC-5."&lt;/span&gt;

❌ SC-2 &lt;span class="o"&gt;[&lt;/span&gt;FAILED]
   Found: Multi-tenancy
   AI says: &lt;span class="s2"&gt;"Shared database lacks logical separation. 
            SC-2 requires dedicated resources per tenant."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pattern matching finds "might be there." AI validation confirms "actually works."&lt;/p&gt;

&lt;p&gt;Get implementation help:&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="nv"&gt;$ &lt;/span&gt;gh oscal suggest AC-2 backend/ &lt;span class="nt"&gt;--output&lt;/span&gt; guide.md

Detected: Python, FastAPI, SQLAlchemy
Asking gh copilot &lt;span class="k"&gt;for &lt;/span&gt;AC-2 implementation...

Saved 8 steps to guide.md:
  - Database schema changes
  - FastAPI endpoints
  - SQLAlchemy queries
  - Audit logging
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Full workflow:&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;# Start with a template&lt;/span&gt;
gh oscal generate &lt;span class="nt"&gt;--baseline&lt;/span&gt; moderate &lt;span class="nt"&gt;--system&lt;/span&gt; &lt;span class="s2"&gt;"MyApp"&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; ssp.json

&lt;span class="c"&gt;# Scan your code&lt;/span&gt;
gh oscal scan &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--ai-validate&lt;/span&gt; &lt;span class="nt"&gt;--output&lt;/span&gt; results.json

&lt;span class="c"&gt;# Get help implementing gaps&lt;/span&gt;
gh oscal suggest AC-2 &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--output&lt;/span&gt; guide.md

&lt;span class="c"&gt;# Export report&lt;/span&gt;
gh oscal &lt;span class="nb"&gt;export &lt;/span&gt;ssp.json &lt;span class="nt"&gt;-o&lt;/span&gt; 
&lt;span class="c"&gt;## My Experience with GitHub Copilot CLI&lt;/span&gt;

&lt;span class="k"&gt;**&lt;/span&gt;The meta-moment:&lt;span class="k"&gt;**&lt;/span&gt; I used &lt;span class="sb"&gt;`&lt;/span&gt;gh copilot&lt;span class="sb"&gt;`&lt;/span&gt; terminal sessions to build a tool that calls &lt;span class="sb"&gt;`&lt;/span&gt;gh copilot&lt;span class="sb"&gt;`&lt;/span&gt; as part of its features. Recursive productivity at its finest.
Here&lt;span class="s1"&gt;'s the weird part: I used `gh copilot` to build a tool that calls `gh copilot`. 

Three features I built with Copilot CLI that now use Copilot CLI:

**1. OSCAL Catalog Parser** (~200 lines)
Needed to parse the 10MB NIST 800-53 JSON catalog. Ran this:
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
bash&lt;br&gt;
$ gh copilot suggest -t shell&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Parse 10MB NIST OSCAL catalog JSON, extract control IDs, &lt;br&gt;
   titles and descriptions into searchable format"&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Got working code in one session. Just worked.

**2. AI Validator** 
This one shells out to `gh copilot explain` to verify implementations:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
bash&lt;br&gt;
$ gh copilot suggest -t shell&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Create Node function that calls gh copilot explain with code &lt;br&gt;
   context and NIST requirement, parse response"&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;It gave me the `execSync` pattern, error handling, output parsing - built it in an hour.

**3. AI Suggester**
Detects your stack (Python/Node/Docker) and calls `gh copilot suggest`:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
bash&lt;br&gt;
$ gh copilot suggest -t shell&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Detect tech stack from files, build prompt for gh copilot &lt;br&gt;
   suggest, execute and capture output"&lt;/p&gt;
&lt;/blockquote&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

Got the whole tech detection + CLI orchestration in one go.

What changed for me:

Before: Alt-tab to browser, search NIST docs, read generic StackOverflow, try to adapt to my stack. 2-3 hours per control.

After: Stay in terminal, `gh copilot suggest` with my exact question, get code that works with my stack. 20-30 minutes per control.

Used `gh copilot` 10+ times while building this. Never left the terminal. No iteration needed - first suggestions were production-ready.

The meta part is that I built a compliance tool using Copilot CLI, and now that tool uses Copilot CLI to teach compliance. It's recursive but actually makes sense - why wouldn't a CLI extension leverage other CLI extensions?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
  </channel>
</rss>
