<?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: OneCLI</title>
    <description>The latest articles on DEV Community by OneCLI (@onecli).</description>
    <link>https://dev.to/onecli</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%2Forganization%2Fprofile_image%2F12716%2F5abff5ab-d101-425b-ad9e-349b305b972a.png</url>
      <title>DEV Community: OneCLI</title>
      <link>https://dev.to/onecli</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/onecli"/>
    <language>en</language>
    <item>
      <title>Your AI Agent Has Your Stripe Key. What Could Go Wrong?</title>
      <dc:creator>Jonathan Fishner</dc:creator>
      <pubDate>Mon, 16 Mar 2026 12:18:26 +0000</pubDate>
      <link>https://dev.to/onecli/your-ai-agent-has-your-stripe-key-what-could-go-wrong-4dhm</link>
      <guid>https://dev.to/onecli/your-ai-agent-has-your-stripe-key-what-could-go-wrong-4dhm</guid>
      <description>&lt;p&gt;Last month, a developer on our team ran a coding agent to "refactor the billing module." The agent had access to &lt;code&gt;STRIPE_SECRET_KEY&lt;/code&gt; through an &lt;code&gt;.env&lt;/code&gt; file. It worked perfectly. Until we checked the logs.&lt;/p&gt;

&lt;p&gt;The agent had made 14 API calls to Stripe. Twelve were legitimate test calls. Two were live &lt;code&gt;charges.create&lt;/code&gt; requests that the agent hallucinated into existence while "testing edge cases."&lt;/p&gt;

&lt;p&gt;Total damage: $0 (caught it in sandbox). Total cold sweat: immeasurable.&lt;/p&gt;

&lt;p&gt;This is the new reality. &lt;strong&gt;AI agents need API access to be useful. But giving them raw keys is playing Russian roulette with your infrastructure.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;Every AI agent framework (OpenClaw, NanoClaw, IronClaw, LangChain, you name it) handles credentials the same way: environment variables or config files.&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;# The state of AI agent security in 2026&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;STRIPE_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;sk_live_abc123
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AWS_SECRET_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;AKIA...
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;OPENAI_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;sk-proj-...
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ghp_...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your agent sees all of these. In plaintext. All the time.&lt;/p&gt;

