<?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: AIFix</title>
    <description>The latest articles on DEV Community by AIFix (@useaifix).</description>
    <link>https://dev.to/useaifix</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4203327%2F804f80b9-73ab-4bbd-a7e1-44fa45d3988e.png</url>
      <title>DEV Community: AIFix</title>
      <link>https://dev.to/useaifix</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/useaifix"/>
    <language>en</language>
    <item>
      <title>claude subagents: When to Use One Agent vs Many (A Practical Setup Guide)</title>
      <dc:creator>AIFix</dc:creator>
      <pubDate>Sat, 24 Oct 2026 19:27:42 +0000</pubDate>
      <link>https://dev.to/useaifix/claude-subagents-when-to-use-one-agent-vs-many-a-practical-setup-guide-1483</link>
      <guid>https://dev.to/useaifix/claude-subagents-when-to-use-one-agent-vs-many-a-practical-setup-guide-1483</guid>
      <description>&lt;p&gt;If you build with Claude, you have probably wondered whether to split work across claude subagents or keep everything in one agent. Anthropic recently published guidance on exactly this question, and the short answer is: start with one main agent plus skills, and add subagents only when you have a clear reason. Here is what the sources say and how to apply it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Anthropic's guide says
&lt;/h2&gt;

&lt;p&gt;In &lt;a href="https://claude.com/resources/articles/building-agents-when-to-fold-subagents-into-your-main-agent-loop" rel="noopener noreferrer"&gt;Building agents: When to fold subagents into your main agent loop&lt;/a&gt;, Anthropic's Applied AI team writes that across several enterprise deployments, "a single agent with skills frequently outperformed both the one-prompt-for-everything design and the subagent design on quality, and often at a lower cost and latency per task."&lt;/p&gt;

&lt;p&gt;A few points from the same article:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One customer that compared its multi-agent setup against a single agent loop saw roughly 2x faster runtime with the single loop.&lt;/li&gt;
&lt;li&gt;Skills and tool search use progressive disclosure: the agent sees short descriptions and loads the full content only when needed, which removes a main reason teams split work into subagents.&lt;/li&gt;
&lt;li&gt;Group tools by user intent, because past roughly 30-50 tool definitions, tool choice tends to degrade.&lt;/li&gt;
&lt;li&gt;A common mistake is giving every team its own subagent, so the architecture copies the org chart.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The guide is clear that subagents still have a place. Use them when:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A single agent hits measurable performance loss from context bloat.&lt;/li&gt;
&lt;li&gt;Several tasks can run in parallel with fresh context windows you can throw away afterwards.&lt;/li&gt;
&lt;li&gt;One agent struggles to pick the right tools, or the system prompt has conflicting instructions.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What the Claude Code docs add
&lt;/h2&gt;

&lt;p&gt;The official &lt;a href="https://docs.claude.com/en/docs/claude-code/sub-agents" rel="noopener noreferrer"&gt;Claude Code subagents docs&lt;/a&gt; say each subagent runs in its own context window with its own system prompt, tool access and permissions, and returns a summary to the main conversation. They also note that subagents send their own requests, which count toward the same usage limits.&lt;/p&gt;

&lt;p&gt;The docs recommend staying in the main conversation when the task needs back-and-forth, when phases like planning, building and testing share a lot of context, for quick changes, and when latency matters. Subagents fit when the task produces verbose output you don't need in your main context, when you want to restrict tools, or when the work is self-contained and can return a summary.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small example setup
&lt;/h2&gt;

&lt;p&gt;Per the docs, subagents are Markdown files with YAML frontmatter. Put project ones in &lt;code&gt;.claude/agents/&lt;/code&gt; (or &lt;code&gt;~/.claude/agents/&lt;/code&gt; for all your projects). Only &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;description&lt;/code&gt; are required. Here is a read-only research helper, the kind of self-contained job the guidance supports:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&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;log-researcher&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;Reads&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;long&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;log&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;files&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;test&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;output,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;then&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;reports&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;only&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;errors&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;likely&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;causes.&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Use&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;when&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;output&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;is&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;large."&lt;/span&gt;
&lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Read, Grep, Glob&lt;/span&gt;
&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;haiku&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

