<?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: dani.wam 🏴‍☠️ ⓦ</title>
    <description>The latest articles on DEV Community by dani.wam 🏴‍☠️ ⓦ (@dani_wam).</description>
    <link>https://dev.to/dani_wam</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%2F3828148%2F970765db-189e-4386-8a14-6f2ad0115fa1.jpg</url>
      <title>DEV Community: dani.wam 🏴‍☠️ ⓦ</title>
      <link>https://dev.to/dani_wam</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dani_wam"/>
    <language>en</language>
    <item>
      <title>Every AI coding agent you use has already read your production secrets.</title>
      <dc:creator>dani.wam 🏴‍☠️ ⓦ</dc:creator>
      <pubDate>Wed, 18 Mar 2026 13:40:54 +0000</pubDate>
      <link>https://dev.to/dani_wam/every-ai-coding-agent-you-use-has-already-read-your-production-secrets-50jd</link>
      <guid>https://dev.to/dani_wam/every-ai-coding-agent-you-use-has-already-read-your-production-secrets-50jd</guid>
      <description>&lt;p&gt;Not might have. Has.&lt;/p&gt;

&lt;p&gt;If you've given any AI coding tool access to your filesystem — Cursor, Claude Code, Copilot, Codex, Windsurf — it has read your .env file. The one with your real Stripe live key. Your production database URL with actual credentials. Your AWS secret key. Your JWT signing secret.&lt;/p&gt;

&lt;p&gt;It read them because that's what it does. AI agents scan your project directory to understand your codebase. Every file is context. .env is just another file.&lt;/p&gt;

&lt;p&gt;This isn't a bug. It's the feature.&lt;/p&gt;

&lt;p&gt;The agent didn't exploit a vulnerability. You gave it file access because without it, the agent is useless. It can't understand your code without reading your project. And your project includes .env.&lt;br&gt;
So your STRIPE_SECRET_KEY=sk_live_4eC39HqLyjWDarjtT1zdp7dc got scooped up as context, packaged into an API request, and sent over the wire to the AI provider's servers. It's in their logs now. Maybe in their caches. You have no idea how long it persists or who has access to it on their end.&lt;/p&gt;

&lt;p&gt;And this happens on every prompt. Every time you ask the agent a question, every time it re-indexes your project, every time it builds context for a response — your secrets go over the wire again.&lt;br&gt;
The damage is real and permanent&lt;/p&gt;

&lt;p&gt;A leaked sk_live_ Stripe key can process charges on your account. A leaked database URL gives direct access to user data — names, emails, payment info. A leaked AWS key can spin up resources on your bill or access S3 buckets with customer files.&lt;/p&gt;

&lt;p&gt;And if you're in crypto — if your .env has private keys, wallet mnemonics, or RPC endpoints with auth tokens — a leak means irreversible loss of funds. No chargebacks. No customer support. &lt;br&gt;
Gone.&lt;/p&gt;

&lt;p&gt;By the time you notice and rotate the key, the window has been open for weeks. Maybe months. You don't even know when the first read happened.&lt;/p&gt;

&lt;p&gt;Everything you think protects you doesn't&lt;br&gt;
".gitignore protects my .env" — .gitignore prevents git commits. AI agents don't read through git. They read from your filesystem. cat .env works regardless of .gitignore.&lt;br&gt;
"I use a secret manager" — Vault, Infisical, Doppler protect production infrastructure. Locally, your app still needs process.env.STRIPE_KEY to run. The secret manager pulls the real value down to your machine. Now it's in a .env file on disk. Agent reads it.&lt;/p&gt;

&lt;p&gt;"I run the agent in a sandbox" — If the agent can't read your files, it can't help you code. The sandbox kills the productivity gain that's the entire reason you're using AI.&lt;/p&gt;

&lt;p&gt;"The AI provider says they don't use my data for training" — Maybe. But your secrets still sit in context windows, in API logs, in cache layers, on infrastructure you don't control. "We don't train on it" doesn't mean "it doesn't exist on our servers."&lt;/p&gt;

&lt;p&gt;Nothing in the current toolchain addresses this. Your production servers have layers of security. Your laptop — where you actually write code every day — has none.&lt;/p&gt;

&lt;p&gt;Cloak: make the .env file itself the defense&lt;br&gt;
I kept looking for a tool that solves this. Nothing existed. So I built one.&lt;/p&gt;

&lt;p&gt;Cloak does something simple: your .env file on disk always contains fake credentials. Not REDACTED — that breaks your code. Structurally valid fakes that look right and work with your linters and parsers:&lt;/p&gt;

&lt;h2&gt;
  
  
  What agents read from disk:
&lt;/h2&gt;

&lt;p&gt;STRIPE_SECRET_KEY=sk_test_cloak_sandbox_000000000000&lt;br&gt;
DATABASE_URL=postgres://dev:dev@localhost:5432/devdb&lt;br&gt;
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE&lt;/p&gt;

&lt;p&gt;The agent reads these, understands your code structure, writes perfectly valid code against them. It doesn't know they're fake. It doesn't need to know.&lt;/p&gt;

&lt;p&gt;When YOU open .env in VS Code or Cursor, the Cloak extension decrypts your vault and shows the real values. You edit normally. You save — the extension encrypts to the vault and writes fakes back to disk.&lt;br&gt;
When your app needs to run, cloak run npm start injects real environment variables — gated behind Touch ID on Mac or a password on Linux/Windows. An AI agent can't provide a fingerprint. An AI agent can't type a password into an interactive prompt. That's the boundary.&lt;/p&gt;

&lt;p&gt;The recovery question&lt;br&gt;
"What if I lose access to my vault?"&lt;br&gt;
During setup, Cloak shows you a recovery key — CLOAK-8f2a-b9c1-d4e5-f6a7-b8c9-d0e1. You save it in your password manager or write it on paper. If your system keychain gets wiped, this key restores everything.&lt;br&gt;
No plaintext backup files sitting on disk for agents to find. The recovery key exists in your brain or your 1Password. An AI agent can't read either.&lt;br&gt;
What this means for you right now&lt;br&gt;
Your .env file is exposed. Today. Right now. Every AI agent you've used has already read it.&lt;br&gt;
You can fix this in 10 seconds:&lt;br&gt;
bash&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;curl -fsSL https://getcloak.dev/install.sh | sh&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Protect
&lt;/h2&gt;

&lt;p&gt;cloak init&lt;br&gt;
Or install the VS Code / Cursor extension — it detects unprotected .env files automatically and walks you through protection with one click.&lt;br&gt;
Open source. MIT licensed. Zero cloud. Zero AI inside the tool. Your secrets never leave your machine.&lt;br&gt;
getcloak.dev&lt;/p&gt;

&lt;p&gt;I'm Dani — I've been building gaming and blockchain companies since 2007, focused on agentic first gaming with crypto rails. I built Cloak because my own .env files had wallet keys and payment credentials that AI agents were reading every day. Find me on X as &lt;a class="mentioned-user" href="https://dev.to/dani_wam"&gt;@dani_wam&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I spent 17 years building gaming platforms. Every morning I still fought my local dev environment</title>
      <dc:creator>dani.wam 🏴‍☠️ ⓦ</dc:creator>
      <pubDate>Mon, 16 Mar 2026 21:52:13 +0000</pubDate>
      <link>https://dev.to/dani_wam/i-spent-17-years-building-gaming-platforms-every-morning-i-still-fought-my-local-dev-environment-4nk6</link>
      <guid>https://dev.to/dani_wam/i-spent-17-years-building-gaming-platforms-every-morning-i-still-fought-my-local-dev-environment-4nk6</guid>
      <description>&lt;p&gt;I've been building gaming startups since 2007. Shipped over 8000 games across four companies. Built infrastructure that handled millions of users.&lt;/p&gt;

&lt;p&gt;And every single morning, I opened 6 terminal tabs (when lucky), typed the same start commands, forgot which port was which, got "address already in use" because yesterday's processes didn't die, and spent 10 minutes unfucking my setup before writing a single line of code.&lt;/p&gt;

&lt;h2&gt;
  
  
  The breaking point
&lt;/h2&gt;

&lt;p&gt;Last month I needed to work on three projects simultaneously. WAM's API and frontend, the backend, ai endpoints and testing tools. That's 7 services across 3 projects.&lt;/p&gt;

&lt;p&gt;My setup: MAMP Pro ($100/year) for some of it, manually edited nginx configs for the rest, mkcert for SSL because one project needed HTTPS callbacks, and a sticky note on my monitor with port numbers.&lt;/p&gt;

&lt;p&gt;MAMP crashed. Again. nginx was hanging. Again. I killed it, restarted, realized it was still holding port 443, ran &lt;code&gt;lsof -i :443&lt;/code&gt;, found a zombie process from three days ago, killed that too.&lt;/p&gt;

&lt;p&gt;I looked at the clock. 25 minutes gone. Haven't written a single line of code.&lt;/p&gt;

&lt;p&gt;That was the last time. Nail to the coffin moment.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://getrun.dev" rel="noopener noreferrer"&gt;run.dev&lt;/a&gt; — a terminal tool that does one thing: makes your local dev environment not suck.&lt;/p&gt;

