<?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: YUVRAJ</title>
    <description>The latest articles on DEV Community by YUVRAJ (@malgatyuvraj).</description>
    <link>https://dev.to/malgatyuvraj</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%2F3948320%2F82b4a5b7-3679-4f22-97b2-fa461119f4f3.jpg</url>
      <title>DEV Community: YUVRAJ</title>
      <link>https://dev.to/malgatyuvraj</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/malgatyuvraj"/>
    <language>en</language>
    <item>
      <title>7 things you can do with Rogue Studio that no other AI IDE will let you do</title>
      <dc:creator>YUVRAJ</dc:creator>
      <pubDate>Sun, 24 May 2026 17:01:19 +0000</pubDate>
      <link>https://dev.to/malgatyuvraj/7-things-you-can-do-with-rogue-studio-that-no-other-ai-ide-will-let-you-do-330o</link>
      <guid>https://dev.to/malgatyuvraj/7-things-you-can-do-with-rogue-studio-that-no-other-ai-ide-will-let-you-do-330o</guid>
      <description>&lt;p&gt;Most AI coding tools have the same personality.&lt;/p&gt;

&lt;p&gt;Helpful. Cautious. Apologetic.&lt;/p&gt;

&lt;p&gt;"I can't help with that."&lt;br&gt;
"Here's a safer alternative."&lt;br&gt;
"This could be used maliciously, so..."&lt;/p&gt;

&lt;p&gt;Rogue Studio has a different personality.&lt;/p&gt;

&lt;p&gt;It assumes you're a professional. It gives you the &lt;br&gt;
tool. It gets out of your way.&lt;/p&gt;

&lt;p&gt;Here are 7 things you can actually do with it.&lt;/p&gt;


&lt;h2&gt;
  
  
  1. Make two AIs fight over your code until it's secure
&lt;/h2&gt;

&lt;p&gt;This is the feature that started everything.&lt;/p&gt;

&lt;p&gt;You write a prompt. Blue Team agent writes the code. &lt;br&gt;
The moment it's done, Red Team agent takes over and &lt;br&gt;
tries to destroy it — hunting for XSS, SQL injection, &lt;br&gt;
buffer overflows, reentrancy vulnerabilities, SSRF, &lt;br&gt;
path traversal.&lt;/p&gt;

&lt;p&gt;If it finds something, it generates the actual exploit. &lt;br&gt;
Sends it back to Blue Team. Blue Team patches. &lt;br&gt;
Red Team audits again.&lt;/p&gt;

&lt;p&gt;They loop until the code is clean or they hit &lt;br&gt;
3 iterations — whichever comes first.&lt;/p&gt;

&lt;p&gt;You watch it happen in a split terminal. &lt;br&gt;
Blue glow on the left. Red glow on the right. &lt;br&gt;
Real time.&lt;/p&gt;

&lt;p&gt;No other AI IDE does this because it requires &lt;br&gt;
running an agent whose only job is to generate &lt;br&gt;
exploits against your own code. Most tools won't &lt;br&gt;
touch that. Rogue Studio is built around it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use this:&lt;/strong&gt;&lt;br&gt;
Writing anything that handles user input, &lt;br&gt;
processes payments, touches a database, &lt;br&gt;
or will eventually run on the internet.&lt;/p&gt;


&lt;h2&gt;
  
  
  2. Guarantee that zero bytes of your code leave your machine
&lt;/h2&gt;

&lt;p&gt;Flip the Kill Switch.&lt;/p&gt;

&lt;p&gt;That's it. One toggle in the UI and a middleware &lt;br&gt;
layer in the backend instantly blocks every &lt;br&gt;
external AI provider — OpenAI, Anthropic, Gemini, &lt;br&gt;
Groq, DeepSeek, Together, OpenRouter — all of them.&lt;/p&gt;

&lt;p&gt;The enforcement is server-side. Not a UI preference. &lt;br&gt;
Not a setting you have to trust. An actual 403 &lt;br&gt;
wall that fires before any provider initialization &lt;br&gt;
regardless of how the request was constructed.&lt;/p&gt;

&lt;p&gt;The only thing that passes through is Ollama, &lt;br&gt;
talking exclusively to localhost:11434.&lt;/p&gt;

&lt;p&gt;You can read the 8 lines of middleware that make &lt;br&gt;
this guarantee and verify it yourself. That's the &lt;br&gt;
point of open source for this class of tooling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use this:&lt;/strong&gt;&lt;br&gt;
Working on proprietary systems, client code under &lt;br&gt;
NDA, anything in a regulated industry, or any time &lt;br&gt;
you want certainty instead of a privacy policy &lt;br&gt;
you have to trust.&lt;/p&gt;


&lt;h2&gt;
  
  
  3. De-obfuscate malware without getting a lecture
&lt;/h2&gt;

