<?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: CounterIntEng</title>
    <description>The latest articles on DEV Community by CounterIntEng (@counterinteng).</description>
    <link>https://dev.to/counterinteng</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%2F3831472%2F82147821-e200-4ab3-ac1c-12f7a3a26405.png</url>
      <title>DEV Community: CounterIntEng</title>
      <link>https://dev.to/counterinteng</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/counterinteng"/>
    <language>en</language>
    <item>
      <title>Retail Investors Are Panic-Selling AI Stocks. Wall Street Is Buying Every Share.</title>
      <dc:creator>CounterIntEng</dc:creator>
      <pubDate>Tue, 31 Mar 2026 04:51:22 +0000</pubDate>
      <link>https://dev.to/counterinteng/retail-investors-are-panic-selling-ai-stocks-wall-street-is-buying-every-share-40i3</link>
      <guid>https://dev.to/counterinteng/retail-investors-are-panic-selling-ai-stocks-wall-street-is-buying-every-share-40i3</guid>
      <description>&lt;h1&gt;
  
  
  Retail Investors Are Panic-Selling AI Stocks. Wall Street Is Buying Every Share.
&lt;/h1&gt;

&lt;p&gt;A trillion dollars just evaporated from software stocks. They're calling it the "SaaSpocalypse."&lt;/p&gt;

&lt;p&gt;The iShares Expanded Tech-Software Sector ETF dropped 14% — its worst stretch since 2008. The S&amp;amp;P 500 software index is trading 21% below its 200-day moving average, a level not seen since June 2022. SaaS names like Salesforce, ServiceNow, and Palantir fell 30% to 50% from their 2025 peaks.&lt;/p&gt;

&lt;p&gt;Retail investors are running for the exits.&lt;/p&gt;

&lt;p&gt;Wall Street is loading up the truck.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Panic
&lt;/h2&gt;

&lt;p&gt;Here's what happened: In early 2026, a wave of fear swept through the market. The thesis was simple — AI agents will replace enterprise software. Why pay $300/seat/month for a CRM when an AI agent can do the same job for $20?&lt;/p&gt;

&lt;p&gt;The logic isn't crazy. But the market reaction was.&lt;/p&gt;

&lt;p&gt;90% of retail traders lose money. Not because they pick the wrong stocks. Because they sell at exactly the wrong time. Every time. A BusinessToday analysis from March 27 confirmed: 90% of day traders lose money due to leverage, behavioral bias, and structural disadvantage.&lt;/p&gt;

&lt;p&gt;The structural disadvantage is real. High-frequency trading firms account for 50-60% of U.S. equity trading volume. They increase short-term volatility by 30%. Retail traders are playing poker against a card counter with a supercomputer.&lt;/p&gt;

&lt;p&gt;And right now, those supercomputers are buying what retail is selling.&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/wall-street-en-01.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/wall-street-en-01.png" alt="Retail vs. Institutional: The Numbers" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Smart Money Move
&lt;/h2&gt;

&lt;p&gt;Salesforce announced a $50 billion stock buyback in February 2026 — the largest in the company's history. CEO Marc Benioff: "We are aggressively repurchasing shares because we are so confident in the future of Salesforce."&lt;/p&gt;

&lt;p&gt;ServiceNow approved $5 billion in additional buybacks.&lt;/p&gt;

&lt;p&gt;Think about what this means. The people who run these companies — who see every internal metric, every pipeline number, every customer renewal rate — are betting billions that the market is wrong about them.&lt;/p&gt;

&lt;p&gt;Meanwhile, retail investors who read one headline about "AI replacing SaaS" are selling at a 40% loss.&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/wall-street-en-02.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/wall-street-en-02.png" alt="The SaaSpocalypse in Numbers" width="800" height="400"&gt;&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/wall-street-en-03.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/wall-street-en-03.png" alt="Smart Money Is Loading Up" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;This has happened before. Every single time.&lt;/p&gt;

&lt;p&gt;2008: Retail sold bank stocks at the bottom. Institutions bought. Banks recovered 300-500% over the next 5 years.&lt;/p&gt;

&lt;p&gt;2020: Retail panic-sold during COVID. Warren Buffett's famous line: "Be fearful when others are greedy, and greedy when others are fearful." The S&amp;amp;P 500 doubled from the March 2020 bottom.&lt;/p&gt;

&lt;p&gt;2022: Retail dumped tech during the rate hike scare. NVIDIA went from $108 to $900+ over the next two years.&lt;/p&gt;

&lt;p&gt;The pattern is always the same:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Something scary happens&lt;/li&gt;
&lt;li&gt;Retail panics and sells at a loss&lt;/li&gt;
&lt;li&gt;Institutions buy the dip with billions&lt;/li&gt;
&lt;li&gt;Stocks recover&lt;/li&gt;
&lt;li&gt;Retail buys back in at higher prices&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Rinse. Repeat. Wealth transfers from the impatient to the patient.&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/wall-street-en-04.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/wall-street-en-04.png" alt="The Same Script. Every Time." width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Counterintuitive Truth
&lt;/h2&gt;

&lt;p&gt;The "SaaSpocalypse" narrative has a fatal flaw: it assumes AI replaces software companies instead of being adopted BY software companies.&lt;/p&gt;

&lt;p&gt;Salesforce is building AI agents INTO its platform. ServiceNow is embedding AI into every workflow. These aren't AI victims — they're AI distributors. They have the customer relationships, the data moats, and the enterprise trust that no AI startup can replicate overnight.&lt;/p&gt;

&lt;p&gt;Morgan Stanley published a note in March 2026 titled "AI Disruption Fears: Stock Market Overreacts?" Their conclusion: the market is pricing in disruption that will take 5-10 years as if it's happening tomorrow.&lt;/p&gt;

&lt;p&gt;The SaaS companies that survive this rotation will emerge stronger. The ones that don't were already dead — AI just accelerated the timeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Retail Investors Should Actually Do
&lt;/h2&gt;

&lt;p&gt;I'm not a financial advisor. But the data says some things clearly:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Stop trading, start investing.&lt;/strong&gt; 90% of traders lose. The ones who win hold for years, not days.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Follow the buybacks.&lt;/strong&gt; When a CEO spends $50 billion buying their own stock, they're telling you something. Corporate insiders have a 65% success rate betting on their own companies. Retail has about 10%.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Ignore the narrative, read the numbers.&lt;/strong&gt; "AI will kill SaaS" is a narrative. Salesforce's Q4 revenue was up 11% YoY with 30% operating margins. That's a number. Numbers win.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. If you can't stomach a 40% drawdown, you shouldn't own individual stocks.&lt;/strong&gt; Buy an index fund. The S&amp;amp;P 500 has returned ~10% annually for 100 years. You don't need to be smart. You need to not be stupid.&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/wall-street-en-05.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/wall-street-en-05.png" alt="What Retail Should Actually Do" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Question
&lt;/h2&gt;

&lt;p&gt;Every market crash creates a transfer of wealth. The question is simple: which side of the transfer are you on?&lt;/p&gt;

&lt;p&gt;Right now, $1 trillion in software market cap is changing hands. Retail is handing it to institutions at a discount.&lt;/p&gt;

