<?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: dzCodes</title>
    <description>The latest articles on DEV Community by dzCodes (@zachyking).</description>
    <link>https://dev.to/zachyking</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%2F4062477%2Fc7901fff-11ea-4262-8361-b26a022c76ab.jpeg</url>
      <title>DEV Community: dzCodes</title>
      <link>https://dev.to/zachyking</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zachyking"/>
    <language>en</language>
    <item>
      <title>I got tired of giving AI agents real secrets, so I built a credential proxy</title>
      <dc:creator>dzCodes</dc:creator>
      <pubDate>Tue, 04 Aug 2026 12:39:35 +0000</pubDate>
      <link>https://dev.to/zachyking/i-got-tired-of-giving-ai-agents-real-secrets-so-i-built-a-credential-proxy-2ac5</link>
      <guid>https://dev.to/zachyking/i-got-tired-of-giving-ai-agents-real-secrets-so-i-built-a-credential-proxy-2ac5</guid>
      <description>&lt;p&gt;Every time I spun up an agent that needed to call GitHub, Stripe, or sign something with a PGP key, I ended up doing the same stupid thing: put the real credential somewhere the agent could read it.&lt;/p&gt;

&lt;p&gt;Then came the inevitable “check the environment” or a log dump or a prompt injection, and the key was gone.&lt;/p&gt;

&lt;p&gt;I wanted the opposite model: the agent should be able to &lt;em&gt;use&lt;/em&gt; a credential without ever &lt;em&gt;seeing&lt;/em&gt; it.&lt;/p&gt;

&lt;p&gt;That’s what Vultrino is.&lt;/p&gt;

&lt;p&gt;You give the agent an alias (“github-api”) and a very limited surface. Vultrino sits in the middle, holds the real secret in an encrypted vault, and does the actual authentication / signing / request. The agent only ever sees the result.&lt;/p&gt;

&lt;p&gt;It speaks MCP natively, supports scoped API keys and single-use tokens, has human-in-the-loop approvals, and is extensible with WASM plugins. There’s also a metered LLM proxy mode so you can point any OpenAI-compatible client at it and keep the real provider key in the vault.&lt;/p&gt;

&lt;p&gt;Tech stack is boring on purpose: Rust, Axum, rustls, AES-256-GCM + Argon2, no OpenSSL.&lt;/p&gt;

&lt;p&gt;This is a relaunch of a much simpler/base earlier version I archived. The current one expanded far from that original. &lt;/p&gt;

&lt;p&gt;If you’re building agents or MCP tools and have run into the same credential problem, I’d love feedback — especially on the security boundaries and the plugin ABI.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/FeirAI/vultrino" rel="noopener noreferrer"&gt;https://github.com/FeirAI/vultrino&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Site: &lt;a href="https://vultrino.com" rel="noopener noreferrer"&gt;https://vultrino.com&lt;/a&gt;&lt;/p&gt;

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