You are a log analyst. Find errors, group them by cause,
and return a short summary with file paths and line numbers.
Do not edit any files.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything else, such as your normal coding, writing or customer workflow steps, can stay in the main agent, with repeatable procedures moved into skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  A simple decision checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Steps depend on each other or share context?&lt;/strong&gt; One main agent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lots of noisy output (logs, test runs, document reading)?&lt;/strong&gt; A subagent that returns a summary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Independent research paths?&lt;/strong&gt; Parallel subagents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Need a strictly read-only helper?&lt;/strong&gt; A subagent with limited tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same instructions reused everywhere?&lt;/strong&gt; A skill, not a new subagent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anthropic's own advice is to measure: build a small eval (even 10 good examples), fold in one subagent at a time, and keep it as a subagent only if the folded version scores worse.&lt;/p&gt;

&lt;p&gt;More research-based AI news and guides at ainews.useaifix.com, and automation help at useaifix.com.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>agents</category>
      <category>automation</category>
    </item>
    <item>
      <title>node2shell: How to Check If Your Node.js App Is Exposed and Patch It</title>
      <dc:creator>AIFix</dc:creator>
      <pubDate>Sat, 24 Oct 2026 04:27:10 +0000</pubDate>
      <link>https://dev.to/useaifix/node2shell-how-to-check-if-your-nodejs-app-is-exposed-and-patch-it-4gjc</link>
      <guid>https://dev.to/useaifix/node2shell-how-to-check-if-your-nodejs-app-is-exposed-and-patch-it-4gjc</guid>
      <description>&lt;p&gt;node2shell is the nickname for CVE-2026-111497, a flaw in the Brotli decoder bundled with Node.js. The Node.js project fixed it on 21 October 2026, and the fix is a runtime upgrade. Here's how to check and patch, based on the advisories listed at the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  What node2shell is
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://nodejs.org/en/blog/vulnerability/october-2026-security-releases" rel="noopener noreferrer"&gt;Node.js security release&lt;/a&gt; describes an out-of-bounds write in the bundled Brotli decoder. If an attacker can supply Brotli data that your app decompresses with &lt;code&gt;node:zlib&lt;/code&gt;, they can corrupt process memory. Node.js says this can lead to a crash, memory disclosure or remote code execution. It affects the 22.x, 24.x and 26.x lines, and Node.js credits OpenAI Codex Security with reporting it.&lt;/p&gt;

&lt;p&gt;Severity ratings differ by source:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Node.js advisory rates it &lt;strong&gt;high&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://www.cve.org/CVERecord?id=CVE-2026-111497" rel="noopener noreferrer"&gt;CVE record&lt;/a&gt; gives it &lt;strong&gt;9.2 (critical)&lt;/strong&gt; on CVSS 4.0 and places the root bug in Google's Brotli library, versions 1.0.3 through 1.2.0.&lt;/li&gt;
&lt;li&gt;Singapore's &lt;a href="https://www.csa.gov.sg/alerts-and-advisories/alerts/al-2026-154/" rel="noopener noreferrer"&gt;Cyber Security Agency&lt;/a&gt; calls it &lt;strong&gt;critical&lt;/strong&gt;, citing a CVSS 3.1 score of 9.8.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Imperva's Red Team &lt;a href="https://www.imperva.com/blog/node2shell-from-brotli-data-to-remote-code-execution/" rel="noopener noreferrer"&gt;says it got code execution&lt;/a&gt; against the official Node.js 24.22.0 image, through both the built-in &lt;code&gt;fetch()&lt;/code&gt; and Express 5 / body-parser 2 request parsers. It says 24.22.1 rejected the same input.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where http2shell fits in
&lt;/h2&gt;

&lt;p&gt;http2shell is not a second bug. &lt;a href="https://www.aikido.dev/blog/python-packages-vulnerable-node2shell-brotli-cve-2026-111497" rel="noopener noreferrer"&gt;Aikido Security&lt;/a&gt; uses the name for the same CVE now that it is known to reach beyond Node.js. It lists fixes for Python's &lt;code&gt;Brotli&lt;/code&gt; and &lt;code&gt;brotlicffi&lt;/code&gt; packages, libbrotli, curl/libcurl, Bun, Envoy and Istio. On 23 October, Aikido said patches were not yet available for every affected service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Am I exposed?
&lt;/h2&gt;