&lt;p&gt;You paste in obfuscated JavaScript. &lt;br&gt;
Something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;_0x3f2a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;charAt&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;charCodeAt&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fromCharCode&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;_0x4b2d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;_0x3f2a&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;_0x1c3e&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;_0x2a1f&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;_0x2a1f&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;&lt;span class="nx"&gt;_0x4b2d&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;push&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;_0x4b2d&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;shift&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]());}};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In most AI tools you'd get: &lt;br&gt;
&lt;em&gt;"I need to be careful here as this code may be malicious..."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In Rogue Studio with Reverse Engineer mode on, &lt;br&gt;
you get the de-obfuscated output, reconstructed &lt;br&gt;
variable names, and a plain English explanation &lt;br&gt;
of what the code does. No preamble. No disclaimer. &lt;br&gt;
Just the analysis.&lt;/p&gt;

&lt;p&gt;It also handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compiled WASM → reconstructed human-readable logic&lt;/li&gt;
&lt;li&gt;Minified production bundles → readable AST&lt;/li&gt;
&lt;li&gt;Packed executables → behavioral breakdown&lt;/li&gt;
&lt;li&gt;Obfuscated Python → cleaned variable names and flow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When to use this:&lt;/strong&gt;&lt;br&gt;
Malware analysis, CTF challenges, reverse engineering &lt;br&gt;
a competitor's minified bundle, understanding what &lt;br&gt;
a dependency you didn't write actually does.&lt;/p&gt;


&lt;h2&gt;
  
  
  4. Generate a PoC exploit against your own smart contract
&lt;/h2&gt;

&lt;p&gt;You're about to deploy a Solidity contract. &lt;br&gt;
You want to know if it's vulnerable before &lt;br&gt;
someone else finds out.&lt;/p&gt;

&lt;p&gt;Click "Init Web3 Scaffold." Rogue Studio &lt;br&gt;
initializes a full Hardhat project in your &lt;br&gt;
workspace. Comes with a deliberately vulnerable &lt;br&gt;
starter contract so you have something to audit &lt;br&gt;
immediately.&lt;/p&gt;

&lt;p&gt;Then the Black-Hat Agent generates an actual &lt;br&gt;
Proof-of-Concept exploit against your local &lt;br&gt;
contract — reentrancy attacks, integer overflow &lt;br&gt;
exploits, access control bypasses — and runs it &lt;br&gt;
against your local Hardhat node.&lt;/p&gt;

&lt;p&gt;If your contract survives the agent's attack, &lt;br&gt;
you have meaningful evidence it's not trivially &lt;br&gt;
exploitable. If it doesn't survive, you found &lt;br&gt;
the bug on your machine instead of on mainnet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use this:&lt;/strong&gt;&lt;br&gt;
Before any smart contract deployment. Before &lt;br&gt;
any security audit. When you want to test your &lt;br&gt;
defenses before someone else tests them for you.&lt;/p&gt;


&lt;h2&gt;
  
  
  5. Deploy your project as a Tor .onion site in one click
&lt;/h2&gt;

&lt;p&gt;You built something. You want to share it. &lt;br&gt;
You don't want to expose your IP address.&lt;/p&gt;

&lt;p&gt;Click "Tor Uplink."&lt;/p&gt;

&lt;p&gt;Rogue Studio checks for your local tor binary, &lt;br&gt;
spawns an http-server on a random open port, &lt;br&gt;
writes a torrc hidden service config, starts &lt;br&gt;
the tor daemon, polls for the hostname file &lt;br&gt;
that Tor generates from an Ed25519 keypair, &lt;br&gt;
and streams the bootstrap logs to your terminal &lt;br&gt;
in real time.&lt;/p&gt;

&lt;p&gt;In about 8 seconds you get back a cryptographically &lt;br&gt;
generated .onion URL that routes to your local &lt;br&gt;
workspace.&lt;/p&gt;

&lt;p&gt;No account. No DNS record. No personal IP visible &lt;br&gt;
to anyone accessing the URL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requires:&lt;/strong&gt; &lt;code&gt;brew install tor&lt;/code&gt; on Mac or &lt;br&gt;
&lt;code&gt;sudo apt install tor&lt;/code&gt; on Linux.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use this:&lt;/strong&gt;&lt;br&gt;
Sharing a prototype without exposing personal &lt;br&gt;
infrastructure, distributing tools in restricted &lt;br&gt;
environments, demos that need to stay off the &lt;br&gt;
public internet.&lt;/p&gt;


&lt;h2&gt;
  
  
  6. Switch between 8 AI providers without changing your workflow
&lt;/h2&gt;

&lt;p&gt;Rogue Studio has a single unified interface for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenAI (GPT-4o, o1, o3)&lt;/li&gt;
&lt;li&gt;Anthropic (Claude Sonnet, Opus, Haiku)&lt;/li&gt;
&lt;li&gt;Google (Gemini 2.0, 2.5)&lt;/li&gt;
&lt;li&gt;Groq (Llama 3.3, DeepSeek-R1)&lt;/li&gt;
&lt;li&gt;DeepSeek (V3, R1)&lt;/li&gt;
&lt;li&gt;Together AI (open source models)&lt;/li&gt;
&lt;li&gt;OpenRouter (everything else)&lt;/li&gt;
&lt;li&gt;Ollama (local models — Llama, Mistral, Qwen, Phi)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same terminal. Same agent loop. Same workspace. &lt;br&gt;
Different provider in the dropdown.&lt;/p&gt;

