<?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: nujovich</title>
    <description>The latest articles on DEV Community by nujovich (@nujovich).</description>
    <link>https://dev.to/nujovich</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%2F726755%2F4cdfcc0e-b9af-4a92-91aa-4a8934022623.png</url>
      <title>DEV Community: nujovich</title>
      <link>https://dev.to/nujovich</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nujovich"/>
    <language>en</language>
    <item>
      <title>Tracepath — I Built an AI Agent Audit Middleware in One Weekend</title>
      <dc:creator>nujovich</dc:creator>
      <pubDate>Sun, 12 Jul 2026 20:43:27 +0000</pubDate>
      <link>https://dev.to/nujovich/tracepath-i-built-an-ai-agent-audit-middleware-in-one-weekend-foi</link>
      <guid>https://dev.to/nujovich/tracepath-i-built-an-ai-agent-audit-middleware-in-one-weekend-foi</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-07-09"&gt;Weekend Challenge: Passion Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Tracepath&lt;/strong&gt; is an open-source middleware that makes any AI agent — LangChain, CrewAI, AutoGen, or your own — &lt;strong&gt;auditable, traceable, and compliant&lt;/strong&gt; with regulations like the EU AI Act and FINRA.&lt;/p&gt;

&lt;p&gt;It's a full audit stack you can spin up with a single &lt;code&gt;docker compose up&lt;/code&gt;. Every tool call your agent makes gets intercepted, signed with Ed25519, checked against OPA policies, stored in an immutable WORM log, and monitored in real-time for anomalies.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Can you audit what your agents did yesterday?"&lt;/strong&gt; — Tracepath answers that.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The dashboard in one screenshot
&lt;/h3&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffzd41i3y48ka75diy3xf.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffzd41i3y48ka75diy3xf.png" alt=" " width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Five tabs: &lt;strong&gt;Audit&lt;/strong&gt; (event trail), &lt;strong&gt;Incidents&lt;/strong&gt; (real-time detection), &lt;strong&gt;Policies&lt;/strong&gt; (versioned OPA rules with diff &amp;amp; rollback), &lt;strong&gt;Reports&lt;/strong&gt; (FINRA &amp;amp; EU AI Act compliance), and &lt;strong&gt;Gemini&lt;/strong&gt; (semantic incident classification).&lt;/p&gt;




&lt;h2&gt;
  
  
  🤍 The Passion Behind It
&lt;/h2&gt;

&lt;p&gt;I didn't start in AI. I started in &lt;strong&gt;security&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When I began working in tech, I specialized in web application security — OWASP Top 10, XSS, CSRF, DoS attacks. I spent years thinking about how to &lt;strong&gt;control&lt;/strong&gt; what applications do, how to prevent them from being abused, how to draw a boundary between "allowed" and "denied."&lt;/p&gt;

&lt;p&gt;Then AI happened. And I fell in love with building agents — autonomous systems that can reason, use tools, and make decisions. But the security part of my brain wouldn't shut up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;How do you know what your agent did yesterday?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;What if it calls a tool it shouldn't?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;What if it burns through your budget?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;How do you prove compliance to a regulator?&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;That's the passion.&lt;/strong&gt; Marrying the two halves of my career: the security engineer who says "trust nothing, verify everything" and the AI builder who wants agents to be powerful and autonomous.&lt;/p&gt;

&lt;p&gt;The EU AI Act was the spark. When I read Article 50 — the requirement for high-risk AI systems to maintain logs and enable human oversight — I realized: &lt;em&gt;this is exactly what I spent years doing for web apps, but nobody's built it for AI agents yet.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So I built it. In one weekend. Because that's what passion does — it makes you forget to sleep.&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Watch the 1-minute walkthrough
&lt;/h3&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/2Fgu9_iPvJI"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Quick tour of all five dashboard tabs: Audit, Incidents, Policies, Reports, and Gemini.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  One command to start
&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/nujovich/tracepath.git
&lt;span class="nb"&gt;cd &lt;/span&gt;tracepath/docker
&lt;span class="nv"&gt;AUDIT_SIGNING_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;openssl rand &lt;span class="nt"&gt;-hex&lt;/span&gt; 32&lt;span class="si"&gt;)&lt;/span&gt; docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then open &lt;code&gt;http://localhost:3000&lt;/code&gt;. You'll see:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tab&lt;/th&gt;
&lt;th&gt;What it shows&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Every tool call signed, policy-checked, stored in PostgreSQL + MinIO WORM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Incidents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time detection: denial spikes, budget overruns, suspicious patterns, rate limit breaches&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Policies&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Git-based OPA versioning with visual diff and one-click rollback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reports&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;One-click FINRA and EU AI Act compliance reports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gemini&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Gemini 2.5 Flash classifying incidents — "this is a misconfiguration, not an attack"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  What happens when you send audit events
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:9001/audit/step &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "session_id":"demo","agent_id":"researcher","agent_type":"researcher",
    "step_number":1,"tool_name":"web_search",
    "tool_input":{"q":"EU AI Act Article 50"},
    "tool_output":{"results":3},"cost_cents":5,
    "timestamp":"2026-07-12T12:00:00Z"
  }'&lt;/span&gt;
