<?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: Srikanth Vuppala</title>
    <description>The latest articles on DEV Community by Srikanth Vuppala (@srikanth_vuppala_7b7d3d07).</description>
    <link>https://dev.to/srikanth_vuppala_7b7d3d07</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4140052%2F5c99e246-d9d4-458e-9140-385f93c8edf3.png</url>
      <title>DEV Community: Srikanth Vuppala</title>
      <link>https://dev.to/srikanth_vuppala_7b7d3d07</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/srikanth_vuppala_7b7d3d07"/>
    <language>en</language>
    <item>
      <title>Your AI coding agent is a security reviewer. It just needs a brief.</title>
      <dc:creator>Srikanth Vuppala</dc:creator>
      <pubDate>Wed, 23 Sep 2026 20:59:24 +0000</pubDate>
      <link>https://dev.to/srikanth_vuppala_7b7d3d07/your-ai-coding-agent-is-a-security-reviewer-it-just-needs-a-brief-3206</link>
      <guid>https://dev.to/srikanth_vuppala_7b7d3d07/your-ai-coding-agent-is-a-security-reviewer-it-just-needs-a-brief-3206</guid>
      <description>&lt;p&gt;Ask Claude Code, Cursor or Gemini CLI to "review this repo for security issues" twice, and you'll get two different answers in two different shapes. The review itself can be good. But you can't compare runs, track a finding across releases, or show an auditor what "passed" means.&lt;/p&gt;

&lt;p&gt;We built &lt;strong&gt;&lt;a href="https://github.com/secfoo-com/secfoo" rel="noopener noreferrer"&gt;secfoo&lt;/a&gt;&lt;/strong&gt; (MIT) to fix that. It doesn't replace your agent. It gives the agent a disciplined brief and holds the output to a fixed contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea: skills, not rules
&lt;/h2&gt;

&lt;p&gt;Most security scanners are rules engines. secfoo takes a different approach. A &lt;strong&gt;skill&lt;/strong&gt; is a structured prompt that defines the activity, the method, and the exact shape of the report. secfoo gives the skill and a target to the coding-agent CLI you already have on your PATH, and the agent reads the code the way a human reviewer would.&lt;/p&gt;

&lt;p&gt;Supported agents: Claude Code, Cursor, Antigravity, Gemini CLI and Codex CLI (&lt;code&gt;--agent claude|agent|agy|gemini|codex&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick start
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install secfoo
secfoo run --skill security-architecture-review --agent claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Run several activities at once. They execute concurrently:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;secfoo run --skill sast --skill threat-modeling \
  --target https://github.com/org/repo --agent claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Then browse every assessment, across every project, locally:&lt;/p&gt;

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

&lt;/div&gt;

&lt;p&gt;Prefer not to use Python? &lt;code&gt;npm install -g @rakfortltd/secfoo&lt;/code&gt; or &lt;code&gt;docker run --rm ghcr.io/rakfortltd/secfoo --help&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's in the catalog
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Activity&lt;/th&gt;
&lt;th&gt;Skill ID&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Security Architecture Review&lt;/td&gt;
&lt;td&gt;&lt;code&gt;security-architecture-review&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Threat Modeling (STRIDE + LINDDUN)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;threat-modeling&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SAST&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sast&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SCA reachability &amp;amp; upgrade triage&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sca-reachability&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret scanning (code, git history, Confluence)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;secret-scanning&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prompt review (LLM prompts &amp;amp; agent tools)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;prompt-review&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment readiness&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deployment-readiness&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responsible AI compliance&lt;/td&gt;
&lt;td&gt;&lt;code&gt;responsible-ai-compliance&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Three design choices we'd make again
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. One case file per system.&lt;/strong&gt; Repeat runs are grouped under the same application ID. Findings move between Open and Closed as you rescan, so they don't pile up in a new report each time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Local-first.&lt;/strong&gt; Runs, reports and the dashboard stay on your machine. You don't need an account for your first scan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Honest about what a report can support.&lt;/strong&gt; If a report can't back up a number, the dashboard shows zeros or hatching rather than guessing.&lt;/p&gt;

&lt;h2&gt;
  
  
  No agent CLI? Use an API key (good for CI)
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install "secfoo[api]"
export ANTHROPIC_API_KEY=...   # or OPENAI_API_KEY / GEMINI_API_KEY
secfoo run --skill sast --agent api --target https://github.com/org/repo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The built-in &lt;code&gt;api&lt;/code&gt; agent is a LangGraph workflow routed through LiteLLM. Keys are read from the environment and never stored. It works best on small and medium repos, because the whole target goes in one request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Know what the AI review cost
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;secfoo cost                 # by agent&lt;br&gt;
secfoo cost --by skill --since 2026-09-01&lt;br&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Try it and tell us what breaks&lt;br&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/secfoo-com/secfoo" rel="noopener noreferrer"&gt;https://github.com/secfoo-com/secfoo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Docs &amp;amp; install: &lt;a href="https://www.secfoo.com" rel="noopener noreferrer"&gt;https://www.secfoo.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Contributing: see CONTRIBUTING.md. Security issues go through SECURITY.md.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We'd especially value feedback on the skill format. If you write a skill for an activity we don't cover yet, open a PR.&lt;/p&gt;

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