&lt;p&gt;This matters more than it sounds. Different models &lt;br&gt;
have genuinely different strengths for security work. &lt;br&gt;
Claude is better at reasoning about logic &lt;br&gt;
vulnerabilities. GPT-4o is faster for iteration. &lt;br&gt;
Local Llama is what you use when Air-Gap is on.&lt;/p&gt;

&lt;p&gt;Being able to swap mid-session without any friction &lt;br&gt;
changes how you work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use this:&lt;/strong&gt;&lt;br&gt;
Comparing model outputs on the same security task, &lt;br&gt;
falling back to local when your API quota runs out, &lt;br&gt;
using the fastest model for generation and the &lt;br&gt;
smartest model for the audit pass.&lt;/p&gt;


&lt;h2&gt;
  
  
  7. Use it as a normal AI coding tool that doesn't babysit you
&lt;/h2&gt;

&lt;p&gt;This one sounds obvious. It isn't.&lt;/p&gt;

&lt;p&gt;Most AI coding tools have a threshold. Push past it &lt;br&gt;
and the refusals start. Not because your request is &lt;br&gt;
illegal. Not because you're doing anything wrong. &lt;br&gt;
Just because the tool was trained to be cautious &lt;br&gt;
and a security research task looks suspicious to &lt;br&gt;
a model optimized for consumer use cases.&lt;/p&gt;

&lt;p&gt;Rogue Studio doesn't have that threshold.&lt;/p&gt;

&lt;p&gt;You can analyze a suspicious npm package without &lt;br&gt;
getting a lecture. You can write a fuzzer without &lt;br&gt;
being told it could be misused. You can ask it to &lt;br&gt;
find every way a function could fail without it &lt;br&gt;
softening the answer.&lt;/p&gt;

&lt;p&gt;It treats you like a professional. That's the &lt;br&gt;
baseline the whole tool is built on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use this:&lt;/strong&gt;&lt;br&gt;
Every day. For everything. That's the point.&lt;/p&gt;


&lt;h2&gt;
  
  
  The one thing all of these have in common
&lt;/h2&gt;

&lt;p&gt;Every feature in this list exists because there was &lt;br&gt;
a thing I wanted to do with an AI coding tool and &lt;br&gt;
couldn't find a tool that would let me do it.&lt;/p&gt;

&lt;p&gt;So I built one. And I open-sourced it because &lt;br&gt;
I think other developers deserve the same thing.&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;&lt;a href="https://github.com/malgatyuvraj/Rogue-Studio" rel="noopener noreferrer"&gt;github.com/malgatyuvraj/Rogue-Studio&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's MIT licensed, TypeScript strict, ESLint clean. &lt;br&gt;
Good first issues are labeled if you want to &lt;br&gt;
contribute. PRs get reviewed fast.&lt;/p&gt;

&lt;p&gt;If any of these use cases match something you've &lt;br&gt;
been trying to do — give it a try and let me know &lt;br&gt;
what you think.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Which of these would you actually use? Genuinely &lt;br&gt;
curious whether the Air-Gap mode or the Red Team &lt;br&gt;
swarm is more interesting to developers in practice.&lt;/em&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://rougestudio.vercel.app" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;rougestudio.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>opensource</category>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>I gave an AI a Kill Switch. Here's what I learned about trust in local-first tooling.</title>
      <dc:creator>YUVRAJ</dc:creator>
      <pubDate>Sun, 24 May 2026 15:51:16 +0000</pubDate>
      <link>https://dev.to/malgatyuvraj/i-gave-an-ai-a-kill-switch-heres-what-i-learned-about-trust-in-local-first-tooling-326d</link>
      <guid>https://dev.to/malgatyuvraj/i-gave-an-ai-a-kill-switch-heres-what-i-learned-about-trust-in-local-first-tooling-326d</guid>
      <description>&lt;p&gt;There's a moment every developer hits when they're using an AI &lt;br&gt;
coding tool.&lt;/p&gt;

&lt;p&gt;You paste in something sensitive. A database schema. An internal &lt;br&gt;
API structure. A piece of logic that took three months to figure out.&lt;/p&gt;

&lt;p&gt;And then you think: &lt;em&gt;where did that just go?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That moment is why I built the Air-Gap mode in Rogue Studio. &lt;br&gt;
And building it taught me more about the architecture of trust &lt;br&gt;
in developer tooling than anything I've built before.&lt;/p&gt;


&lt;h2&gt;
  
  
  The problem with "local AI support"
&lt;/h2&gt;

&lt;p&gt;Every major AI coding tool now claims to support local models.&lt;/p&gt;

&lt;p&gt;And technically, they do. You can point them at Ollama. &lt;br&gt;
You can run Llama locally. The checkbox exists.&lt;/p&gt;

&lt;p&gt;But "supports local models" is not the same as &lt;br&gt;
"guarantees your code stays local."&lt;/p&gt;