&lt;span class="c"&gt;# → {"status":"recorded","signature":"&amp;lt;ed25519&amp;gt;","policy_decision":{"allowed":true,"denials":[]}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Every event is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Signed&lt;/strong&gt; with Ed25519 (cryptographic non-repudiation)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Checked&lt;/strong&gt; against OPA WASM policies (allowlist, budget, rate limit) in &amp;lt;1ms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stored&lt;/strong&gt; in PostgreSQL (queryable) + MinIO S3 Object Lock (WORM, 365 days)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streamed&lt;/strong&gt; via NATS JetStream to the incident detector&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Classified&lt;/strong&gt; by Gemini 2.5 Flash for semantic severity refinement&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  Code
&lt;/h2&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/nujovich" rel="noopener noreferrer"&gt;
        nujovich
      &lt;/a&gt; / &lt;a href="https://github.com/nujovich/tracepath" rel="noopener noreferrer"&gt;
        tracepath
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Agent Audit Stack — auditable multi-step AI agent middleware. Audit Gateway + Incident Response + Policy Evolution.
    &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;Tracepath&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Auditable multi-agent middleware for AI governance.&lt;/strong&gt; Make any agent framework (LangChain, CrewAI, AutoGen, LangGraph) compliant with EU AI Act, FINRA, and SOC2 — in a single &lt;code&gt;docker compose up&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Can you audit what your agents did yesterday?"&lt;/em&gt;
Tracepath answers that with immutable Ed25519-signed logs, real-time policy enforcement, and a compliance dashboard.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;🏆 &lt;strong&gt;Submitted to &lt;a href="https://dev.to/challenges/weekend-2026-07-09" rel="nofollow"&gt;DEV Weekend Challenge: Passion Edition&lt;/a&gt;&lt;/strong&gt; — Best Use of Google AI category&lt;/p&gt;
&lt;/blockquote&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Table of Contents&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/nujovich/tracepath#quickstart" rel="noopener noreferrer"&gt;Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nujovich/tracepath#what-tracepath-does" rel="noopener noreferrer"&gt;What Tracepath Does&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nujovich/tracepath#architecture" rel="noopener noreferrer"&gt;Architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nujovich/tracepath#dashboard" rel="noopener noreferrer"&gt;Dashboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nujovich/tracepath#api-reference" rel="noopener noreferrer"&gt;API Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nujovich/tracepath#python-sdk" rel="noopener noreferrer"&gt;Python SDK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nujovich/tracepath#policy-engine" rel="noopener noreferrer"&gt;Policy Engine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nujovich/tracepath#incident-detection" rel="noopener noreferrer"&gt;Incident Detection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nujovich/tracepath#gemini-semantic-classifier" rel="noopener noreferrer"&gt;Gemini Semantic Classifier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nujovich/tracepath#compliance-reports" rel="noopener noreferrer"&gt;Compliance Reports&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nujovich/tracepath#observability" rel="noopener noreferrer"&gt;Observability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nujovich/tracepath#roadmap" rel="noopener noreferrer"&gt;Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nujovich/tracepath#license" rel="noopener noreferrer"&gt;License&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quickstart&lt;/h2&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Prerequisites&lt;/h3&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Docker + Docker Compose&lt;/li&gt;
&lt;li&gt;Python 3.10+ (for SDK)&lt;/li&gt;
&lt;li&gt;Rust 1.80+ (for gateway development)&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;1. Start the stack&lt;/h3&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;git clone https://github.com/nujovich/tracepath.git
&lt;span class="pl-c1"&gt;cd&lt;/span&gt; tracepath/docker
AUDIT_SIGNING_KEY=&lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;$(&lt;/span&gt;openssl rand -hex 32&lt;span class="pl-pds"&gt;)&lt;/span&gt;&lt;/span&gt; docker compose up -d&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;2. Open the dashboard&lt;/h3&gt;

&lt;/div&gt;