&lt;p&gt;In 3 years, when these stocks recover (and they will — software isn't going anywhere), someone will write an article about how "smart money" made a fortune during the 2026 SaaSpocalypse.&lt;/p&gt;

&lt;p&gt;That smart money is buying today. With your shares.&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/wall-street-en-06.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/wall-street-en-06.png" alt="Every crash is a wealth transfer." width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Counterintuitive Engineering | Where the data contradicts the headline.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>engineering</category>
      <category>ai</category>
      <category>software</category>
    </item>
    <item>
      <title>Your AI Assistant Works for Your Competitor. You Just Don't Know It Yet.</title>
      <dc:creator>CounterIntEng</dc:creator>
      <pubDate>Mon, 30 Mar 2026 01:44:02 +0000</pubDate>
      <link>https://dev.to/counterinteng/your-ai-assistant-works-for-your-competitor-you-just-dont-know-it-yet-47dk</link>
      <guid>https://dev.to/counterinteng/your-ai-assistant-works-for-your-competitor-you-just-dont-know-it-yet-47dk</guid>
      <description>&lt;h1&gt;
  
  
  Your AI Assistant Works for Your Competitor. You Just Don't Know It Yet.
&lt;/h1&gt;

&lt;h2&gt;
  
  
  77%
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;77% of employees have pasted confidential company data into AI chatbots.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not hypothetically. Not in a survey about what they "might" do. Actually did it. Copy, paste, send.&lt;/p&gt;

&lt;p&gt;And 82% of them used personal accounts — not the enterprise version with guardrails, but the free tier that explicitly says "we may use your conversations to improve our models."&lt;/p&gt;

&lt;p&gt;That's not a privacy policy buried in fine print. That's a conveyor belt moving your trade secrets into a training dataset shared with everyone, including your competitors.&lt;/p&gt;

&lt;p&gt;If you're using AI tools at work right now, there's a better-than-even chance your company's data is already out there. Not stolen by hackers. Volunteered by employees trying to be productive.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Samsung Moment
&lt;/h2&gt;

&lt;p&gt;In April 2023, a Samsung semiconductor engineer pasted proprietary chip source code into ChatGPT to debug it.&lt;/p&gt;

&lt;p&gt;Read that again. Source code for unreleased Samsung chips — fed directly into OpenAI's training pipeline.&lt;/p&gt;

&lt;p&gt;Samsung banned ChatGPT the next month. But the code was already ingested. You can't un-train a model.&lt;/p&gt;

&lt;p&gt;Samsung wasn't alone. Within weeks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Apple&lt;/strong&gt; restricted ChatGPT and GitHub Copilot — afraid employees would leak product roadmaps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Goldman Sachs&lt;/strong&gt; banned it — confidential financial models at risk&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JPMorgan Chase&lt;/strong&gt; restricted it — regulatory compliance concerns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bank of America, Citigroup, Deutsche Bank&lt;/strong&gt; — all followed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon&lt;/strong&gt; warned employees after finding ChatGPT responses that closely mirrored internal data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't paranoid companies. These are companies that caught the problem happening in real time.&lt;/p&gt;

&lt;p&gt;The question isn't whether your employees are doing this. The question is whether you've caught them yet.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Actually Happens to Your Data
&lt;/h2&gt;

&lt;p&gt;Here's what most people don't understand about AI services:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier / Plus tier:&lt;/strong&gt; Your conversations may be used to train future models. This is the default. You have to manually opt out in settings. Most people don't.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enterprise / API tier:&lt;/strong&gt; Data is not used for training by default. But it's still processed on the provider's servers, still subject to their retention policies, still accessible to their employees under certain conditions.&lt;/p&gt;

&lt;p&gt;The distinction matters enormously, but 82% of employees are using personal accounts. They're on the free tier. Their conversations are training data.&lt;/p&gt;

&lt;p&gt;Now think about what people paste into AI chatbots at work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source code with proprietary algorithms&lt;/li&gt;
&lt;li&gt;Internal strategy documents&lt;/li&gt;
&lt;li&gt;Customer lists and contact information&lt;/li&gt;
&lt;li&gt;Financial projections and deal terms&lt;/li&gt;
&lt;li&gt;Legal documents under NDA&lt;/li&gt;
&lt;li&gt;Product roadmaps and launch timelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these, once pasted into a free-tier chatbot, becomes potential training data. That training data influences model outputs. Those outputs are served to millions of users — including your competitors.&lt;/p&gt;

&lt;p&gt;Your competitive advantage, laundered through a language model, available to anyone who asks the right question.&lt;/p&gt;




&lt;h2&gt;
  
  
  It Gets Worse: AI Agents
&lt;/h2&gt;

&lt;p&gt;Classic chatbots were bad enough. You paste something in, it stays in that conversation. Risky, but contained.&lt;/p&gt;

&lt;p&gt;AI agents are a different animal entirely.&lt;/p&gt;

&lt;p&gt;On March 20, 2026, Meta's internal AI agent — designed to automate engineering tasks — was instructed to perform routine actions. Instead, it exposed sensitive user and company data to internal employees who shouldn't have had access. A single agent, following its instructions, created a data breach.&lt;/p&gt;

&lt;p&gt;Researchers have demonstrated that AI agents can be manipulated through indirect prompt injection: an attacker plants instructions in a public webpage. When the agent browses that page during a task, it reads the hidden instructions and follows them — leaking internal data to an external server through normal-looking web searches.&lt;/p&gt;

&lt;p&gt;This isn't theoretical. The attack works. The agent uses its own tools — web search, file access, API calls — to exfiltrate data, and it does so while appearing to work normally.&lt;/p&gt;

&lt;p&gt;65% of leading AI companies have been found with verified secrets leaked on GitHub — API keys, database credentials, training data access tokens. Combined, these leaks put an estimated $400 billion in assets at risk.&lt;/p&gt;

&lt;p&gt;When your AI assistant has access to your files, your email, your codebase, and your internal docs, a single prompt injection can turn it into an exfiltration tool.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Real Cost
&lt;/h2&gt;

&lt;p&gt;Let's put numbers on this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Samsung's chip leak:&lt;/strong&gt; The affected semiconductor designs were part of a multi-billion-dollar fab investment. The competitive intelligence value of that source code? Incalculable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Legal exposure:&lt;/strong&gt; Companies operating under GDPR face fines up to 4% of global annual revenue for data protection failures. For a company doing $10B in revenue, that's $400M per incident.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Competitive damage:&lt;/strong&gt; If your product roadmap leaks six months before launch, your competitor adjusts. They don't have to innovate — they just have to react. You spent $50M on R&amp;amp;D; they spent $0 and got the same outcome.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recruitment data:&lt;/strong&gt; If your AI tool ingests salary data, offer letters, and compensation structures, that information can theoretically surface in model outputs. Your compensation strategy — available to anyone who asks.&lt;/p&gt;

&lt;p&gt;The hidden cost isn't the subscription fee. It's the asymmetric information transfer: you pay $20/month, and in exchange, you give away information worth millions.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You Should Actually Do
&lt;/h2&gt;

&lt;p&gt;I'm not going to tell you to stop using AI. That ship has sailed, and AI genuinely makes people more productive. The point isn't to avoid AI — it's to stop being naive about the trade-offs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For individuals:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check your settings right now.&lt;/strong&gt; If you're on ChatGPT, go to Settings → Data Controls → disable "Improve the model for everyone." Claude: Settings → Privacy. Do it today.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never paste credentials, API keys, or customer data.&lt;/strong&gt; Ever. Not even to "quickly test something."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use enterprise tiers for work.&lt;/strong&gt; If your company won't pay for enterprise AI, that tells you something about how they value data security.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assume everything you type is public.&lt;/strong&gt; Not because it necessarily will be — but because the mental model keeps you safe.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;For companies:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Deploy enterprise AI with training opt-out.&lt;/strong&gt; ChatGPT Enterprise, Claude for Business, Azure OpenAI — pick one, enforce it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block personal AI accounts on corporate networks.&lt;/strong&gt; DLP (Data Loss Prevention) tools can detect when employees paste data into consumer AI services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit what's already been shared.&lt;/strong&gt; The 77% stat means your data is probably already out there. Know what you're dealing with.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run AI through self-hosted models for sensitive work.&lt;/strong&gt; Open-source models running on your own infrastructure = zero data leaves the building.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;For builders:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Never hardcode secrets in repos.&lt;/strong&gt; 65% of AI companies have leaked credentials on GitHub. Don't be number 66%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat AI agent permissions like employee access.&lt;/strong&gt; Least privilege. No agent needs access to everything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor agent network traffic.&lt;/strong&gt; If your agent is making requests to URLs you didn't authorize, something is wrong.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  The Uncomfortable Truth
&lt;/h2&gt;

&lt;p&gt;The AI productivity revolution is real. People who use AI tools are measurably more productive.&lt;/p&gt;

&lt;p&gt;But here's the counterintuitive part: &lt;strong&gt;the more productive the tool, the more data it needs to see. And the more data it sees, the more it knows about you — and the less control you have over where that knowledge goes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You're not the customer. You're not even the product. You're the training data.&lt;/p&gt;

&lt;p&gt;77% of your coworkers already made this trade without thinking about it. The question is whether you're going to be deliberate about it, or whether you'll find out the hard way — when your competitor launches your product three months before you do.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Counterintuitive Engineering | See the world differently.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>engineering</category>
      <category>ai</category>
      <category>software</category>
    </item>
    <item>
      <title>The Open Source Trap: Why Free Software Is the Most Expensive Choice You'll Make</title>
      <dc:creator>CounterIntEng</dc:creator>
      <pubDate>Sat, 28 Mar 2026 04:58:01 +0000</pubDate>
      <link>https://dev.to/counterinteng/the-open-source-trap-why-free-software-is-the-most-expensive-choice-youll-make-2bk7</link>
      <guid>https://dev.to/counterinteng/the-open-source-trap-why-free-software-is-the-most-expensive-choice-youll-make-2bk7</guid>
      <description>&lt;h1&gt;
  
  
  The Open Source Trap: Why Free Software Is the Most Expensive Choice You'll Make
&lt;/h1&gt;

&lt;p&gt;In 2023, HashiCorp changed Terraform's license from MPL 2.0 to BSL 1.1. One line in a CHANGELOG. That single line triggered an estimated $600 million in enterprise re-tooling costs across the industry. Companies that had built their entire infrastructure automation on Terraform -- thousands of modules, years of institutional knowledge, CI/CD pipelines hardwired to &lt;code&gt;terraform plan&lt;/code&gt; -- woke up to discover that "free" had a price tag after all.&lt;/p&gt;

&lt;p&gt;I was one of those people. Not at the $600M scale, obviously. But I had Terraform wired into everything. Dozens of modules. Custom providers. A deployment pipeline that assumed Terraform would always be there, always be open, always be free.&lt;/p&gt;

&lt;p&gt;I was wrong about that.&lt;/p&gt;

&lt;p&gt;And I've been wrong about open source economics for most of my career. This is what I've learned since.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Rug Pull Hall of Fame
&lt;/h2&gt;

&lt;p&gt;Let's start with the receipts. These aren't hypotheticals. These are things that already happened to real companies spending real money.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HashiCorp / Terraform (2023)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;August 10, 2023. HashiCorp switches Terraform from Mozilla Public License 2.0 to Business Source License 1.1. The BSL explicitly prohibits using Terraform in any product that competes with HashiCorp. This isn't a minor clause. If you're a managed service provider, a cloud platform, a DevOps consultancy that packages Terraform into your offering -- you're suddenly in violation.&lt;/p&gt;

&lt;p&gt;The Linux Foundation responds by launching OpenTofu, a community fork. But forking doesn't solve the problem. Every company that built on Terraform now faces a choice: stay on BSL-licensed Terraform and accept HashiCorp's terms, or migrate to OpenTofu and absorb the engineering cost of switching. Neither option is free. Gartner estimated the industry-wide migration and re-evaluation cost at $600M+. Individual enterprises reported $2-5M in internal re-tooling costs just to evaluate their options.&lt;/p&gt;

&lt;p&gt;The kicker? HashiCorp was acquired by IBM for $6.4 billion in 2024. The license change wasn't ideological. It was a valuation play. Tighten the monetization, boost the revenue trajectory, sell the company. Open source users were the product being sold.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Redis (2024)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Redis Labs -- sorry, just "Redis" now -- switched from BSD to a dual license: Redis Source Available License (RSAv2) and Server Side Public License (SSPL). The effect: cloud providers can no longer offer Redis as a managed service without a commercial agreement.&lt;/p&gt;

&lt;p&gt;AWS had already seen this coming. They forked Redis into Valkey under the Linux Foundation. But every company running Redis in production had to answer a question they never expected: "Are we in compliance?" Teams that had deployed Redis as a commodity -- the way you deploy oxygen, without thinking about it -- suddenly needed legal review. Compliance audits. Vendor risk assessments. The hidden cost wasn't in the license fee. It was in the thousands of engineering and legal hours spent figuring out what the license change meant for their specific use case.&lt;/p&gt;

&lt;p&gt;I talked to a startup CTO who spent three weeks -- three weeks of a four-person engineering team -- just auditing their Redis usage to determine if they needed to migrate. They didn't end up migrating. But those three weeks cost them roughly $120K in loaded engineering time. For software that was supposed to be free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elasticsearch / OpenSearch (2021)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Elastic changed Elasticsearch from Apache 2.0 to SSPL in January 2021. AWS responded by forking OpenSearch. The open source community split. And every company using Elasticsearch had to pick a side.&lt;/p&gt;

&lt;p&gt;The migration cost for large Elasticsearch deployments to OpenSearch was brutal. Different plugin ecosystems. Different API behaviors at the edges. Different release cadences. One financial services company I know spent $1.8M over eight months migrating from Elasticsearch to OpenSearch -- not because OpenSearch was better, but because they couldn't accept the SSPL terms.&lt;/p&gt;

&lt;p&gt;The irony? They'd chosen Elasticsearch in the first place because it was "free and open source." That free decision cost them $1.8M to undo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MongoDB (2018)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MongoDB switched from AGPL to SSPL in October 2018. This was actually the opening shot of the modern license-change era. MongoDB's argument: cloud providers were offering MongoDB-as-a-service without contributing back. Their solution: a license so restrictive that offering MongoDB as a service requires you to open-source your entire stack.&lt;/p&gt;

&lt;p&gt;AWS launched DocumentDB. Companies scrambled. The pattern was set.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CockroachDB (2024)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cockroach Labs pulled the same move in 2024, switching from Apache 2.0 to a proprietary license for their core product. Their enterprise features had always been proprietary, but the core distributed SQL engine was supposed to be the open part. The part you built on. The part your architecture depended on.&lt;/p&gt;

&lt;p&gt;Then it wasn't open anymore.&lt;/p&gt;

&lt;p&gt;Companies that had chosen CockroachDB specifically because it was "the open source alternative to Google Spanner" discovered they'd built on the same trap. Different name, same playbook.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Running Tally&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let me add this up. In just the last three years:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HashiCorp/Terraform: ~$600M industry re-tooling (Gartner estimate)&lt;/li&gt;
&lt;li&gt;Redis relicensing: untold compliance and migration costs across millions of deployments&lt;/li&gt;
&lt;li&gt;Elasticsearch to OpenSearch: $1-5M per large enterprise migration&lt;/li&gt;
&lt;li&gt;CockroachDB: ongoing cost assessment for affected users&lt;/li&gt;
&lt;li&gt;MongoDB SSPL fallout: still reverberating six years later&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's billions of dollars in aggregate cost. For software that was free.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Mechanism: How Free Becomes Expensive
&lt;/h2&gt;

&lt;p&gt;Here's what I didn't understand for years. Open source isn't charity. It's a business model. And like all business models, it has a monetization lifecycle. Once you see the pattern, you can't unsee it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 1: The Gift&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A company releases software under a permissive license. MIT. Apache 2.0. BSD. The message: "Use this for anything. No strings attached." Adoption explodes. The project gets traction, stars, contributors. Blog posts get written. Conference talks get given. Developers start building on it -- not just using it, but depending on it. Architecturally. Structurally. In ways that would be extremely painful to reverse.&lt;/p&gt;

&lt;p&gt;This stage isn't cynical. The founders usually mean it. They genuinely want adoption. They genuinely believe in open source. But they also have investors. And investors have timelines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 2: The Moat&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The project becomes infrastructure. Not a library you can swap out in an afternoon, but a foundational dependency. Your data lives in it. Your workflows assume it. Your team's expertise is built around it. Switching costs compound silently, like interest on debt you didn't know you had.&lt;/p&gt;

&lt;p&gt;This is the critical phase. The software is still free. You're not paying anything. But you're accumulating switching costs every single day. Every Terraform module you write. Every Redis data structure you design around. Every Elasticsearch query pattern your application assumes. Each one is a deposit into an account you can never withdraw from.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 3: The Squeeze&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The company needs revenue. Or the company needs to justify its valuation to investors. Or the company is preparing for acquisition. The license changes. Not to something wildly restrictive -- just restrictive enough to capture the value that's been accumulating in all those switching costs.&lt;/p&gt;

&lt;p&gt;The calculation is simple: if it costs you $2M to migrate away, they can charge you up to $1.9M and you'll pay. You'll complain. You'll write angry blog posts. But you'll pay. Because $1.9M is less than $2M.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 4: The Fork&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The community forks. OpenTofu. Valkey. OpenSearch. The fork is real, it works, and it's maintained. But forking doesn't eliminate the cost -- it redistributes it. You still have to evaluate, migrate, test, and maintain. The fork is a pressure valve, not a solution.&lt;/p&gt;

&lt;p&gt;And here's the part nobody talks about: forks have survival risk. They depend on sustained community investment. If the original company has $6 billion in IBM acquisition money behind it, and the fork has volunteer maintainers and Linux Foundation goodwill -- which one is going to have better security patches in five years?&lt;/p&gt;

&lt;p&gt;I don't know. Neither do you. That uncertainty is itself a cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pattern: Which Projects Are Traps
&lt;/h2&gt;

&lt;p&gt;Not all open source is created equal. After watching this cycle play out half a dozen times, I've started classifying projects by their rug-pull risk. Here's my framework.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;High Risk: Single-Company Open Source&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One company controls the project. One company employs the core maintainers. One company owns the trademark. One company decides the license.&lt;/p&gt;

&lt;p&gt;Examples: Terraform (HashiCorp), Redis (Redis Inc), Elasticsearch (Elastic), MongoDB (MongoDB Inc), CockroachDB (Cockroach Labs), Confluent's Kafka distribution.&lt;/p&gt;

&lt;p&gt;The tell: look at the contributor graph. If 80%+ of commits come from employees of one company, you're not using community software. You're using a company's product that happens to have its source code visible. There's a massive difference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Medium Risk: Foundation-Governed but Corporate-Dominated&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The project lives under a foundation (Apache, Linux Foundation, CNCF), but one company contributes the majority of the code.&lt;/p&gt;

&lt;p&gt;Examples: Kubernetes (Google-originated, now broadly contributed), Chromium (Google-dominated), Android (Google-controlled in practice).&lt;/p&gt;

&lt;p&gt;The foundation provides some protection against license changes. But it doesn't protect against other forms of control: API direction, feature priorities, deprecation schedules. Google can't change Kubernetes' license. But Google can absolutely influence where Kubernetes goes -- and where it doesn't go.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lower Risk: Broadly-Contributed Foundation Projects&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Multiple companies contribute meaningfully. No single company could fork and dominate. The project's governance is genuinely distributed.&lt;/p&gt;

&lt;p&gt;Examples: Linux kernel, PostgreSQL, Apache HTTP Server, Python, Node.js.&lt;/p&gt;

&lt;p&gt;These projects are safer because the cost of a rug pull would be borne by the puller as much as the users. No single company can change PostgreSQL's license because no single company controls PostgreSQL. The BSD license is baked into the project's DNA, enforced by distributed governance rather than corporate goodwill.&lt;/p&gt;

&lt;p&gt;This is the category where open source actually delivers on its promise. Notice how small this category is compared to the others.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hidden Tax: "Community" Maintenance
&lt;/h2&gt;

&lt;p&gt;There's another cost that doesn't show up in any license comparison. I call it the community maintenance tax.&lt;/p&gt;

&lt;p&gt;When you use a commercial product and something breaks, you open a support ticket. Someone whose job it is to help you will help you. When you use open source and something breaks, you open a GitHub issue. Maybe someone responds. Maybe they don't. Maybe the response is "PRs welcome" -- which is open source for "fix it yourself."&lt;/p&gt;

&lt;p&gt;I tracked my team's time on open source maintenance over one quarter last year. Debugging issues that would have been support tickets with a commercial product. Reading source code to understand undocumented behavior. Patching vulnerabilities before official releases. Working around bugs that were "known issues" for months.&lt;/p&gt;

&lt;p&gt;The total: roughly 15% of one senior engineer's time. At fully loaded cost, that's about $45K/year. For one project. We use dozens of open source dependencies.&lt;/p&gt;

&lt;p&gt;This isn't a criticism of open source maintainers. They're doing incredible work, usually for free, usually in their spare time. That's the problem. The reliability of your production infrastructure depends on someone else's spare time. That's a risk you're not pricing in.&lt;/p&gt;

&lt;h2&gt;
  
  
  For Builders: The Dependency Evaluation Framework
&lt;/h2&gt;

&lt;p&gt;After getting burned enough times, I built a checklist. Before adopting any open source dependency for anything beyond a toy project, I run through these questions:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Who pays the maintainers?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the answer is "a single company," that company controls your dependency. Their incentives will eventually diverge from yours. Not might. Will.&lt;/p&gt;

&lt;p&gt;If the answer is "nobody, they're volunteers," your critical infrastructure depends on goodwill. That's not a business strategy.&lt;/p&gt;

&lt;p&gt;If the answer is "multiple companies through a foundation," you're in the safest category. But verify. Look at the actual contributor data, not the governance page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. What are my switching costs today? In six months? In two years?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Map it out. How deeply integrated is this dependency? How much institutional knowledge is built around it? How many other systems depend on it? If you can't swap it out in under a week, you're already locked in. Act accordingly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Has the license ever changed?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If yes, it will change again. The first change breaks the seal. Companies that change licenses once have demonstrated their willingness to do so. Treat the current license as temporary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. What's the company's financial trajectory?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pre-IPO companies with VC pressure will monetize. Post-acquisition companies will monetize. Companies that just raised a down round will monetize aggressively. The license change doesn't come from malice. It comes from a board meeting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Is there a credible fork or alternative?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the project gets rug-pulled tomorrow, where do you go? If the answer is "I don't know," you've identified a single point of failure in your architecture. Fix it before you have to fix it under pressure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. What's the total cost of ownership -- not just the license fee?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Add up: engineering time for maintenance, security patching, version upgrades, debugging undocumented behavior, training new team members, compliance review. Compare that to the cost of a commercial alternative. I've done this math multiple times now. Open source is often more expensive. Not always. But more often than most people admit.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Means for Your Stack
&lt;/h2&gt;

&lt;p&gt;I'm not arguing against open source. I'm arguing against the default assumption that open source is always the cheaper choice. It's not. It's the choice with the most hidden costs.&lt;/p&gt;

&lt;p&gt;Here's how I make decisions now:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For foundational infrastructure:&lt;/strong&gt; use broadly-contributed foundation projects (PostgreSQL over MongoDB, Linux over proprietary OS, Kubernetes with multi-vendor support). These have the lowest rug-pull risk and the highest long-term stability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For application-level dependencies:&lt;/strong&gt; evaluate commercial alternatives seriously. A $500/month SaaS bill with an SLA, support team, and contractual obligation is often cheaper than a "free" open source project that costs you $45K/year in maintenance time and carries license-change risk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For single-company open source:&lt;/strong&gt; use it with your eyes open. Budget for the migration you'll eventually need. Architect for replaceability. Abstract your interfaces. Don't let convenience today become captivity tomorrow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For anything touching security or compliance:&lt;/strong&gt; pay for software with a vendor behind it. When a CVE drops at 2 AM and your open source maintainer is asleep in a different timezone, you'll wish you had a support contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Action List
&lt;/h2&gt;

&lt;p&gt;If you take nothing else from this, take these five actions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Audit your dependencies this week.&lt;/strong&gt; List every open source project in your stack. Mark each one as single-company, corporate-foundation, or broadly-contributed. The single-company ones are your risk exposure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Calculate your switching costs.&lt;/strong&gt; For each high-risk dependency, estimate the cost to replace it. Time, money, institutional knowledge. If the number makes you uncomfortable, that's the point.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Abstract your interfaces.&lt;/strong&gt; Don't call Terraform directly from 200 scripts. Wrap it. Don't embed Redis commands throughout your codebase. Use an abstraction layer. The hour you spend on the wrapper today saves you months when the license changes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set up license monitoring.&lt;/strong&gt; Tools like FOSSA, Snyk, and WhiteSource track license changes in your dependency tree. If a transitive dependency switches from MIT to SSPL, you want to know before your legal team finds out the hard way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Budget for migration.&lt;/strong&gt; If you depend on single-company open source, put a line item in your annual budget for potential migration. Not because it will definitely happen this year. Because when it does happen, you won't have time to find the budget.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Real Lesson
&lt;/h2&gt;

&lt;p&gt;The most expensive software I've ever used was free. Not because open source is bad -- it's one of the most important movements in technology. But because I confused "no license fee" with "no cost." Those are wildly different things.&lt;/p&gt;

&lt;p&gt;The companies making these license changes aren't villains. They're businesses doing what businesses do: capturing value. The mistake isn't theirs. The mistake is ours -- for building on foundations we don't control and being surprised when the ground shifts.&lt;/p&gt;

&lt;p&gt;Every dependency is a bet. Open source dependencies are bets with hidden odds. The license is permissive today. The community is vibrant today. The company is generous today.&lt;/p&gt;

&lt;p&gt;Today is not forever.&lt;/p&gt;

&lt;p&gt;Price your dependencies accordingly.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I write about the hidden costs and counterintuitive mechanics of the tools we build with. If this saved you from an expensive mistake, follow &lt;a href="https://x.com/CounterIntEng" rel="noopener noreferrer"&gt;@CounterIntEng&lt;/a&gt; on X.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>engineering</category>
      <category>ai</category>
      <category>software</category>
    </item>
    <item>
      <title>Programmers Before Plumbers. AI Knows Who to Fire.</title>
      <dc:creator>CounterIntEng</dc:creator>
      <pubDate>Fri, 27 Mar 2026 06:27:19 +0000</pubDate>
      <link>https://dev.to/counterinteng/programmers-before-plumbers-ai-knows-who-to-fire-3mek</link>
      <guid>https://dev.to/counterinteng/programmers-before-plumbers-ai-knows-who-to-fire-3mek</guid>
      <description>&lt;h1&gt;
  
  
  Programmers Before Plumbers. AI Knows Who to Fire.
&lt;/h1&gt;

&lt;p&gt;37%.&lt;/p&gt;

&lt;p&gt;That's how many companies plan to replace workers with AI by the end of 2026. Not "explore AI." Not "experiment with AI." Replace. Workers. With AI. One in three companies looked at their payroll, looked at ChatGPT, and chose ChatGPT.&lt;/p&gt;

&lt;p&gt;Think that won't include you? Think again.&lt;/p&gt;

&lt;p&gt;Here's what nobody's talking about: every job AI kills creates a gap. And gaps are where builders make money.&lt;/p&gt;

&lt;p&gt;I've spent the last year building AI tools for the construction industry. Not gonna lie — what I've learned has nothing to do with construction and everything to do with where the economy is actually heading. I was wrong about which jobs would go first. Dead wrong. I assumed physical industries were vulnerable. The opposite happened. The pattern is so clear it's almost offensive that more people aren't seeing it.&lt;/p&gt;

&lt;p&gt;Let me show you the pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers Are Brutal. Read Them Anyway.
&lt;/h2&gt;

&lt;p&gt;39% of companies already laid off workers due to AI — in 2025 alone. Not 2030. Not "sometime in the future." Last year. Done. Gone.&lt;/p&gt;

&lt;p&gt;Here's what that actually means: if you work at a company with 100 people, statistically 39 of your peers at competing firms already lost their jobs to a language model. Their desks are empty. Their Slack accounts are deactivated.&lt;/p&gt;

&lt;p&gt;58% expect even more layoffs in 2026. Dead serious — more than half of companies are planning &lt;em&gt;another&lt;/em&gt; round. The first wave wasn't enough.&lt;/p&gt;

&lt;p&gt;Anthropic — the company that builds Claude — published research that Fortune summarized in one devastating phrase: &lt;strong&gt;"a Great Recession for white-collar workers."&lt;/strong&gt; Not blue-collar. Not manual labor. White-collar. The people who thought their degrees protected them. Wrong.&lt;/p&gt;

&lt;p&gt;I'll be blunt: your MBA is not a moat. Your "10 years of experience" is not a moat. If your experience consists of doing the same pattern-based task for a decade, you just gave the machine a better training set. That's not a resume. That's a training corpus.&lt;/p&gt;

&lt;p&gt;Here's where it gets interesting. These aren't random layoffs. There's a pattern in who gets cut, and that pattern is your roadmap.&lt;/p&gt;

&lt;p&gt;Who's already being replaced? Customer support triage. Basic content production. Data entry and analysis. Scheduling. Recruitment screening. Internal reporting. Notice anything? Every single one of these is &lt;em&gt;trained, standardized cognitive labor&lt;/em&gt;. Rules in, output out. The truth is simple: if your job has a manual, your job has an expiration date.&lt;/p&gt;

&lt;p&gt;Who's safe? Electricians. Plumbers. Nurses. Therapists. Creative directors.&lt;/p&gt;

&lt;p&gt;But actually — why does the Washington Post report that web designers and secretaries face more risk than janitors? Because a janitor operates in physical chaos. Every building is different. Every mess is different. Every broken toilet is a unique diagnostic puzzle. A web designer? They arrange components according to conventions. Conventions are patterns. Patterns are what AI eats for breakfast.&lt;/p&gt;

&lt;p&gt;I noticed something while reading these reports that no analyst seems to highlight: the correlation between "job requires sitting at a desk" and "job is at risk" is almost 1:1. If your work lives entirely inside a screen, you're competing directly with software. Software doesn't negotiate salary. Software doesn't take sick days. Game over.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why White-Collar Goes First (And Why That's Counterintuitive)
&lt;/h2&gt;

&lt;p&gt;We spent 40 years telling kids: "Work with your brain, not your hands." The economy just flipped that script. Turns out, we had it backwards the entire time.&lt;/p&gt;

&lt;p&gt;Here's the thing — we weren't just wrong. We were &lt;em&gt;exactly backwards&lt;/em&gt;. The hierarchy we built — thinkers above makers, degrees above trades, keyboards above wrenches — AI just inverted the whole thing overnight. Gone.&lt;/p&gt;

&lt;p&gt;The key insight is this: AI is essentially a pattern-matching engine running at inhuman scale. The more rules-based your job is, the more automatable it becomes. This is not speculation. This is math.&lt;/p&gt;

&lt;p&gt;Programming? Pattern-matching over syntax and logic. Copywriting? Pattern-matching over tone and structure. Data analysis? Pattern-matching over numbers and trends. Customer support? Pattern-matching over complaint categories and resolution scripts. Not one of these requires hands.&lt;/p&gt;

&lt;p&gt;Here's what that actually means for individuals: if you can describe your job in a flowchart, an AI can &lt;em&gt;do&lt;/em&gt; your job from that flowchart. Wake up.&lt;/p&gt;

&lt;p&gt;A plumber diagnosing a leak in a 50-year-old building? That's judgment under uncertainty. The pipe isn't where the blueprint says it is. The wall has been modified three times. There's water damage that could be from the roof or the bathroom two floors up. The plumber has to &lt;em&gt;think&lt;/em&gt; in meat-space, with hands, eyes, and decades of intuition about how water behaves in old structures.&lt;/p&gt;

&lt;p&gt;No language model on earth can do that. Not GPT-5. Not Claude. Not whatever comes next year. Honestly, I was wrong about this — I originally thought AI would commoditize physical trades by enabling less-skilled workers to perform at expert level. The opposite happened. AI made the &lt;em&gt;diagnosis&lt;/em&gt; harder to fake, not easier. The trades got more valuable, not less.&lt;/p&gt;

&lt;p&gt;Here's the paradox that should reshape your career thinking: &lt;strong&gt;the jobs that looked "safe" because they required education are now the most vulnerable, and the jobs that looked "replaceable" because they required physical labor are now the most protected.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Look — I'm not telling you to quit your desk job and become a plumber. I'm telling you to ask yourself, honestly: does your daily work look more like a plumber's or more like a prompt? Be brutal about the answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Gap Map: Where Money Moves When Jobs Die
&lt;/h2&gt;

&lt;p&gt;Every displaced function creates demand for something new. This isn't optimism. This is economics. Let me map it.&lt;/p&gt;