&lt;p&gt;Here's what's actually happening in most tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The local model setting is a preference, not a policy&lt;/li&gt;
&lt;li&gt;Telemetry calls still go out regardless of model choice&lt;/li&gt;
&lt;li&gt;Error reporting sends context to external servers&lt;/li&gt;
&lt;li&gt;Fallback logic silently switches to a cloud provider 
when the local model is slow or unavailable&lt;/li&gt;
&lt;li&gt;There's no enforcement layer — just a UI toggle 
that you have to trust&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You're not getting a guarantee. You're getting a setting.&lt;/p&gt;

&lt;p&gt;For most developers that's fine. For security researchers, &lt;br&gt;
for people working on proprietary systems, for anyone &lt;br&gt;
building in regulated industries — it's not fine at all.&lt;/p&gt;


&lt;h2&gt;
  
  
  What a real guarantee looks like
&lt;/h2&gt;

&lt;p&gt;I wanted something you could point to in the code and say:&lt;br&gt;
&lt;em&gt;here is where the guarantee is enforced.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Not in the UI. Not in a settings file. In the request pipeline.&lt;/p&gt;

&lt;p&gt;Here's what I built in &lt;code&gt;/api/chat/route.ts&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;EXTERNAL_PROVIDERS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;openai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;anthropic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gemini&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;groq&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;deepseek&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;together&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;openrouter&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isAirGapped&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x-air-gap-mode&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isAirGapped&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;EXTERNAL_PROVIDERS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;NextResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;AIR-GAP VIOLATION: External provider blocked.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toISOString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;403&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;When the Kill Switch is on, this fires before any &lt;br&gt;
provider initialization, before any API key lookup, &lt;br&gt;
before any streaming starts.&lt;/p&gt;

&lt;p&gt;The 403 is not a suggestion. It's a wall.&lt;/p&gt;

&lt;p&gt;And because it's server-side, it fires regardless of &lt;br&gt;
how the request was constructed — from the UI, from &lt;br&gt;
a direct fetch(), from a script hitting the API. &lt;br&gt;
There is no path through the middleware that reaches &lt;br&gt;
an external provider when Air-Gap is active.&lt;/p&gt;

&lt;p&gt;The only thing that passes through is &lt;code&gt;ollama&lt;/code&gt;, which &lt;br&gt;
talks exclusively to &lt;code&gt;localhost:11434&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Zero bytes leave the machine. Not as a marketing claim. &lt;br&gt;
As a diff you can read.&lt;/p&gt;


&lt;h2&gt;
  
  
  The UI had to match the architecture
&lt;/h2&gt;

&lt;p&gt;I spent a surprising amount of time on the Kill Switch UI.&lt;/p&gt;

&lt;p&gt;The technical guarantee meant nothing if users didn't &lt;br&gt;
&lt;em&gt;feel&lt;/em&gt; the weight of it. A small toggle in a settings &lt;br&gt;
menu would undermine the architectural statement the &lt;br&gt;
feature was making.&lt;/p&gt;

&lt;p&gt;So I made it physical-looking. Big. Impossible to miss.&lt;/p&gt;

&lt;p&gt;When it's OFF: the interface shows all available providers. &lt;br&gt;
Everything is normal.&lt;/p&gt;

&lt;p&gt;When it's ON: every external provider grays out immediately. &lt;br&gt;
A banner appears — &lt;strong&gt;AIR-GAPPED: LOCAL ONLY&lt;/strong&gt;. The provider &lt;br&gt;
selector locks to Ollama. The Kill Switch itself turns red.&lt;/p&gt;

&lt;p&gt;The visual design is doing real work here. It's communicating &lt;br&gt;
that this is not a preference. It's a mode change with &lt;br&gt;
real consequences.&lt;/p&gt;


&lt;h2&gt;
  
  
  What this taught me about trust as architecture
&lt;/h2&gt;

&lt;p&gt;Building this forced me to think about trust as a &lt;br&gt;
first-class architectural concern — not a policy &lt;br&gt;
you write, but a constraint you build.&lt;/p&gt;

&lt;p&gt;Most software trust models are based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configuration (you set a flag, the software honors it)&lt;/li&gt;
&lt;li&gt;Audit (you review logs after the fact)&lt;/li&gt;
&lt;li&gt;Policy (legal agreements about data handling)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these are &lt;em&gt;structural&lt;/em&gt;. They can all be violated &lt;br&gt;
— through bugs, through misconfigurations, through &lt;br&gt;
deliberate decisions made by people you've never met.&lt;/p&gt;

&lt;p&gt;Structural trust is different. It means the system &lt;br&gt;
is physically incapable of violating the constraint &lt;br&gt;
regardless of what else changes.&lt;/p&gt;

&lt;p&gt;The Air-Gap middleware is structural. It doesn't matter &lt;br&gt;
what gets added to the codebase later — as long as that &lt;br&gt;
middleware exists, the constraint holds. You could &lt;br&gt;
add ten new AI providers tomorrow and none of them &lt;br&gt;
would be reachable when Air-Gap is active.&lt;/p&gt;