&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Five tabs: &lt;strong&gt;Audit&lt;/strong&gt;, &lt;strong&gt;Incidents&lt;/strong&gt;, &lt;strong&gt;Policies&lt;/strong&gt;, &lt;strong&gt;Reports&lt;/strong&gt;, and &lt;strong&gt;Gemini&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;3. Record your first&lt;/h3&gt;…&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/nujovich/tracepath" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rust&lt;/strong&gt; (actix-web + OPA WASM + Ed25519) — the audit gateway&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python&lt;/strong&gt; (NATS JetStream + aiohttp + Gemini) — the incident detector&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React&lt;/strong&gt; (TypeScript + Tailwind + shadcn/ui) — the compliance dashboard&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OPA&lt;/strong&gt; (Rego → WASM) — policy engine&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL&lt;/strong&gt; — queryable audit log&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MinIO&lt;/strong&gt; (S3 Object Lock) — WORM storage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NATS JetStream&lt;/strong&gt; — event bus&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Phase 1: Foundation (Saturday morning)
&lt;/h3&gt;

&lt;p&gt;The core pipeline: intercept → sign → check → store. I built the Rust gateway with actix-web, embedded OPA WASM for policy evaluation, and wired Ed25519 signing. PostgreSQL for the queryable audit log, MinIO with S3 Object Lock for immutable WORM storage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 2: Incident Response (Saturday afternoon)
&lt;/h3&gt;

&lt;p&gt;Streamed events from the gateway to NATS JetStream, then built a Python incident detector that watches for four anomaly types: denial spikes, budget overruns, suspicious patterns, and rate limit breaches. All surfaced in a React dashboard with real-time polling.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 3: Policy Evolution (Saturday night)
&lt;/h3&gt;

&lt;p&gt;Implemented git-based policy versioning. Every OPA policy change is a git commit. Built a visual diff viewer and one-click rollback in the dashboard. Added a replay engine that lets you replay historical events against a different policy version to answer: &lt;em&gt;"What would have happened if this policy was active then?"&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 4: Compliance &amp;amp; Gemini (Sunday)
&lt;/h3&gt;

&lt;p&gt;Generated FINRA and EU AI Act compliance reports as HTML. Integrated &lt;strong&gt;Google Gemini 2.5 Flash&lt;/strong&gt; via OpenRouter as a semantic classifier — it takes threshold-triggered incidents and refines their severity by analyzing the context. A denial spike from a misconfigured policy gets downgraded from CRITICAL to WARNING. A real attack stays CRITICAL.&lt;/p&gt;

&lt;p&gt;The Gemini integration caches classifications persistently, so the dashboard shows the reasoning behind every severity decision even between container restarts.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I discovered about the EU AI Act
&lt;/h3&gt;

&lt;p&gt;Article 50 of the EU AI Act requires high-risk AI systems to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automatically record events&lt;/strong&gt; (logs) during operation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable human oversight&lt;/strong&gt; through monitoring and intervention&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ensure traceability&lt;/strong&gt; of AI system decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tracepath implements all three. The FINRA report validates data integrity (Ed25519 signatures), record retention (WORM storage), and access controls (API authentication).&lt;/p&gt;




&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;I'm submitting to &lt;strong&gt;Best Use of Google AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Tracepath uses &lt;strong&gt;Gemini 2.5 Flash&lt;/strong&gt; (via Google AI) as a semantic classifier that refines incident severity. Instead of blindly flagging every threshold breach as CRITICAL, Gemini analyzes the context:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Incident&lt;/th&gt;
&lt;th&gt;Original Severity&lt;/th&gt;
&lt;th&gt;Gemini Reasoning&lt;/th&gt;
&lt;th&gt;Final Severity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;6 &lt;code&gt;image_generate&lt;/code&gt; denials in a session&lt;/td&gt;
&lt;td&gt;CRITICAL&lt;/td&gt;
&lt;td&gt;&lt;em&gt;"All denials were for image generation, suggesting a misconfiguration rather than a malicious attempt"&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;WARNING&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Budget exceeded by 2x in a single session&lt;/td&gt;
&lt;td&gt;WARNING&lt;/td&gt;
&lt;td&gt;&lt;em&gt;"The tools used match a legitimate research workflow with no policy bypass attempts"&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;INFO&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is the difference between a noisy alert system and a useful one — and it's powered by Google AI.&lt;/p&gt;




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