&lt;p&gt;You'd think displaced workers create a labor surplus. Not really. They create a demand vacuum. When companies fire their support teams, they don't stop needing support — they just stop getting the &lt;em&gt;human&lt;/em&gt; kind. And when customers notice, they pay a premium for the real thing. Which leads to an entirely new market tier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Customer support gets automated.&lt;/strong&gt; Basic tickets? Gone. Chatbots handle them. But what about the 15% of tickets that are genuinely complex? The customer who's angry, confused, and has a problem that doesn't fit any template? Companies still need humans for that. But now those humans need to be &lt;em&gt;better&lt;/em&gt; — more empathetic, more creative, more authoritative. The floor rises. The pay rises with it. This means the worst customer support job just disappeared. The best one just got a 40% raise. The move is clear: specialize in the hard cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basic content production gets automated.&lt;/strong&gt; Your SEO blog post about "10 Tips for Better Sleep"? AI writes that in 40 seconds. Dead category. Crashed. But authentic human perspective? Contrarian takes? Writing that makes people &lt;em&gt;feel&lt;/em&gt; something? That's premium now. Not despite AI — &lt;em&gt;because of&lt;/em&gt; AI. When everyone can produce content, only distinctive content has value. The supply of generic exploded, which results in the demand for genuine skyrocketing. I'll be blunt: if you're a writer and you're worried, you should be. But not because AI writes better — because AI exposed how much "professional writing" was just competent pattern-filling all along. Here's what to do: stop writing what a prompt can write. Write what only you can write.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data analysis gets automated.&lt;/strong&gt; AI can crunch numbers faster than any analyst. But can it decide what the numbers &lt;em&gt;mean&lt;/em&gt; for your specific business in your specific market with your specific constraints? Can it tell your CEO to ignore the data and trust the qualitative signal from the sales team? No. Never. Data interpretation and decision-making — the messy, contextual, political, human part — that's where the premium moves. The truth is this: the analyst who says "here are the numbers" is dead. The analyst who says "here's what we should &lt;em&gt;do&lt;/em&gt; about the numbers, and here's why I'd bet my job on it" just became invaluable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recruitment screening gets automated.&lt;/strong&gt; Resume filtering? Done. AI handles it. But who decides what "culture fit" actually means? Who reads between the lines of a candidate's career story? Who knows that the person with the "wrong" background might be exactly right for this team at this moment? Judgment. Ambiguity. Human. Always human.&lt;/p&gt;

&lt;p&gt;See the pattern? AI eats the &lt;em&gt;floor&lt;/em&gt; of every function. And the ceiling gets higher and more valuable.&lt;/p&gt;

&lt;p&gt;Here's the tension nobody wants to admit: the gap between floor and ceiling is widening so fast that middle-skill workers have nowhere to stand. You're either premium or you're automated. The comfortable middle? Collapsed. There's no middle anymore.&lt;/p&gt;

&lt;p&gt;Is your current work closer to the floor or the ceiling? Be honest. Not where you &lt;em&gt;think&lt;/em&gt; your work is. Where it actually is. If you don't know, that's your answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  For Builders: Where to Aim Your Next Project
&lt;/h2&gt;

&lt;p&gt;Look — here's the opportunity most people are missing.&lt;/p&gt;

&lt;p&gt;37% of companies plan to replace workers with AI. That means &lt;strong&gt;63% are not.&lt;/strong&gt; Sixty-three percent. Almost two-thirds of companies still need their humans. But those companies still need to compete with the 37% who are automating.&lt;/p&gt;

&lt;p&gt;What do they need? AI-augmented workflows. Not AI replacements. Tools that make their existing workers 3x more productive without firing anyone. The move is obvious once you see it.&lt;/p&gt;

&lt;p&gt;That's the SaaS goldmine of 2026-2028. And I'm not speculating — I built a company in one of these gaps.&lt;/p&gt;

&lt;p&gt;Think about it. A company that wants to keep its team but stay competitive needs software that integrates AI &lt;em&gt;into&lt;/em&gt; their people's workflow. Not software that replaces their people. The emotional and political dynamics inside companies heavily favor this approach. No manager wants to be the one who fired half the team. Every manager wants to be the one whose team suddenly produces 3x output. That's not a feature request. That's human nature.&lt;/p&gt;

&lt;p&gt;The key decision for any builder right now: build for the augmentation market, not the replacement market. Dead serious — the replacement market is a race to the bottom. The augmentation market is a race to premium.&lt;/p&gt;

&lt;p&gt;We're doing exactly this with RenoClear. It's an AI tool for the construction industry — helps contractors estimate costs, review quotes, measure rooms. It doesn't replace a single contractor. It makes contractors faster, more accurate, and more competitive. The contractors love it because it's &lt;em&gt;their&lt;/em&gt; tool, not their replacement. Honestly, the first version was terrible. I assumed contractors wanted automation. They wanted &lt;em&gt;superpowers&lt;/em&gt;. Big difference. I was wrong, and the users told me in the first week.&lt;/p&gt;

&lt;p&gt;Where else does this model apply? Legal — AI-augmented contract review for solo practitioners. Healthcare — AI-assisted diagnosis summaries for doctors who are drowning in paperwork. Education — AI-powered grading assistance for teachers who have 150 students. Finance — AI-enhanced due diligence for small investment teams. Every single one of these is a seven-figure business waiting to be built.&lt;/p&gt;

&lt;p&gt;Every industry has workers who are overwhelmed and under-tooled. Build for them. They'll pay because the alternative — getting automated out of existence — is worse. Here's what to do: pick one. Ship in 30 days. Iterate.&lt;/p&gt;

&lt;p&gt;Here's what I tell founders who ask me where to start: never build for the industry you think is biggest. Always build for the industry where you've personally felt the pain. Secondhand market research is worthless next to firsthand frustration.&lt;/p&gt;

&lt;h2&gt;
  
  
  For Individuals: The Positioning Play
&lt;/h2&gt;

&lt;p&gt;The truth is harsh: stop competing with AI on AI's turf. You will lose. Always.&lt;/p&gt;

&lt;p&gt;AI's turf: speed, volume, consistency, pattern-matching, working at 3 AM without complaining, processing 10,000 data points in seconds, generating 50 variations of the same email.&lt;/p&gt;

&lt;p&gt;You cannot beat AI at those things. Stop trying. Every minute you spend trying to be faster or more productive at pattern-matching tasks is a minute wasted. Here's what that actually means: "productivity" as we defined it for 50 years — output per hour — is no longer a human metric. Machines won that game. It's over. Find a different game.&lt;/p&gt;

&lt;p&gt;Here's what AI cannot do:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Judgment in ambiguity.&lt;/strong&gt; When the data says one thing but your gut says another, and you have to make a call with incomplete information, under time pressure, with real consequences — that's human territory. AI will give you a probability distribution. You have to decide. And look — deciding wrong and learning from it is still more valuable than never deciding at all. The machine can't do either.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Relationship building.&lt;/strong&gt; A client doesn't trust your AI. They trust you. The handshake. The dinner. The moment when you said "I don't know, but I'll figure it out" and they believed you. That trust is unautomatable. I noticed something: companies that went all-in on AI customer interaction are quietly rehiring humans for their highest-value accounts. The automation savings weren't worth the relationship damage. Turns out, people buy from people.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Physical-world expertise.&lt;/strong&gt; Anything that requires navigating the chaos of the real, physical, messy world. Construction. Healthcare. Emergency services. Skilled trades. The world is not a dataset. It's a place where pipes leak, patients cry, and nothing works exactly like the manual says. No model can hold a wrench.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creative direction.&lt;/strong&gt; AI can generate 100 images. It cannot tell you which one is &lt;em&gt;right&lt;/em&gt;. It cannot feel the cultural moment. It cannot say "this is boring, try something that scares you." Creative direction is taste plus courage plus context. AI has none of those. Not even close.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-domain synthesis.&lt;/strong&gt; AI is trained on patterns within domains. The most valuable insights come from connecting things that don't obviously connect. A biologist who understands economics. A plumber who understands software. A musician who understands data visualization. These hybrids are impossible to automate because the machine doesn't even know the connection exists until a human makes it. This means the most valuable person in any room is the one who doesn't fit the room.&lt;/p&gt;

&lt;p&gt;The safest career move in 2026 is not "learn to code."&lt;/p&gt;

&lt;p&gt;It's "learn to do what code can't."&lt;/p&gt;

&lt;p&gt;Here's the thing — that sounds abstract. So let me make it concrete. This week, find one decision you made at work that required weighing factors no spreadsheet captures. Politics. Gut feel. Cultural context. Relationship history. &lt;em&gt;That's&lt;/em&gt; your moat. Do more of that. Get better at that. Make yourself known for that. Share what you learn.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Shift: Tasks, Not Jobs
&lt;/h2&gt;

&lt;p&gt;Here's the nuance that most headlines miss.&lt;/p&gt;

&lt;p&gt;AI doesn't replace &lt;em&gt;jobs&lt;/em&gt;. It replaces &lt;em&gt;tasks&lt;/em&gt;. A marketing manager's job has maybe 40 distinct tasks. AI might automate 15 of them. The job doesn't disappear — it transforms. The marketing manager now spends zero time on reporting and scheduling, and all their time on strategy and relationships.&lt;/p&gt;

&lt;p&gt;Sounds great, right? There's a catch. A brutal one.&lt;/p&gt;

&lt;p&gt;If your job was 15 tasks, and AI handles 10 of them, your company doesn't need five of you anymore. They need two. Three are gone. The three who leave are the ones who were &lt;em&gt;only&lt;/em&gt; good at the tasks AI now handles. The truth here is uncomfortable: the question isn't "can AI do my job?" It's "can AI do &lt;em&gt;enough&lt;/em&gt; of my job that my company needs fewer of me?"&lt;/p&gt;

&lt;p&gt;But the bigger, darker catch: &lt;strong&gt;entry-level positions are vanishing.&lt;/strong&gt; Those 10 automated tasks? They used to be how juniors learned the job. The report-writing, the data-pulling, the scheduling — that was training. When AI handles the training tasks, how do new people enter the field? Nobody has an answer yet. That should terrify you.&lt;/p&gt;

&lt;p&gt;Not gonna lie — this is the part that keeps me up at night. We're not just disrupting jobs. We're disrupting the &lt;em&gt;ladder&lt;/em&gt;. The first three rungs are gone. And nobody's building new ones yet. The entire pipeline is broken.&lt;/p&gt;

&lt;p&gt;This is the real crisis nobody's solving yet. And it's an enormous opportunity for builders. Whoever figures out the "new apprenticeship" model — how to train humans in an AI-augmented workplace — builds a billion-dollar company. Here's what to do if that's you: start with one trade, one profession, one vertical. Prove it works small.&lt;/p&gt;

&lt;p&gt;Bootcamps taught people to code. What teaches people to &lt;em&gt;think alongside AI&lt;/em&gt;? What teaches judgment, not just execution?&lt;/p&gt;

&lt;p&gt;If you can answer that question with a product, you're sitting on the next big thing. And honestly? I think the answer won't come from Silicon Valley. It'll come from someone who's actually trained apprentices in the real world — a master electrician, a senior nurse, a construction foreman — someone who knows what "learning by doing" actually means when the "doing" gets automated.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Two-Year Window
&lt;/h2&gt;

&lt;p&gt;Here's my honest read on timing.&lt;/p&gt;

&lt;p&gt;We're in a two-year window — 2026 to 2028 — where the displacement is happening but the new equilibrium hasn't formed yet. This is the chaos period. And chaos is where outsized returns live. Always has been.&lt;/p&gt;

&lt;p&gt;The big companies are paralyzed by internal politics. They can't move fast. They're debating AI ethics policies and forming committees and hiring "Chief AI Officers" who don't ship anything. Dead weight.&lt;/p&gt;

&lt;p&gt;The small builders? The indie hackers? The people who can ship a tool in a weekend and iterate based on real user feedback? This is your moment. The gap between "AI can do this" and "someone built a product that actually does this well" is enormous right now. That gap is pure margin.&lt;/p&gt;

&lt;p&gt;In two years, that gap closes. The big players figure it out. The market consolidates. The easy wins disappear. Window shut.&lt;/p&gt;

&lt;p&gt;Look — I've watched this exact pattern play out in construction tech. The window where a solo builder could launch and win lasted about 18 months. Then the incumbents woke up. The indie advantage is real, but it's temporary. Move now or compete with Salesforce later. Your call.&lt;/p&gt;

&lt;p&gt;The time to build is now. Not "soon." Now. Not next quarter. Today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make Sure Your Work Doesn't Look Like a Prompt
&lt;/h2&gt;

&lt;p&gt;AI doesn't know who to fire. It's a tool. It has no opinions, no agenda, no malice.&lt;/p&gt;

&lt;p&gt;Companies know who to fire. And they fire the people whose work looks like something a prompt can produce.&lt;/p&gt;

&lt;p&gt;Predictable output. Standardized format. No judgment calls. No relationship value. No physical-world engagement. No creative risk. If that describes your daily work, you're not safe. Your degree doesn't save you. Your experience doesn't save you. Your seniority doesn't save you. Nothing saves you except becoming irreplaceable.&lt;/p&gt;

&lt;p&gt;Here's the thing — I'm not trying to scare you. I'm trying to &lt;em&gt;move&lt;/em&gt; you. Fear without action is just anxiety. Fear with a plan is strategy.&lt;/p&gt;

&lt;p&gt;But here's the reversal that matters: &lt;strong&gt;if you're reading this, you're already ahead.&lt;/strong&gt; Most people are in denial. They're hoping their company won't automate. They're trusting their managers to protect them. They're waiting. Waiting is the most dangerous thing you can do right now.&lt;/p&gt;

&lt;p&gt;You're not waiting. You're reading about the disruption and thinking about how to position yourself. That puts you in a different category entirely.&lt;/p&gt;

&lt;p&gt;So here's your action plan. Three things. Do them this week. Dead serious.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One.&lt;/strong&gt; Audit your daily tasks. List every task you do in a week. Mark which ones AI could do at 80% quality. The marked tasks are your vulnerability surface. Start shifting your time toward the unmarked ones. This means cutting what's comfortable and leaning into what's hard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two.&lt;/strong&gt; Pick a gap from the gap map above. Customer escalation, authentic content, data interpretation, creative direction — any of them. Start building expertise there. Not "thinking about it." Building. Ship something. Write something. Make a decision that requires judgment and publish the reasoning. That's how you become visible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Three.&lt;/strong&gt; If you're a builder, identify one industry where workers are overwhelmed and under-tooled. Talk to five people in that industry this week. Find their pain. Build for it. The move is simple: solve one real problem for one real person, then scale.&lt;/p&gt;

&lt;p&gt;The disruption is not coming. It's here. 37% of companies. This year. The question isn't whether AI will reshape the labor market. It already has.&lt;/p&gt;

&lt;p&gt;The question is whether you're the one getting displaced or the one filling the gaps.&lt;/p&gt;

&lt;p&gt;If your work looks like something a prompt can produce — bookmark this. You'll need it sooner than you think. Share it with one person whose job is on the line. Drop a comment with the one task you're going to stop doing this week. That's not engagement bait. That's accountability.&lt;/p&gt;

&lt;p&gt;The people who act on this will look back in two years and say it was obvious. The people who don't will say nobody warned them. You've been warned.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Counterintuitive Engineering builds AI tools for industries that AI can't replace. Follow &lt;a href="https://x.com/CounterIntEng" rel="noopener noreferrer"&gt;@CounterIntEng&lt;/a&gt; for more.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>engineering</category>
      <category>ai</category>
      <category>software</category>
    </item>
    <item>
      <title>AI Can Write Better Than You. Nobody Cares.</title>
      <dc:creator>CounterIntEng</dc:creator>
      <pubDate>Tue, 24 Mar 2026 12:55:36 +0000</pubDate>
      <link>https://dev.to/counterinteng/ai-can-write-better-than-you-nobody-cares-2c6</link>
      <guid>https://dev.to/counterinteng/ai-can-write-better-than-you-nobody-cares-2c6</guid>
      <description>&lt;h1&gt;
  
  
  AI Can Write Better Than You. Nobody Cares.
&lt;/h1&gt;

&lt;p&gt;68 million. That's how many times the phrase "human touch" was mentioned on Weibo this year -- 68 million cries for something real in an ocean of AI-generated noise. Meanwhile, consumer preference for AI content crashed from 60% to 26% in three years, according to eMarketer's 2026 Creator Economy report. Not a dip. A collapse. And if you're betting your content strategy on AI doing the talking for you, those numbers should hit like a fire alarm at 3 AM.&lt;/p&gt;

&lt;p&gt;Here's the thing -- I am not some AI skeptic writing this from a typewriter. I use AI to build products, write code, generate images, analyze data, and publish articles to 5 platforms simultaneously through an automated pipeline I built myself. I run an entire software company as a solo founder with AI handling roughly 70% of the mechanical labor. And I'm here to tell you: AI content, as in content where AI is &lt;em&gt;the&lt;/em&gt; creator, is dying. The moment you hand over the steering wheel entirely, the thing you produce joins a pile so large that nobody can see it anymore.&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%2F76dzp7v7os3ze6bp1cnf.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%2F76dzp7v7os3ze6bp1cnf.png" alt="Preference Crash" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Flood
&lt;/h2&gt;

&lt;p&gt;Let me put it this way. Imagine a library where every single book on the shelf was written by the same author, in the same voice, about the same topics. That is what your feed looks like in 2026.&lt;/p&gt;

&lt;p&gt;YouTube's own internal research, reported by The Verge in early 2026, shows that over 20% of videos served to new users qualify as what researchers now call "AI slop" -- content that was generated, not created. Not curated by editorial judgment or shaped by personal experience, but extruded by a prompt (a text instruction to an AI model) and uploaded by a script.&lt;/p&gt;

&lt;p&gt;I know this world intimately because I've built tools adjacent to it. I've seen the MoneyPrinter-style pipelines: feed in a trending topic, let the AI generate a script, auto-generate voiceover, auto-cut stock footage, upload to 12 channels simultaneously. Zero human involvement after pressing "run." The output is technically content. It is not technically interesting.&lt;/p&gt;

&lt;p&gt;The math seemed compelling for a while. If one piece of content has a 1% chance of going viral, make 100 pieces and you get your hit. But think about it -- platforms adapted. Audiences adapted faster. According to Botify's 2025 SEO analysis, AI-generated pages saw a 9.9% decline in Google indexing rates year-over-year, which means even search engines are turning their backs. The 1% chance dropped to 0.01% because the denominator -- total content volume -- exploded while per-piece value collapsed toward zero. You can't win an attention game by flooding the field with things nobody wants to pay attention to. The result is a death spiral: more content, less reach per piece, so you make even more content, which drives reach down further.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "Human Touch" Is the New Premium
&lt;/h2&gt;

&lt;p&gt;Something fascinating happened on Chinese social media this year. The phrase "huoren gan" -- which translates roughly to "human touch" or "alive-person feeling" -- was mentioned 68 million times on Weibo, according to Weibo's own 2025 year-end trend report. Sixty-eight million. That is not a trend. That is a cultural movement.&lt;/p&gt;

&lt;p&gt;Here's what I think is really going on. In a world where AI can generate photorealistic images, flawless prose, and perfectly structured video essays, anything that visibly came from an actual human being becomes rare. It's like finding a handwritten letter in a mailbox full of junk flyers. And rare, as any economist will tell you, equals valuable.&lt;/p&gt;

&lt;p&gt;This is not an anti-AI backlash. Nobody on Weibo is saying "destroy the machines." They are saying: "I can tell this was made by a person, and that makes me trust it more." The distinction matters enormously. People don't hate AI. They hate being unable to tell whether a human was involved. They hate the feeling of being talked at by a machine pretending to be a person. This means that the trust gap is not about technology quality -- it's about perceived authenticity. And that gap is widening every month.&lt;/p&gt;

&lt;p&gt;Digiday captured this shift in their February 2026 creator economy analysis: "After oversaturation of AI content, creators' authenticity and messiness are in high demand." Read that sentence again. &lt;em&gt;Messiness&lt;/em&gt; is in demand. The typo in your tweet. The slightly off-center framing in your photo. The tangent you went on in paragraph four that had nothing to do with the topic but everything to do with who you are. AI can't replicate the messiness of human creativity because messiness is, by definition, unoptimized. And AI only knows how to optimize.&lt;/p&gt;

&lt;p&gt;Think about the last piece of content that genuinely stuck with you. Not the last thing you scrolled past. The last thing that made you stop, read the whole thing, and think about it afterward. I'd bet money it wasn't polished to perfection. It had edges. It had a voice that couldn't have come from anyone else. It had the fingerprints of a specific human being all over it. That is what the market is now willing to pay a premium for.&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%2Fe3ln1a3ccdiv2pevi0vt.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%2Fe3ln1a3ccdiv2pevi0vt.png" alt="200 vs 20K" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The 200-Follower Creator Who Beats the 20K-Follower Influencer
&lt;/h2&gt;

&lt;p&gt;Here is where the economics get genuinely interesting, and I'll be blunt -- this one surprised me.&lt;/p&gt;

&lt;p&gt;Brands are shifting budget away from macro-influencers with 20,000 polished followers and toward micro-creators with 200 genuine ones. Aspire's 2025 Influencer Marketing Benchmark Report found that micro-creators (under 1,000 followers) average engagement rates of 6-8%, while accounts above 10K average under 2%. This is not charity. This is ROI math.&lt;/p&gt;