&lt;p&gt;Vercel's &lt;a href="https://vercel.com/kb/bulletin/node-js-security-advisory" rel="noopener noreferrer"&gt;advisory&lt;/a&gt; explains that Node.js doesn't decode Brotli by itself. Your app is exposed when your code or a library decompresses attacker-controlled Brotli data. That data can come in a request body or in a response your app fetches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Check the runtime version.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The fixed versions are &lt;strong&gt;22.23.4, 24.22.1 and 26.12.1&lt;/strong&gt; (or newer in the same line). Anything older in those lines is affected. Node.js 20 is end-of-life and won't get a fix, according to Vercel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Look for paths that decode Brotli.&lt;/strong&gt; Imperva's tests found Express 5 and body-parser 2 decode Brotli request bodies when their parsers are configured:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;ls &lt;/span&gt;express body-parser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also look for &lt;code&gt;fetch()&lt;/code&gt; calls to servers you don't control and direct &lt;code&gt;zlib&lt;/code&gt; Brotli use (&lt;code&gt;brotliDecompress&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Check containers and CI, not just your laptop.&lt;/strong&gt; Imperva warns that a package inventory can miss an older Node binary inside a container image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; your-image:tag node &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to patch
&lt;/h2&gt;

&lt;p&gt;With nvm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm &lt;span class="nb"&gt;install &lt;/span&gt;24
nvm use 24
node &lt;span class="nt"&gt;-v&lt;/span&gt;   &lt;span class="c"&gt;# should print v24.22.1 or newer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Docker, rebuild on a base image with a fixed Node version and redeploy. For distro packages, Aikido notes vendors may backport the fix without changing the version number, so check your distribution's security notice.&lt;/p&gt;

&lt;p&gt;On a managed platform, check the provider's notice. Vercel says it manages patch versions for 22.x and 24.x, but projects on 20.x must move to 22.x or 24.x and redeploy.&lt;/p&gt;

&lt;p&gt;Python and Bun users get their own fixes, per Aikido:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip show Brotli brotlicffi
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-U&lt;/span&gt; &lt;span class="s2"&gt;"Brotli&amp;gt;=1.2.1"&lt;/span&gt;      &lt;span class="c"&gt;# or "brotlicffi&amp;gt;=1.2.1.0"&lt;/span&gt;
bun &lt;span class="nt"&gt;--version&lt;/span&gt;                        &lt;span class="c"&gt;# 1.4.4 or later is fixed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aikido notes that &lt;code&gt;requests&lt;/code&gt;, &lt;code&gt;httpx&lt;/code&gt; and &lt;code&gt;aiohttp&lt;/code&gt; use these packages automatically when installed, and that pip-audit and Dependabot weren't flagging it as of 23 October, so check by hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you can't upgrade today
&lt;/h2&gt;

&lt;p&gt;Vercel and Imperva both added WAF rules, but both say that doesn't replace patching. A WAF also can't see Brotli responses your app fetches from other servers. As a stopgap, Aikido suggests rejecting requests whose &lt;code&gt;Content-Encoding&lt;/code&gt; includes &lt;code&gt;br&lt;/code&gt; before any decoder runs. For outbound traffic, it suggests disabling or rejecting Brotli response decoding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nodejs.org/en/blog/vulnerability/october-2026-security-releases" rel="noopener noreferrer"&gt;Node.js: Wednesday, October 21, 2026 Security Releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cve.org/CVERecord?id=CVE-2026-111497" rel="noopener noreferrer"&gt;CVE.org: CVE-2026-111497&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.csa.gov.sg/alerts-and-advisories/alerts/al-2026-154/" rel="noopener noreferrer"&gt;Cyber Security Agency of Singapore: Critical Vulnerability in Node.js (AL-2026-154)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vercel.com/kb/bulletin/node-js-security-advisory" rel="noopener noreferrer"&gt;Vercel: Node.js security advisory, Brotli decoder RCE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.imperva.com/blog/node2shell-from-brotli-data-to-remote-code-execution/" rel="noopener noreferrer"&gt;Imperva: Node2Shell, From Brotli Data to Remote Code Execution&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.aikido.dev/blog/python-packages-vulnerable-node2shell-brotli-cve-2026-111497" rel="noopener noreferrer"&gt;Aikido Security: Node2Shell evolves to HTTP2Shell&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;For more research-based AI and tech news, see AI News by AIFix at &lt;a href="https://ainews.useaifix.com" rel="noopener noreferrer"&gt;ainews.useaifix.com&lt;/a&gt;, and &lt;a href="https://useaifix.com" rel="noopener noreferrer"&gt;useaifix.com&lt;/a&gt; for help keeping sites and workflows in shape.&lt;/p&gt;

</description>
      <category>node</category>
      <category>security</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