&lt;p&gt;This is a weekend project, but it's not a toy. The roadmap:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Helm chart&lt;/strong&gt; for Kubernetes deployment&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;TypeScript SDK&lt;/strong&gt; with &lt;code&gt;@audit&lt;/code&gt; decorator parity&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;PDF reports&lt;/strong&gt; for FINRA/EU AI Act (currently HTML)&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;SOC2 certification&lt;/strong&gt; readiness package&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;AWS Marketplace&lt;/strong&gt; listing&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Multi-tenant&lt;/strong&gt; dashboard with organization scoping&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Webhook alerts&lt;/strong&gt; for incident notifications (Slack, PagerDuty)&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Custom policy UI&lt;/strong&gt; — write Rego rules directly in the dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;→ &lt;a href="https://github.com/nujovich/tracepath" rel="noopener noreferrer"&gt;Star the repo&lt;/a&gt; to follow along.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with ❤️‍🔥 by &lt;a href="https://github.com/nujovich" rel="noopener noreferrer"&gt;Nadia Ujovich&lt;/a&gt; — a security engineer turned AI builder who still believes the best agents are auditable ones.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>ai</category>
      <category>security</category>
    </item>
    <item>
      <title>A plugin for Observability + Budget Guardrails built with Hermes Agent</title>
      <dc:creator>nujovich</dc:creator>
      <pubDate>Sun, 31 May 2026 16:38:17 +0000</pubDate>
      <link>https://dev.to/nujovich/a-plugin-for-observability-budget-guardrails-built-with-hermes-agent-4b63</link>
      <guid>https://dev.to/nujovich/a-plugin-for-observability-budget-guardrails-built-with-hermes-agent-4b63</guid>
      <description>&lt;p&gt;&lt;strong&gt;Challenge Entry for the &lt;a href="https://dev.to/devteam/join-the-hermes-agent-challenge-1000-in-prizes-13cd"&gt;Hermes Agent Challenge&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 What Problem Does This Solve?
&lt;/h2&gt;

&lt;p&gt;AI agent deployments often suffer from two critical blind spots:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cost visibility&lt;/strong&gt; — you discover a $500 OpenAI bill at the end of the month with no clue which cron jobs or sessions caused it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budget control&lt;/strong&gt; — runaway loops or expensive model choices can drain your account before you notice&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;hermes-telemetry&lt;/strong&gt; solves both by giving you real-time observability and automatic budget enforcement for &lt;a href="https://github.com/NousResearch/hermes-agent" rel="noopener noreferrer"&gt;Hermes Agent&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%2Fj2f9uymub66tw4xm86dn.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%2Fj2f9uymub66tw4xm86dn.png" alt="Hermes Agent" width="800" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Every production AI system needs &lt;strong&gt;observability&lt;/strong&gt; and &lt;strong&gt;cost control&lt;/strong&gt;. This isn't just a nice-to-have — it's essential infrastructure. &lt;/p&gt;

&lt;p&gt;Before this plugin, Hermes users had no way to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track spending per cron job or messaging platform&lt;/li&gt;
&lt;li&gt;Set budget limits that actually pause runaway processes
&lt;/li&gt;
&lt;li&gt;Compare cost efficiency between different models&lt;/li&gt;
&lt;li&gt;Get real-time cost alerts before hitting billing limits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now they can manage their AI spend like a modern SaaS — with dashboards, alerts, and automatic circuit breakers.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Key Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Real Usage Data (Not Estimates)
&lt;/h3&gt;

&lt;p&gt;Captures actual token counts and costs returned by providers like OpenRouter, OpenAI, and Anthropic. No guesswork.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-Level Budget Enforcement
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Soft warnings&lt;/strong&gt; at 80% of budget&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hard tool blocks&lt;/strong&gt; at 100% (prevents new API calls)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cron job pauses&lt;/strong&gt; for automated workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope-specific limits&lt;/strong&gt; (global, per-cron-job, per-platform)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Rich Analytics via Slash Commands
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/stats&lt;/code&gt; — session performance, tool usage, cost breakdowns&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/stats cron week&lt;/code&gt; — cron job cost comparison across time&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/stats providers&lt;/code&gt; — which providers return real vs estimated data&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/budget&lt;/code&gt; — current spending vs limits with visual indicators&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Zero Model Awareness
&lt;/h3&gt;

&lt;p&gt;Pure observability layer — captures everything through hooks without affecting model behavior or adding latency.&lt;/p&gt;