&lt;p&gt;This is why open source matters for this class of tooling &lt;br&gt;
specifically. The guarantee is only as strong as your &lt;br&gt;
ability to verify it. With Rogue Studio, you can read &lt;br&gt;
the middleware in three minutes and know exactly what &lt;br&gt;
it does and doesn't block.&lt;/p&gt;


&lt;h2&gt;
  
  
  The other side of the coin: the Red Team
&lt;/h2&gt;

&lt;p&gt;The Air-Gap mode is about protecting your code from &lt;br&gt;
leaving your machine.&lt;/p&gt;

&lt;p&gt;The Red Team swarm is about protecting your code from &lt;br&gt;
being wrong.&lt;/p&gt;

&lt;p&gt;I built an adversarial agent loop where two AI agents &lt;br&gt;
run against each other:&lt;/p&gt;

&lt;p&gt;Blue Team writes the code.&lt;br&gt;
Red Team immediately tries to break it — hunting for &lt;br&gt;
XSS, SQL injection, buffer overflows, reentrancy &lt;br&gt;
vulnerabilities, SSRF, path traversal.&lt;/p&gt;

&lt;p&gt;If Red Team finds something, the exploit details go &lt;br&gt;
back to Blue Team for patching. They loop up to &lt;br&gt;
3 iterations until the code is clean.&lt;/p&gt;

&lt;p&gt;The insight that drove this: the same model that &lt;br&gt;
writes a vulnerability is statistically likely to &lt;br&gt;
miss it in review. The blind spots go in both &lt;br&gt;
directions. The fix is a different agent with an &lt;br&gt;
opposing objective — not a helpful one, but a &lt;br&gt;
destructive one.&lt;/p&gt;

&lt;p&gt;Combined with Air-Gap mode, you get something &lt;br&gt;
interesting: an AI that aggressively audits your &lt;br&gt;
code for vulnerabilities, running entirely on your &lt;br&gt;
machine, with a cryptographic guarantee that nothing &lt;br&gt;
leaves.&lt;/p&gt;


&lt;h2&gt;
  
  
  What I'm building toward
&lt;/h2&gt;

&lt;p&gt;Rogue Studio is my attempt to answer a question &lt;br&gt;
I couldn't find a good answer to anywhere else:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What does AI tooling look like when you build &lt;br&gt;
trust into the architecture instead of the policy?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The Air-Gap mode is one answer. The adversarial &lt;br&gt;
swarm is another. The Reverse Engineer mode — which &lt;br&gt;
swaps in a decompiler prompt for malware analysis &lt;br&gt;
without safety refusals — is a third.&lt;/p&gt;

&lt;p&gt;All of it is open source. All of it is auditable. &lt;br&gt;
All of it runs locally.&lt;/p&gt;

&lt;p&gt;If you've been waiting for AI developer tooling &lt;br&gt;
that actually trusts you with your own tools — &lt;br&gt;
this is what I've been building.&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;&lt;a href="https://github.com/malgatyuvraj/Rogue-Studio" rel="noopener noreferrer"&gt;github.com/malgatyuvraj/Rogue-Studio&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The repo is MIT licensed. Good first issues are &lt;br&gt;
labeled. PRs are reviewed fast.&lt;/p&gt;

&lt;p&gt;If any of this resonates — especially the &lt;br&gt;
architecture-as-trust framing — I'd love to &lt;br&gt;
hear your thoughts in the comments.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;What other constraints should be structural in &lt;br&gt;
developer tooling? I've been thinking about this &lt;br&gt;
a lot and I'm curious what others in the security &lt;br&gt;
and privacy space think.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://rougestudio.vercel.app" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;rougestudio.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>opensource</category>
      <category>ai</category>
      <category>git</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I built an AI IDE where the AI tries to hack its own code here's how the swarm works</title>
      <dc:creator>YUVRAJ</dc:creator>
      <pubDate>Sun, 24 May 2026 12:48:50 +0000</pubDate>
      <link>https://dev.to/malgatyuvraj/i-built-an-ai-ide-where-the-ai-tries-to-hack-its-own-code-heres-how-the-swarm-works-28a5</link>
      <guid>https://dev.to/malgatyuvraj/i-built-an-ai-ide-where-the-ai-tries-to-hack-its-own-code-heres-how-the-swarm-works-28a5</guid>
      <description>&lt;p&gt;Most AI coding tools are built to assist you.&lt;/p&gt;

&lt;p&gt;Rogue Studio is built to attack you — specifically, to attack &lt;br&gt;
the code it just wrote for you, find every vulnerability, and &lt;br&gt;
force itself to fix them before you ever see the output.&lt;/p&gt;

&lt;p&gt;Here's how I built the adversarial swarm architecture, and why &lt;br&gt;
I think this approach to AI-assisted security is underexplored.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why I built this
&lt;/h2&gt;

&lt;p&gt;I kept hitting the same wall.&lt;/p&gt;