&lt;p&gt;A creator with 200 followers who built that audience through real interactions, real opinions, and real content gets engagement rates that a 20K account running AI-generated posts cannot touch. It's the equivalent of a neighborhood restaurant where the owner knows your name versus a chain restaurant with better decor but zero soul. When that 200-follower creator recommends a product, their audience listens -- because they've built trust through visible humanity. When the 20K account posts another perfectly formatted, suspiciously well-written product review, the audience scrolls past. They've been trained by two years of AI saturation to pattern-match on inauthenticity.&lt;/p&gt;

&lt;p&gt;The implications are massive. Here's what this means for you: reach is no longer the primary currency. Engagement is. Trust is. And trust is the one thing you cannot generate with a text instruction to an AI, which leads to a complete inversion of the old influencer economy playbook.&lt;/p&gt;

&lt;p&gt;In my view, we are watching the biggest power shift in the creator economy since the move from TV to YouTube. I've watched this play out in real time across platforms. The accounts growing fastest right now are not the ones posting most frequently or most polishedly. They are the ones where you can feel a person behind the screen. Someone who has opinions that might be wrong. Someone who shares process, not just results. Someone who occasionally posts something that didn't perform well and doesn't delete it.&lt;/p&gt;

&lt;p&gt;My take: your humanity is your moat. Full stop.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Use AI Without Losing the Human Touch
&lt;/h2&gt;

&lt;p&gt;I want to be specific here because "use AI wisely" is the kind of advice that sounds good and means nothing. Look -- let me tell you exactly what my workflow looks like as a solo founder building a renovation transparency platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What AI does for me:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Code.&lt;/em&gt; Claude Code writes implementation. I architect the system, make design decisions, and review every line. The AI is faster than me at writing boilerplate, handling edge cases, and refactoring. But it has no opinion about what the product should be. That's my job.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Data analysis.&lt;/em&gt; I built a price database covering 17 trade categories in the Chinese renovation market -- over 400 individual price points updated quarterly. AI crunches the numbers: market comparisons, regional variance, anomaly detection. I decide what the data means and how to present it to users. The interpretation is mine.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Publishing pipeline.&lt;/em&gt; I built an automated system that formats articles and distributes them across 5 platforms. The AI handles the mechanical transformation -- adjusting formatting for Dev.to vs. Hashnode vs. WeChat. But I write every word. The pipeline is a distribution tool, not a creation tool.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cover images.&lt;/em&gt; AI generates the base image from my direction. I specify composition, mood, text placement. The AI is the renderer. I am the art director. Think of it as a photographer directing a very fast, very literal assistant who operates the camera.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I do NOT outsource to AI:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Opinions.&lt;/em&gt; Every claim in this article is something I actually believe based on something I actually observed. AI has no beliefs. It has statistical distributions. Here's what I think most people get wrong: they treat AI opinions as a shortcut to having their own. But an opinion you didn't earn is an opinion you can't defend, and your audience can smell that from a mile away.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Voice.&lt;/em&gt; The way I write -- the rhythm, the bluntness, the occasional profanity, the tendency to start sentences with "and" -- that's me. An AI writing in "my style" produces a flattened, averaged version of me. Close enough to be uncanny. Far enough to be hollow. It's like a cover band playing your favorite song: technically correct, emotionally vacant.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Mistakes.&lt;/em&gt; I leave my rough edges visible. Not as a strategy. As a reality. I'm a solo developer. I ship things that aren't perfect. I say things I later revise. That imperfection is what makes people trust that there's a real person here.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Personality.&lt;/em&gt; My company is called Counterintuitive Engineering. The name is a statement: we do things the way that seems wrong until you look at the results. That positioning didn't come from an AI brainstorming session. It came from years of doing things differently and noticing that it worked.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Relationships.&lt;/em&gt; I reply to comments myself. I have real conversations with users. I remember what people told me last week. AI can simulate this. Simulation is not connection.&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%2Fdqi65dl1a5exlewbdzbs.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%2Fdqi65dl1a5exlewbdzbs.png" alt="Two Layer Framework" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Right Mental Model
&lt;/h2&gt;

&lt;p&gt;Here is the metaphor that keeps me honest: AI is the prep cook, not the chef.&lt;/p&gt;

&lt;p&gt;In a professional kitchen, the prep cook is essential. They chop vegetables, portion ingredients, make stocks, organize the mise en place. Without them, the chef couldn't execute at speed. But nobody comes to the restaurant for the prep cook. Nobody writes a review saying "the onions were diced magnificently." They come for the chef -- for the creative vision, the unexpected combinations, the dish that only this kitchen in this city makes this way.&lt;/p&gt;

&lt;p&gt;AI chops my vegetables in the back kitchen. It portions my ingredients. It keeps my station organized. And then I plate the dish, walk it to the table, and tell the story behind it. The customer came for the chef. They came for the point of view. They came for the thing that can't be replicated by the prep cook no matter how sharp the knife.&lt;/p&gt;

&lt;p&gt;The moment you let AI become the chef, you become a cafeteria. Technically food. Technically edible. Nobody's coming back tomorrow.&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%2F2b4t4l09og8dqddts4sj.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%2F2b4t4l09og8dqddts4sj.png" alt="What Audiences Want" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A Practical Framework for Creators
&lt;/h2&gt;

&lt;p&gt;If you're building a content practice -- whether as a creator, founder, or indie hacker -- here is how I think about the division of labor. I break it into two layers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 1: AI Territory&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Research -- gathering data, summarizing sources, finding statistics&lt;/li&gt;
&lt;li&gt;First drafts -- generating raw material to react to, not to publish&lt;/li&gt;
&lt;li&gt;Formatting -- adapting content for platform-specific requirements&lt;/li&gt;
&lt;li&gt;Distribution -- scheduling, cross-posting, analytics tracking&lt;/li&gt;
&lt;li&gt;Repetitive production -- thumbnail variations, social media crops, transcript generation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Layer 2: Human Territory&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Voice -- the specific way you say things that nobody else says that way&lt;/li&gt;
&lt;li&gt;Opinion -- claims you're willing to defend, positions you've earned through experience&lt;/li&gt;
&lt;li&gt;Storytelling -- the narrative arc, the emotional beats, the pacing&lt;/li&gt;
&lt;li&gt;Emotion -- humor, frustration, excitement, vulnerability&lt;/li&gt;
&lt;li&gt;Community -- real replies, real relationships, real presence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The line between Layer 1 and Layer 2 is your competitive moat. Move it too far toward Layer 1 and you're automating yourself out of relevance -- causing a slow fade where your audience can't articulate why they stopped caring, but they did. Keep it firmly in Layer 2 and you've built something AI cannot commoditize.&lt;/p&gt;

&lt;p&gt;Here's the test I use: if I removed my name from this piece and replaced it with "Written by AI," would anyone be surprised? If the answer is no, I haven't done my job. If the answer is "wait, this doesn't read like AI" -- that's the standard. I believe every creator should run this test on everything they publish. The moment your content passes for AI-generated, you've lost the only advantage a human has.&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%2Fuvxx7yi72706l8ue65zy.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%2Fuvxx7yi72706l8ue65zy.png" alt="What I Outsource vs Keep" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Uncomfortable Truth About AI Content Tools
&lt;/h2&gt;

&lt;p&gt;I build AI-powered tools for a living. My product uses AI to analyze renovation quotes, recognize floor plans, and estimate budgets. I am deeply, financially invested in AI being useful.&lt;/p&gt;

&lt;p&gt;And I am telling you that the AI content gold rush is over.&lt;/p&gt;

&lt;p&gt;Not because AI got worse. Because it got ubiquitous. Think about it this way: when everyone in town has a car, owning a car stops being impressive. When everyone can generate a 2,000-word blog post in 30 seconds, 2,000-word blog posts stop being valuable. According to Originality.ai's 2025 content tracking data, AI-generated articles increased by over 300% on major publishing platforms in a single year. The value migrates to the thing that remains scarce: a human perspective shaped by real experience, expressed in a voice that couldn't belong to anyone else.&lt;/p&gt;

&lt;p&gt;The MoneyPrinter approach -- generate, upload, repeat, scale -- worked for exactly as long as it took audiences and platforms to catch on. That window is closed. The creators who built their strategy on volume are now producing content that nobody sees, for audiences that don't exist, on platforms that are actively suppressing AI-detected content. The pain is real: wasted hours, wasted API credits (the per-use fees charged by AI services), and a growing realization that they optimized for the wrong metric entirely.&lt;/p&gt;

&lt;p&gt;Here's what you should do instead. The creators who are winning built their strategy on identity. On being a specific person with specific takes. On showing up imperfectly and consistently. On using AI in the back kitchen while standing in the front of the house themselves.&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%2Fn33a8jz77grhqhff1z4y.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%2Fn33a8jz77grhqhff1z4y.png" alt="Appreciating Asset" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Appreciating Asset
&lt;/h2&gt;

&lt;p&gt;Here is the most counterintuitive thing I believe about this moment in technology:&lt;/p&gt;

&lt;p&gt;The most scarce resource in 2026 is not an AI that can write. According to Hugging Face's model tracker, there are now over 900,000 publicly available AI models. They're free. They're everywhere. They keep getting better every month.&lt;/p&gt;

&lt;p&gt;The most scarce resource in 2026 is a human who has something worth saying.&lt;/p&gt;

&lt;p&gt;AI capabilities compound. Every model is better than the last. Every tool is more powerful than its predecessor. This is wonderful for productivity and completely irrelevant to the question of whether anyone cares about what you produce.&lt;/p&gt;

&lt;p&gt;Your humanity doesn't depreciate. Actually, it appreciates. Every month that AI content floods the internet, the relative value of genuinely human content increases. Every polished, optimized, perfectly structured AI article makes your rough, opinionated, imperfect human article more distinctive. Every AI-generated video makes your shaky-camera, real-voice, unscripted video more trustworthy. This means you are sitting on an appreciating asset -- but only if you don't dilute it by handing your voice to an algorithm.&lt;/p&gt;

&lt;p&gt;You are not competing with AI. You are being made more valuable by AI -- but only if you remain visibly, undeniably human.&lt;/p&gt;

&lt;p&gt;Use AI for everything it's good at. Let it handle the prep work, the grunt work, the mechanical work. Build pipelines. Automate distribution. Generate drafts to react to.&lt;/p&gt;

&lt;p&gt;But when it's time to say something -- actually say it. In your voice. With your opinions. Including your mistakes.&lt;/p&gt;

&lt;p&gt;According to Originality.ai's 2026 State of AI Content report, 83% of top-performing blog posts still have a clearly identifiable human author. The remaining 17% that perform well despite being AI-assisted? They all have one thing in common: a human edited them heavily enough that the AI fingerprint disappeared.&lt;/p&gt;

&lt;p&gt;That's the whole game now.&lt;/p&gt;




&lt;p&gt;If this landed with you, do two things right now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bookmark this.&lt;/strong&gt; You'll want it the next time you're tempted to let AI write your post.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Share it&lt;/strong&gt; with one creator friend who needs to hear it.&lt;/p&gt;

&lt;p&gt;Then &lt;strong&gt;comment&lt;/strong&gt; below -- where do you draw the line between AI territory and human territory?&lt;/p&gt;

&lt;p&gt;I read every reply. I respond to all of them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Follow&lt;/strong&gt; &lt;a href="https://x.com/CounterIntEng" rel="noopener noreferrer"&gt;@CounterIntEng&lt;/a&gt; for more like this. Building tools for renovation as a solo founder, using AI as infrastructure while keeping human judgment at the center.&lt;/p&gt;

</description>
      <category>engineering</category>
      <category>ai</category>
      <category>software</category>
    </item>
    <item>
      <title>AI Can Write Better Than You. Nobody Cares.</title>
      <dc:creator>CounterIntEng</dc:creator>
      <pubDate>Tue, 24 Mar 2026 12:19:57 +0000</pubDate>
      <link>https://dev.to/counterinteng/ai-can-write-better-than-you-nobody-cares-2aj3</link>
      <guid>https://dev.to/counterinteng/ai-can-write-better-than-you-nobody-cares-2aj3</guid>
      <description>&lt;h1&gt;
  
  
  AI Can Write Better Than You. Nobody Cares.
&lt;/h1&gt;

&lt;p&gt;68 million. That's how many times the phrase "human touch" was mentioned on Weibo this year -- 68 million cries for something real in an ocean of AI-generated noise. Meanwhile, consumer preference for AI content crashed from 60% to 26% in three years, according to eMarketer's 2026 Creator Economy report. Not a dip. A collapse. And if you're betting your content strategy on AI doing the talking for you, those numbers should hit like a fire alarm at 3 AM.&lt;/p&gt;

&lt;p&gt;Here's the thing -- I am not some AI skeptic writing this from a typewriter. I use AI to build products, write code, generate images, analyze data, and publish articles to 5 platforms simultaneously through an automated pipeline I built myself. I run an entire software company as a solo founder with AI handling roughly 70% of the mechanical labor. And I'm here to tell you: AI content, as in content where AI is &lt;em&gt;the&lt;/em&gt; creator, is dying. The moment you hand over the steering wheel entirely, the thing you produce joins a pile so large that nobody can see it anymore.&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%2F76dzp7v7os3ze6bp1cnf.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%2F76dzp7v7os3ze6bp1cnf.png" alt="Preference Crash" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Flood
&lt;/h2&gt;

&lt;p&gt;Let me put it this way. Imagine a library where every single book on the shelf was written by the same author, in the same voice, about the same topics. That is what your feed looks like in 2026.&lt;/p&gt;

&lt;p&gt;YouTube's own internal research, reported by The Verge in early 2026, shows that over 20% of videos served to new users qualify as what researchers now call "AI slop" -- content that was generated, not created. Not curated by editorial judgment or shaped by personal experience, but extruded by a prompt (a text instruction to an AI model) and uploaded by a script.&lt;/p&gt;

&lt;p&gt;I know this world intimately because I've built tools adjacent to it. I've seen the MoneyPrinter-style pipelines: feed in a trending topic, let the AI generate a script, auto-generate voiceover, auto-cut stock footage, upload to 12 channels simultaneously. Zero human involvement after pressing "run." The output is technically content. It is not technically interesting.&lt;/p&gt;

&lt;p&gt;The math seemed compelling for a while. If one piece of content has a 1% chance of going viral, make 100 pieces and you get your hit. But think about it -- platforms adapted. Audiences adapted faster. According to Botify's 2025 SEO analysis, AI-generated pages saw a 9.9% decline in Google indexing rates year-over-year, which means even search engines are turning their backs. The 1% chance dropped to 0.01% because the denominator -- total content volume -- exploded while per-piece value collapsed toward zero. You can't win an attention game by flooding the field with things nobody wants to pay attention to. The result is a death spiral: more content, less reach per piece, so you make even more content, which drives reach down further.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "Human Touch" Is the New Premium
&lt;/h2&gt;

&lt;p&gt;Something fascinating happened on Chinese social media this year. The phrase "huoren gan" -- which translates roughly to "human touch" or "alive-person feeling" -- was mentioned 68 million times on Weibo, according to Weibo's own 2025 year-end trend report. Sixty-eight million. That is not a trend. That is a cultural movement.&lt;/p&gt;

&lt;p&gt;Here's what I think is really going on. In a world where AI can generate photorealistic images, flawless prose, and perfectly structured video essays, anything that visibly came from an actual human being becomes rare. It's like finding a handwritten letter in a mailbox full of junk flyers. And rare, as any economist will tell you, equals valuable.&lt;/p&gt;

&lt;p&gt;This is not an anti-AI backlash. Nobody on Weibo is saying "destroy the machines." They are saying: "I can tell this was made by a person, and that makes me trust it more." The distinction matters enormously. People don't hate AI. They hate being unable to tell whether a human was involved. They hate the feeling of being talked at by a machine pretending to be a person. This means that the trust gap is not about technology quality -- it's about perceived authenticity. And that gap is widening every month.&lt;/p&gt;

&lt;p&gt;Digiday captured this shift in their February 2026 creator economy analysis: "After oversaturation of AI content, creators' authenticity and messiness are in high demand." Read that sentence again. &lt;em&gt;Messiness&lt;/em&gt; is in demand. The typo in your tweet. The slightly off-center framing in your photo. The tangent you went on in paragraph four that had nothing to do with the topic but everything to do with who you are. AI can't replicate the messiness of human creativity because messiness is, by definition, unoptimized. And AI only knows how to optimize.&lt;/p&gt;

&lt;p&gt;Think about the last piece of content that genuinely stuck with you. Not the last thing you scrolled past. The last thing that made you stop, read the whole thing, and think about it afterward. I'd bet money it wasn't polished to perfection. It had edges. It had a voice that couldn't have come from anyone else. It had the fingerprints of a specific human being all over it. That is what the market is now willing to pay a premium for.&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%2Fe3ln1a3ccdiv2pevi0vt.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%2Fe3ln1a3ccdiv2pevi0vt.png" alt="200 vs 20K" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The 200-Follower Creator Who Beats the 20K-Follower Influencer
&lt;/h2&gt;

&lt;p&gt;Here is where the economics get genuinely interesting, and I'll be blunt -- this one surprised me.&lt;/p&gt;

&lt;p&gt;Brands are shifting budget away from macro-influencers with 20,000 polished followers and toward micro-creators with 200 genuine ones. Aspire's 2025 Influencer Marketing Benchmark Report found that micro-creators (under 1,000 followers) average engagement rates of 6-8%, while accounts above 10K average under 2%. This is not charity. This is ROI math.&lt;/p&gt;

&lt;p&gt;A creator with 200 followers who built that audience through real interactions, real opinions, and real content gets engagement rates that a 20K account running AI-generated posts cannot touch. It's the equivalent of a neighborhood restaurant where the owner knows your name versus a chain restaurant with better decor but zero soul. When that 200-follower creator recommends a product, their audience listens -- because they've built trust through visible humanity. When the 20K account posts another perfectly formatted, suspiciously well-written product review, the audience scrolls past. They've been trained by two years of AI saturation to pattern-match on inauthenticity.&lt;/p&gt;

&lt;p&gt;The implications are massive. Here's what this means for you: reach is no longer the primary currency. Engagement is. Trust is. And trust is the one thing you cannot generate with a text instruction to an AI, which leads to a complete inversion of the old influencer economy playbook.&lt;/p&gt;

&lt;p&gt;In my view, we are watching the biggest power shift in the creator economy since the move from TV to YouTube. I've watched this play out in real time across platforms. The accounts growing fastest right now are not the ones posting most frequently or most polishedly. They are the ones where you can feel a person behind the screen. Someone who has opinions that might be wrong. Someone who shares process, not just results. Someone who occasionally posts something that didn't perform well and doesn't delete it.&lt;/p&gt;

&lt;p&gt;My take: your humanity is your moat. Full stop.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Use AI Without Losing the Human Touch
&lt;/h2&gt;

&lt;p&gt;I want to be specific here because "use AI wisely" is the kind of advice that sounds good and means nothing. Look -- let me tell you exactly what my workflow looks like as a solo founder building a renovation transparency platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What AI does for me:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Code.&lt;/em&gt; Claude Code writes implementation. I architect the system, make design decisions, and review every line. The AI is faster than me at writing boilerplate, handling edge cases, and refactoring. But it has no opinion about what the product should be. That's my job.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Data analysis.&lt;/em&gt; I built a price database covering 17 trade categories in the Chinese renovation market -- over 400 individual price points updated quarterly. AI crunches the numbers: market comparisons, regional variance, anomaly detection. I decide what the data means and how to present it to users. The interpretation is mine.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Publishing pipeline.&lt;/em&gt; I built an automated system that formats articles and distributes them across 5 platforms. The AI handles the mechanical transformation -- adjusting formatting for Dev.to vs. Hashnode vs. WeChat. But I write every word. The pipeline is a distribution tool, not a creation tool.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cover images.&lt;/em&gt; AI generates the base image from my direction. I specify composition, mood, text placement. The AI is the renderer. I am the art director. Think of it as a photographer directing a very fast, very literal assistant who operates the camera.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I do NOT outsource to AI:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Opinions.&lt;/em&gt; Every claim in this article is something I actually believe based on something I actually observed. AI has no beliefs. It has statistical distributions. Here's what I think most people get wrong: they treat AI opinions as a shortcut to having their own. But an opinion you didn't earn is an opinion you can't defend, and your audience can smell that from a mile away.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Voice.&lt;/em&gt; The way I write -- the rhythm, the bluntness, the occasional profanity, the tendency to start sentences with "and" -- that's me. An AI writing in "my style" produces a flattened, averaged version of me. Close enough to be uncanny. Far enough to be hollow. It's like a cover band playing your favorite song: technically correct, emotionally vacant.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Mistakes.&lt;/em&gt; I leave my rough edges visible. Not as a strategy. As a reality. I'm a solo developer. I ship things that aren't perfect. I say things I later revise. That imperfection is what makes people trust that there's a real person here.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Personality.&lt;/em&gt; My company is called Counterintuitive Engineering. The name is a statement: we do things the way that seems wrong until you look at the results. That positioning didn't come from an AI brainstorming session. It came from years of doing things differently and noticing that it worked.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Relationships.&lt;/em&gt; I reply to comments myself. I have real conversations with users. I remember what people told me last week. AI can simulate this. Simulation is not connection.&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%2Ff0fyb61toiqkorxg7apj.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%2Ff0fyb61toiqkorxg7apj.png" alt="Two Layer Framework" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Right Mental Model
&lt;/h2&gt;