&lt;h2&gt;
  
  
  📊 Screenshots
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Session Analytics (&lt;code&gt;/stats&lt;/code&gt;)
&lt;/h3&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%2Fyxm8e12wknz1rsghi07p.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%2Fyxm8e12wknz1rsghi07p.png" alt="Stats output" width="640" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Budget Status (&lt;code&gt;/budget&lt;/code&gt;)
&lt;/h3&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%2Fm8js8mbvw56chvq11184.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%2Fm8js8mbvw56chvq11184.png" alt="Budget output" width="580" height="160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Cron Job Cost Comparison (&lt;code&gt;/stats cron week&lt;/code&gt;)
&lt;/h3&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%2Flipvgyc7s48s7vvt12zr.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%2Flipvgyc7s48s7vvt12zr.png" alt="Cron output" width="680" height="178"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Provider Analysis (&lt;code&gt;/stats providers&lt;/code&gt;)
&lt;/h3&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%2F3iucq41hvv1ucrjhdab1.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%2F3iucq41hvv1ucrjhdab1.png" alt="Providers output" width="640" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 Proof of Concept: Real Data
&lt;/h2&gt;

&lt;p&gt;I tested the plugin with three different models to validate pricing accuracy and budget enforcement:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Cost per Test Run&lt;/th&gt;
&lt;th&gt;Budget Behavior&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;owl-alpha&lt;/code&gt; (free)&lt;/td&gt;
&lt;td&gt;$0.00&lt;/td&gt;
&lt;td&gt;No limits triggered&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude-sonnet-4-6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.31&lt;/td&gt;
&lt;td&gt;Soft warning at $0.001 limit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude-opus-4-7&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$2.23&lt;/td&gt;
&lt;td&gt;Hard pause enforced ✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Budget enforcement works.&lt;/strong&gt; When I set a $0.001 daily limit and ran a cron job, it correctly paused at $0.18 spending. When I raised the limit to $2.00, jobs resumed normally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real provider data.&lt;/strong&gt; OpenRouter returned actual token counts (Est% = 0%), not estimates. The plugin correctly captured and priced these.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏗️ Technical Implementation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Hook Pipeline Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;on_session_start → pre_api_request → ★ post_api_request → post_tool_call
                                     │
                                     ▼
                               [capture usage]
                                     │
                                     ▼
pre_llm_call (budget check) → pre_tool_call (tool gate) → SQLite storage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Data Layer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SQLite WAL database&lt;/strong&gt; — efficient, local, no external deps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom pricing.yaml&lt;/strong&gt; — override provider rates for accurate cost calculation
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;budget.yaml configuration&lt;/strong&gt; — flexible limits (daily/monthly, global/scoped)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;94 comprehensive tests&lt;/strong&gt; — full coverage of edge cases and enforcement logic&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Provider Compatibility
&lt;/h3&gt;

&lt;p&gt;Works with any provider that follows the Hermes Agent provider interface:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ OpenRouter (tested with real usage data)&lt;/li&gt;
&lt;li&gt;✅ OpenAI (pricing table included)&lt;/li&gt;
&lt;li&gt;✅ Anthropic (pricing table included)
&lt;/li&gt;
&lt;li&gt;✅ Custom providers (via pricing.yaml overrides)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎯 Production Ready
&lt;/h2&gt;

&lt;p&gt;This isn't a demo — it's production infrastructure. The plugin includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Error handling&lt;/strong&gt; — graceful fallbacks when providers return no usage data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hot-reload&lt;/strong&gt; — update budgets via &lt;code&gt;/budget set&lt;/code&gt; without restart
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Concurrent safety&lt;/strong&gt; — SQLite WAL mode handles multiple sessions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory efficiency&lt;/strong&gt; — hook pipeline adds negligible overhead&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comprehensive logging&lt;/strong&gt; — debug telemetry issues with structured logs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Installation &amp;amp; Usage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Install
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.hermes/plugins
git clone https://github.com/nujovich/hermes-telemetry.git
&lt;span class="c"&gt;# Add 'hermes-telemetry' to plugins.enabled in config.yaml&lt;/span&gt;
&lt;span class="c"&gt;# Restart gateway: hermes gateway restart&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Configure Budget (Optional)
&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;# Set daily budget&lt;/span&gt;
hermes&amp;gt; /budget &lt;span class="nb"&gt;set &lt;/span&gt;global daily 5.00

&lt;span class="c"&gt;# Check status  &lt;/span&gt;
hermes&amp;gt; /budget
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Monitor Usage
&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;# Session stats&lt;/span&gt;
hermes&amp;gt; /stats

&lt;span class="c"&gt;# Cron job breakdown&lt;/span&gt;
hermes&amp;gt; /stats cron week

