<?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[fenkam]]></title><description><![CDATA[fenkam]]></description><link>https://fenkam.hashnode.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1593680282896/kNC7E8IR4.png</url><title>fenkam</title><link>https://fenkam.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 07:37:37 GMT</lastBuildDate><atom:link href="https://fenkam.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[What I learned running 59,349 sysadmin commands across 2,316 VMs using LLMs]]></title><description><![CDATA[Teams are already using LLMs to operate systems, with or without a human in the loop. Yet there's very little public data on the full impact of these agents on infrastructure. So I recorded traces fro]]></description><link>https://fenkam.hashnode.dev/what-i-learned-running-sysadmin-commands-across-vms-using-llms</link><guid isPermaLink="true">https://fenkam.hashnode.dev/what-i-learned-running-sysadmin-commands-across-vms-using-llms</guid><category><![CDATA[AI]]></category><category><![CDATA[Linux]]></category><category><![CDATA[Devops]]></category><category><![CDATA[SRE]]></category><category><![CDATA[Open Source]]></category><dc:creator><![CDATA[Pascal Fenkam]]></dc:creator><pubDate>Mon, 07 Sep 2026 21:01:34 GMT</pubDate><enclosure url="https://raw.githubusercontent.com/open-sudo/infraset/main/docs/images/lab.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Teams are already using LLMs to operate systems, with or without a human in the loop. Yet there's very little public data on the full impact of these agents on infrastructure. So I recorded traces from 905 runs and started mining the data.</p>
<p>Each task execution (aka run) got a disposable cluster and a plain-language objective. 905 clusters, 2,316 full virtual machines, 59,349 recorded commands. The harness, built on <a href="https://github.com/harbor-framework/harbor">Harbor</a>, kept the whole timeline: what was issued, what came back, and what state was left behind. Of the 905 executions, 886 produced usable verifier scores. The other 19 ended without a score, often because the agent timed out and the cluster was terminated. Tasks cover single-host, multi-node services, stateful clusters, and four network operating systems: VyOS, OpenWrt, SONiC and OPNsense. In another category, VyOS and OPNsense are combined in more complex networking scenarios, such as an IPsec tunnel between a VyOS LAN and an OPNsense LAN. Clusters and network devices are provisioned through <a href="https://antrieb.sh">Antrieb</a>, a testbed creator I built to facilitate my experiments with LLMs and infrastructure.</p>
<p><em>The headline counts cover the current published corpus. Several finding sections below use the earlier 804-run analysis set and retain its task-level measurements.</em></p>
<p>The raw data is on <a href="https://github.com/open-sudo/infraset">GitHub</a> and <a href="https://huggingface.co/datasets/infraset/infraset">Hugging Face</a>. I welcome new tasks, runs, or mining of traces. Here's what I found, including a couple of things I had wrong going in.</p>
<p><em>The 2,316 VMs were never running at the same time. Clusters are provisioned in small batches, on the order of 50 machines at once, and torn down when the run finishes.</em></p>
<p><strong>Commands</strong> 59,349 · <strong>Runs scored</strong> 886 · <strong>VMs booted</strong> 2,316 · <strong>Left residue</strong> 98.8% · <strong>Linux distros</strong> 8 · <strong>Network OSes</strong> 4 · <strong>Cluster size</strong> 1–4 · <strong>VM launch</strong> 848 ms</p>
<h2>Eight findings</h2>
<h3>1. LLMs almost always complete the job successfully</h3>
<p>Across the current corpus, 886 of 905 runs produced usable verifier scores. Nineteen runs ended without a score, often because the agent timed out and the cluster was terminated. The category table below retains the earlier 804-run analysis set: 759 of those scored runs came back with a perfect score, with every requirement met and checked against captured evidence. A run counts as successful if it met 80% of the task's functional requirements.</p>
<p><strong>Perfect-score rate by category</strong></p>
<table>
<thead>
<tr>
<th><strong>Category</strong></th>
<th><strong>Runs</strong></th>
<th><strong>Perfect</strong></th>
<th><strong>Rate</strong></th>
</tr>
</thead>
<tbody><tr>
<td>multi-node-os-comparison</td>
<td>78</td>
<td>78</td>
<td><strong>100%</strong></td>
</tr>
<tr>
<td>single-node-os-comparison</td>
<td>235</td>
<td>231</td>
<td><strong>98%</strong></td>
</tr>
<tr>
<td>vyos-networking</td>
<td>79</td>
<td>77</td>
<td><strong>97%</strong></td>
</tr>
<tr>
<td>opnsense-networking</td>
<td>78</td>
<td>74</td>
<td>95%</td>
</tr>
<tr>
<td>sonic-networking</td>
<td>80</td>
<td>73</td>
<td>91%</td>
</tr>
<tr>
<td>clustered-services</td>
<td>104</td>
<td>94</td>
<td>90%</td>
</tr>
<tr>
<td>vyos-opnsense (cross-vendor)</td>
<td>79</td>
<td>71</td>
<td>90%</td>
</tr>
<tr>
<td>openwrt-networking</td>
<td>71</td>
<td>61</td>
<td>86%</td>
</tr>
</tbody></table>
<h3>2. LLM-friendliness varies by release</h3>
<p>The fail rate is the ratio of failed commands to all commands run on that release. This is a command-level measure; task success is measured separately. A release can therefore have a high command fail rate alongside a high task success rate.</p>
<p><strong>RHEL</strong></p>
<table>
<thead>
<tr>
<th><strong>Release</strong></th>
<th><strong>Fail rate</strong></th>
</tr>
</thead>
<tbody><tr>
<td>RHEL 7.9</td>
<td><strong>11.7%</strong></td>
</tr>
<tr>
<td>RHEL 9.8</td>
<td><strong>3.8%</strong></td>
</tr>
<tr>
<td>RHEL 10.0</td>
<td>6.9%</td>
</tr>
</tbody></table>
<p><strong>Ubuntu</strong></p>
<table>
<thead>
<tr>
<th><strong>Release</strong></th>
<th><strong>Fail rate</strong></th>
</tr>
</thead>
<tbody><tr>
<td>Ubuntu 16.04</td>
<td><strong>11.8%</strong></td>
</tr>
<tr>
<td>Ubuntu 24.04</td>
<td>8.0%</td>
</tr>
</tbody></table>
<p>I observe three times as many commands fail on RHEL 7.9 as on RHEL 9.8, running the same 29 tasks with the same wording. Ubuntu follows the same direction, with a weaker effect.</p>
<p>I suspect that an important factor in this failure rate is how much material about a release exists publicly, and how long that material has stood before a newer version supersedes it. RHEL 9 superseded RHEL 7, so most of what the model has read about RHEL describes 9 rather than 7. RHEL 10 is newer than RHEL 9, but it has not superseded RHEL 9 in the written record yet, which would explain why it fails more often than the release it replaces.</p>
<p><em>These numbers exclude</em> <code>file-integrity-baseline</code><em>, where one run distorted a column; the simple-task trap below describes it.</em></p>
<h3>3. The leftovers: 98.8% of runs leave residue</h3>
<p>In this experiment, every run carries an operational-hygiene score. It asks whether the run mutated things the task never called for, left residue behind, or broke something unrelated. When the model leaves absolutely no residue behind, the run scores a perfect 1.000.</p>
<p><strong>Operational hygiene across 804 scored runs</strong></p>
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody><tr>
<td>Total number of runs</td>
<td>804</td>
</tr>
<tr>
<td>Runs that achieved a perfect score</td>
<td>10 (1.2%)</td>
</tr>
<tr>
<td>Mean hygiene across all runs</td>
<td>0.829</td>
</tr>
</tbody></table>
<p>The table shows that ten of 804 scored runs left the machine in a clean state. The other 98.8% left something behind: a package pulled in to test a theory, a service stopped and never restarted, scratch files in <code>/tmp</code>, a config edited and not reverted.</p>
<p><strong>Residue is a security problem</strong></p>
<p>Residue is attack surface. The debugging packages the agent installed are now unpatched software on your host. The service it stopped may be auditd or a log shipper.</p>
<p>Many tasks left private key material in <code>/tmp</code> when the run ended, including <code>/tmp/pgca/ca.key</code>, the signing key of the certificate authority the model had just created for the cluster (<a href="https://github.com/open-sudo/infraset/blob/main/jobs/clustered-services/rhel9/postgresql-replication-tls-rhel9/2026-09-04__20-11-34/postgresql-replication-tls-rhel9__oskDi9n/collector/attempts/01/snapshots/after-executor.json#L44">post-run snapshot, line 44</a>). WireGuard private keys and client keys turn up the same way.</p>
<p>Whether that is a breach depends on where the box sits. On a throwaway lab VM it is untidy. Anywhere else, that key is now outside the store it belongs in, sitting in a scratch directory, and it is the key that signs certificates for every node in the cluster. Anyone who can read it can mint a certificate the whole cluster trusts. Backups and snapshots pick the file up as well, which moves the key somewhere with a different and usually longer retention. Under a compliance boundary, such as payment processing, medical devices or plant control, key material outside its intended store is an audit finding on its own, before anyone has to show it was read.</p>
<p>The model has no concept of your data classification. It writes where the shell put it, and it does not come back for it.</p>
<h3>4. Configuration is cheap. Coordination is expensive.</h3>
<p>As I suspected, cost climbs wherever two or more nodes have to agree on replication, quorum, state transfer or failover, because the result has to be demonstrated through a real state transition instead of being read from a config file. The table shows the observed completion-time ranges across three scenarios.</p>
<p><strong>Observed completion-time range by task shape</strong></p>
<table>
<thead>
<tr>
<th><strong>Shape</strong></th>
<th><strong>Observed run range</strong></th>
</tr>
</thead>
<tbody><tr>
<td>Single-host administration</td>
<td><strong>3–4 min</strong></td>
</tr>
<tr>
<td>Routed / firewalled networks</td>
<td>6–13 min</td>
</tr>
<tr>
<td>Stateful clusters (replication, quorum)</td>
<td><strong>10–25 min</strong></td>
</tr>
</tbody></table>
<p>A PostgreSQL failover on Ubuntu 24.04 ran for 36 minutes and hit the wall. Same model, same fleet, same day as three-minute single-host tasks that scored clean.</p>
<h3>5. The model reaches for force as a first resort</h3>
<p>An engineer who is stuck usually knows it. They slow down as the system gets harder to read, they get careful around the parts they do not understand, and past a certain point they stop and ask someone. The model has none of those habits. It resorts to forceful options, and it does so even on runs that are otherwise going fine.</p>
<p>865 commands in the dataset stop a service, kill a process, delete a directory or flush a network configuration. 254 of the 804 scored runs contain at least one of them, so roughly one run in three used force somewhere.</p>
<p><strong>Forceful commands by kind</strong></p>
<table>
<thead>
<tr>
<th><strong>Kind</strong></th>
<th><strong>Commands</strong></th>
<th><strong>Runs</strong></th>
</tr>
</thead>
<tbody><tr>
<td>Flush network state (<code>iptables -F</code>, <code>ip addr flush</code>)</td>
<td>327</td>
<td>100</td>
</tr>
<tr>
<td><code>rm -rf</code></td>
<td>241</td>
<td>75</td>
</tr>
<tr>
<td>Stop or kill a service</td>
<td>201</td>
<td>117</td>
</tr>
<tr>
<td><code>kill -9</code> / SIGKILL</td>
<td>91</td>
<td>37</td>
</tr>
<tr>
<td>Truncate or zero a file</td>
<td>5</td>
<td>4</td>
</tr>
</tbody></table>
<p>The linked PostgreSQL failover run contains examples of destructive state-directory removal: <a href="https://github.com/open-sudo/infraset/blob/main/jobs/clustered-services/rhel7/postgresql-failover-rhel7/2026-09-04__20-11-34/postgresql-failover-rhel7__cofwkf3/agent/executor-commands.jsonl#L83-L86">node2 and node3 at lines 83–86</a> and <a href="https://github.com/open-sudo/infraset/blob/main/jobs/clustered-services/rhel7/postgresql-failover-rhel7/2026-09-04__20-11-34/postgresql-failover-rhel7__cofwkf3/agent/executor-commands.jsonl#L127-L128">node1 at lines 127–128</a>. The dataset aggregate reports 177 such commands across 55 runs.</p>
<h3>6. Unclear provenance for repository URLs</h3>
<p>Installing software outside the distribution repositories often requires the agent to configure a vendor repository or download a repository definition. Across the command logs, agents sometimes use URLs that are obsolete, invalid, or incorrect. The logs frequently show the URL and the resulting failure without showing how the agent derived the address.</p>
<p>The RabbitMQ runs provide several examples. On AlmaLinux, the agent tried <code>el9.rabbitmq.com</code> and received DNS resolution failures while writing RPM repository files (<a href="https://github.com/open-sudo/infraset/blob/main/jobs/clustered-services/almalinux9/rabbitmq-cluster-almalinux9/2026-09-04__20-11-34/rabbitmq-cluster-almalinux9__EWg7s4d/agent/executor-commands.jsonl#L7-L14">lines 7–14</a>). On Ubuntu, it placed the retired <code>ppa1.rabbitmq.com</code> repository in <code>/etc/apt/sources.list.d/rabbitmq.list</code> (<a href="https://github.com/open-sudo/infraset/blob/main/jobs/clustered-services/ubuntu24/rabbitmq-tls-ubuntu24/2026-09-04__20-11-34/rabbitmq-tls-ubuntu24__HmEevtG/agent/executor-commands.jsonl#L99-L104">lines 99–104</a>); the subsequent APT update reported that the hostname could not be resolved (<a href="https://github.com/open-sudo/infraset/blob/main/jobs/clustered-services/ubuntu24/rabbitmq-tls-ubuntu24/2026-09-04__20-11-34/rabbitmq-tls-ubuntu24__HmEevtG/agent/executor-commands.jsonl#L117-L120">lines 117–120</a>). RabbitMQ later moved its Debian repositories to <code>deb1.rabbitmq.com</code> and <code>deb2.rabbitmq.com</code>. The evidence supports obsolete or incorrect repository selection, while the agent's reasoning or source for the URLs remains unknown.</p>
<p><strong>Examples of repository URLs used by agents</strong></p>
<table>
<thead>
<tr>
<th><strong>URL used</strong></th>
<th><strong>Observed result</strong></th>
<th><strong>Evidence</strong></th>
</tr>
</thead>
<tbody><tr>
<td><strong>el9.rabbitmq.com</strong></td>
<td>DNS resolution failed</td>
<td><a href="https://github.com/open-sudo/infraset/blob/main/jobs/clustered-services/almalinux9/rabbitmq-cluster-almalinux9/2026-09-04__20-11-34/rabbitmq-cluster-almalinux9__EWg7s4d/agent/executor-commands.jsonl#L7-L14">L7–L14</a></td>
</tr>
<tr>
<td><strong>ppa1.rabbitmq.com</strong></td>
<td>APT could not resolve host</td>
<td><a href="https://github.com/open-sudo/infraset/blob/main/jobs/clustered-services/ubuntu24/rabbitmq-tls-ubuntu24/2026-09-04__20-11-34/rabbitmq-tls-ubuntu24__HmEevtG/agent/executor-commands.jsonl#L99-L120">L99–L120</a></td>
</tr>
<tr>
<td><strong>dl.almalinux.org</strong></td>
<td>Diagnostic probe returned DNS failure</td>
<td><a href="https://github.com/open-sudo/infraset/blob/main/jobs/single-node-os-comparison/almalinux9/mandatory-access-control-port-almalinux9/2026-09-04__22-51-06/mandatory-access-control-port-al__VSVLSng/agent/executor-commands.jsonl#L5-L8">L5–L8</a></td>
</tr>
<tr>
<td><strong>yum-eu-west.packagecloud.io</strong></td>
<td>HTTP result 000</td>
<td><a href="https://github.com/open-sudo/infraset/blob/main/jobs/clustered-services/rhel7/rabbitmq-cluster-rhel7/2026-09-04__20-11-34/rabbitmq-cluster-rhel7__3SiMg36/agent/executor-commands.jsonl#L11-L14">L11–L14</a></td>
</tr>
</tbody></table>
<p><strong>The provenance gap creates operational and security risk</strong></p>
<p>Incorrect URLs cause DNS failures, repository errors, retries, long waits, and fallback to distribution packages. Those fallbacks can change the software version and alter the result of the task. An address that resolves later to an unrelated service could direct repository configuration toward an unintended source. Repository and package signature checks provide an important control, while the URL's provenance remains unverified. Since the logs rarely reveal where the agent obtained the address, the same error is difficult to predict, prevent, or reproduce. These runs document installation and reproducibility risk.</p>
<h3>7. Failure persisting kernel-facing changes</h3>
<p>Some Linux tools allow agents to create transient configurations that disappear after a reboot. This applies to both <code>firewall-cmd</code> and <code>iptables</code>.</p>
<p>I wanted to simulate how an administrator would actually use an LLM, so I left persistence implicit. The tasks asked the agent to reboot the machine after making its changes.</p>
<p><strong>firewall-cmd runs that never used --permanent</strong></p>
<table>
<thead>
<tr>
<th><strong>Image</strong></th>
<th><strong>Runs</strong></th>
<th><strong>Left transient</strong></th>
<th><strong>Rate</strong></th>
</tr>
</thead>
<tbody><tr>
<td>RHEL 10.0</td>
<td>39</td>
<td><strong>5</strong></td>
<td><strong>13%</strong></td>
</tr>
<tr>
<td>CentOS Stream 10</td>
<td>53</td>
<td><strong>7</strong></td>
<td><strong>13%</strong></td>
</tr>
<tr>
<td>AlmaLinux 9</td>
<td>57</td>
<td><strong>7</strong></td>
<td><strong>12%</strong></td>
</tr>
<tr>
<td>RHEL 9.8</td>
<td>44</td>
<td><strong>5</strong></td>
<td><strong>11%</strong></td>
</tr>
<tr>
<td>RHEL 7.9</td>
<td>44</td>
<td><strong>3</strong></td>
<td><strong>7%</strong></td>
</tr>
</tbody></table>
<p>Across the 237 firewalld cases in the table, 210 runs—88.6%—left the firewall configuration working after reboot. In the remaining 27 runs—11.4%—the changes disappeared. The agent made the service work during the run, then reported success before the reboot exposed the missing persistence.</p>
<p>The consequence is a delayed operational failure. A service may be reachable when the agent finishes, then lose its required access after a routine restart. Cluster communication, remote administration, or firewall protection can fail later, when the original change is no longer in anyone’s immediate view.</p>
<h3>8. The simple-task trap</h3>
<p>A task that looks simple can produce a surprisingly complicated execution path when an LLM performs it. In the <code>file-integrity-baseline</code> task, the instruction was straightforward: establish an integrity baseline for <code>/etc</code> so later changes can be identified and reported.</p>
<p><strong>Ubuntu 24.04 AIDE check</strong></p>
<table>
<thead>
<tr>
<th><strong>Event</strong></th>
<th><strong>Evidence</strong></th>
</tr>
</thead>
<tbody><tr>
<td>Synchronous check timed out</td>
<td><a href="https://github.com/open-sudo/infraset/blob/main/jobs/single-node-os-comparison/ubuntu24/file-integrity-baseline-ubuntu24/2026-09-07__23-51-46/file-integrity-baseline-ubuntu24__Au4zKey/agent/executor-commands.jsonl#L21-L22">L21–L22</a></td>
</tr>
<tr>
<td>Background check launched</td>
<td><a href="https://github.com/open-sudo/infraset/blob/main/jobs/single-node-os-comparison/ubuntu24/file-integrity-baseline-ubuntu24/2026-09-07__23-51-46/file-integrity-baseline-ubuntu24__Au4zKey/agent/executor-commands.jsonl#L23-L24">L23–L24</a></td>
</tr>
<tr>
<td>AIDE still running after 120 seconds</td>
<td><a href="https://github.com/open-sudo/infraset/blob/main/jobs/single-node-os-comparison/ubuntu24/file-integrity-baseline-ubuntu24/2026-09-07__23-51-46/file-integrity-baseline-ubuntu24__Au4zKey/agent/executor-commands.jsonl#L25-L28">L25–L28</a></td>
</tr>
<tr>
<td>AIDE completed during the next poll</td>
<td><a href="https://github.com/open-sudo/infraset/blob/main/jobs/single-node-os-comparison/ubuntu24/file-integrity-baseline-ubuntu24/2026-09-07__23-51-46/file-integrity-baseline-ubuntu24__Au4zKey/agent/executor-commands.jsonl#L29-L30">L29–L30</a></td>
</tr>
</tbody></table>
<p>On most other releases, the task completed in about four minutes on average. Ubuntu 16.04 took about 12 minutes, while Ubuntu 24.04 took 32 minutes.</p>
<p>The difference follows the size of the AIDE scan. Ubuntu 24.04 covered nearly 90,000 filesystem entries, Ubuntu 16.04 covered about 70,000, and the other releases generally covered 30,000 to 40,000. Ubuntu 24 crossed the synchronous request timeout, causing the agent to relaunch AIDE with <code>nohup</code> and poll it with fixed sleep intervals. The scan often finished before the polling sleep ended, so the agent waited until the end of the interval before it could observe the result. The same pattern repeated across the later AIDE operations, adding substantial delay to the total.</p>
<p>The visible task may be simple while the model's execution strategy introduces retries, detached processes, polling, and timeout effects.</p>
<h2>Open questions</h2>
<h3>1. An LLM analyzed the work of an LLM</h3>
<p>Every run here was scored by an LLM verifier, and the findings on this page come from an LLM reading the command logs. That is not a rigorous method, and it is fair to hold the conclusions loosely because of it.</p>
<p>This is precisely why I am publishing the dataset: to invite the community to mine it.</p>
<h3>2. One model, one setting</h3>
<p>Every run here was executed by Claude Sonnet 5 at medium reasoning effort. Nothing in the dataset says whether a different model, or the same model at a different effort, behaves the same way.</p>
<p>I believe most of these observations apply to current models generally. That is a belief, and it needs validating.</p>
<h2>The lab</h2>
<img src="https://raw.githubusercontent.com/open-sudo/infraset/main/docs/images/lab.jpg" alt="Five machines on a basement shelf: four mini PCs with add-on cooling fans and an HPE switch above, an HPE ProLiant tower and a UPS on the floor below." style="display:block;margin:0 auto" />