&lt;p&gt;Here is the metaphor that keeps me honest: AI is the prep cook, not the chef.&lt;/p&gt;

&lt;p&gt;In a professional kitchen, the prep cook is essential. They chop vegetables, portion ingredients, make stocks, organize the mise en place. Without them, the chef couldn't execute at speed. But nobody comes to the restaurant for the prep cook. Nobody writes a review saying "the onions were diced magnificently." They come for the chef -- for the creative vision, the unexpected combinations, the dish that only this kitchen in this city makes this way.&lt;/p&gt;

&lt;p&gt;AI chops my vegetables in the back kitchen. It portions my ingredients. It keeps my station organized. And then I plate the dish, walk it to the table, and tell the story behind it. The customer came for the chef. They came for the point of view. They came for the thing that can't be replicated by the prep cook no matter how sharp the knife.&lt;/p&gt;

&lt;p&gt;The moment you let AI become the chef, you become a cafeteria. Technically food. Technically edible. Nobody's coming back tomorrow.&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%2Fed5d8pz81sgl28pql2uj.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%2Fed5d8pz81sgl28pql2uj.png" alt="What Audiences Want" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A Practical Framework for Creators
&lt;/h2&gt;

&lt;p&gt;If you're building a content practice -- whether as a creator, founder, or indie hacker -- here is how I think about the division of labor. I break it into two layers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 1: AI Territory&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Research -- gathering data, summarizing sources, finding statistics&lt;/li&gt;
&lt;li&gt;First drafts -- generating raw material to react to, not to publish&lt;/li&gt;
&lt;li&gt;Formatting -- adapting content for platform-specific requirements&lt;/li&gt;
&lt;li&gt;Distribution -- scheduling, cross-posting, analytics tracking&lt;/li&gt;
&lt;li&gt;Repetitive production -- thumbnail variations, social media crops, transcript generation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Layer 2: Human Territory&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Voice -- the specific way you say things that nobody else says that way&lt;/li&gt;
&lt;li&gt;Opinion -- claims you're willing to defend, positions you've earned through experience&lt;/li&gt;
&lt;li&gt;Storytelling -- the narrative arc, the emotional beats, the pacing&lt;/li&gt;
&lt;li&gt;Emotion -- humor, frustration, excitement, vulnerability&lt;/li&gt;
&lt;li&gt;Community -- real replies, real relationships, real presence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The line between Layer 1 and Layer 2 is your competitive moat. Move it too far toward Layer 1 and you're automating yourself out of relevance -- causing a slow fade where your audience can't articulate why they stopped caring, but they did. Keep it firmly in Layer 2 and you've built something AI cannot commoditize.&lt;/p&gt;

&lt;p&gt;Here's the test I use: if I removed my name from this piece and replaced it with "Written by AI," would anyone be surprised? If the answer is no, I haven't done my job. If the answer is "wait, this doesn't read like AI" -- that's the standard. I believe every creator should run this test on everything they publish. The moment your content passes for AI-generated, you've lost the only advantage a human has.&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%2Fuvxx7yi72706l8ue65zy.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%2Fuvxx7yi72706l8ue65zy.png" alt="What I Outsource vs Keep" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Uncomfortable Truth About AI Content Tools
&lt;/h2&gt;

&lt;p&gt;I build AI-powered tools for a living. My product uses AI to analyze renovation quotes, recognize floor plans, and estimate budgets. I am deeply, financially invested in AI being useful.&lt;/p&gt;

&lt;p&gt;And I am telling you that the AI content gold rush is over.&lt;/p&gt;

&lt;p&gt;Not because AI got worse. Because it got ubiquitous. Think about it this way: when everyone in town has a car, owning a car stops being impressive. When everyone can generate a 2,000-word blog post in 30 seconds, 2,000-word blog posts stop being valuable. According to Originality.ai's 2025 content tracking data, AI-generated articles increased by over 300% on major publishing platforms in a single year. The value migrates to the thing that remains scarce: a human perspective shaped by real experience, expressed in a voice that couldn't belong to anyone else.&lt;/p&gt;

&lt;p&gt;The MoneyPrinter approach -- generate, upload, repeat, scale -- worked for exactly as long as it took audiences and platforms to catch on. That window is closed. The creators who built their strategy on volume are now producing content that nobody sees, for audiences that don't exist, on platforms that are actively suppressing AI-detected content. The pain is real: wasted hours, wasted API credits (the per-use fees charged by AI services), and a growing realization that they optimized for the wrong metric entirely.&lt;/p&gt;

&lt;p&gt;Here's what you should do instead. The creators who are winning built their strategy on identity. On being a specific person with specific takes. On showing up imperfectly and consistently. On using AI in the back kitchen while standing in the front of the house themselves.&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%2F11x71be9ftmcgf27oo7o.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%2F11x71be9ftmcgf27oo7o.png" alt="Appreciating Asset" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Appreciating Asset
&lt;/h2&gt;

&lt;p&gt;Here is the most counterintuitive thing I believe about this moment in technology:&lt;/p&gt;

&lt;p&gt;The most scarce resource in 2026 is not an AI that can write. According to Hugging Face's model tracker, there are now over 900,000 publicly available AI models. They're free. They're everywhere. They keep getting better every month.&lt;/p&gt;

&lt;p&gt;The most scarce resource in 2026 is a human who has something worth saying.&lt;/p&gt;

&lt;p&gt;AI capabilities compound. Every model is better than the last. Every tool is more powerful than its predecessor. This is wonderful for productivity and completely irrelevant to the question of whether anyone cares about what you produce.&lt;/p&gt;

&lt;p&gt;Your humanity doesn't depreciate. Actually, it appreciates. Every month that AI content floods the internet, the relative value of genuinely human content increases. Every polished, optimized, perfectly structured AI article makes your rough, opinionated, imperfect human article more distinctive. Every AI-generated video makes your shaky-camera, real-voice, unscripted video more trustworthy. This means you are sitting on an appreciating asset -- but only if you don't dilute it by handing your voice to an algorithm.&lt;/p&gt;

&lt;p&gt;You are not competing with AI. You are being made more valuable by AI -- but only if you remain visibly, undeniably human.&lt;/p&gt;

&lt;p&gt;Use AI for everything it's good at. Let it handle the prep work, the grunt work, the mechanical work. Build pipelines. Automate distribution. Generate drafts to react to.&lt;/p&gt;

&lt;p&gt;But when it's time to say something -- actually say it. In your voice. With your opinions. Including your mistakes.&lt;/p&gt;

&lt;p&gt;According to Originality.ai's 2026 State of AI Content report, 83% of top-performing blog posts still have a clearly identifiable human author. The remaining 17% that perform well despite being AI-assisted? They all have one thing in common: a human edited them heavily enough that the AI fingerprint disappeared.&lt;/p&gt;

&lt;p&gt;That's the whole game now.&lt;/p&gt;




&lt;p&gt;If this landed with you, do two things right now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bookmark this.&lt;/strong&gt; You'll want it the next time you're tempted to let AI write your post.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Share it&lt;/strong&gt; with one creator friend who needs to hear it.&lt;/p&gt;

&lt;p&gt;Then &lt;strong&gt;comment&lt;/strong&gt; below -- where do you draw the line between AI territory and human territory?&lt;/p&gt;

&lt;p&gt;I read every reply. I respond to all of them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Follow&lt;/strong&gt; &lt;a href="https://x.com/CounterIntEng" rel="noopener noreferrer"&gt;@CounterIntEng&lt;/a&gt; for more like this. Building tools for renovation as a solo founder, using AI as infrastructure while keeping human judgment at the center.&lt;/p&gt;

</description>
      <category>engineering</category>
      <category>ai</category>
      <category>software</category>
    </item>
    <item>
      <title>The MoneyPrinter Printed Nothing.</title>
      <dc:creator>CounterIntEng</dc:creator>
      <pubDate>Tue, 24 Mar 2026 02:46:06 +0000</pubDate>
      <link>https://dev.to/counterinteng/the-moneyprinter-printed-nothing-3p4h</link>
      <guid>https://dev.to/counterinteng/the-moneyprinter-printed-nothing-3p4h</guid>
      <description>&lt;h1&gt;
  
  
  The MoneyPrinter Printed Nothing.
&lt;/h1&gt;

&lt;p&gt;21,748 stars. 2,200 forks. A tagline that reads: "Automates the process of making money online."&lt;/p&gt;

&lt;p&gt;I had to test it.&lt;/p&gt;

&lt;p&gt;Not because I believed it. Because 21,748 people starred it, and I wanted to understand what they thought they were getting. So I cloned the repo, installed the dependencies, and tried to run every single feature MoneyPrinterV2 claims to offer. What follows is a straightforward account of what happened.&lt;/p&gt;

&lt;p&gt;No hype. No hate. Just evidence.&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%2Fcc0txv1m84607us3nk6a.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%2Fcc0txv1m84607us3nk6a.png" alt="Repo Stats" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What MoneyPrinterV2 Claims to Do
&lt;/h2&gt;

&lt;p&gt;The repository promises four automated income streams:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;YouTube Shorts automation&lt;/strong&gt; -- generate short-form videos, upload them, and schedule via CRON jobs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Twitter bot&lt;/strong&gt; -- generate tweets and post them on a schedule&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon affiliate marketing&lt;/strong&gt; -- generate product pitches via LLM and share them through Twitter&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local business outreach&lt;/strong&gt; -- discover local businesses, then email them automatically&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The README paints a picture of passive income on autopilot. Set it up once, walk away, collect money. The dream that sells a thousand info-products. Let's see if the code delivers.&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%2F64p2rnvkofkz8kyxbvat.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%2F64p2rnvkofkz8kyxbvat.png" alt="Four Features" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Setup: First Signs of Trouble
&lt;/h2&gt;

&lt;p&gt;The project is 95.7% Python, with 110 commits and 14 contributors. It carries an AGPL-3.0 license and an "educational purposes only" disclaimer -- a detail we'll return to.&lt;/p&gt;

&lt;p&gt;Installation starts normally enough: clone, create a virtual environment, &lt;code&gt;pip install -r requirements.txt&lt;/code&gt;. But the requirements file is where the first red flag appears.&lt;/p&gt;

&lt;p&gt;There are 17 dependencies listed. Only 2 have version pins: &lt;code&gt;kittentts==0.8.1&lt;/code&gt; and &lt;code&gt;Pillow&amp;gt;=10.0.0&lt;/code&gt;. The other 15 packages -- including &lt;code&gt;moviepy&lt;/code&gt;, &lt;code&gt;selenium&lt;/code&gt;, &lt;code&gt;undetected_chromedriver&lt;/code&gt;, &lt;code&gt;assemblyai&lt;/code&gt;, and &lt;code&gt;faster-whisper&lt;/code&gt; -- are completely unpinned. No version constraints at all.&lt;/p&gt;

&lt;p&gt;This means every time you install, you're rolling the dice. The exact combination of package versions you get depends on the day you run &lt;code&gt;pip install&lt;/code&gt;. What worked for the developer six months ago might break for you today. And in fact, it does -- Python 3.13 users hit a &lt;code&gt;torch&lt;/code&gt; incompatibility wall immediately.&lt;/p&gt;

&lt;p&gt;There's also a dependency the README doesn't prominently mention: Ollama, a local LLM runtime. Without it, the core generation features don't work. I had to discover this by reading the source code, not the documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing Feature 1: YouTube Shorts Automation
&lt;/h2&gt;