&lt;span class="c"&gt;# Provider analysis&lt;/span&gt;
hermes&amp;gt; /stats providers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. The plugin immediately starts capturing usage data for all sessions and cron jobs.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏆 Why this is a win-win
&lt;/h2&gt;

&lt;p&gt;This plugin solves a &lt;strong&gt;universal need&lt;/strong&gt; in AI systems — cost visibility and control. Every Hermes Agent deployment, from personal automation to enterprise cron jobs, benefits from this infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's not just useful, it's essential.&lt;/strong&gt; Without budget controls, a misconfigured cron job with an expensive model can cost hundreds of dollars overnight. This plugin prevents that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-world tested.&lt;/strong&gt; I built, deployed, and validated this with actual usage data across multiple providers and models. It's not a concept — it's working infrastructure that saves money and provides operational insight.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Community impact.&lt;/strong&gt; This sets a standard for observability in the Hermes ecosystem. Other plugin authors can build on these patterns, and users get immediate operational confidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  📋 Technical Details
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/nujovich/hermes-telemetry" rel="noopener noreferrer"&gt;https://github.com/nujovich/hermes-telemetry&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation:&lt;/strong&gt; Complete README with architecture, configuration, and troubleshooting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests:&lt;/strong&gt; 94 passing tests covering all major functionality&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License:&lt;/strong&gt; MIT&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependencies:&lt;/strong&gt; PyYAML only (for config files)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  👨‍💻 About the Author
&lt;/h2&gt;

&lt;p&gt;I'm &lt;strong&gt;Nadia Ujovich&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I understand the operational challenges of running AI systems at scale, and I built this plugin to solve the observability gap I see in every deployment.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;This plugin makes Hermes Agent production-ready for cost-conscious deployments.&lt;/strong&gt; It's the infrastructure piece that every serious AI system needs, but few teams build themselves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Give your agents the observability they deserve. Try hermes-telemetry today.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Made with ☕ for the Hermes Agent ecosystem&lt;/em&gt;&lt;/p&gt;

</description>
      <category>hermesagentchallenge</category>
      <category>devchallenge</category>
      <category>agents</category>
    </item>
    <item>
      <title>Building an Autonomous MCP Lead Generation System with Hermes Agent</title>
      <dc:creator>nujovich</dc:creator>
      <pubDate>Mon, 25 May 2026 21:43:58 +0000</pubDate>
      <link>https://dev.to/nujovich/building-an-autonomous-mcp-lead-generation-system-with-hermes-agent-gf4</link>
      <guid>https://dev.to/nujovich/building-an-autonomous-mcp-lead-generation-system-with-hermes-agent-gf4</guid>
      <description>&lt;p&gt;How I built a daily research pipeline with Hermes Agent that finds SMEs with legacy APIs, scores them on MCP readiness, and pre-audits their public API surface — all running autonomously on my own infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Finding Companies That Need MCP
&lt;/h2&gt;

&lt;p&gt;MCP (Model Context Protocol) is the emerging standard for connecting legacy APIs, databases, and manual workflows to AI agents. But finding companies that actually &lt;em&gt;need&lt;/em&gt; MCP integration — and that have the budget and readiness to act — is a manual, time-consuming sales process.&lt;/p&gt;

&lt;p&gt;I'm constantly thinking about where to focus my help and services. My problem was simple: **I needed a way to find prospects daily without spending hours on LinkedIn and Reddit.&lt;/p&gt;

&lt;p&gt;Enter Hermes Agent.&lt;/p&gt;

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

&lt;p&gt;A fully autonomous &lt;strong&gt;MCP Lead Generation &amp;amp; Pre-Audit System&lt;/strong&gt; that runs daily on my own infrastructure:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Every day at 10:00 AM&lt;/strong&gt;, Hermes Agent researches LinkedIn, Reddit, GitHub, Product Hunt, and tech blogs looking for SMEs that show signs of systems fragmentation&lt;/li&gt;
&lt;li&gt;It scores each prospect against a &lt;strong&gt;13-point MCP Readiness Checklist&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;For high-scoring prospects, it &lt;strong&gt;pre-audits their public API documentation&lt;/strong&gt; to identify MCP integration opportunities&lt;/li&gt;
&lt;li&gt;It emails me a structured report with company name, contact info, score, and specific MCP tools that could be built&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result is a daily pipeline of warm, pre-vetted leads — each one with a concrete MCP action plan ready to go.&lt;/p&gt;

&lt;h2&gt;
  
  
  The MCP Readiness Checklist
&lt;/h2&gt;