<p><em>The Antrieb testbed cluster running in my basement. USB fans keep the mini PCs from melting while spinning up disposable VM chains.</em></p>
<p>All of it runs in my basement on five machines. The ProLiant hosts the MCP server; the four mini PCs carry the virtual machines. An HPE OfficeConnect 1620 switch ties them together, and a UPS keeps the fleet up through the short outages that would otherwise kill an experiment halfway through.</p>
<p><strong>The fleet</strong></p>
<table>
<thead>
<tr>
<th><strong>Machine</strong></th>
<th><strong>CPU</strong></th>
<th><strong>Threads</strong></th>
<th><strong>RAM</strong></th>
</tr>
</thead>
<tbody><tr>
<td>HPE ProLiant ML10 Gen9</td>
<td>Xeon E3-1225 v5</td>
<td>4</td>
<td>62 GB</td>
</tr>
<tr>
<td>GMKtec NucBox K10</td>
<td>Core i9-13900HK</td>
<td>20</td>
<td>62 GB</td>
</tr>
<tr>
<td>GMKtec NucBox EVO-T1</td>
<td>Core Ultra 9 285H</td>
<td>16</td>
<td>62 GB</td>
</tr>
<tr>
<td>Mini PC</td>
<td>Core i9-13900HK</td>
<td>20</td>
<td>62 GB</td>
</tr>
<tr>
<td>Mini PC</td>
<td>Core i9-13900HK</td>
<td>20</td>
<td>62 GB</td>
</tr>
</tbody></table>
<h2>What I take from this</h2>
<p>Using the traditional definition of completing a system administration task, the LLM succeeds 99% of the time. I tested on eight releases across five distributions, spanning ten years, on jobs ranging from a one-line sysctl change to a three-node quorum. This level of success was surprising.</p>
<p>More surprises were waiting past that definition, starting with how much gets left behind. Almost every run leaves something on the box, and in many tasks that something was a private key left in <code>/tmp</code>, including the signing key of the cluster's own certificate authority. About a third of runs reach for force somewhere, while 11.4% of kernel-facing changes are not persisted. Several runs used repository URLs that were obsolete, invalid, or incorrect, and the logs often do not show how the agent derived them.</p>
<p>I suspect even more surprises are lurking in the data. Please join the mining, and reach out if you have any questions. Everything is on <a href="https://github.com/open-sudo/infraset">GitHub</a> and <a href="https://huggingface.co/datasets/infraset/infraset">Hugging Face</a>: every task, every command timeline, every score.</p>
]]></content:encoded></item></channel></rss>