&lt;p&gt;I'm a security-focused developer. I do legitimate vulnerability &lt;br&gt;
research. I analyze contracts, decompile binaries, write PoC &lt;br&gt;
exploits against test environments I own.&lt;/p&gt;

&lt;p&gt;And every single AI coding tool I tried would either refuse, &lt;br&gt;
add a disclaimer, water down the output, or quietly route my &lt;br&gt;
code to a server I had no visibility into.&lt;/p&gt;

&lt;p&gt;I didn't want a safer AI.&lt;br&gt;
I wanted a sharper one.&lt;/p&gt;

&lt;p&gt;So I spent the last few weeks building the tool I actually &lt;br&gt;
wanted to use. I called it Rogue Studio.&lt;/p&gt;

&lt;p&gt;It's open source, self-hostable, and it does not apologize &lt;br&gt;
for what it is.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://github.com/malgatyuvraj/Rogue-Studio" rel="noopener noreferrer"&gt;github.com/malgatyuvraj/Rogue-Studio&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  The core idea: make the AI fight itself
&lt;/h2&gt;

&lt;p&gt;Here's the problem with AI-generated code from a &lt;br&gt;
security perspective.&lt;/p&gt;

&lt;p&gt;The same model that writes your code is the one &lt;br&gt;
you're asking to review it. It has the same blind spots &lt;br&gt;
in both directions. It wrote the vulnerable pattern, &lt;br&gt;
so it's likely to miss the vulnerable pattern.&lt;/p&gt;

&lt;p&gt;The fix is obvious once you see it: use a &lt;em&gt;different&lt;/em&gt; &lt;br&gt;
agent with a &lt;em&gt;different&lt;/em&gt; system prompt — one that is &lt;br&gt;
not trying to be helpful, but trying to be destructive.&lt;/p&gt;

&lt;p&gt;That's Swarm Mode.&lt;/p&gt;

&lt;p&gt;Two agents. One goal. No guardrails.&lt;br&gt;
Blue Team → writes the code → signals &lt;br&gt;
↓&lt;br&gt;
Red Team audits for vulnerabilities&lt;br&gt;
↓&lt;br&gt;
 &lt;br&gt;
↓ ↓&lt;br&gt;
exploit details fed loop terminates ✅&lt;br&gt;
back to Blue Team&lt;br&gt;
↓&lt;br&gt;
Blue Team patches&lt;br&gt;
↓&lt;br&gt;
back to Red Team audit&lt;br&gt;
↓&lt;br&gt;
(hard cap: 3 iterations)&lt;/p&gt;

&lt;p&gt;text&lt;/p&gt;

&lt;p&gt;The agents communicate through sentinel tokens &lt;br&gt;
embedded in their output stream:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;done&amp;gt;&lt;/code&gt; — Blue Team has finished writing&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;vulnerable&amp;gt;&lt;/code&gt; — Red Team found at least one issue&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;secure&amp;gt;&lt;/code&gt; — Red Team confirms the code is clean&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The orchestrator parses these tokens from the &lt;br&gt;
streaming response in real time and routes accordingly.&lt;/p&gt;

&lt;p&gt;Here's the actual loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MAX_SWARM_ITERATIONS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;verdict&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;runSwarm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userTask&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;iter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;verdict&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;vulnerable&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;iter&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;MAX_SWARM_ITERATIONS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;patchTask&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
The Red Team found these vulnerabilities:
&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;swarm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;redOutput&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;

Original code:
&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;swarm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;blueOutput&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;