&lt;p&gt;I designed a 13-question scoring system based on four dimensions:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Systems Fragmentation (3 pts)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Uses 5+ SaaS tools that don't talk to each other&lt;/li&gt;
&lt;li&gt;Has proprietary/legacy internal APIs or siloed databases&lt;/li&gt;
&lt;li&gt;Uses Zapier/Make for integrations (bonus if complaining about cost)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Manual Work &amp;amp; Friction (4 pts)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Someone copies/pastes data between systems regularly&lt;/li&gt;
&lt;li&gt;Workflows that "should be automated" but aren't&lt;/li&gt;
&lt;li&gt;Data conflicts between systems&lt;/li&gt;
&lt;li&gt;A "data person" doing undocumented manual magic&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Scale &amp;amp; Growth (3 pts)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Each new client adds manual work hours&lt;/li&gt;
&lt;li&gt;Wants automation but no devs available&lt;/li&gt;
&lt;li&gt;Planning 50%+ growth in the next 12 months&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Budget &amp;amp; Readiness (3 pts)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Already spending €500+/month on SaaS&lt;/li&gt;
&lt;li&gt;Has budget for consulting (€20-40k)&lt;/li&gt;
&lt;li&gt;Has a CTO or VP Ops champion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;8+ points = High priority. 5-7 = Warm. 0-4 = Skip.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How Hermes Agent Runs the Pipeline
&lt;/h2&gt;

&lt;p&gt;The system is a &lt;strong&gt;Hermes Agent cron job&lt;/strong&gt; — a self-contained prompt that the agent executes on schedule. Here's how it works:&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 1: Parallel Research
&lt;/h3&gt;