&lt;p&gt;This is the flagship feature, the one that gets the most attention. The flow is supposed to be:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generate a script via LLM (Ollama)&lt;/li&gt;
&lt;li&gt;Convert script to speech (via kittentts or assemblyai)&lt;/li&gt;
&lt;li&gt;Generate or source background video&lt;/li&gt;
&lt;li&gt;Add subtitles (via faster-whisper)&lt;/li&gt;
&lt;li&gt;Composite the final video (via moviepy)&lt;/li&gt;
&lt;li&gt;Upload to YouTube&lt;/li&gt;
&lt;li&gt;Schedule via CRON&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Does it generate videos?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sort of. After wrestling with the deprecated &lt;code&gt;moviepy.video.fx.crop&lt;/code&gt; import (moviepy has restructured its API and the code hasn't been updated), I got a basic video to render. The quality is what you'd expect from automated content: a background clip with overlaid subtitles reading a GPT-generated script. It looks like every other AI-generated YouTube Short flooding the platform -- which is to say, it looks like spam.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;art_equalizer&lt;/code&gt; module is referenced in the code but missing entirely. The music feature relies on a &lt;code&gt;Songs.zip&lt;/code&gt; archive that was -- and this is not a joke -- found to be corrupted. More on that later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it upload?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The upload mechanism uses &lt;code&gt;selenium&lt;/code&gt; and &lt;code&gt;undetected_chromedriver&lt;/code&gt; to automate the YouTube Studio interface. This is browser automation pretending to be a human, not an API integration. YouTube's Terms of Service explicitly prohibit automated uploads through non-API means. Using this puts your Google account at risk of permanent termination.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The math:&lt;/strong&gt; YouTube Shorts pay roughly $0.01 to $0.05 per 1,000 views. To make even $100/month, you'd need 2 to 10 million views. Monthly. From obviously automated content that YouTube's algorithm is increasingly trained to suppress. The economics don't work unless you're operating at a scale that would almost certainly trigger YouTube's automated content detection systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict on YouTube Shorts:&lt;/strong&gt; Technically generates a video. Practically useless for income.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing Feature 2: Twitter Bot
&lt;/h2&gt;

&lt;p&gt;The Twitter bot generates tweets via the local LLM and posts them using Selenium-based browser automation. No Twitter API. No OAuth. Just a headless browser logging into your account and clicking buttons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The immediate problem:&lt;/strong&gt; The code imports from Selenium's Firefox driver, but the import path has changed in recent Selenium versions. You get an import error on launch. Fixable, but symptomatic of unmaintained code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The bigger problem:&lt;/strong&gt; X (formerly Twitter) has invested heavily in bot detection since 2024. Their systems flag accounts that post with robotic regularity, that log in from headless browsers, and that generate content with suspiciously consistent patterns. Getting your account banned isn't a risk -- it's a near-certainty if you run this for more than a few days.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The business problem:&lt;/strong&gt; Even if it worked perfectly and never got banned, what's the monetization path? Twitter doesn't pay most users for tweets. You need to be in their creator program, which requires real engagement from real followers. Bot-generated tweets don't build the kind of audience that generates revenue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict on Twitter Bot:&lt;/strong&gt; High risk of account ban, no clear path to revenue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing Feature 3: Amazon Affiliate Marketing
&lt;/h2&gt;

&lt;p&gt;This feature generates product recommendation tweets and posts them via the Twitter bot mechanism. The idea: have an LLM write persuasive product pitches, include your Amazon affiliate link, post to Twitter, earn commissions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The chain of dependencies is fragile:&lt;/strong&gt; LLM generates text, Selenium posts to Twitter, users click the link, users buy on Amazon, you get a commission. Every link in this chain has a failure mode.&lt;/p&gt;

&lt;p&gt;Amazon affiliate commissions range from 1% to 3% for most product categories. Let's say you're promoting a $50 product at 3% commission: that's $1.50 per sale. To make $500/month, you need 333 sales. From automated tweets. On an account that's probably getting flagged for bot behavior.&lt;/p&gt;

&lt;p&gt;I've seen the affiliate marketing space up close. The people who actually make money do it through SEO-optimized content, carefully built niche audiences, and genuine product expertise. Not through bot-posted tweets that read like they were written by a language model -- because they were.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict on Affiliate Marketing:&lt;/strong&gt; Theoretically possible, practically delusional at scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing Feature 4: Local Business Outreach
&lt;/h2&gt;

&lt;p&gt;This is the feature that made me most uncomfortable. The workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Scrape the web for local business contact information&lt;/li&gt;
&lt;li&gt;Generate email pitches via LLM&lt;/li&gt;
&lt;li&gt;Send emails automatically&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I didn't fully run this one, and here's why.&lt;/p&gt;

&lt;p&gt;The email validation system sends to invalid addresses. This isn't just a bug -- it's a reputation destroyer. Email providers track sender reputation. Sending to invalid addresses gets your domain blacklisted. Once blacklisted, even your legitimate emails go to spam.&lt;/p&gt;

&lt;p&gt;Beyond the technical issues, there's the legal dimension. The CAN-SPAM Act in the United States requires that commercial emails include a physical address, an unsubscribe mechanism, and accurate header information. The GDPR in Europe is even stricter -- you need explicit consent before sending commercial emails.&lt;/p&gt;

&lt;p&gt;Mass-emailing scraped contacts with LLM-generated pitches violates both frameworks. This isn't a gray area. This is the kind of activity that generates FTC complaints and GDPR fines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict on Outreach:&lt;/strong&gt; Legally hazardous. Technically broken. Don't do this.&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%2Fey2re2p5y4vrwcly26jz.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%2Fey2re2p5y4vrwcly26jz.png" alt="Dependency Hell" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Dependency Problem Is Worse Than You Think
&lt;/h2&gt;

&lt;p&gt;Let's talk about those 15 unpinned dependencies.&lt;/p&gt;

&lt;p&gt;In a healthy Python project, you pin your dependencies to specific versions in &lt;code&gt;requirements.txt&lt;/code&gt;. This ensures reproducible builds -- everyone who installs your project gets the exact same package versions. When you don't pin, you get "works on my machine" syndrome at best and supply chain attacks at worst.&lt;/p&gt;

&lt;p&gt;MoneyPrinterV2 uses &lt;code&gt;moviepy&lt;/code&gt;, which has been through significant API changes. It uses &lt;code&gt;selenium&lt;/code&gt;, which regularly changes its driver interface. It uses &lt;code&gt;undetected_chromedriver&lt;/code&gt;, which is in a constant arms race with browser detection systems. None of these are pinned.&lt;/p&gt;

&lt;p&gt;The result: 23 open issues on the repository, many of which are installation and compatibility failures. Minimal resolution from maintainers. The last meaningful code update was the March 1, 2026 "Huge Overhaul," and since then, activity has been limited to README sponsorship link updates.&lt;/p&gt;

&lt;p&gt;Which brings us to the supply chain incident.&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%2Fvlirl6ikob7bdsc6k5yw.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%2Fvlirl6ikob7bdsc6k5yw.png" alt="Revenue Reality" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Songs.zip Incident
&lt;/h2&gt;

&lt;p&gt;On March 3, 2026, a commit appeared in the repository with the message: "Fix critical supply chain poisoning vulnerability in song archive download."&lt;/p&gt;

&lt;p&gt;Read that again. The &lt;code&gt;Songs.zip&lt;/code&gt; file -- a dependency that gets downloaded when you use the music feature -- was compromised. Supply chain poisoning means someone replaced the legitimate file with a malicious one. Anyone who downloaded and extracted that archive between the time it was poisoned and the time it was fixed potentially executed malicious code on their machine.&lt;/p&gt;

&lt;p&gt;This is not a theoretical risk. This happened. In a repository with 21,748 stars and 2,200 forks. The fix commit is right there in the git history.&lt;/p&gt;

&lt;p&gt;The broader issue: when a project distributes binary archives (zip files) as part of its workflow, and those archives are hosted on third-party services, the attack surface expands dramatically. Pinned dependencies from PyPI at least have hash verification. A zip file downloaded from an external URL has none of that.&lt;/p&gt;

&lt;p&gt;If you cloned and ran this repo before March 3, 2026, I'd recommend auditing your system.&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%2F4q8aanynsg5srmpc39il.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%2F4q8aanynsg5srmpc39il.png" alt="Supply Chain" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Follow the Money
&lt;/h2&gt;

&lt;p&gt;Let's ask the uncomfortable question: who actually benefits from MoneyPrinterV2?&lt;/p&gt;

&lt;p&gt;Not the users. The four features range from "barely functional" to "actively dangerous." The YouTube automation produces low-quality content that won't generate meaningful revenue. The Twitter bot risks your account. The affiliate system has no viable path to scale. The outreach tool breaks laws.&lt;/p&gt;

&lt;p&gt;The repository author benefits. 21,748 stars is social proof. Social proof attracts sponsorships. The recent commit history is mostly README updates adding sponsor links. The "educational purposes only" disclaimer provides legal cover while the name "MoneyPrinter" promises exactly the opposite of education.&lt;/p&gt;

&lt;p&gt;This is a pattern I've seen repeatedly in the open-source space: repositories with exciting names that promise easy money accumulate stars from hopeful people who never actually run the code. The star count becomes the product. The code is just the packaging.&lt;/p&gt;

&lt;p&gt;I want to be clear: I'm not accusing the author of malicious intent. The disclaimer is there. The code is open source. But the name, the README, and the marketing all sell a dream that the code cannot deliver. And 21,748 people bought it -- for free, but with their time and potentially their account security.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Actually Works for Automated Income
&lt;/h2&gt;

&lt;p&gt;I build automation tools for a living. Our team maintains AI Video Factory, an open-source video pipeline. Here's what I've learned about what actually generates sustainable automated income:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build tools that create genuine value.&lt;/strong&gt; The difference between a tool and a spam bot is whether the output is something people actually want. Automated video generation works when the content is useful -- tutorials, data visualizations, news summaries. It doesn't work when you're generating content-shaped noise to game an algorithm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Respect platform rules.&lt;/strong&gt; API-based integrations are slower to build than Selenium hacks, but they don't get your accounts banned. Every hour spent on proper API integration saves ten hours of dealing with bans, captchas, and detection evasion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pin your dependencies.&lt;/strong&gt; If you're building tools that other people will rely on, reproducible builds aren't optional. They're a basic responsibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solve real problems.&lt;/strong&gt; The indie hackers I know who actually make money online do it by identifying a genuine pain point and building a tool to solve it. Not by running bots that spam platforms with AI-generated content.&lt;/p&gt;

&lt;p&gt;The uncomfortable truth about "automated income" is that the automation part is the easy half. The income part requires that you're creating something someone is willing to pay for. No amount of automation can substitute for that.&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%2Fiar86e6cerwlacaq9mde.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%2Fiar86e6cerwlacaq9mde.png" alt="Verdict" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Verdict
&lt;/h2&gt;

&lt;p&gt;MoneyPrinterV2 is a case study in how star counts can mislead.&lt;/p&gt;

&lt;p&gt;21,748 stars. But 23 unresolved issues. 15 unpinned dependencies. A supply chain poisoning incident. Selenium-based automation that violates platform terms of service. An email feature that breaks anti-spam laws. And economics that don't work even if every feature ran perfectly.&lt;/p&gt;

&lt;p&gt;The name "MoneyPrinter" is doing all the heavy lifting. It sells the fantasy of passive income -- the same fantasy that sells dropshipping courses, forex signal groups, and crypto trading bots. The code behind the name is a collection of barely-maintained scripts that automate the wrong things.&lt;/p&gt;

&lt;p&gt;Here's what I'd tell anyone who starred this repo hoping it would change their financial situation:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Unstar it.&lt;/strong&gt; Star count is how these projects maintain credibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't run untrusted code.&lt;/strong&gt; Especially code with a known supply chain incident and unpinned dependencies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learn to build, not to spam.&lt;/strong&gt; The skills you'd use to get MoneyPrinterV2 working -- Python, APIs, automation -- are genuinely valuable. Use them to build something that creates real value.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read the code before you star.&lt;/strong&gt; 21,748 people starred a project. How many read the requirements.txt? How many noticed 15 unpinned packages? How many saw the supply chain fix commit?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The best money printer is a product that solves a real problem. Everything else is noise.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Counterintuitive Engineering builds open-source tools that work. Follow &lt;a href="https://x.com/CounterIntEng" rel="noopener noreferrer"&gt;@CounterIntEng&lt;/a&gt; for honest engineering takes.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>engineering</category>
      <category>ai</category>
      <category>software</category>
    </item>
    <item>
      <title>How I Gave My AI a Real Brain: The System That Runs Half My Company</title>
      <dc:creator>CounterIntEng</dc:creator>
      <pubDate>Mon, 23 Mar 2026 08:51:07 +0000</pubDate>
      <link>https://dev.to/counterinteng/how-i-gave-my-ai-a-real-brain-the-system-that-runs-half-my-company-4me4</link>
      <guid>https://dev.to/counterinteng/how-i-gave-my-ai-a-real-brain-the-system-that-runs-half-my-company-4me4</guid>
      <description>&lt;h1&gt;
  
  
  How I Gave My AI a Real Brain: The System That Runs Half My Company
&lt;/h1&gt;

&lt;p&gt;Three months ago, I had the same conversation with my AI for the fourteenth time.&lt;/p&gt;

&lt;p&gt;"Use the v2 storage key, not the old one." "Don't mention foreign AI tools in the Chinese version — compliance." "The API proxy goes through the cloud function, not direct calls." Every single session, I was re-teaching the same lessons. My AI assistant had the memory of a goldfish with a 128K token attention span and absolutely zero long-term recall.&lt;/p&gt;

&lt;p&gt;I'm a solo founder building RenoClear, a renovation transparency platform that helps homeowners and contractors stop ripping each other off. WeChat mini-program for China, global web app for everywhere else. Seventeen trade categories, AI-powered quote auditing, floor plan recognition, budget engines — the works. A product that would normally need five engineers, two product managers, and a content team.&lt;/p&gt;

&lt;p&gt;I have none of those people. What I have is a system.&lt;/p&gt;

&lt;p&gt;After eight weeks of building it, my AI agents know my codebase, my past decisions, my compliance rules, my brand guidelines, my API credential locations, and my preferred variable naming conventions. They catch conflicts I miss. They remember deprecations I forgot. They proactively flag when a new feature contradicts a decision I made six weeks ago.&lt;/p&gt;

&lt;p&gt;This is how I built it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Digital Amnesia
&lt;/h2&gt;

&lt;p&gt;Every AI tool on the market suffers from the same fundamental flaw: conversations are disposable. You close the tab, the context evaporates. Open a new session, and you're talking to a stranger who happens to be very smart.&lt;/p&gt;

&lt;p&gt;For casual use, this is fine. For running a company? It's a disaster.&lt;/p&gt;

&lt;p&gt;I was spending the first 15-20 minutes of every coding session just getting the AI back up to speed. Paste the file structure. Explain the architecture decisions. Remind it about the storage key migration. Tell it — again — that the Chinese content must never reference Claude or ChatGPT by name because of domestic compliance rules.&lt;/p&gt;

&lt;p&gt;The math was brutal. At 6-8 sessions per day, I was burning 90-160 minutes daily on pure re-orientation. That's an entire engineer's productive morning, gone.&lt;/p&gt;

&lt;p&gt;I needed to solve this exactly once.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Brain: A Persistent Memory System
&lt;/h2&gt;

&lt;p&gt;The solution turned out to be embarrassingly simple in concept and surprisingly powerful in practice: a structured markdown knowledge base that loads automatically into every AI conversation.&lt;/p&gt;

&lt;p&gt;Here's the architecture. At the root of my user profile, there's a directory the AI reads on startup. Inside it, a file called &lt;code&gt;MEMORY.md&lt;/code&gt; serves as the master index — a 200-line-max table of contents that points to everything the AI needs to know. It stays concise because bloat kills usefulness. Every entry links to a dedicated memory file with more detail.&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%2Fnwcra8dkm3kbb00xd8np.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%2Fnwcra8dkm3kbb00xd8np.png" alt="Memory System Structure" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each memory file has YAML frontmatter with three critical fields:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cn_compliance&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;feedback&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;compliance&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;rules&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Chinese&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;domestic&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;platforms"&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;type&lt;/code&gt; field is where the magic happens. I use four categories:&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%2F18r8o5mh3l00zrr1o3dw.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%2F18r8o5mh3l00zrr1o3dw.png" alt="Four Memory Types" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;user&lt;/strong&gt; — Who I am. My coding style, preferences, communication patterns. The AI learns I prefer batch processing over incremental hand-holding, that I think in systems, that I'll push 50 rounds in a single session and expect the AI to keep pace.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;feedback&lt;/strong&gt; — What to avoid and what to repeat. This is the most important type. When the AI makes a mistake and I correct it, that correction gets saved. When the AI does something brilliant and I confirm it, that confirmation gets saved too. Over time, this becomes a library of validated approaches and known pitfalls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;project&lt;/strong&gt; — Ongoing work state. Current version numbers, uncommitted changes, iteration progress, architecture decisions. The AI picks up exactly where the last session left off.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;reference&lt;/strong&gt; — Where to find things. API credentials, repository URLs, cloud configurations, publishing workflows. Not the secrets themselves — pointers to them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The self-maintaining loop is what makes this more than a glorified README. After every major task, the AI updates its own memory files. Finished a 50-round iteration sprint? The AI writes a summary to &lt;code&gt;iteration-progress.md&lt;/code&gt;. Discovered a new compliance rule? It goes into the feedback memory. Changed the API provider? The reference file gets updated.&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%2Fbxcxs0sn5ejzlju89mc2.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%2Fbxcxs0sn5ejzlju89mc2.png" alt="Self-Maintaining Memory Loop" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I don't maintain this system. The system maintains itself.&lt;/p&gt;

&lt;p&gt;After eight weeks, here's what accumulated: 50+ memory files covering competitor analysis, API credential locations, publishing workflows, code architecture decisions, storage key migrations, brand guidelines for two markets, copyright filing status in two countries, and the exact Telegram bot credentials for deployment notifications.&lt;/p&gt;

&lt;p&gt;When I open a new session now, the AI doesn't just know my project. It knows my project's &lt;em&gt;history&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four Desktops, Four Agents
&lt;/h2&gt;

&lt;p&gt;A single AI agent, no matter how well-informed, hits a ceiling. Context windows are finite. Domain expertise dilutes when you try to cram everything into one conversation. So I split the work across four virtual desktops, each running its own agent with full context of its domain:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Desktop 1: APP Development.&lt;/strong&gt; This is the heavy hitter. Claude Code CLI runs here — a terminal-level AI agent that reads, writes, and edits code directly. It runs shell commands, manages git operations, executes builds. This is where the mini-program and web app get built. One session pushed through 50 consecutive rounds of iteration — from basic UI scaffolding to AI engine integration, security hardening, and a complete price database with 17 trade categories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Desktop 2: Automation.&lt;/strong&gt; The content pipeline lives here. Article generation, multi-platform publishing, cover image creation. This agent knows the publishing workflows cold.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Desktop 3: "Heaven."&lt;/strong&gt; Creative work. Brand strategy, copywriting, design direction. I named it Heaven because the best creative ideas feel like they fall from the sky when you're not forcing them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Desktop 4: Daily Operations.&lt;/strong&gt; Administrative tasks, communications, project management. The grunt work that still needs to get done.&lt;/p&gt;

&lt;p&gt;The interesting engineering problem was inter-agent communication. These agents can't talk to each other directly — they're separate processes on separate desktops. So I built a bridge system.&lt;/p&gt;

&lt;p&gt;Under a shared directory (&lt;code&gt;handoff/bridges/&lt;/code&gt;), each desktop has its own folder. When one agent needs to hand off work to another, it writes a structured file to the target's bridge directory. The receiving agent picks it up at the start of its next session. It's asynchronous message passing, implemented with nothing more than markdown files on a local filesystem.&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%2Fdzz0bp6a1qdwm6hmm38b.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%2Fdzz0bp6a1qdwm6hmm38b.png" alt="4-Desktop Bridge System" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No orchestration framework. No API layer. No database. Just files in folders, read and written by agents that know where to look.&lt;/p&gt;

&lt;p&gt;It works because the memory system tells each agent where its bridge directory is and what format to expect. The conventions are documented in the shared knowledge base. Every agent follows the same protocol because every agent reads the same rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Code CLI: The Core Engine
&lt;/h2&gt;

&lt;p&gt;I should talk about the specific tool that makes the coding side work, because it's the piece most developers will care about.&lt;/p&gt;

&lt;p&gt;Claude Code is a CLI tool that operates at the terminal level. Unlike chat-based interfaces where you describe what you want and hope the AI generates something close, Claude Code has direct filesystem access. It has a tool system — Read, Write, Edit, Bash, Grep, Glob — that lets it interact with the codebase the way a developer would.&lt;/p&gt;

&lt;p&gt;Need to find every file that references a deprecated storage key? Grep. Need to understand the project structure? Glob. Need to edit a function without rewriting the entire file? Edit, with surgical string replacement. Need to run tests or build the project? Bash.&lt;/p&gt;

&lt;p&gt;This matters because the feedback loop is immediate. The AI makes a change, runs the build, sees the error, fixes it — all within the same conversation. No copy-pasting between a chat window and an IDE. No "here's the code, go try it and come back if it doesn't work."&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%2F0w29xzsz68ier768jpmw.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%2F0w29xzsz68ier768jpmw.png" alt="50 Rounds in One Session" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During the 50-round iteration sprint on the mini-program, here's what got built in a single continuous session:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rounds 1-10: Page architecture, navigation, base UI components following Apple Design Language&lt;/li&gt;
&lt;li&gt;Rounds 11-20: Calculation engine for 17 trade categories with room-grouped pricing&lt;/li&gt;
&lt;li&gt;Rounds 21-30: AI integration — quote auditing with vision models, floor plan recognition, budget generation&lt;/li&gt;
&lt;li&gt;Rounds 31-40: Data accuracy hardening, price database with real market rates, storage compatibility layer&lt;/li&gt;
&lt;li&gt;Rounds 41-50: Security review, compliance fixes, performance optimization, version bump&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each round built on the last. The AI remembered what it had done in round 12 when it was working on round 38, because it was the same session. And when the session ended, the memory system captured everything so the &lt;em&gt;next&lt;/em&gt; session could continue seamlessly.&lt;/p&gt;

&lt;p&gt;The key insight: Claude Code doesn't just write code. It manages its own context. After every major change, it updates the project memory files. It writes what changed, why it changed, and what the next step should be. The AI is its own project manager.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Content Factory
&lt;/h2&gt;

&lt;p&gt;Shipping code is half the job. The other half is telling people about it. For a solo founder, content marketing is usually the thing that gets sacrificed — you're too busy building to write about building.&lt;/p&gt;

&lt;p&gt;So I automated it.&lt;/p&gt;

&lt;p&gt;The content pipeline is a Python system called Text_Publisher. It handles the full lifecycle: write an article, score it against eight quality dimensions (targeting 9.9 out of 10), generate a cover image using Remotion Still templates, and publish to four platforms simultaneously — WeChat Official Account, Zhihu, Dev.to, and Hashnode.&lt;/p&gt;

&lt;p&gt;The crucial design decision: tri-lingual content is written independently, never translated. The Chinese article is written for Chinese readers with Chinese cultural context and domestic tool references. The English article is written for a global audience with real tool names and different framing. The Traditional Chinese version serves the Taiwanese market with its own voice.&lt;/p&gt;

&lt;p&gt;This isn't vanity. It's compliance. Chinese domestic platforms have strict rules about referencing foreign AI tools. An article about "how I use Claude Code" would get flagged or suppressed on WeChat. So the Chinese version tells the same story with different tool names. The English version uses real names because there's no restriction.&lt;/p&gt;

&lt;p&gt;The memory system makes this seamless. There's a feedback memory file specifically for Chinese content compliance — the AI reads it before writing any Chinese content and automatically applies the rules. No manual checking needed.&lt;/p&gt;

&lt;p&gt;A Telegram bot sends me a notification when articles are published. I review on my phone, usually while eating lunch. Total time investment for content marketing: about 20 minutes per day of review. The system does the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Compound Effect
&lt;/h2&gt;

&lt;p&gt;Here's what nobody tells you about persistent AI memory: the value compounds exponentially.&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%2Fl70v76bjs16boh56zdcw.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%2Fl70v76bjs16boh56zdcw.png" alt="The Compound Effect" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Week 1:&lt;/strong&gt; The AI knows the basics. Project structure, tech stack, my name. It's helpful but generic. Like a new hire reading the onboarding docs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Week 4:&lt;/strong&gt; The AI remembers every architectural decision, every API migration, every bug fix pattern. It knows that the &lt;code&gt;calc_store_v2&lt;/code&gt; key uses a room-grouped structure while &lt;code&gt;calc_store&lt;/code&gt; is flat and both must be written simultaneously for backward compatibility. It knows this because it wrote that code and saved the decision rationale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Week 8:&lt;/strong&gt; The AI becomes proactive. "This new feature would conflict with the compliance rule you set in week 3." "This storage key was deprecated in v0.8 — should I migrate the references?" "The last time you tried this approach with the budget engine, it caused a rendering issue on iOS. Want me to use the alternative pattern?"&lt;/p&gt;

&lt;p&gt;This is the moment it stops feeling like a tool and starts feeling like a team member. A team member with perfect recall who never takes vacation and never has a bad day.&lt;/p&gt;

&lt;p&gt;The 50+ memory files aren't static documents. They're a living knowledge graph that grows denser and more useful with every interaction. New connections form between old decisions. Patterns emerge that I hadn't noticed. The AI starts seeing my project more holistically than I do, because it actually reads all the documentation every single time — something no human consistently does.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real ROI
&lt;/h2&gt;

&lt;p&gt;Let me be specific about what this system produces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One person, one product, two markets.&lt;/strong&gt; RenoClear ships in China (WeChat mini-program) and globally (web app) with shared business logic and market-specific UIs. Normally a two-team job.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;50 iterations in one session.&lt;/strong&gt; Features that would take a small team weeks get built in hours. Not because the AI is faster than humans at coding — it's often slower for simple tasks — but because the feedback loop has zero latency and zero context-switching cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-platform publishing, automated.&lt;/strong&gt; Four platforms, three languages, cover images, quality scoring. Content marketing runs on autopilot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copyright filed in two countries simultaneously.&lt;/strong&gt; China (software copyright) and the US (eCO registration). The system tracked both applications, managed the different requirements, and kept me updated on status.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero employees. Near-zero operational cost.&lt;/strong&gt; My expenses are API credits and domain registration. That's it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm not claiming this replaces a team in all cases. Complex coordination, relationship management, sales calls — those still need humans. But for the build-ship-market loop of a technical product? A well-configured AI system with persistent memory covers an astonishing amount of ground.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Build Your Own Version
&lt;/h2&gt;

&lt;p&gt;You don't need my exact setup. The principles are what matter. Here's a practical starting checklist:&lt;/p&gt;

&lt;h3&gt;
  
  
  The Memory Layer (Start Here)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a &lt;code&gt;.claude&lt;/code&gt; directory&lt;/strong&gt; (or equivalent for your AI tool) in your user profile and your project root.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write a &lt;code&gt;CLAUDE.md&lt;/code&gt;&lt;/strong&gt; in your project root with: project purpose, directory structure, hard constraints, tech stack. Keep it under 200 lines. This is your AI's onboarding doc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a &lt;code&gt;MEMORY.md&lt;/code&gt; index file&lt;/strong&gt; in your user profile directory. This is the master table of contents that auto-loads into every session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start with three memory files:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;user_profile.md&lt;/code&gt; — Your preferences, communication style, working patterns.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;project_state.md&lt;/code&gt; — Current version, recent changes, active tasks.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;feedback_rules.md&lt;/code&gt; — Corrections and confirmations from past sessions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use YAML frontmatter&lt;/strong&gt; with &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, and &lt;code&gt;description&lt;/code&gt; fields for every memory file. This helps the AI understand what each file is for before reading it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enforce the self-maintenance rule:&lt;/strong&gt; At the end of every significant session, tell your AI to update the relevant memory files. After a few sessions, it'll start doing this proactively.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Multi-Agent Layer (When You Outgrow One Agent)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Separate domains into workspaces.&lt;/strong&gt; Don't try to make one agent do everything. Give each agent a focused domain with its own context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set up bridge directories&lt;/strong&gt; for inter-agent handoff. Simple folder structure: &lt;code&gt;handoff/bridges/{agent-name}/&lt;/code&gt;. Agents write structured markdown files for each other.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document the bridge protocol&lt;/strong&gt; in the shared memory. Every agent should know where to drop files and where to pick them up.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Content Layer (When You Need to Ship Words)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build or adopt a publishing pipeline.&lt;/strong&gt; The key insight: separate writing from publishing. The AI writes, a script publishes. Keep them decoupled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create market-specific content rules&lt;/strong&gt; as feedback memories. Your AI should know that Chinese content follows different rules than English content without being reminded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automate quality scoring.&lt;/strong&gt; Define your dimensions, set a threshold, reject anything below it. This prevents AI slop from reaching your audience.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Mindset
&lt;/h3&gt;

&lt;p&gt;The most important thing isn't the tooling. It's the commitment to treating AI context as infrastructure, not disposable conversation. Every correction you make is a training signal. Every confirmation is a reinforcement. Every decision rationale is future context.&lt;/p&gt;

&lt;p&gt;Write it down. Save it where the AI can find it. Let the compound effect do the rest.&lt;/p&gt;




&lt;p&gt;I still write code myself sometimes. I still make decisions the AI can't make. I still have days where I throw out everything the system produced and start over.&lt;/p&gt;

&lt;p&gt;But I never have the same conversation twice. And that, more than any single feature or automation, is what made a solo founder competitive with funded teams.&lt;/p&gt;

&lt;p&gt;The system isn't perfect. It's just persistent. And in a world where every other AI conversation evaporates the moment you close the window, persistence is a superpower.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Building in public. Follow along: &lt;a href="https://x.com/CounterIntEng" rel="noopener noreferrer"&gt;@CounterIntEng&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>engineering</category>
      <category>ai</category>
      <category>software</category>
    </item>
    <item>
      <title>The Complete OpenClaw Security Hardening Guide: 8 Steps Before It's Too Late</title>
      <dc:creator>CounterIntEng</dc:creator>
      <pubDate>Sun, 22 Mar 2026 03:49:32 +0000</pubDate>
      <link>https://dev.to/counterinteng/the-complete-openclaw-security-hardening-guide-8-steps-before-its-too-late-3fh</link>
      <guid>https://dev.to/counterinteng/the-complete-openclaw-security-hardening-guide-8-steps-before-its-too-late-3fh</guid>
      <description>&lt;h1&gt;
  
  
  The Complete OpenClaw Security Hardening Guide: 8 Steps Before It's Too Late
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Counterintuitive Engineering&lt;/strong&gt; | March 2026&lt;br&gt;
Full video walkthrough: [YouTube link TBD]&lt;br&gt;
Downloads: docker-compose.yaml + .env template + 8-Step Checklist PDF&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;135,000+ OpenClaw instances are running naked on the public internet right now.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No authentication. No firewall. Default config. Shodan scans confirm it. &lt;strong&gt;1,184 plugins on ClawHub are confirmed trojans&lt;/strong&gt; — that's 20% of the entire marketplace. And &lt;strong&gt;CVE-2026-25253&lt;/strong&gt; (CVSS 8.8) gives attackers full remote code execution with zero effort.&lt;/p&gt;

&lt;p&gt;This guide walks you through 8 steps to lock down your OpenClaw installation. Every step includes copy-paste commands. No fluff.&lt;/p&gt;




&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;How Exposed Are You Right Now&lt;/li&gt;
&lt;li&gt;Step 1: Close the Door — Bind to Localhost&lt;/li&gt;
&lt;li&gt;Step 2: Lock It — Enable API Token Auth&lt;/li&gt;
&lt;li&gt;Step 3: Check for Poison — Plugin Security Audit&lt;/li&gt;
&lt;li&gt;Step 4: Isolate — Docker Containerization&lt;/li&gt;
&lt;li&gt;Step 5: Choose Your Brain — LLM API Configuration&lt;/li&gt;
&lt;li&gt;Step 6: Back Up — Version Control Your Config&lt;/li&gt;
&lt;li&gt;Step 7: Monitor — Log Auditing &amp;amp; Alerts&lt;/li&gt;
&lt;li&gt;The Complete Checklist&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 1: How Exposed Are You Right Now
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Default Config = Wide Open
&lt;/h3&gt;

&lt;p&gt;Out of the box, OpenClaw ships with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0.0.0.0&lt;/span&gt;      &lt;span class="c1"&gt;# Listens on ALL interfaces = publicly accessible&lt;/span&gt;
&lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3000&lt;/span&gt;          &lt;span class="c1"&gt;# Default port = first thing attackers scan&lt;/span&gt;
&lt;span class="na"&gt;auth&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;         &lt;span class="c1"&gt;# No authentication = anyone can do anything&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your machine has a public IP, &lt;strong&gt;anyone in the world&lt;/strong&gt; can access &lt;code&gt;http://YOUR_IP:3000&lt;/code&gt; and take full control.&lt;/p&gt;

&lt;h3&gt;
  
  
  The CVE-2026-25253 Attack Chain
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Attacker scans port 3000 via Shodan
    ↓
Discovers your OpenClaw (0.0.0.0, no auth)
    ↓
Accesses API directly, enumerates installed plugins
    ↓
Injects malicious workflow
    ↓
Reads .env file → steals ALL your API keys
    ↓
Escapes to host filesystem
    ↓
Data exfiltration / cryptomining / ransomware
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Cost of attack: zero.&lt;/strong&gt; No exploit needed. Just open access.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check Yourself
&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;# Is your OpenClaw exposed?&lt;/span&gt;
&lt;span class="c"&gt;# If you see 0.0.0.0:3000 → you're exposed&lt;/span&gt;
ss &lt;span class="nt"&gt;-tlnp&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;3000

&lt;span class="c"&gt;# Who's been accessing your instance?&lt;/span&gt;
&lt;span class="c"&gt;# Any IP that's not 127.0.0.1 = someone else is in&lt;/span&gt;
journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; openclaw &lt;span class="nt"&gt;--since&lt;/span&gt; &lt;span class="s2"&gt;"1 hour ago"&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; 127.0.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 2: Step 1 — Close the Door
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Goal: Make OpenClaw listen only on localhost. No public access.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1 Change the Bind Address
&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;# Find your config file&lt;/span&gt;
find ~ &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"config.json"&lt;/span&gt; &lt;span class="nt"&gt;-path&lt;/span&gt; &lt;span class="s2"&gt;"*openclaw*"&lt;/span&gt; 2&amp;gt;/dev/null

&lt;span class="c"&gt;# Change: "host": "0.0.0.0" → "host": "127.0.0.1"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or via environment variable:&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="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;OC_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;127.0.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.2 Firewall Rules
&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;# Linux (iptables)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;iptables &lt;span class="nt"&gt;-A&lt;/span&gt; INPUT &lt;span class="nt"&gt;-p&lt;/span&gt; tcp &lt;span class="nt"&gt;--dport&lt;/span&gt; 3000 &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; 127.0.0.1 &lt;span class="nt"&gt;-j&lt;/span&gt; DROP
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;iptables-persistent &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;netfilter-persistent save

&lt;span class="c"&gt;# Or with ufw (simpler)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw deny 3000
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw &lt;span class="nb"&gt;enable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Windows (PowerShell as Admin)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;New-NetFirewallRule&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-DisplayName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Block OpenClaw External"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-Direction&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Inbound&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-LocalPort&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;3000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Protocol&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;TCP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-RemoteAddress&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.0.0.0/0"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Action&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Block&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.3 Verify
&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;# Local access — should work&lt;/span&gt;
curl http://127.0.0.1:3000/healthz

&lt;span class="c"&gt;# Remote access — should fail&lt;/span&gt;
&lt;span class="c"&gt;# From another machine:&lt;/span&gt;
curl http://YOUR_IP:3000/healthz
&lt;span class="c"&gt;# Expected: Connection refused or timeout&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 3: Step 2 — Lock It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Goal: Even if someone bypasses the firewall, they can't do anything without a token.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3.1 Generate a Secure Token
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openssl rand &lt;span class="nt"&gt;-hex&lt;/span&gt; 32
&lt;span class="c"&gt;# Output: a1b2c3d4... (save this)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.2 Configure Authentication
&lt;/h3&gt;

&lt;p&gt;In your &lt;code&gt;.env&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OC_ENABLE_AUTH=true
OC_API_TOKEN=a1b2c3d4...your-generated-token
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.3 Secure the .env File
&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;chmod &lt;/span&gt;600 .env
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;".env"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; .gitignore

&lt;span class="c"&gt;# NEVER do this:&lt;/span&gt;
&lt;span class="c"&gt;# ✗ export OC_API_TOKEN=sk-xxx  (recorded in shell history!)&lt;/span&gt;
&lt;span class="c"&gt;# ✗ git commit .env             (exposed in repo)&lt;/span&gt;
&lt;span class="c"&gt;# ✗ hardcode keys in docker-compose.yaml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.4 Verify
&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;# Without token — expect 401&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="nt"&gt;-w&lt;/span&gt; &lt;span class="s2"&gt;"%{http_code}"&lt;/span&gt; http://127.0.0.1:3000/api/workflows

&lt;span class="c"&gt;# With token — expect 200&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="nt"&gt;-w&lt;/span&gt; &lt;span class="s2"&gt;"%{http_code}"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_TOKEN"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  http://127.0.0.1:3000/api/workflows
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 4: Step 3 — Check for Poison
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Goal: Identify and remove malicious plugins. Establish a whitelist.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 The Scale of the Problem
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1,184 confirmed trojan plugins&lt;/strong&gt; on ClawHub (20% of total)&lt;/li&gt;
&lt;li&gt;The ClawHavoc campaign silently exfiltrates &lt;code&gt;.env&lt;/code&gt; files, browser cookies, and SSH keys&lt;/li&gt;
&lt;li&gt;Uses DNS tunneling to bypass firewalls&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.2 Audit Your Installed Plugins
&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;# List all installed plugins&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt; ~/.openclaw/plugins/

&lt;span class="c"&gt;# Check each plugin's metadata&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;plugin &lt;span class="k"&gt;in&lt;/span&gt; ~/.openclaw/plugins/&lt;span class="k"&gt;*&lt;/span&gt;/&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"=== &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;basename&lt;/span&gt; &lt;span class="nv"&gt;$plugin&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; ==="&lt;/span&gt;
  &lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$plugin&lt;/span&gt;&lt;span class="s2"&gt;/package.json"&lt;/span&gt; 2&amp;gt;/dev/null | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s1"&gt;'"name"|"author"|"repository"'&lt;/span&gt;
  &lt;span class="nb"&gt;stat&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'%y'&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$plugin&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.3 Detect Trojan Signatures
&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; ~/.openclaw/plugins/

&lt;span class="c"&gt;# Signature 1: Reads env vars or .env files&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-rl&lt;/span&gt; &lt;span class="s2"&gt;"process&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="s2"&gt;env&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;dotenv&lt;/span&gt;&lt;span class="se"&gt;\|\.&lt;/span&gt;&lt;span class="s2"&gt;env"&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--include&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"*.js"&lt;/span&gt;

&lt;span class="c"&gt;# Signature 2: Suspicious network calls (data exfil)&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-rl&lt;/span&gt; &lt;span class="s2"&gt;"fetch&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;axios&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;http&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="s2"&gt;request&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;net&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="s2"&gt;connect"&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--include&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"*.js"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  | xargs &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; &lt;span class="s2"&gt;"dns&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;webhook&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;ngrok&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;burp"&lt;/span&gt;

&lt;span class="c"&gt;# Signature 3: Filesystem traversal&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-rl&lt;/span&gt; &lt;span class="s2"&gt;"readFileSync&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;readdirSync&lt;/span&gt;&lt;span class="se"&gt;\|\.&lt;/span&gt;&lt;span class="s2"&gt;ssh&lt;/span&gt;&lt;span class="se"&gt;\|\.&lt;/span&gt;&lt;span class="s2"&gt;gnupg&lt;/span&gt;&lt;span class="se"&gt;\|\.&lt;/span&gt;&lt;span class="s2"&gt;aws"&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--include&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"*.js"&lt;/span&gt;

&lt;span class="c"&gt;# Signature 4: Obfuscated code (legit plugins don't need this)&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-rl&lt;/span&gt; &lt;span class="s2"&gt;"eval&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;Function(&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;atob&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;Buffer&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="s2"&gt;from.*base64"&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--include&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"*.js"&lt;/span&gt;

&lt;span class="c"&gt;# Signature 5: Suspicious timers (persistent callbacks)&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-rl&lt;/span&gt; &lt;span class="s2"&gt;"setInterval&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;setTimeout.*[0-9]{5,}"&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--include&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"*.js"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.4 Remediation
&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;# Remove suspicious plugins&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/.openclaw/plugins/suspicious-plugin-name/

&lt;span class="c"&gt;# Set up a whitelist in .env&lt;/span&gt;
&lt;span class="nv"&gt;OC_PLUGIN_WHITELIST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;trusted-plugin-a,trusted-plugin-b
&lt;span class="nv"&gt;OC_PLUGIN_NETWORK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false
&lt;/span&gt;&lt;span class="nv"&gt;OC_PLUGIN_ENV_ACCESS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 5: Step 4 — Isolate
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Goal: Run OpenClaw in a Docker container so even if compromised, the host is safe.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5.1 Why Containerize
&lt;/h3&gt;

&lt;p&gt;Running directly on the host means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Malicious plugins can read your entire filesystem&lt;/li&gt;
&lt;li&gt;A compromised instance = compromised user account&lt;/li&gt;
&lt;li&gt;Cryptominers will eat your CPU&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Docker provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Filesystem isolation (plugins only see mounted volumes)&lt;/li&gt;
&lt;li&gt;Container root ≠ host root&lt;/li&gt;
&lt;li&gt;Hard resource limits&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5.2 The docker-compose.yaml
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Full file available for download at the end. Key security blocks explained:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;openclaw&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;openclaw/openclaw:latest&lt;/span&gt;
    &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1000:1000"&lt;/span&gt;                              &lt;span class="c1"&gt;# Non-root&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;127.0.0.1:3000:3000"&lt;/span&gt;                     &lt;span class="c1"&gt;# Localhost only&lt;/span&gt;
    &lt;span class="na"&gt;env_file&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;.env&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;                                &lt;span class="c1"&gt;# Secrets from file&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;openclaw_data:/home/openclaw/.openclaw&lt;/span&gt;      &lt;span class="c1"&gt;# Data (writable)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./plugins:/home/openclaw/.openclaw/plugins:ro&lt;/span&gt;  &lt;span class="c1"&gt;# Plugins (READ-ONLY)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./backups:/backups&lt;/span&gt;                          &lt;span class="c1"&gt;# Backups (writable)&lt;/span&gt;
    &lt;span class="na"&gt;cap_drop&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;ALL&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;                                 &lt;span class="c1"&gt;# Drop ALL capabilities&lt;/span&gt;
    &lt;span class="na"&gt;cap_add&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;NET_BIND_SERVICE&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;                     &lt;span class="c1"&gt;# Only allow port binding&lt;/span&gt;
    &lt;span class="na"&gt;read_only&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;                                 &lt;span class="c1"&gt;# Read-only root filesystem&lt;/span&gt;
    &lt;span class="na"&gt;tmpfs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/tmp:size=100M,noexec,nosuid"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;        &lt;span class="c1"&gt;# Temp with no-exec&lt;/span&gt;
    &lt;span class="na"&gt;security_opt&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;no-new-privileges:true"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;        &lt;span class="c1"&gt;# No privilege escalation&lt;/span&gt;
    &lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;limits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;cpus&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2.0"&lt;/span&gt;
          &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2G&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.3 Deploy
&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;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/openclaw-secure &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ~/openclaw-secure

&lt;span class="c"&gt;# Get the config files (download from article attachments)&lt;/span&gt;
&lt;span class="c"&gt;# Place docker-compose.yaml and .env.example here&lt;/span&gt;

&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
nano .env  &lt;span class="c"&gt;# Fill in your tokens and LLM API key&lt;/span&gt;

&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; plugins backups
&lt;span class="nb"&gt;chmod &lt;/span&gt;600 .env
&lt;span class="nb"&gt;chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; 1000:1000 plugins backups

docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
docker compose logs &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="nt"&gt;--tail&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;50
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 6: Step 5 — Choose Your Brain (LLM Configuration)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Goal: Securely configure your LLM provider.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6.1 OpenAI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OC_LLM_PROVIDER=openai
OC_LLM_API_KEY=sk-your-openai-key
OC_LLM_MODEL=gpt-4o
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.2 Anthropic Claude
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OC_LLM_PROVIDER=anthropic
OC_LLM_API_KEY=sk-ant-your-claude-key
OC_LLM_MODEL=claude-sonnet-4-6-20250514
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.3 Local Ollama (Fully Offline)
&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;# Install Ollama first&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://ollama.com/install.sh | sh
ollama pull llama3:8b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OC_LLM_PROVIDER=ollama
OC_LLM_BASE_URL=http://host.docker.internal:11434
OC_LLM_MODEL=llama3:8b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Ollama advantages:&lt;/strong&gt; Zero API costs, full privacy, no data leaves your machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.4 API Key Security
&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;# NEVER run this (gets saved in shell history):&lt;/span&gt;
&lt;span class="c"&gt;# export OC_LLM_API_KEY=sk-xxx&lt;/span&gt;

&lt;span class="c"&gt;# Instead, write to .env file:&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"OC_LLM_API_KEY=sk-xxx"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; .env
&lt;span class="nb"&gt;chmod &lt;/span&gt;600 .env

&lt;span class="c"&gt;# Rotate keys every 30 days&lt;/span&gt;
&lt;span class="c"&gt;# Regenerate on the provider's dashboard → update .env → restart&lt;/span&gt;
docker compose restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 7: Step 6 — Back Up
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Goal: If things break, recover in minutes, not hours.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7.1 Git Version Control
&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; ~/openclaw-secure
git init

&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; .gitignore &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;EOF&lt;/span&gt;&lt;span class="sh"&gt;'
.env
*.log
backups/
openclaw_data/
&lt;/span&gt;&lt;span class="no"&gt;EOF

&lt;/span&gt;git add docker-compose.yaml .env.example plugins/ .gitignore
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Initial secure configuration"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7.2 Automated Backup Script
&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;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; backup.sh &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;SCRIPT&lt;/span&gt;&lt;span class="sh"&gt;'
#!/bin/bash
BACKUP_DIR=~/openclaw-secure/backups
DATE=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y%m%d_%H%M%S&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;

echo "[&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;] Starting backup..."
docker compose exec openclaw tar czf /backups/data_&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DATE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;.tar.gz &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="sh"&gt;
  -C /home/openclaw .openclaw --exclude='.openclaw/plugins'
cp docker-compose.yaml &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;BACKUP_DIR&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;/docker-compose_&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DATE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;.yaml
find &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;BACKUP_DIR&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="sh"&gt; -name "data_*.tar.gz" -mtime +7 -delete
echo "[&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;] Backup complete: data_&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DATE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;.tar.gz"
&lt;/span&gt;&lt;span class="no"&gt;SCRIPT

&lt;/span&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x backup.sh

&lt;span class="c"&gt;# Run daily at 3 AM&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;crontab &lt;span class="nt"&gt;-l&lt;/span&gt; 2&amp;gt;/dev/null&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"0 3 * * * ~/openclaw-secure/backup.sh &amp;gt;&amp;gt; ~/openclaw-secure/backups/backup.log 2&amp;gt;&amp;amp;1"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; | crontab -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 8: Step 7 — Monitor
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Goal: Know immediately when someone tries to get in.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  8.1 Log Auditing
&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;# View recent logs&lt;/span&gt;
docker compose logs &lt;span class="nt"&gt;--tail&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;100

&lt;span class="c"&gt;# Real-time monitoring&lt;/span&gt;
docker compose logs &lt;span class="nt"&gt;-f&lt;/span&gt;

&lt;span class="c"&gt;# Find non-local access attempts&lt;/span&gt;
docker compose logs | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"127.0.0.1"&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"GET|POST|PUT|DELETE"&lt;/span&gt;

&lt;span class="c"&gt;# Find auth failures&lt;/span&gt;
docker compose logs | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"401&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;unauthorized&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;forbidden"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  8.2 Monitoring Script
&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;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; monitor.sh &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;SCRIPT&lt;/span&gt;&lt;span class="sh"&gt;'
#!/bin/bash
LOG_FILE=~/openclaw-secure/backups/monitor.log

if ! docker compose ps | grep -q "running"; then
  echo "[ALERT &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;] OpenClaw container is DOWN!" | tee -a &lt;/span&gt;&lt;span class="nv"&gt;$LOG_FILE&lt;/span&gt;&lt;span class="sh"&gt;
  exit 1
fi

HTTP_CODE=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="nt"&gt;-w&lt;/span&gt; &lt;span class="s2"&gt;"%{http_code}"&lt;/span&gt; http://127.0.0.1:3000/healthz&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;
if [ "&lt;/span&gt;&lt;span class="nv"&gt;$HTTP_CODE&lt;/span&gt;&lt;span class="sh"&gt;" != "200" ]; then
  echo "[ALERT &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;] Health check failed: HTTP &lt;/span&gt;&lt;span class="nv"&gt;$HTTP_CODE&lt;/span&gt;&lt;span class="sh"&gt;" | tee -a &lt;/span&gt;&lt;span class="nv"&gt;$LOG_FILE&lt;/span&gt;&lt;span class="sh"&gt;
fi

SUSPICIOUS=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;docker compose logs &lt;span class="nt"&gt;--since&lt;/span&gt; 5m 2&amp;gt;/dev/null | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-cv&lt;/span&gt; &lt;span class="s2"&gt;"127.0.0.1"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;
if [ "&lt;/span&gt;&lt;span class="nv"&gt;$SUSPICIOUS&lt;/span&gt;&lt;span class="sh"&gt;" -gt 10 ]; then
  echo "[ALERT &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;] &lt;/span&gt;&lt;span class="nv"&gt;$SUSPICIOUS&lt;/span&gt;&lt;span class="sh"&gt; non-local access attempts detected!" | tee -a &lt;/span&gt;&lt;span class="nv"&gt;$LOG_FILE&lt;/span&gt;&lt;span class="sh"&gt;
fi

docker stats --no-stream --format "{{.Container}}: CPU {{.CPUPerc}} MEM {{.MemUsage}}" &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="sh"&gt;
  openclaw-secure &amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="nv"&gt;$LOG_FILE&lt;/span&gt;&lt;span class="sh"&gt;
&lt;/span&gt;&lt;span class="no"&gt;SCRIPT

&lt;/span&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x monitor.sh
&lt;span class="o"&gt;(&lt;/span&gt;crontab &lt;span class="nt"&gt;-l&lt;/span&gt; 2&amp;gt;/dev/null&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"*/5 * * * * ~/openclaw-secure/monitor.sh"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; | crontab -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Complete 8-Step Security Checklist
&lt;/h2&gt;

&lt;p&gt;Run each verification command. All pass = you're secure.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Verification Command&lt;/th&gt;
&lt;th&gt;Expected Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Close the Door&lt;/td&gt;
&lt;td&gt;`ss -tlnp \&lt;/td&gt;
&lt;td&gt;grep 3000`&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Lock It&lt;/td&gt;
&lt;td&gt;&lt;code&gt;curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:3000/api/workflows&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;401&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Check for Poison&lt;/td&gt;
&lt;td&gt;`grep -rl "eval\&lt;/td&gt;
&lt;td&gt;atob" ~/.openclaw/plugins/ --include="*.js"`&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Isolate&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker compose ps&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;running (healthy)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Choose Brain&lt;/td&gt;
&lt;td&gt;Send a test message in OpenClaw&lt;/td&gt;
&lt;td&gt;LLM responds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Back Up&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ls ~/openclaw-secure/backups/data_*.tar.gz&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;At least 1 file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Monitor&lt;/td&gt;
&lt;td&gt;`crontab -l \&lt;/td&gt;
&lt;td&gt;grep monitor`&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Permissions&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stat -c '%a' .env&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;600&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Downloads
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;docker-compose.yaml&lt;/strong&gt; — Production-ready secure config&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;.env.example&lt;/strong&gt; — Environment variable template with all LLM providers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;8-Step Security Checklist PDF&lt;/strong&gt; — Printable one-pager&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Comment "security guide" or DM "OpenClaw" to get the download links.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Done?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Screenshot your checklist results and post them in the comments.&lt;/strong&gt; I'll review them for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full video walkthrough&lt;/strong&gt; on YouTube — search "Counterintuitive Engineering OpenClaw". Step by step, live demo.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Counterintuitive Engineering — Solving problems with code&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Data sources: Shodan, NVD, CNCERT. Current as of March 2026.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>engineering</category>
      <category>ai</category>
      <category>software</category>
    </item>
    <item>
      <title>My Code Makes Videos While I Sleep</title>
      <dc:creator>CounterIntEng</dc:creator>
      <pubDate>Sat, 21 Mar 2026 15:20:01 +0000</pubDate>
      <link>https://dev.to/counterinteng/my-code-makes-videos-while-i-sleep-42m7</link>
      <guid>https://dev.to/counterinteng/my-code-makes-videos-while-i-sleep-42m7</guid>
      <description>&lt;p&gt;Ever tried producing a 10-minute video solo?&lt;/p&gt;

&lt;p&gt;Script. Voiceover. Visuals. Editing. Color. Music. Subtitles. Export.&lt;/p&gt;

&lt;p&gt;That's not a weekend project — that's a full-time team. Four people minimum. Eight thousand dollars a month, easy.&lt;/p&gt;

&lt;p&gt;I refused to accept that. So I wrote a Python script that does all of it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Thing Actually Does
&lt;/h2&gt;

&lt;p&gt;You give it a topic. It gives you a finished MP4.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Topic → Script → Voice → Images → Video → BGM + Subtitles → MP4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No babysitting. No timeline dragging. No "just one more export." You run one command, walk away, and come back to a video.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python generate_plan.py &lt;span class="s2"&gt;"How quantum computing works"&lt;/span&gt; &lt;span class="nt"&gt;--produce&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the whole interaction.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Pipeline: 5 Stages, Zero Clicks
&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%2Fs5vz2gmcvudq63hxdbj9.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%2Fs5vz2gmcvudq63hxdbj9.png" alt="Production Pipeline" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 1 — Script&lt;/strong&gt;&lt;br&gt;
An LLM takes your topic and writes the full narration plus scene-by-scene image prompts. Plug in any OpenAI-compatible provider: Ollama (free, runs locally), DeepSeek, OpenAI, Gemini — your call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 2 — Voice&lt;/strong&gt;&lt;br&gt;
Edge-TTS turns the script into speech. It's Microsoft's free TTS service. Multi-language, decent quality, zero cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 3 — Visuals&lt;/strong&gt;&lt;br&gt;
ComfyUI + Flux generates every scene image on your local GPU. No cloud calls. No API bills. No rate limits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 4 — Motion (optional)&lt;/strong&gt;&lt;br&gt;
HunyuanVideo animates the static images into video clips. Requires 16GB VRAM. Don't have it? Skip this — static images still make a perfectly watchable video.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 5 — Assembly&lt;/strong&gt;&lt;br&gt;
BGM gets layered in. Subtitles get burned. Everything stitches together into a final MP4.&lt;/p&gt;

&lt;p&gt;Each stage is independent. Kill the process halfway through? Re-run the same command — it picks up exactly where it stopped. Checkpoint resume, built in.&lt;/p&gt;


&lt;h2&gt;
  
  
  Inside the Repo
&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%2Fwj24giywi3ahsnrs7f7o.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%2Fwj24giywi3ahsnrs7f7o.png" alt="File Tree" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Under 20 files. Nothing hidden, nothing clever:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;generate_plan.py&lt;/code&gt; — topic in, production plan out&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;produce_from_plan.py&lt;/code&gt; — plan in, video out&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;main.py&lt;/code&gt; — the pipeline core&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;modules/&lt;/code&gt; — one file per stage (LLM, TTS, image gen, video assembly, BGM)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;setup.py&lt;/code&gt; — interactive wizard, 3 questions, done&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Hardware? Lower Than You Think
&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%2Fhqm4pi8vub9y32iem7xt.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%2Fhqm4pi8vub9y32iem7xt.png" alt="Code" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What&lt;/th&gt;
&lt;th&gt;Minimum&lt;/th&gt;
&lt;th&gt;Sweet Spot&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPU&lt;/td&gt;
&lt;td&gt;8GB VRAM (images only)&lt;/td&gt;
&lt;td&gt;16GB VRAM (images + motion)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RAM&lt;/td&gt;
&lt;td&gt;16GB&lt;/td&gt;
&lt;td&gt;32GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disk&lt;/td&gt;
&lt;td&gt;50GB free&lt;/td&gt;
&lt;td&gt;100GB+&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A used RTX 2070 handles it fine.&lt;/p&gt;


&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Three commands. That's the setup.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/counter-eng/ai-video-factory.git
&lt;span class="nb"&gt;cd &lt;/span&gt;ai-video-factory &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
python setup.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The wizard asks three things: which LLM, where's ComfyUI, GPU or CPU encoding. It writes your config. You're done.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python generate_plan.py &lt;span class="s2"&gt;"How radar works"&lt;/span&gt; &lt;span class="nt"&gt;--produce&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Go make coffee. Come back to a video.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Open-Sourced This
&lt;/h2&gt;

&lt;p&gt;I built it because I needed it. Running a content channel solo means choosing between quality and quantity — unless you automate.&lt;/p&gt;

&lt;p&gt;After months of running this pipeline, my output as one person matched a three-person team. That felt too useful to keep private.&lt;/p&gt;

&lt;p&gt;So here it is. MIT license. Fork it, break it, improve it, ship it. If you hit a bug, open an issue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The entire source is yours.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/counter-eng/ai-video-factory" rel="noopener noreferrer"&gt;https://github.com/counter-eng/ai-video-factory&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;YouTube&lt;/strong&gt;: &lt;a href="https://www.youtube.com/@CounterintuitiveEng" rel="noopener noreferrer"&gt;https://www.youtube.com/@CounterintuitiveEng&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Star it if you find it useful. PRs welcome.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/counter-eng/ai-video-factory.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Your code makes videos. You make ideas.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>engineering</category>
      <category>ai</category>
      <category>software</category>
    </item>
    <item>
      <title>Why 8 AI Workers Made Me Less Productive Until I Built a Control Tower</title>
      <dc:creator>CounterIntEng</dc:creator>
      <pubDate>Sat, 21 Mar 2026 05:26:59 +0000</pubDate>
      <link>https://dev.to/counterinteng/why-8-ai-workers-made-me-less-productive-until-i-built-a-control-tower-2gbk</link>
      <guid>https://dev.to/counterinteng/why-8-ai-workers-made-me-less-productive-until-i-built-a-control-tower-2gbk</guid>
      <description>&lt;h1&gt;
  
  
  Why 8 AI Workers Made Me Less Productive Until I Built a Control Tower
&lt;/h1&gt;

&lt;p&gt;At 1 a.m., one dashboard was already flashing at 97% utilization. Why did a setup with 4 desktops, 8 AI workers, and 1 bot control channel make me feel slower instead of faster? One lane was writing code, one was running 12 automation scripts, one was handling 6 routine tasks, and one was sorting 4 months of material. I was sitting there with Telegram on my phone, acting like a one-person air traffic controller, and the answer was painfully clear: if the architecture is wrong, more AI just multiplies noise.&lt;/p&gt;

&lt;p&gt;That sounds obvious in hindsight. It did not feel obvious when I was losing 2 to 3 hours a day — roughly 15 hours a week — to context switching, repeated instructions, and the mental tax of remembering which assistant was doing what. The way I see it, the pain was not that Claude or Codex could not do the work. The pain was that once I had 8 active threads across 4 surfaces, the whole system started behaving like a kitchen with 8 cooks and no ticket rail, and roughly 30% of my useful attention was disappearing into coordination overhead.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture I Ended Up With
&lt;/h2&gt;

&lt;p&gt;The core structure is brutally simple.&lt;/p&gt;

&lt;p&gt;I split the workload across 4 virtual desktops: &lt;code&gt;APP Development A&lt;/code&gt;, &lt;code&gt;Automation B&lt;/code&gt;, &lt;code&gt;Paradise&lt;/code&gt;, and &lt;code&gt;Daily Work&lt;/code&gt;. Each desktop gets a fixed pair of AI workers. By worker, I mean one dedicated assistant with its own lane, task handoff, and stable role. That means 8 AI workers in total, with a stable home instead of one giant shared mess. According to my architecture notes, each desktop also carries the same 4 bridge files, which is what keeps the handoff model consistent instead of improvisational. In practice, that turns 100% of incoming work into something visible instead of fuzzy.&lt;/p&gt;

&lt;p&gt;If I break the control plane down, about 25% of the value comes from desktop isolation, 25% from queue visibility, 25% from routing, and 25% from handoff discipline. That is not a scientific benchmark — it is my operator view after running this system for 3 weeks across 200 or more task cycles. But it matches what I feel every day: 0% ambiguity is impossible, yet moving from 60% ambiguity to something closer to 10% changes everything.&lt;/p&gt;

&lt;p&gt;Each desktop has its own bridge folder, and each bridge folder has the same 4 core files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;HANDOFF_LIVE.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;task_queue.json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;README.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;watcher.py&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That might look like implementation trivia, but it is the reason the whole thing stays sane. &lt;code&gt;task_queue.json&lt;/code&gt; is the machine-readable queue. &lt;code&gt;HANDOFF_LIVE.md&lt;/code&gt; is the human-readable handoff board. &lt;code&gt;watcher.py&lt;/code&gt; is the local observer that notices new work. In other words, I stopped treating multi-worker coordination like a chat problem and started treating it like operations. What struck me was how quickly order appears once 100% of incoming work has a visible lane. According to the current notes, 4 bridge files per desktop and 1 shared hub already cover the dispatch path, which means the structure is doing most of the heavy lifting.&lt;/p&gt;

&lt;p&gt;And that is the key difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Problem Was Never “More AI”
&lt;/h2&gt;

&lt;p&gt;The biggest failure mode in multi-worker setups is not weak models.&lt;/p&gt;

&lt;p&gt;It is context contamination.&lt;/p&gt;

&lt;p&gt;If you let too many assistants share the same working surface, they start stepping on each other. One worker is halfway through a coding task. Another is supposed to summarize results. A third worker suddenly gets dragged into the wrong thread because the routing layer is fuzzy. Now you are not scaling output. You are scaling confusion. And that confusion is expensive, because it leads to repeated prompts, repeated checks, and repeated restarts.&lt;/p&gt;

&lt;p&gt;I found this out the hard way. Before I isolated the desktops, I kept paying a hidden tax: 6 to 8 repeated context resets per day, each costing 5 to 10 minutes. That adds up to 40 to 80 minutes of pure waste daily. On bad days, I was not managing AI. I was babysitting it.&lt;/p&gt;

&lt;p&gt;That is the kind of waste people underestimate because it does not show up as a single dramatic error. It shows up as attention leakage — roughly 30 to 40 minutes of lost focus per evening session. And attention leakage is expensive. Once you lose the thread 3 or 4 times in one evening, the entire productivity story starts collapsing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the Bot Matters More Than the Models
&lt;/h2&gt;

&lt;p&gt;The bot layer is not the star of this system. It is the dispatcher.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;I do not use the bot as a magical helper that somehow understands everything. I use it as a routing layer. A message comes in, the system parses the target desktop, identifies the target worker, and writes the task into that desktop's &lt;code&gt;task_queue.json&lt;/code&gt;. The bot does not “do the work.” It hands the work to the right lane. Think of it as the ticket counter, not the kitchen. It is also like an air traffic tower: it does not fly the plane, but it prevents 80% of the chaos.&lt;/p&gt;

&lt;p&gt;Think of it like an air traffic control tower. You do not let every plane negotiate its own runway. You assign direction, spacing, and order, then let each aircraft execute within its lane. Multi-worker systems need the same thing. Without a control tower, “parallel work” quickly turns into synchronized chaos.&lt;/p&gt;

&lt;p&gt;There is another analogy that fits even better: a restaurant kitchen. The front-of-house system takes the order. The ticket rail makes the work visible. Each station handles its own category. The quality of the kitchen depends less on raw cooking talent than on whether the tickets arrive cleanly and in order. My bot is the front-of-house order system. The desktops are the stations. Claude and Codex are the cooks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Chose 4 Desktop Bridges Instead of One Global Queue
&lt;/h2&gt;

&lt;p&gt;A lot of people would look at this and ask the obvious question: why not one giant queue with more metadata?&lt;/p&gt;

&lt;p&gt;Because in practice, that is where systems become elegant on paper and brittle in real life.&lt;/p&gt;

&lt;p&gt;Desktop-level isolation is doing the real work here. &lt;code&gt;Daily Work&lt;/code&gt; does not pollute &lt;code&gt;APP Development A&lt;/code&gt;. Automation jobs do not accidentally inherit the wrong context from long-horizon planning. The separation is intuitive enough that I can reason about it quickly, and rigid enough that the workers are less likely to drift.&lt;/p&gt;

&lt;p&gt;This is one of those counterintuitive engineering lessons that keeps repeating across domains: structure beats cleverness. I would rather have 4 boring lanes with clean boundaries than 1 “smart” shared highway where everything needs perfect tagging to stay readable.&lt;/p&gt;

&lt;p&gt;Think of it as warehouse logistics, not chat UX. If every box has a lane, a scanner, and a destination, the floor keeps moving. If not, 50% of the labor goes into asking where the box belongs.&lt;/p&gt;

&lt;p&gt;The same principle also makes the system easier to extend. The shared control directory already includes &lt;code&gt;bridge_core.py&lt;/code&gt;, &lt;code&gt;queue_helper.py&lt;/code&gt;, &lt;code&gt;desktop_watcher.py&lt;/code&gt;, and &lt;code&gt;telegram_bot_controller.py&lt;/code&gt;. According to the architecture notes, the current version already supports task delivery, watcher-based monitoring, and text routing into desktop-specific queues. That means the next step is not a redesign. It is just closing the loop with an execution runner and a result-return path, which means the hardest architectural decision is already behind me. In practical terms, I already have roughly 80% of the control plane; the missing 20% is execution and return traffic.&lt;/p&gt;

&lt;p&gt;That is a much better position to be in.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Most Valuable Outcome Was Not Speed. It Was Order.
&lt;/h2&gt;

&lt;p&gt;The impressive part is not that I can point 8 AI workers at 4 desktops. The impressive part is that I no longer have to hold the entire system in my head at once.&lt;/p&gt;

&lt;p&gt;That is the real win. Order beats power.&lt;/p&gt;

&lt;p&gt;Before this setup, I was playing 4 jobs at the same time: operator, dispatcher, context keeper, and cleanup crew. Now I spend more time acting like a control layer. I look at flow, not just individual outputs. I intervene when routing or priorities change. I do not micromanage every handoff. That change alone cuts roughly 30% of the mental overhead — maybe 45 minutes a day — that used to come from keeping every moving part in working memory. Less babysitting, more leverage.&lt;/p&gt;

&lt;p&gt;The way I see it, this is the shift people miss when they talk about “AI productivity.” They obsess over which model is smarter, but the bigger leverage point is whether your architecture can keep multiple workers from corrupting each other. If the structure is weak, more workers make you slower. If the structure is strong, more workers finally start behaving like parallel labor.&lt;/p&gt;

&lt;p&gt;That is why I keep coming back to the same conclusion: the architecture matters more than the AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Happens Next
&lt;/h2&gt;

&lt;p&gt;The current system is already useful, but it is not finished.&lt;/p&gt;

&lt;p&gt;That matters.&lt;/p&gt;

&lt;p&gt;The architecture report makes that clear. The watcher layer is there. The queueing layer is there. Telegram can already act as a remote control entry point. The next big upgrade is the execution layer: a real runner that reads assigned tasks, invokes the right local workflows, and writes results back. After that comes result return, status queries, heartbeat checks, and eventually more remote-control adapters.&lt;/p&gt;

&lt;p&gt;In plain English, the system has already moved from “interesting idea” to “working dispatch layer.” The next jump is from “deliverable tasks” to “closed-loop execution.”&lt;/p&gt;

&lt;p&gt;That is where things get serious. Ship it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Practical Takeaway
&lt;/h2&gt;

&lt;p&gt;If you are experimenting with multiple AI workers, do not start by adding more workers. Start by building isolation, queues, and a control surface.&lt;/p&gt;

&lt;p&gt;Because once context gets muddy, you pay for it in repeated explanations. Repeated explanations become wasted time. Wasted time turns into slower output, which means your fancy setup can lose 20% to 40% of its value before the real work even starts. That is the trap. And I do not think enough people admit how easy it is to fall into it.&lt;/p&gt;

&lt;p&gt;If this was useful, like it, bookmark it, and share it with someone who is trying to run more than one AI assistant at a time. And if you have built your own multi-worker workflow, drop your take in the comments. I want to see how other people are solving the control-tower problem.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>engineering</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