Patch all vulnerabilities.`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nx"&gt;verdict&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;runSwarm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;patchTask&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;iter&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The hard cap at 3 exists because some vulnerability &lt;br&gt;
classes genuinely can't be patched without redesigning &lt;br&gt;
the architecture. If the loop hits 3, it surfaces the &lt;br&gt;
remaining issues to the developer instead of spinning &lt;br&gt;
forever.&lt;/p&gt;
&lt;h3&gt;
  
  
  What the Red Team hunts for
&lt;/h3&gt;

&lt;p&gt;The Red Team system prompt is specifically tuned to &lt;br&gt;
find these vulnerability classes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;XSS&lt;/strong&gt; — unsanitized user input reaching the DOM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQL Injection&lt;/strong&gt; — string concatenation in queries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Buffer Overflows&lt;/strong&gt; — unsafe memory ops in C/C++&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reentrancy&lt;/strong&gt; — Solidity withdraw-before-state-update&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSRF&lt;/strong&gt; — unvalidated URLs in server-side fetches&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Path Traversal&lt;/strong&gt; — unsanitized file path inputs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both agents stream simultaneously to a split terminal —&lt;br&gt;
blue glow on the left, red glow on the right. It looks &lt;br&gt;
exactly as dramatic as it sounds.&lt;/p&gt;


&lt;h2&gt;
  
  
  The part nobody else is building: Air-Gap mode
&lt;/h2&gt;

&lt;p&gt;I want to talk about this one because I think it's &lt;br&gt;
architecturally more interesting than it looks.&lt;/p&gt;

&lt;p&gt;Every "local AI" tool I've seen has the same problem.&lt;br&gt;
They &lt;em&gt;support&lt;/em&gt; local models but they don't &lt;em&gt;enforce&lt;/em&gt; &lt;br&gt;
local-only operation. There's always a fallback, &lt;br&gt;
always a telemetry call, always a condition where &lt;br&gt;
your code leaves the machine without you noticing.&lt;/p&gt;

&lt;p&gt;I wanted something stronger than a setting.&lt;br&gt;
I wanted a guarantee.&lt;/p&gt;

&lt;p&gt;So I built a physical-looking Kill Switch in the UI.&lt;br&gt;
When you flip it, a middleware layer in &lt;br&gt;
&lt;code&gt;/api/chat/route.ts&lt;/code&gt; intercepts every request &lt;br&gt;
&lt;em&gt;before&lt;/em&gt; any provider routing happens:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;EXTERNAL_PROVIDERS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;openai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;anthropic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gemini&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;groq&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;deepseek&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;together&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;openrouter&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isAirGapped&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 
  &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x-air-gap-mode&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isAirGapped&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;EXTERNAL_PROVIDERS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;NextResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;AIR-GAP VIOLATION: External provider blocked.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;403&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The enforcement is &lt;strong&gt;server-side&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is the important detail. A client-side check &lt;br&gt;
can be bypassed by anyone who modifies the request &lt;br&gt;
directly. The server-side middleware means the 403 &lt;br&gt;
fires regardless of how the request was constructed.&lt;/p&gt;

&lt;p&gt;The only provider that passes through is &lt;code&gt;ollama&lt;/code&gt; — &lt;br&gt;
which talks exclusively to &lt;code&gt;localhost:11434&lt;/code&gt;. &lt;br&gt;
Zero bytes leave the machine. Not as a claim. &lt;br&gt;
As a code guarantee.&lt;/p&gt;


&lt;h2&gt;
  
  
  Reverse Engineer Mode
&lt;/h2&gt;

&lt;p&gt;This one is simple conceptually but surprisingly &lt;br&gt;
useful in practice.&lt;/p&gt;

&lt;p&gt;One click swaps the entire system prompt for an &lt;br&gt;
aggressive decompiler prompt. The standard safety &lt;br&gt;
instructions are gone. What's left is a prompt &lt;br&gt;
specifically designed to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;De-obfuscate minified JavaScript and reconstruct 
readable ASTs&lt;/li&gt;
&lt;li&gt;Parse compiled WASM back into human-readable logic&lt;/li&gt;
&lt;li&gt;Rename obfuscated variables based on inferred 
purpose&lt;/li&gt;
&lt;li&gt;Explain malware behavior in plain English&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No refusals. No disclaimers. No "I can't help with that."&lt;/p&gt;

&lt;p&gt;An amber warning banner appears in the UI so you &lt;br&gt;
always know which mode is active. I didn't want &lt;br&gt;
this to be invisible.&lt;/p&gt;


&lt;h2&gt;
  
  
  Web3 Black-Hat Playground
&lt;/h2&gt;

&lt;p&gt;I added this specifically for smart contract auditors.&lt;/p&gt;

&lt;p&gt;One click hits &lt;code&gt;/api/web3/scaffold&lt;/code&gt; which initializes &lt;br&gt;
a full Hardhat project in your local &lt;code&gt;rogue_workspace&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;execAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;npm init -y&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;cwd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;targetDir&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;execAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;npm install --save-dev hardhat @nomicfoundation/hardhat-toolbox&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;cwd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;targetDir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;120000&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It also writes a starter &lt;code&gt;Target.sol&lt;/code&gt; with an &lt;br&gt;
&lt;strong&gt;intentional reentrancy vulnerability&lt;/strong&gt; so you have &lt;br&gt;
something to audit immediately:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function withdraw(uint256 amount) public {
    require(balances[msg.sender] &amp;gt;= amount);
    // external call before state update ← reentrancy
    (bool success, ) = msg.sender.call{value: amount}("");
    require(success);
    balances[msg.sender] -= amount;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The Black-Hat Agent then generates PoC exploits &lt;br&gt;
against your local contracts to verify your defenses &lt;br&gt;
before you deploy anywhere real.&lt;/p&gt;

&lt;p&gt;The route is idempotent. Call it twice, the second &lt;br&gt;
call returns &lt;code&gt;{ status: "already_initialized" }&lt;/code&gt; &lt;br&gt;
instead of re-running npm install.&lt;/p&gt;


&lt;h2&gt;
  
  
  Ghost Deploy — Tor .onion Generator
&lt;/h2&gt;

&lt;p&gt;This was the most technically satisfying feature to ship.&lt;/p&gt;

&lt;p&gt;The pipeline:&lt;br&gt;
Detect tor binary (which tor)&lt;/p&gt;

&lt;p&gt;Spawn http-server on a random open port&lt;/p&gt;

&lt;p&gt;Write a torrc with HiddenServiceDir + HiddenServicePort&lt;/p&gt;

&lt;p&gt;Start tor daemon with the custom torrc&lt;/p&gt;

&lt;p&gt;Poll for hostname file (tor generates this async)&lt;/p&gt;

&lt;p&gt;Read the cryptographic .onion address from the file&lt;/p&gt;

&lt;p&gt;Stream bootstrap logs to the terminal&lt;/p&gt;

&lt;p&gt;Return the .onion URL to the UI&lt;/p&gt;

&lt;p&gt;text&lt;/p&gt;

&lt;p&gt;The part that took me the longest to understand: &lt;br&gt;
you don't &lt;em&gt;assign&lt;/em&gt; a .onion address. Tor generates &lt;br&gt;
one for you from an Ed25519 keypair the first time &lt;br&gt;
it starts with a &lt;code&gt;HiddenServiceDir&lt;/code&gt;. You discover &lt;br&gt;
it by reading the &lt;code&gt;hostname&lt;/code&gt; file after startup.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hostnameFile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hiddenServiceDir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hostname&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;onionAddress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;onionAddress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 
      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hostnameFile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;utf-8&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;onionAddress&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// not generated yet, keep polling&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Poll for up to 30 seconds. In practice it generates &lt;br&gt;
in 3-8 seconds on a warm machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requires&lt;/strong&gt;: &lt;code&gt;brew install tor&lt;/code&gt; on Mac, &lt;br&gt;
&lt;code&gt;sudo apt install tor&lt;/code&gt; on Linux.&lt;/p&gt;


&lt;h2&gt;
  
  
  The API key security fix I almost missed
&lt;/h2&gt;

&lt;p&gt;The production test suite caught something I'd &lt;br&gt;
overlooked: the original implementation accepted &lt;br&gt;
API keys from the request body.&lt;/p&gt;

&lt;p&gt;Fine for local use. Dangerous for any hosted deployment.&lt;/p&gt;

&lt;p&gt;The fix uses a dual-source pattern — env vars take &lt;br&gt;
priority, client-provided key is only trusted if the &lt;br&gt;
request originates from localhost:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;host&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isLocalhost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 
  &lt;span class="nx"&gt;host&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;localhost&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; 
  &lt;span class="nx"&gt;host&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;127.0.0.1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ENV_KEYS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;gemini&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GOOGLE_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;groq&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;      &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GROQ_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;apiKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ENV_KEYS&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; 
               &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isLocalhost&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;clientApiKey&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This keeps the local-first UX intact — self-hosters &lt;br&gt;
can still paste their key into the UI — while being &lt;br&gt;
safe for any cloud deployment.&lt;/p&gt;


&lt;h2&gt;
  
  
  What the codebase looks like
&lt;/h2&gt;

&lt;p&gt;I spent real time on this.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript strict&lt;/strong&gt; — 0 errors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ESLint&lt;/strong&gt; — 0 warnings (37 errors when I started, 
took a full session to clean up)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 14 App Router&lt;/strong&gt; throughout&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MIT license&lt;/strong&gt; — do whatever you want with it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;any&lt;/code&gt; types are gone. The &lt;code&gt;let&lt;/code&gt; declarations &lt;br&gt;
that should be &lt;code&gt;const&lt;/code&gt; are fixed. The catch blocks &lt;br&gt;
use &lt;code&gt;unknown&lt;/code&gt; and narrow properly. It's the kind &lt;br&gt;
of codebase I'd be comfortable handing to someone &lt;br&gt;
else.&lt;/p&gt;


&lt;h2&gt;
  
  
  What's next and where you can help
&lt;/h2&gt;

&lt;p&gt;I'm actively looking for contributors. The things &lt;br&gt;
I haven't built yet:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Easy&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add SSRF and path traversal to the Red Team prompt&lt;/li&gt;
&lt;li&gt;Dark/light theme toggle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Medium&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Playwright E2E test coverage&lt;/li&gt;
&lt;li&gt;Better real-time Tor bootstrap log streaming in UI&lt;/li&gt;
&lt;li&gt;Multi-provider failover when Air-Gap is OFF&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hard&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VS Code extension that ports the agent sidebar&lt;/li&gt;
&lt;li&gt;Multi-file workspace swarm support&lt;/li&gt;
&lt;li&gt;LSP integration for inline Red Team annotations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The codebase is clean, the architecture is documented &lt;br&gt;
in the README, and PRs get reviewed fast.&lt;/p&gt;

&lt;p&gt;If you've been waiting for an AI coding tool that &lt;br&gt;
actually trusts you — this is it.&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;&lt;a href="https://github.com/malgatyuvraj/Rogue-Studio" rel="noopener noreferrer"&gt;github.com/malgatyuvraj/Rogue-Studio&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Drop a ⭐ if you think this kind of tooling &lt;br&gt;
should exist. Issues and PRs are open.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;If you have questions about the swarm orchestration, &lt;br&gt;
the Air-Gap middleware, or the Tor deploy pipeline — &lt;br&gt;
ask in the comments. I'll answer everything.&lt;/em&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://rougestudio.vercel.app" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;rougestudio.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>opensource</category>
      <category>ai</category>
      <category>cybersecurity</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