&lt;p&gt;You point it at a folder. It scans for &lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;Cargo.toml&lt;/code&gt;, &lt;code&gt;go.mod&lt;/code&gt;, whatever's there. It figures out your services, suggests start commands, assigns ports. You get local domains with HTTPS. Everything shows up in one dashboard.&lt;/p&gt;

&lt;p&gt;That's it. No Docker. No config files. No YAML. No accounts. No cloud. One binary.&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; https://getrun.dev/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The part that makes people screenshot their terminal
&lt;/h2&gt;

&lt;p&gt;When something crashes, instead of a stack trace, you get:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;💀 bro, api is ded. port 4000 is already taken.
   i know what's wrong. press [f] to fix it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🤒 got the flu — backend can't reach localhost:6379.
   is redis running? press [s] on it to start it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The dashboard shows moods based on your stack's health:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;😎 &lt;strong&gt;vibing&lt;/strong&gt; — everything green&lt;/li&gt;
&lt;li&gt;🤒 &lt;strong&gt;got the flu&lt;/strong&gt; — something's down&lt;/li&gt;
&lt;li&gt;💀 &lt;strong&gt;flatlined&lt;/strong&gt; — everything is down&lt;/li&gt;
&lt;li&gt;😮‍💨 &lt;strong&gt;close call&lt;/strong&gt; — just auto-recovered&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I didn't plan for this to be the feature that people care about most. But it turns out developers really like it when their tools talk to them like a human instead of vomiting error codes.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it actually works (the interesting parts)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The reverse proxy&lt;/strong&gt; uses SNI-based routing. When a TLS connection comes in, the tool reads the hostname from the ClientHello before the HTTP request arrives, picks the right certificate, and routes to the right port. All in Rust, using rustls. No nginx, no Caddy, no config files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SSL certificates&lt;/strong&gt; are generated in pure Rust with rcgen. On first run, it creates a local CA, adds it to your system trust store, and signs certs for each local domain on the fly. Zero external dependencies. You get green padlock in the browser without installing anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Process management&lt;/strong&gt; handles the thing that drives everyone insane: zombie processes. When you stop a service, it doesn't just kill the parent PID — it kills the entire process group. &lt;code&gt;npm run dev&lt;/code&gt; spawns node, which spawns webpack, which spawns watchers. You need to kill the whole tree. Then it verifies the port is actually free before reporting "stopped." Because TIME_WAIT is real.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Crash detection&lt;/strong&gt; parses stderr against common patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;EADDRINUSE&lt;/code&gt; → find and kill the PID holding the port&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Cannot find module&lt;/code&gt; → suggest npm install&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ECONNREFUSED&lt;/code&gt; → cross-reference against your other services&lt;/li&gt;
&lt;li&gt;Unknown errors → optionally send to Claude Code for deeper diagnosis&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The AI part (and why it's optional)
&lt;/h2&gt;

&lt;p&gt;I integrated Claude Code as the diagnostic brain. When the template-based error matching can't figure out what happened, Claude reads the stderr and explains it in plain English.&lt;/p&gt;

&lt;p&gt;But here's the thing — it's optional. Disabled by default. Works perfectly without it. I use AI tools daily (I'm literally building AI-native companies), but I hate when tools force an AI dependency that isn't needed.&lt;/p&gt;

&lt;p&gt;90% of crashes are the same 5 problems. A regex handles those fine. Claude is there for the 10% that are actually weird.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I open sourced it
&lt;/h2&gt;

&lt;p&gt;I've been in the startup game long enough to know the difference between a product and a tool. This is a tool. It solves a problem that every developer has. The value isn't in keeping it proprietary — it's in getting it into as many hands as possible.&lt;/p&gt;

&lt;p&gt;MIT licensed. Single Rust binary. &lt;a href="https://github.com/danieltamas/run.dev" rel="noopener noreferrer"&gt;Source on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you've ever wasted 20 minutes fighting your local dev environment before your first coffee, give it a try. Takes 30 seconds to install, and you'll know immediately if it's for you.&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; https://getrun.dev/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;em&gt;I'm Dani — I build gaming and blockchain companies (&lt;a href="https://wam.app" rel="noopener noreferrer"&gt;WAM&lt;/a&gt;. I'm on X as &lt;a href="https://x.com/dani_wam" rel="noopener noreferrer"&gt;@dani_wam&lt;/a&gt; if you want to talk about dev tools, gaming, or AI agents.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cli</category>
      <category>node</category>
      <category>rust</category>
    </item>
  </channel>
</rss>
