<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Ripplarity]]></title><description><![CDATA[Measurements and working notes from the team behind Ripplarity's open-source tools. We test what software does on a real machine and publish the method, the log]]></description><link>https://ripplarity.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Fri, 13 Nov 2026 20:03:43 GMT</lastBuildDate><atom:link href="https://ripplarity.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[What do AI coding tools send over the network? I logged four of them]]></title><description><![CDATA[I use AI coding tools every day, and I could not answer a basic question about them: while one is working in my project, which servers does it talk to? So…]]></description><link>https://ripplarity.hashnode.dev/ai-coding-tools-network-traffic-logged</link><guid isPermaLink="true">https://ripplarity.hashnode.dev/ai-coding-tools-network-traffic-logged</guid><category><![CDATA[AI]]></category><category><![CDATA[privacy]]></category><category><![CDATA[Security]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Developer Tools]]></category><category><![CDATA[#ai-tools]]></category><category><![CDATA[ai agents]]></category><dc:creator><![CDATA[Dev]]></dc:creator><pubDate>Thu, 12 Nov 2026 22:46:56 GMT</pubDate><content:encoded><![CDATA[<p>I use AI coding tools every day, and I could not answer a basic question about them: while one is working in my project, which servers does it talk to?</p>
<p>So I measured it. This post covers the method, the results, and the limits, and you can repeat every step.</p>
<h2>The setup</h2>
<p>Each tool ran the same short scripted session in a throwaway project:</p>
<ol>
<li>List the files.</li>
<li>Add a function.</li>
<li>Run the tests.</li>
<li>Explain a file.</li>
<li>Exit.</li>
</ol>
<p>All traffic went through a local intercepting proxy (mitmproxy) on a fresh Ubuntu image. The proxy logged one row per request: time, host, path, method, byte count and content type. It did not store request or response bodies.</p>
<p>Three of the tools were pointed at a local model, so no prompt had any reason to leave the machine. The fourth only works with its vendor's hosted model, so its model calls are expected traffic.</p>
<p>Every tool ran twice from a clean state, to see whether the behaviour repeats.</p>
<h2>What I found</h2>
<table>
<thead>
<tr>
<th>Tool</th>
<th>External hosts contacted</th>
<th>What the requests were</th>
</tr>
</thead>
<tbody><tr>
<td>A</td>
<td>2</td>
<td>1 update check, 5 asset downloads</td>
</tr>
<tr>
<td>B</td>
<td>1</td>
<td>4 downloads of a model catalogue</td>
</tr>
<tr>
<td>C</td>
<td>2</td>
<td>1 asset download, plus 83 package-registry requests on the first run and 4 on the second</td>
</tr>
<tr>
<td>D</td>
<td>2</td>
<td>model calls to the vendor, plus 6 to 7 requests to a third-party log-intake host</td>
</tr>
</tbody></table>
<p>Three things stood out.</p>
<p><strong>Only one tool contacted a telemetry host.</strong> Tool D sent 7 requests in one run and 6 in the other to a logging service. With its documented telemetry opt-out set, it sent none. A later version of the same tool behaved the same way by default.</p>
<p><strong>"Local model" does not mean "no network".</strong> Tools A, B and C all talked to a local model, and all three still contacted outside hosts for update checks, asset files and package downloads. None of those requests matched a telemetry rule. They are still connections you may not expect on a locked-down machine.</p>
<p><strong>The host list was stable.</strong> For every default run, the set of external hosts was identical across both runs. Request counts moved a little.</p>
<p>The tool names, versions and raw logs are in the repository, so you can check each row.</p>
<h2>What this does not show</h2>
<ul>
<li>It only sees traffic that honours proxy settings. A program that opens its own sockets is invisible to this method.</li>
<li>It is one short session. A longer or different session may reach other hosts.</li>
<li>I logged hosts and sizes, not contents. I did not test whether a secret planted in the project leaves the machine.</li>
<li>The classification of each host (update check, asset, telemetry) is a small rule file. Read it and disagree with it.</li>
</ul>
<h2>Run it yourself</h2>
<p>You need bash, python3, git, Node.js (for npx) and mitmproxy. The script runs one tool, opencode, against a local model, so you also need Ollama running with the model pulled: <code>ollama pull qwen2.5-coder:7b</code>.</p>
<pre><code class="language-bash">git clone https://github.com/ripplarity/stillherd.git
cd stillherd/egress
bash run_tool.sh
</code></pre>
<p>That runs opencode through the scripted session and writes <code>requests.jsonl</code>. It takes under ten minutes. The README in that folder explains the method and how to compare two runs.</p>
<h2>Why I care</h2>
<p>A privacy policy tells you what a vendor intends. A request log tells you what happened on your machine on a given day. The second is something you can check, keep and compare after the next update.</p>
<p>If you run this on your own setup, I would like to know what it shows, and where the instructions failed you.</p>
]]></content:encoded></item></channel></rss>