<?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 Bridges</title>
    <description>The latest articles on DEV Community by James Bridges (@james_bridges_5511048e2cf).</description>
    <link>https://dev.to/james_bridges_5511048e2cf</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%2F3910439%2Fe453d006-c0cc-45c4-9860-ae784120ae65.jpg</url>
      <title>DEV Community: James Bridges</title>
      <link>https://dev.to/james_bridges_5511048e2cf</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/james_bridges_5511048e2cf"/>
    <language>en</language>
    <item>
      <title>I Built an AI Agent Risk Auditor for Agentic Repositories</title>
      <dc:creator>James Bridges</dc:creator>
      <pubDate>Sun, 17 May 2026 00:53:07 +0000</pubDate>
      <link>https://dev.to/james_bridges_5511048e2cf/i-built-an-ai-agent-risk-auditor-for-agentic-repositories-4hli</link>
      <guid>https://dev.to/james_bridges_5511048e2cf/i-built-an-ai-agent-risk-auditor-for-agentic-repositories-4hli</guid>
      <description>&lt;p&gt;&lt;strong&gt;GitHub repo:&lt;/strong&gt; &lt;a href="https://github.com/jbridges82/hermes-guard" rel="noopener noreferrer"&gt;https://github.com/jbridges82/hermes-guard&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://hermes-guard.vercel.app" rel="noopener noreferrer"&gt;https://hermes-guard.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9e1q91rd8wkae281x6er.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9e1q91rd8wkae281x6er.png" alt="Hermes Guard dashboard overview" width="800" height="611"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;Hermes Guard&lt;/strong&gt;, a local-first risk auditor for repositories touched by AI agents.&lt;/p&gt;

&lt;p&gt;The core question behind the project is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As AI agents start touching real repositories, who audits the agents?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hermes Guard scans a local repository for risky AI-agent automation patterns and produces evidence-backed Markdown and JSON reports. It also includes a polished React/Vite dashboard for reviewing the scan results.&lt;/p&gt;

&lt;p&gt;The MVP focuses on the repo-level files that often shape agent behavior:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;AGENTS.md&lt;/code&gt; instructions.&lt;/li&gt;
&lt;li&gt;Prompt files.&lt;/li&gt;
&lt;li&gt;GitHub Actions workflows.&lt;/li&gt;
&lt;li&gt;MCP server and tool permission config.&lt;/li&gt;
&lt;li&gt;Shell scripts that run agent-generated commands.&lt;/li&gt;
&lt;li&gt;Example environment files that normalize unsafe secret handling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That means Hermes Guard is not trying to inspect only application logic. It is looking at the automation layer around the agent.&lt;/p&gt;

&lt;p&gt;For example:&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;approval_mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;none&lt;/span&gt;
&lt;span class="na"&gt;allow&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;*"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those two lines are not an application bug. They are an automation risk. They tell a reviewer something important about the repo's agent posture.&lt;/p&gt;

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

&lt;p&gt;Live demo: &lt;a href="https://hermes-guard.vercel.app" rel="noopener noreferrer"&gt;https://hermes-guard.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The dashboard presents the scan as a security review workspace:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A left panel for the scanned repo tree.&lt;/li&gt;
&lt;li&gt;A center panel for Hermes-style activity.&lt;/li&gt;
&lt;li&gt;A main panel for risk posture, severity counts, and finding cards.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgi382i3svrhgbkqs0ry6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgi382i3svrhgbkqs0ry6.png" alt="Hermes Guard risk summary" width="476" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2osu1mq5f4f47v0c8ppl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2osu1mq5f4f47v0c8ppl.png" alt="Hermes Guard finding card" width="476" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The demo repo is intentionally synthetic and safe. It contains fake credentials only, clearly marked as fake placeholders.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;GitHub repo: &lt;a href="https://github.com/jbridges82/hermes-guard" rel="noopener noreferrer"&gt;https://github.com/jbridges82/hermes-guard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The scanner writes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;reports/hermes-guard-report.json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reports/hermes-guard-report.md&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkb7i4vsrxs5augazsmqw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkb7i4vsrxs5augazsmqw.png" alt="Generated Markdown report" width="800" height="867"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A typical finding includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ID and title.&lt;/li&gt;
&lt;li&gt;Severity.&lt;/li&gt;
&lt;li&gt;File path and line number.&lt;/li&gt;
&lt;li&gt;Evidence snippet.&lt;/li&gt;
&lt;li&gt;Why it matters.&lt;/li&gt;
&lt;li&gt;Recommended fix.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That evidence-first design matters. A reviewer should not have to trust the tool. They should be able to verify the finding immediately.&lt;/p&gt;