&lt;p&gt;Now consider what happens when:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prompt injection&lt;/strong&gt; tricks the agent into exfiltrating keys (proven attack vector, see &lt;a href="https://owasp.org/www-project-top-10-for-large-language-model-applications/" rel="noopener noreferrer"&gt;OWASP Top 10 for LLMs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent hallucination&lt;/strong&gt; causes it to call the wrong endpoint with the wrong key&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A junior dev&lt;/strong&gt; spins up an agent with production credentials because "it was faster"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You need to revoke access&lt;/strong&gt; for one agent but the key is hardcoded in 6 places&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This isn't theoretical. The &lt;a href="https://www.helpnetsecurity.com/2026/02/12/1password-security-comprehension-awareness-measure-scam-ai-benchmark/" rel="noopener noreferrer"&gt;1Password SCAM benchmark&lt;/a&gt; showed that AI agents routinely fail basic credential hygiene tests.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fix: Never Give Agents Real Keys
&lt;/h2&gt;

&lt;p&gt;We built &lt;a href="https://github.com/onecli/onecli" rel="noopener noreferrer"&gt;OneCLI&lt;/a&gt;, an open-source credential vault that sits between your agents and the APIs they call.&lt;/p&gt;

&lt;p&gt;The idea is stupid simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Store real credentials in OneCLI&lt;/strong&gt; (AES-256-GCM encrypted, decrypted only at request time)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Give agents a proxy URL&lt;/strong&gt; (&lt;code&gt;HTTPS_PROXY=localhost:10255&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agents make normal HTTP calls&lt;/strong&gt;. OneCLI intercepts, matches the destination, injects the real credential, forwards the request&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The agent never sees a real key. Ever.&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;# Before: agent has raw keys&lt;/span&gt;
curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer sk_live_abc123"&lt;/span&gt; https://api.stripe.com/v1/charges

&lt;span class="c"&gt;# After: agent talks through OneCLI, real key injected transparently&lt;/span&gt;
&lt;span class="nv"&gt;HTTPS_PROXY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;localhost:10255 curl https://api.stripe.com/v1/charges
&lt;span class="c"&gt;# OneCLI matches api.stripe.com → injects your Stripe key automatically&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What This Actually Looks Like
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Start OneCLI (one command)&lt;/span&gt;
docker compose &lt;span class="nt"&gt;-f&lt;/span&gt; docker/docker-compose.yml up

&lt;span class="c"&gt;# 2. Add your Stripe key via the dashboard (localhost:10254)&lt;/span&gt;
&lt;span class="c"&gt;#    Set host pattern: api.stripe.com&lt;/span&gt;
&lt;span class="c"&gt;#    Set path pattern: /v1/*&lt;/span&gt;

&lt;span class="c"&gt;# 3. Create an agent access token&lt;/span&gt;
&lt;span class="c"&gt;#    Scope it to only Stripe endpoints&lt;/span&gt;

&lt;span class="c"&gt;# 4. Point your agent at the proxy&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;HTTPS_PROXY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://localhost:10255
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;HTTP_PROXY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://localhost:10255
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Your agent makes normal HTTP calls. OneCLI handles the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  "But This Isn't New, Just Use a Reverse Proxy"
&lt;/h2&gt;

&lt;p&gt;Fair criticism (we got this on &lt;a href="https://news.ycombinator.com/item?id=47353558" rel="noopener noreferrer"&gt;our Hacker News launch&lt;/a&gt;). Here's what makes this different from nginx + env vars:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Reverse Proxy&lt;/th&gt;
&lt;th&gt;OneCLI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Per-agent access tokens&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Credential never in agent memory&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Host+path pattern matching&lt;/td&gt;
&lt;td&gt;Manual config&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audit log (which agent, which API, when)&lt;/td&gt;
&lt;td&gt;DIY&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Revoke one agent without touching others&lt;/td&gt;
&lt;td&gt;Rebuild config&lt;/td&gt;
&lt;td&gt;One click&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Encrypted at rest, decrypted only at request time&lt;/td&gt;
&lt;td&gt;DIY&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The point isn't that proxying is new. The point is that &lt;strong&gt;agent-specific credential management&lt;/strong&gt; is a distinct problem that deserves purpose-built tooling.&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Doesn't Do (Honest Limitations)
&lt;/h2&gt;

&lt;p&gt;Let's be real about what OneCLI can't protect against:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;If an agent has legitimate access to Stripe, it can still create charges.&lt;/strong&gt; OneCLI prevents key exfiltration, not API misuse. For that, you need rate limiting and approval workflows (on our roadmap).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network-level attacks&lt;/strong&gt; that bypass the proxy. You still need proper network isolation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Magic.&lt;/strong&gt; If your agent is fully compromised, no tool saves you. Defense in depth matters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We wrote a longer piece on &lt;a href="https://onecli.sh/blog" rel="noopener noreferrer"&gt;what a credential vault can and can't do&lt;/a&gt; for agent security.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started (2 Minutes)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone and run&lt;/span&gt;
git clone https://github.com/onecli/onecli.git
&lt;span class="nb"&gt;cd &lt;/span&gt;onecli
docker compose &lt;span class="nt"&gt;-f&lt;/span&gt; docker/docker-compose.yml up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or install the CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; onecli.sh/install | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dashboard at &lt;code&gt;localhost:10254&lt;/code&gt;. Gateway at &lt;code&gt;localhost:10255&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers
&lt;/h2&gt;

&lt;p&gt;We launched on Hacker News 4 days ago and hit the front page:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;680+ GitHub stars&lt;/strong&gt; in the first week&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;160+ HN points&lt;/strong&gt;, 50+ comments&lt;/li&gt;
&lt;li&gt;Used in production by teams running OpenClaw and NanoClaw agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The repo is fully open source (Apache 2.0), written in Rust (gateway) + TypeScript (dashboard), and deploys with a single Docker command.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/onecli/onecli" rel="noopener noreferrer"&gt;Star us on GitHub&lt;/a&gt;&lt;/strong&gt; if this is a problem you've hit. We're actively building based on community feedback.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What's your current approach to managing credentials across AI agents? Drop a comment, genuinely curious how others are solving this.&lt;/em&gt;&lt;/p&gt;




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