&lt;p&gt;Hermes Agent launches parallel research tasks across multiple sources:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;delegate_task(tasks=[
  {"goal": "Search LinkedIn for operations managers
            at SMEs mentioning 'tool sprawl'..."},
  {"goal": "Scan Reddit r/SaaS, r/smallbusiness
            for integration pain points..."},
  {"goal": "Check ProductHunt and tech blogs
            for companies with obvious API needs..."},
])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Phase 2: Scoring &amp;amp; Analysis
&lt;/h3&gt;

&lt;p&gt;Each prospect is evaluated against the 13-point checklist. The agent reads company websites, checks their API docs, looks for GitHub repos, and builds a complete profile.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 3: Pre-Audit (The Secret Weapon)
&lt;/h3&gt;

&lt;p&gt;For companies with &lt;strong&gt;public API documentation or GitHub repos&lt;/strong&gt;, the agent performs a deeper analysis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API surface mapping&lt;/strong&gt; — What endpoints exist? Auth model? Data formats?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP tool identification&lt;/strong&gt; — Which endpoints would make good MCP tools?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complexity estimation&lt;/strong&gt; — Easy / Medium / Hard to build MCP wrappers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security considerations&lt;/strong&gt; — What needs attention before building&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This transforms a cold lead into a warm prospect with a &lt;em&gt;concrete MCP proposal&lt;/em&gt; ready to present.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Results: Two Pre-Audited Companies
&lt;/h2&gt;

&lt;p&gt;On its first run, the system found and pre-audited two LATAM tech companies:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Cobre (Fintech, Colombia) — Score: 9/13
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Signal:&lt;/strong&gt; API-first payments platform with fragmented client systems.&lt;/p&gt;

&lt;p&gt;The agent found their API documentation, analyzed ~50 REST endpoints across 18 categories (accounts, payments, FX, checkouts), and identified 5 specific MCP tools that could be built:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cobre_crear_contraparte&lt;/code&gt; — Register beneficiaries by country/rail&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cobre_ejecutar_pago_local&lt;/code&gt; — Execute SPEI/ACH/Bre-B payments&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cobre_crear_cotizacion_fx&lt;/code&gt; — Get FX quotes for cross-border&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cobre_ejecutar_pago_internacional&lt;/code&gt; — Execute international payments&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cobre_consultar_estado_pago&lt;/code&gt; — Track payment status&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key finding:&lt;/strong&gt; Cobre already has an MCP server via Apidog — but a custom MCP server would be more powerful and fill their SDK gap (no Python/Node.js SDKs exist).&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Truora (Identity Verification, Colombia) — Score: 7/13
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Signal:&lt;/strong&gt; API-first identity verification with ~120 endpoints across 5 API families.&lt;/p&gt;

&lt;p&gt;The agent mapped their entire API surface: Checks API (background checks), Digital Identity (document/facial verification), WhatsApp Engagement (chatbots), Business Rules Engine, and Validator Suite. Suggested 5 MCP tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;truora_check_background&lt;/code&gt; — Create background checks per country&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;truora_get_check_result&lt;/code&gt; — Get verification results with scores&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;truora_create_identity_process&lt;/code&gt; — Start digital identity validation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;truora_send_whatsapp_message&lt;/code&gt; — Send WhatsApp via templates&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;truora_list_checks&lt;/code&gt; — Query verification history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key finding:&lt;/strong&gt; Truora only has iOS SDKs — no Python, Node.js, or Go tooling. An MCP server would fill a critical gap in their developer ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&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%2Funwg08dc88eifv9n42nj.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%2Funwg08dc88eifv9n42nj.png" alt="MCP Lead Generation Pipeline Architecture" width="800" height="692"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The heart of the system is a self-contained Hermes Agent cron job prompt. Here's the structure:&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 the cron job&lt;/span&gt;
hermes cron create &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--schedule&lt;/span&gt; &lt;span class="s2"&gt;"0 10 * * *"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--prompt&lt;/span&gt; &lt;span class="s2"&gt;"research prospects..."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The prompt instructs Hermes Agent to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Research&lt;/strong&gt; — Use browser and web tools to find SMEs across LinkedIn, Reddit, GitHub, and blogs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Score&lt;/strong&gt; — Apply the 13-point MCP Readiness Checklist&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre-audit&lt;/strong&gt; — For READY TO AUDIT companies, visit their API docs and GitHub repos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compile&lt;/strong&gt; — Format everything into a structured plain-text report&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deliver&lt;/strong&gt; — Email via &lt;code&gt;himalaya template send&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="no"&gt;MAILDELIM&lt;/span&gt;&lt;span class="sh"&gt;' | himalaya template send
From: me@email.com
To: me@email.com
Subject: 🔌 MCP Prospects — [DATE]

═══════════════════════════════════════
1. AUDIT NOW — Company Name
   🔧 PRE-AUDIT: READY TO AUDIT
   API Docs: https://docs.example.com/
   ...
   🛠️ Suggested MCP tools:
   • tool_name — what it does
═══════════════════════════════════════
&lt;/span&gt;&lt;span class="no"&gt;MAILDELIM
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why Hermes Agent Was the Right Tool
&lt;/h2&gt;

&lt;p&gt;I chose Hermes Agent for three reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Autonomous research&lt;/strong&gt; — The agent can browse, read, analyze, and make decisions without me in the loop. It's not a script — it &lt;em&gt;reasons&lt;/em&gt; about what it finds.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tool ecosystem&lt;/strong&gt; — Hermes Agent's built-in browser, web search, and terminal tools let it navigate real websites, parse API docs, and interact with GitHub — just like a human researcher would.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Self-hosted&lt;/strong&gt; — This runs on my own infrastructure. No API costs, no data leaks to third parties. The prospect data stays mine.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cron jobs&lt;/strong&gt; — The built-in scheduler means the system runs itself. I wake up to a fresh lead report every morning.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;This system is already running daily. My roadmap includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Building the actual MCP servers&lt;/strong&gt; — Taking the pre-audit output and building the MCP servers for the highest-priority prospects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adding more research sources&lt;/strong&gt; — AngelList, Crunchbase, and Y Combinator companies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated outreach&lt;/strong&gt; — Integrating with LinkedIn DM or email to send personalized MCP proposals&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refining the scoring model&lt;/strong&gt; — Learning from which leads convert and adjusting the checklist weights&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;If you're running Hermes Agent, you can build something similar in a few hours:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define your scoring criteria&lt;/li&gt;
&lt;li&gt;Write a research prompt (the agent handles the execution)&lt;/li&gt;
&lt;li&gt;Create a daily cron job&lt;/li&gt;
&lt;li&gt;Sit back and watch the leads roll in&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The hardest part isn't the technology — it's knowing what signals to look for. That's where your domain expertise comes in.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with &lt;a href="https://hermes-agent.nousresearch.com" rel="noopener noreferrer"&gt;Hermes Agent&lt;/a&gt; — the open-source agentic system that runs on your own infrastructure.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;🔗 **Full code and prompts:&lt;/em&gt;* &lt;a href="https://github.com/nujovich/hermes-mcp-lead-gen" rel="noopener noreferrer"&gt;github.com/nujovich/hermes-mcp-lead-gen&lt;/a&gt;*&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Follow me on &lt;a href="https://www.linkedin.com/in/nadiaujovich/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  hermesagentchallenge #devchallenge #agents #mcp #opensource
&lt;/h1&gt;

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