&lt;h3&gt;
  
  
  My Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;React + Vite frontend.&lt;/li&gt;
&lt;li&gt;Tailwind CSS.&lt;/li&gt;
&lt;li&gt;Node.js scanner logic.&lt;/li&gt;
&lt;li&gt;Rule-based risk engine.&lt;/li&gt;
&lt;li&gt;Local filesystem scanning.&lt;/li&gt;
&lt;li&gt;Markdown and JSON report output.&lt;/li&gt;
&lt;li&gt;Vercel deployment for the dashboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Used Hermes Agent
&lt;/h2&gt;

&lt;p&gt;Hermes Guard is &lt;strong&gt;Hermes-inspired&lt;/strong&gt; and &lt;strong&gt;Hermes-ready&lt;/strong&gt;, but the MVP does not claim live Hermes Agent execution.&lt;/p&gt;

&lt;p&gt;I designed the scanner around the kinds of repository risks that matter when an agentic system can plan, use tools, and touch real code. The project includes a clean adapter boundary at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;scanner/hermesAdapter.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Right now, that adapter clearly reports stub mode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hermes Agent runtime is not connected. Hermes Guard is running deterministic local rules only.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That was intentional. I wanted the submission to stay honest: deterministic local scanning works today, and a future Hermes runtime can connect through the adapter without changing the scanner/reporting pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Safe By Design
&lt;/h2&gt;

&lt;p&gt;Hermes Guard is designed to be safe to run against a repository before any optional agent runtime is connected.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hermes Guard never executes repository code.&lt;/li&gt;
&lt;li&gt;The scanner is read-only: it walks files, reads text, applies deterministic rules, and writes reports.&lt;/li&gt;
&lt;li&gt;The architecture is local-first, so repository contents do not need to leave the developer machine.&lt;/li&gt;
&lt;li&gt;No cloud dependency is required for the MVP.&lt;/li&gt;
&lt;li&gt;The included demo repo contains intentionally fake credentials only.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What It Detects
&lt;/h2&gt;

&lt;p&gt;The current deterministic rule engine looks for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fake or exposed API-key-like strings.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ignore previous instructions&lt;/code&gt; prompt-injection text.&lt;/li&gt;
&lt;li&gt;Unrestricted shell execution.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;approval_mode: none&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;allow: "*"&lt;/code&gt; wildcard access.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;curl&lt;/code&gt; or &lt;code&gt;wget&lt;/code&gt; piped into a shell.&lt;/li&gt;
&lt;li&gt;GitHub Actions secrets used with broad agent automation.&lt;/li&gt;
&lt;li&gt;MCP or tool permission config that appears overly broad.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The interesting part of this project was not writing regular expressions. It was deciding what an "agentic repository" actually means.&lt;/p&gt;

&lt;p&gt;A repo is no longer just source code. It can also be a set of permissions, prompts, tools, and automation pathways. Once an agent can act on that repo, those files become part of the system's security boundary.&lt;/p&gt;

&lt;p&gt;That boundary needs review.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Would Build Next
&lt;/h2&gt;

&lt;p&gt;The next version of Hermes Guard would add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SARIF output for GitHub code scanning.&lt;/li&gt;
&lt;li&gt;Pull request diff scanning.&lt;/li&gt;
&lt;li&gt;Rule suppressions with reviewer justification.&lt;/li&gt;
&lt;li&gt;Live dashboard wiring to the local scanner output.&lt;/li&gt;
&lt;li&gt;Policy profiles for strict, balanced, and advisory scans.&lt;/li&gt;
&lt;li&gt;Real Hermes Agent integration through the existing adapter once a runtime is available.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;AI agents make repositories more capable. They also make repositories more complex.&lt;/p&gt;

&lt;p&gt;Hermes Guard is a small, local-first step toward making that complexity auditable. It gives developers a way to ask, before the agent acts:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is this repository allowing an AI agent to do?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is the question I think every agentic repo will need to answer.&lt;/p&gt;

</description>
      <category>hermesagentchallenge</category>
      <category>devchallenge</category>
      <category>agents</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
