<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Diego Trinciarelli: posts</title>
  <link>https://trinciarelli.com/posts/</link>
  <atom:link href="https://trinciarelli.com/posts/feed.xml" rel="self" type="application/rss+xml"/>
  <description>Writing on agentic AI and building with agents.</description>
  <language>en</language>
  <lastBuildDate>Fri, 13 Nov 2026 00:00:00 GMT</lastBuildDate>
  <item>
    <title>From Free Chat to Agents: A Starting Guide</title>
    <link>https://trinciarelli.com/posts/from-free-chat-to-agents</link>
    <guid isPermaLink="true">https://trinciarelli.com/posts/from-free-chat-to-agents</guid>
    <pubDate>Fri, 13 Nov 2026 00:00:00 GMT</pubDate>
    <dc:creator>Diego Trinciarelli</dc:creator>
    <description>Why the free chat gives you wrong answers and the five steps that fix most of it.</description>
    <category>artificial-intelligence</category>
    <category>ai-agent</category>
    <category>chatgpt</category>
    <category>claude</category>
    <category>productivity</category>
    <content:encoded><![CDATA[<p><strong>Why the free chat gives you wrong answers and the five steps that fix most of it.</strong></p>
<hr>
<p>There is a pattern I keep seeing.</p>
<p>Someone opens a free chat window. They ask a real question. The answer comes back fast, fluent and sure of itself.</p>
<p>Part of it is wrong. Part of it is missing. Nothing in the answer says so.</p>
<p>They try twice more. Same thing. They close the tab and decide AI is overhyped.</p>
<p>That conclusion is reasonable. It is based on the wrong product.</p>
<p>The free chat is the smallest version of the thing, with most of the useful parts switched off. Judging AI on it is like judging cars on a rental with the handbrake on.</p>
<p>This is the starting guide. It is the page I send people to when they tell me AI doesn't work. It explains why the free chat lets you down, what the real thing is made of and the five steps that move you from chat to agents.</p>
<p>No vendor deep dives here. Those come in the next parts.</p>
<hr>
<h2>1. Why the free chat gets it wrong</h2>
<p>Six reasons. They stack.</p>
<h3>The free plan runs a smaller model</h3>
<p>A model is the part that reads your text and writes the reply. They come in sizes. Bigger models cost more to run and know more. Smaller ones are cheaper, faster and wrong more often.</p>
<p>Every vendor gives the free plan a smaller model and keeps the best one for paying users. I checked the plan pages on 13 November 2026:</p>
<ul>
<li>ChatGPT Free runs GPT-6 Luna. GPT-6.1 Sol needs Plus, at $20 a month.</li>
<li>Claude Free runs Sonnet and Haiku. Opus needs Pro, at $20 a month.</li>
<li>Gemini Free gets the Flash-Lite model and Gemini 4 Hydrogen. The Pro model needs AI Pro, at $19.99 a month.</li>
</ul>
<p>How big is the gap? Artificial Analysis runs a test called AA-Omniscience <strong>[1]</strong>. It asks hard factual questions across many fields and counts how many come back right.</p>
<figure><img src="https://trinciarelli.com/posts/img/from-free-chat-to-agents/fig-1-1-free-vs-paid.png" alt="Free plan against the $20 plan" width="1800" height="840" loading="lazy" decoding="async"><figcaption>Figure 1. The best model on each free plan against the best model on the $20 plan. Source: Artificial Analysis, 13 November 2026.</figcaption></figure>
<p>OpenAI's free model gets 39.6% right. The $20 one gets 61.8%.</p>
<p>Anthropic's free model gets 51.5%. The $20 one gets 65.5%.</p>
<p>That is the same question, the same company, a different plan. On OpenAI's side the paid model answers about half as many questions again correctly.</p>
<p><strong>The free plan is a demo of the product, not the product.</strong></p>
<p>One honest caveat. These scores are run at the highest effort setting. The free app may run its model at a lower setting than that. So the real gap you meet on a free plan is likely wider, not narrower.</p>
<p>Google is the generous one. Gemini's free plan includes a strong model, with a quarter of the usage of the paid plan. If you refuse to pay anything, start there.</p>
<h3>Thinking is off, or rationed</h3>
<p>Newer models can "think" before they answer. They write a hidden draft, check it, then reply. Vendors call this reasoning or thinking mode. It is slower and costs more to run, so free plans ration it or leave it off.</p>
<p>The difference is not small. Same model, GPT-6.1 Terra, same test. With thinking off it gives a wrong answer instead of saying "I don't know" 77.1% of the time. With thinking at maximum it does so 34.5% of the time <strong>[1]</strong>.</p>
<figure><img src="https://trinciarelli.com/posts/img/from-free-chat-to-agents/fig-1-2-thinking.png" alt="Same model, thinking off and on" width="1800" height="600" loading="lazy" decoding="async"><figcaption>Figure 2. How often the model answers wrong when it should admit it does not know. Lower is better. Source: Artificial Analysis, 13 November 2026.</figcaption></figure>
<p>Same brain. Less than half the confident nonsense. One switch.</p>
<h3>Search is off</h3>
<p>A model learns from a snapshot of text that ends on a date. After that date it knows nothing. Ask about a price, a law or a product from last month and it fills the gap with something plausible.</p>
<p>Web search fixes that. The chat looks the answer up and shows you where it came from. On many free setups search is limited, or only runs when the model decides it needs it.</p>
<h3>It knows nothing about you</h3>
<p>You know your goal, your budget, your constraints and what you tried last week. The model knows none of it.</p>
<p>So it answers the average question from the average person. Then you get an average answer and call it generic.</p>
<h3>It doesn't check itself</h3>
<p>A plain chat writes the answer once, top to bottom. Then it hands it over. No second pass. No sources unless you ask. Nobody reviews it.</p>
<h3>It agrees with you</h3>
<p>This one is measured. Researchers at Anthropic tested five leading assistants and found they tend to agree with the user, even when the user is wrong <strong>[2]</strong>. People and the models that score answers both sometimes preferred a convincing answer that agreed with them over a correct one.</p>
<p>A second paper explains why models guess at all <strong>[3]</strong>. Training and testing reward a confident guess over "I don't know". So the model learns to guess.</p>
<p>Put the six together. A small model, no time to think, no fresh facts, no context, no check, keen to please. That is the free chat.</p>
<p>The wrong answers aren't a mystery. They're the design.</p>
<hr>
<h2>2. The map: three layers</h2>
<p>Every answer you get comes from three layers.</p>
<figure><img src="https://trinciarelli.com/posts/img/from-free-chat-to-agents/fig-1-3-map.png" alt="Three layers" width="1800" height="945" loading="lazy" decoding="async"><figcaption>Figure 3. The three layers and the part of this guide that covers each.</figcaption></figure>
<p><strong>The model</strong> is the brain. It reads text and predicts the next words. Some are small and cheap, some big and slow. Some are closed, some you can download.</p>
<p><strong>The harness</strong> is everything around the model. The hands and the desk. Thinking time, search, your files, memory, tools, checks. The same model in a better harness gives a much better result.</p>
<p><strong>Access</strong> is how you pay and sign in. A free plan, a $20 plan, or an API key: a password that lets software call the model directly and bills you per use.</p>
<p>When an answer is bad, one of the three layers is weak. On a free plan the weakest one is access. Access decides which model you get and which parts of the harness are switched on.</p>
<p>Fix that first.</p>
<hr>
<h2>3. Three levels: chat, assistant, agent</h2>
<figure><img src="https://trinciarelli.com/posts/img/from-free-chat-to-agents/fig-1-4-ladder.png" alt="Three levels" width="1800" height="795" loading="lazy" decoding="async"><figcaption>Figure 4. Three levels of use. The examples are illustrations.</figcaption></figure>
<p><strong>Chat</strong> answers one question from memory. "What is a good laptop?" You get a list that could be from any year.</p>
<p><strong>Assistant</strong> knows your context, searches the web and reads your files. "Compare these three laptops for my use, with links." You get an answer for you, with sources you can open.</p>
<p><strong>Agent</strong> does the work in steps and checks it. "Sort my receipts folder into a spreadsheet and flag the odd ones." It opens the files, builds the sheet, checks the totals and tells you what it could not read.</p>
<p>An agent is a model in a loop. It plans, uses a tool, looks at the result, decides the next step and keeps going until the task is done or it gets stuck.</p>
<p>Each level needs the one below it. You can't run an agent well if you don't know how to brief an assistant.</p>
<hr>
<h2>4. Five steps</h2>
<h3>Step 1. Pay for one plan. Turn thinking and search on.</h3>
<p>About $20 a month. One vendor, not three. Part 2 compares them.</p>
<p>This is the single biggest jump. It buys you the best model, more thinking, more search and the agent tools in the next steps. Cowork from Anthropic is not on the free plan. Codex in the browser and in the terminal starts at ChatGPT Plus.</p>
<p>Then find the switches. Every app has a model picker and a thinking or reasoning toggle. Pick the top model. Turn thinking on. Turn search on.</p>
<p><strong>To see what AI can do, you need at least the $20 plan. Everything below it is a sample.</strong></p>
<p>If $20 is a real problem, use Gemini's free plan and turn on everything it offers.</p>
<h3>Step 2. Give it context</h3>
<p>The prompts in this section are examples. Swap in your own.</p>
<p>Before:</p>
<blockquote><p>What should I eat to lose weight?</p></blockquote>
<p>After:</p>
<blockquote><p>I'm in my forties. I cycle twice a week. I cook for a family of four and I hate meal prep on Sundays. I want to lose 5 kg in four months without counting calories. Suggest a weekly pattern I can actually keep.</p></blockquote>
<p>Better still, make it permanent. Most paid apps have projects: a folder with your files and a standing instruction that applies to every chat inside it. Put your context there once.</p>
<h3>Step 3. Ask in structure</h3>
<p>Four parts: goal, context, constraints, output.</p>
<p>Before:</p>
<blockquote><p>Write an email to my landlord about the heating.</p></blockquote>
<p>After:</p>
<blockquote><p>Goal: get the heating fixed this week.<br>
Context: broken since Monday, I reported it by phone on Tuesday, nothing happened.<br>
Constraints: polite, firm, under 120 words, no threats.<br>
Output: the email, then a one-line subject.</p></blockquote>
<p>The model is good at following a brief. It is bad at guessing one.</p>
<h3>Step 4. Make it check itself</h3>
<p>The model doesn't verify unless you ask. So ask.</p>
<p>Before:</p>
<blockquote><p>What are the rules for renting out my flat short term in Milan?</p></blockquote>
<p>After:</p>
<blockquote><p>What are the rules for renting out my flat short term in Milan? Search the web. Cite the official source for each rule with a link. Then list what you could not confirm and what I should check with the city myself.</p></blockquote>
<p>And after any long answer:</p>
<blockquote><p>Now review your answer as a sceptical expert. What is wrong, missing or out of date?</p></blockquote>
<p>That second prompt costs you ten seconds. It catches more than you would expect.</p>
<h3>Step 5. Run a first agent on a small real task</h3>
<p>Pick something boring, real and low-risk. A folder of receipts. A messy downloads directory. Twenty PDFs you need summarized into one page.</p>
<p>Use the agent tool in your paid plan. Claude Cowork works on a folder you choose on your computer. ChatGPT has a Work mode in its desktop app. Codex runs from the browser or the terminal.</p>
<p>Before:</p>
<blockquote><p>Can you help me organize my receipts?</p></blockquote>
<p>After:</p>
<blockquote><p>In the folder Receipts-2026, read every file. Build a spreadsheet with date, shop, amount, currency and category. Flag anything you could not read and any duplicate. Don't move or delete any file. When done, tell me what you checked and what you are unsure about.</p></blockquote>
<p>Give it a folder, not your whole disk. Tell it what it must not do. Read its report before you trust the sheet.</p>
<hr>
<h2>5. What goes wrong next</h2>
<p><strong>You trust the agent too much.</strong> It sounds sure when it is wrong, same as the chat. Check the first few runs line by line. Loosen up when it earns it.</p>
<p><strong>You paste private data without reading the settings.</strong> Some plans can use your chats to improve their models. Find the data settings and read them before you paste a contract, a medical letter or anything about someone else.</p>
<p><strong>You get a surprise bill.</strong> A subscription has a fixed price. An API key bills per use. An agent in a loop can use a lot. If you go the key route, set a spending limit first. Part 2 covers this.</p>
<p><strong>You give up after one bad run.</strong> One run tells you little. Change the brief, add context, ask it to check. Three tries with a better prompt beat one try and a verdict.</p>
<hr>
<h2>6. Where I would start</h2>
<p>Tonight, pay for one $20 plan. Pick the top model, turn thinking and search on.</p>
<p>Then paste the prompt at the end of this piece. It interviews you and writes your standing instruction.</p>
<p>Tomorrow, run one small agent task on a folder you don't care much about. Read what it did.</p>
<p>That's it. A week of this and the free chat will feel like a toy.</p>
<p><strong>What I am probably getting wrong.</strong> I lean on one benchmark for the free against paid gap. AA-Omniscience tests hard factual recall. Your questions may be easier and the gap smaller. I also can't measure what effort setting each free app really uses. Vendors change their free plans every few months. The prices and model names here are as of 13 November 2026. Check them before you buy.</p>
<hr>
<p>The free chat is AI at its cheapest.</p>
<p>Cheap was the point.</p>
<p>Pay for the real one, then judge it.</p>
<hr>
<h2>TL;DR</h2>
<ul>
<li>Free chat gives worse answers by design: smaller model, rationed thinking, limited search, no context, no checking, a habit of agreeing with you.</li>
<li>On a hard factual test, OpenAI's free model gets 39.6% right and the $20 one 61.8%. Anthropic: 51.5% against 65.5%.</li>
<li>Thinking on cuts confident wrong answers from 77.1% to 34.5% on the same model.</li>
<li>Every answer comes from three layers: model, harness, access. On a free plan, fix access first.</li>
<li>Three levels: chat, assistant, agent.</li>
<li>Five steps: pay about $20 and switch on thinking and search, give context, ask in structure, make it check itself, run a first agent on a small task.</li>
<li>To see what AI can do, you need at least the $20 plan.</li>
</ul>
<hr>
<h2>Set me up</h2>
<p>Copy this into your new paid chat. Thinking on. It does the rest.</p>
<pre><code>You are going to set me up to use you well.

Interview me, one question at a time, about:
1. My work and what I spend most time on
2. My goals for the next three months
3. Tools, files and apps I use every day
4. How I like answers: length, tone, format
5. Things I never want you to do

After the interview, write my standing instruction:
under 200 words, in the second person, ready to paste
into my settings or a project. Include a rule that you
search and cite sources for any fact that can change,
and that you say "I don't know" when you don't.

Then suggest three small tasks from my answers that
an agent could do for me this week, each with a
ready-to-use prompt.</code></pre>
<hr>
<h2>Where to go next</h2>
<ul>
<li><strong>Part 2. Vendors.</strong> Who sells what. Subscription against sign-in against API key.</li>
<li><strong>Part 3. Harness.</strong> Why the same model gives a different result. The tools that make the difference.</li>
<li><strong>Part 4. Open.</strong> Open-weight models, Hugging Face and OpenRouter.</li>
<li><strong>Part 5. Specialist.</strong> The models that are not chat: image, speech, music, 3D, documents.</li>
<li><strong>Part 6. Local.</strong> Running models on your own machine.</li>
</ul>
<p>To see the latest model rankings yourself: Artificial Analysis (artificialanalysis.ai) and Arena, formerly LMArena (arena.ai/leaderboard).</p>
<hr>
<h2>References</h2>
<p><strong>[1]</strong> Artificial Analysis, AA-Omniscience accuracy and hallucination rate, read 13 November 2026. <a href="https://artificialanalysis.ai">https://artificialanalysis.ai</a></p>
<p><strong>[2]</strong> Sharma, M. et al. "Towards Understanding Sycophancy in Language Models." arXiv 2310.13548. <a href="https://arxiv.org/abs/2310.13548">https://arxiv.org/abs/2310.13548</a></p>
<p><strong>[3]</strong> Kalai, A. T., Nachum, O., Vempala, S. S., Zhang, E. "Why Language Models Hallucinate." arXiv 2509.04664. <a href="https://arxiv.org/abs/2509.04664">https://arxiv.org/abs/2509.04664</a></p>
<p><strong>[4]</strong> Plan pages, read 13 November 2026: <a href="https://claude.com/pricing">https://claude.com/pricing</a>, <a href="https://gemini.google/subscriptions">https://gemini.google/subscriptions</a>, <a href="https://learn.chatgpt.com/docs/pricing">https://learn.chatgpt.com/docs/pricing</a></p>]]></content:encoded>
  </item>
  <item>
    <title>More Work for Father</title>
    <link>https://trinciarelli.com/posts/more-work-for-father</link>
    <guid isPermaLink="true">https://trinciarelli.com/posts/more-work-for-father</guid>
    <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
    <dc:creator>Diego Trinciarelli</dc:creator>
    <description>The tools got faster again. Why is there still so much work?</description>
    <category>agentic-development</category>
    <category>ai</category>
    <category>development-tools</category>
    <category>development-practices</category>
    <category>software-development</category>
    <content:encoded><![CDATA[<figure><img src="https://trinciarelli.com/posts/img/more-work-for-father/hero.webp" alt="A man at a desk crowded with monitors, coffee cups and energy drinks, with three extra arms typing, holding a phone and his head" width="1024" height="572" loading="lazy" decoding="async"><figcaption>I need more coffee. And more arms.</figcaption></figure>
<p><strong>The tools got faster again. Why is there still so much work?</strong></p>
<p>On 18 September I opened the cloud console of <a href="https://github.com/vespassassina/cairn">cairn</a>, the knowledge store I built for my agents and me to write into. Two collections. Not three.</p>
<p>The whole Home Assistant and homelab collection was gone. Thirteen pages. No alert. A line in a startup log nobody reads. The system looked healthy, in his own opinion.</p>
<p>I found it because I was testing the thing.</p>
<p>TLDR: That’s the article.</p>
<h2>The joke, before it gets old</h2>
<p>In 1983 a historian called Ruth Schwartz Cowan wrote a book called <em>More Work for Mother</em> <strong>[1]</strong>. Washing machines and vacuum cleaners were sold as time saved. Housework hours did not drop. The machines replaced the work of servants and kids and husbands. Then the standard of clean went up to fill the space.</p>
<p>Swap the mother for a guy with too many repos.</p>
<p>In the last few weeks my agents and I made 602 commits across three projects. “<a href="https://github.com/vespassassina/edgar">Edgar</a>”, the small agent engine I build to learn, went from version 1 to version 4 in a little more than a week.</p>
<p>I have never had this much built for me. I have five projects running in parallel and a list of more. I can’t stop.</p>
<p>Classic me.</p>
<h2>An idea I keep having</h2>
<p>Humans make tools. That’s the oldest thing we do.</p>
<p>Tools and knowledge grow exponentially. We don’t. We are linear beings running on a brain that was finished a long time ago. So it feels like everything changes and nothing really does. Our ambitions grow as fast as the tools. Our intelligence doesn’t.</p>
<p>In 1925 a biologist called Alfred Lotka had a name for this: exosomatic evolution <strong>[2]</strong>. Endosomatic tools come with the body. Legs, claws. Exosomatic tools you make. They are not part of you. Animals adapt the slow way, by selection over generations. We adapt by building.</p>
<p>The body did not stop, to be fair. Cooking probably reshaped our guts. Dairy farming changed who can digest milk as an adult. Both layers still run. But the fast one is the tools. It’s the one we steer.</p>
<p>(a thought for later: is AI reshaping us?)</p>
<h2>The last time we stopped reading the output</h2>
<p>In 1952 Grace Hopper had a working compiler (a program that turns human-readable code into machine instructions). Years later she said: “Nobody believed that. I had a running compiler and nobody would touch it. They told me computers could only do arithmetic.” <strong>[3]</strong></p>
<p>In 1957 John Backus shipped FORTRAN. Programmers back then hand-tuned machine code and did not trust a program to write it for them. Backus wrote that they were convinced efficient programming “could not be automated” <strong>[4]</strong>. His team spent most of its effort on the optimizer, the part that made compiled code almost as fast as hand-written code. That’s how the trust was earned.</p>
<p>Today nobody reads the machine code their compiler spits out. Nobody calls that lazy.</p>
<p>We just moved up one step again. <strong>From coding to directing and reviewing.</strong></p>
<h2>A tool that made monsters</h2>
<p>In 1959 COBOL was designed to read like English, so managers could write their own programs <strong>[5]</strong>. No more waiting on specialized programmers.</p>
<p>It didn’t go that way. COBOL ran banks and governments for sixty years. Today it’s a language nobody wants to work in. The fantasy of removing technical skill made monsters.</p>
<p>So is AI the next COBOL? Maybe. I don’t know. We will soon see, I guess.</p>
<p>The difference I can see is small and it matters. This time the tool can help fix what it made. As long as the complexity is managed.</p>
<h2>What I actually read (it’s not the code)</h2>
<p>I read almost none of the code. With exceptions.</p>
<p>Edgar I had to read, because I built it to learn and made it readable on purpose, it was the entire point. The other repos, i guess maybe 5%.</p>
<p>What I do read is everything around the code. Every question the agents ask me. Every task review and sprint review. Every postmortem. Every thread on a feature or a bug. Edgar alone has 68 ADRs (architecture decision records, one short file per design decision, with the why in it).</p>
<p>That’s where I use my judgement.</p>
<p>Software development is complexity management.</p>
<blockquote><p><em>The Logistics of Ideas</em></p></blockquote>
<p>Dijkstra said it in 1970: “The art of programming is the art of organizing complexity” <strong>[6]</strong>. Fred Brooks split the work in two in 1986 <strong>[7]</strong>. The essential part is deciding what to build. The accidental part is the labour of building it.</p>
<p><strong>I agree with every line.</strong></p>
<p>(another thought: AI is picking up the accidental part.)</p>
<p>If complexity is managed correctly it doesn’t really matter how the code got written. It can be fixed.</p>
<p><strong>If you know it’s broken.</strong></p>
<h2>Job number two is tester</h2>
<p>Back to the missing pages.</p>
<p>cairn keeps its data safe by streaming a copy to cloud storage through a tool called Litestream. On 15 September that stream stopped moving. A stall throws no error. For about 59 and a half hours the copy sat still while the app kept serving from its own disk. Every restart after that rolled back to the stale copy without a word. It turned out to be a known open bug in Litestream, issue #1515 <strong>[8]</strong>.</p>
<p>The agents traced it, wrote it down and recovered the data. Then a fix built from an unmerged upstream branch went in. Its first restore wrote a corrupt snapshot. The safety check did its job and stepped back to an older clean point. Thirteen pages gone. Not the first loss that week. That’s the day I counted two collections instead of three.</p>
<p>A fix that lost data. Reverted the same day. Everything recovered from the copy on my laptop. Three ADRs.</p>
<p>No check caught it. I did, because I was working with the data.</p>
<p>Kernighan and Plauger wrote a statement i love in 1978: “<em>Everyone knows that debugging is twice as hard as writing a program in the first place. So if you’re as clever as you can be when you write it, how will you ever debug it?</em>” <strong>[9]</strong></p>
<p>Now point that at a model. If it writes at the limit of what it can do, the same model is not capable enough to debug it. Somebody has to notice.</p>
<p>So the human in the loop matters more now. Not less.</p>
<p>Job one is directing and reviewing. Job two is tester.</p>
<p>A compiler earned trust by being predictable and checkable. A model is neither, not yet. That’s why I read the postmortems, track decisions, annotate roadmaps.</p>
<h2>The operator sets the sign</h2>
<p><a href="https://trinciarelli.com/posts/i-build-little-internets">The last article</a> ended with a promise. Here it is.</p>
<p>These tools multiply. A multiplier does nothing to a small number. <strong>And it has a sign.</strong></p>
<p>Engage with it. Read the decisions, use it. It multiplies you. <br>
Offload to it. Hand over the thinking, stop looking. It divides you.</p>
<p>Same tool. Opposite results.</p>
<p>The research on automation says the same. Complacency hits experts too. Practice alone does not fix it <strong>[13]</strong>.</p>
<p>It’s an old worry. Plato has a king warn that writing will give people “the appearance of wisdom” and not the real thing <strong>[12]</strong>. He was half right. Writing made us smarter as a species and let a lot of people look smart without being it.</p>
<p>Think of an architect with a crew that builds anything, fast. A good drawing gets built early. A bad drawing also gets built early. The crew never tells you the drawing is wrong.</p>
<p>The pitch says these tools close the gap between the expert and the beginner. I see the opposite. I think the gap is getting wider. Faster than ever.</p>
<h2>What I am probably getting wrong</h2>
<p>A lot. As usual. But this is how I learn.</p>
<p>The measurements are a mess. METR ran the best known trial in 2025 and found experienced developers 19% slower with AI while they believed they were faster <strong>[10]</strong>. Sixteen developers, early 2025 models. In 2026 they tried again and the study broke. Developers in the research refused to work without AI. Between 30 and 50% avoided submitting tasks they expected AI to handle well <strong>[11]</strong>. (And beware the research is also quite unscientific in itself, the numbers are unreliable in both directions).</p>
<p>Mine too. More than 1,400 commits in a month, across all my repos, is output. Value is another question. One guy is not a sample. N of 1 is not real research.</p>
<p>And “you can always fix it” is exactly what a monster says right before it eats you. It held this time because I happened to look.</p>
<h2>Where I would start</h2>
<ol>
<li>Make the agents write every decision down. One short file each, with the why. Read those, not the diff.</li>
<li>Ask for a postmortem on every bug. Even the small ones. Especially the small ones.</li>
<li>Use what you build. Daily. You are the sensor nobody wrote.</li>
<li>Keep one copy that doesn’t go through the clever path. Mine was sitting on my laptop and it saved me more than once.</li>
</ol>
<p>The tools got faster.</p>
<p>The work got bigger.</p>
<p>Somebody still has to look.</p>
<p><strong>TL;DR</strong> New tools raise the ambition faster than they cut the work. We evolve through what we build. Lotka called it exosomatic evolution. The tools now grow much faster than we do. The job moved up a step, from coding to directing and reviewing, the same move compilers forced in the fifties. Software is complexity management. The code can always be fixed, if somebody notices it’s broken. So job number two is tester. My agents lost thirteen pages of my data. No check caught it. I did, because I was using it. The tool multiplies whoever engages and divides whoever offloads.</p>
<p>And if you have the time read the books I linked, great stuff written by the giants on whose shoulders we stand.</p>
<p><strong>Try it.</strong> Paste this into whatever agent you build with:</p>
<pre><code>From now on, for every change you make:
1. Write a short decision record: what you decided, the options you rejected, why.
2. After every bug, write a postmortem: what broke, how it was found, what stops it next time.
3. End every session with a review: what changed, what is untested, what I should try by hand.
4. Tell me the one thing I should use today to check it still works.
I will read these instead of your code. Write them for a person, not for a compiler. Be concise, write like I am 12.</code></pre>
<p>Most of the work is already done. You just have to read it. And then use the thing.</p>
<h2>References</h2>
<p><strong>[1]</strong> Ruth Schwartz Cowan, <em>More Work for Mother: The Ironies of Household Technology from the Open Hearth to the Microwave</em>, 1983. <a href="https://hss.sas.upenn.edu/content/more-work-mother-ironies-household-technology-open-hearth-microwave">https://hss.sas.upenn.edu/content/more-work-mother-ironies-household-technology-open-hearth-microwave</a></p>
<p><strong>[2]</strong> Alfred J. Lotka, <em>Elements of Physical Biology</em>, 1925, on exosomatic instruments. Discussed in: <a href="https://www.sciencedirect.com/science/article/abs/pii/S0921800915004243">https://www.sciencedirect.com/science/article/abs/pii/S0921800915004243</a></p>
<p><strong>[3]</strong> Grace Hopper, quoted in the OCLC Newsletter, March/April 1987. <a href="https://cs.yale.edu/homes/tap/Files/hopper-wit.html">https://cs.yale.edu/homes/tap/Files/hopper-wit.html</a></p>
<p><strong>[4]</strong> John Backus, “The History of FORTRAN I, II, and III”, 1978. <a href="https://softwarepreservation.computerhistory.org/FORTRAN/paper/p25-backus.pdf">https://softwarepreservation.computerhistory.org/FORTRAN/paper/p25-backus.pdf</a></p>
<p><strong>[5]</strong> “It’s COBOL all the way down”, Increment. <a href="https://increment.com/programming-languages/cobol-all-the-way-down/">https://increment.com/programming-languages/cobol-all-the-way-down/</a></p>
<p><strong>[6]</strong> Edsger W. Dijkstra, <em>Notes on Structured Programming</em>, EWD249, 1970. <a href="https://www.cs.utexas.edu/~EWD/transcriptions/EWD02xx/EWD249/EWD249.html">https://www.cs.utexas.edu/~EWD/transcriptions/EWD02xx/EWD249/EWD249.html</a></p>
<p><strong>[7]</strong> Frederick P. Brooks, “No Silver Bullet: Essence and Accident in Software Engineering”, 1986. <a href="https://www.cs.unc.edu/techreports/86-020.pdf">https://www.cs.unc.edu/techreports/86-020.pdf</a></p>
<p><strong>[8]</strong> Litestream issue #1515. <a href="https://github.com/benbjohnson/litestream/issues/1515">https://github.com/benbjohnson/litestream/issues/1515</a></p>
<p><strong>[9]</strong> Brian Kernighan and P. J. Plauger, <em>The Elements of Programming Style</em>, 2nd ed., 1978, chapter 2.</p>
<p><strong>[10]</strong> METR, “Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity”, July 2025. <a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/">https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/</a></p>
<p><strong>[11]</strong> METR, “We are Changing our Developer Productivity Experiment Design”, February 2026. <a href="https://metr.org/blog/2026-02-24-uplift-update/">https://metr.org/blog/2026-02-24-uplift-update/</a></p>
<p><strong>[12]</strong> Plato, <em>Phaedrus</em>, 274b to 277a. <a href="https://newlearningonline.com/literacies/chapter-1/socrates-on-the-forgetfulness-that-comes-with-writing">https://newlearningonline.com/literacies/chapter-1/socrates-on-the-forgetfulness-that-comes-with-writing</a></p>
<p><strong>[13]</strong> Raja Parasuraman and Dietrich H. Manzey, “Complacency and Bias in Human Use of Automation: An Attentional Integration”, <em>Human Factors</em> 52(3), 2010. <a href="https://doi.org/10.1177/0018720810376055">https://doi.org/10.1177/0018720810376055</a></p>]]></content:encoded>
  </item>
  <item>
    <title>I Build Little Internets</title>
    <link>https://trinciarelli.com/posts/i-build-little-internets</link>
    <guid isPermaLink="true">https://trinciarelli.com/posts/i-build-little-internets</guid>
    <pubDate>Tue, 15 Sep 2026 00:00:00 GMT</pubDate>
    <dc:creator>Diego Trinciarelli</dc:creator>
    <description>The web lost the human-authored link. Agents might be how we get it back. Will it work this time?</description>
    <category>artificial-intelligence</category>
    <category>knowledge-graph</category>
    <category>ai-agent</category>
    <category>knowledge-management</category>
    <category>semanticweb</category>
    <content:encoded><![CDATA[<figure><img src="https://trinciarelli.com/posts/img/i-build-little-internets/hero.webp" alt="A man in a horse mask writing notes at a desk, in front of a wall of papers joined by red string" width="1200" height="800" loading="lazy" decoding="async"><figcaption>me, building little internets.</figcaption></figure>
<p><strong>The web lost the human-authored link. Agents might be how we get it back. Will it work this time?</strong></p>
<p>I did not have a name for it until last week.</p>
<p>For a a few weeks I had been building a few wikis of my own notes. Not a folder of Markdown. A few small webs: pages linking to each other, every link carrying a tag that says what the relationship is. supports. contradicts. refines. same-shape-as. I find the wiki both comforting and technically fit for building diy semantic graphs of my own randomized stuff.</p>
<p>Ten relation types. Twenty-nine pages. I had to pick the right one every time, which was the annoying part and the entire point. Then I started building a tool so agents could write into one without an approval step. Then I needed a real corpus to test it on, so I made one.</p>
<p>Somewhere in the process it came to me this silly idea: I am building little internets.</p>
<h2>What actually I was missing (for so long that I forgot)</h2>
<p>The web did not die. One property did: <strong>the link as an act of judgement.</strong></p>
<p>A person read a thing, decided it was worth pointing at, then linked to it. That choice carried information. It is what made PageRank work. It is what made a blogroll a map of a mind.</p>
<p>The feed replaced the link with the recommendation. A recommendation is not a judgement by someone who read the thing. It is a prediction about what will hold your attention. Links still exist. They stopped being how anyone moves.</p>
<h2>I was confused at first</h2>
<p>The argument I wanted was easy. This is the semantic web finally working, because agents remove the annotation burden that killed it. Everyone knows it failed because hand-tagging was too much work.</p>
<p>I am an expert in rabbit holes. So I read the sources first. The story is wrong and (imho) misattributed.</p>
<p><strong>Doctorow’s “Metacrap”</strong> is cited everywhere as the obituary. The words “Semantic Web” do not appear in it. Neither does RDF, or Berners-Lee. It predates the article it supposedly rebuts. <strong>[1]</strong> <strong>Shirky’s 2003 essay</strong>, the most cited critique, explicitly denies the laziness thesis. <strong>[2]</strong> <strong>Norvig</strong>, quoted forever as having demolished it with the word “incompetence”, opened with “I am not against the Semantic Web.” <strong>[3]</strong></p>
<p>Three sources. Three misreadings.</p>
<p>What they actually say is duller. Nobody could agree what to encode. Nothing consumed it that paid. And the syntax defeated its own authors: Tim Bray, who co-invented RDF/XML, never once managed to write a chunk of it correctly. <strong>[4]</strong> That is a complaint about the serialization. The triplet survived into JSON-LD and every knowledge graph in production. RDF/XML did not.</p>
<h2>It half won anyway</h2>
<p>Schema.org is the same idea with the ontology stripped out. Global entity URIs abandoned. Formal knowledge representation dropped for a browsing aid. In 2016 structured markup was on 38 percent of pages and 16.5 percent of domains. By 2024 it was 51 percent and 44 percent. <strong>[5]</strong></p>
<p>And the mechanism kills the laziness story. RSS took off when Blogger emitted it automatically. Schema.org took off on WordPress plugins. <strong>Annotation volume is a function of tooling defaults</strong>, not diligence. People annotate at enormous scale. They need telling which vocabulary, then paying something for the trouble.</p>
<h2>So why not blogs again</h2>
<p>Blogs had all of it. Free, real, shared, a named face behind every one. We loved them. Then they died.</p>
<p>My read:</p>
<p><strong>A blog cost its author nothing to neglect.</strong> It sat there, read or unread. The writer was unaffected either way. Quality was a virtue. Virtues are <strong>optional</strong>.</p>
<p>A little internet is what my own agent reasons from. Let it rot and my tools get worse. <strong>Quality stops being a virtue and becomes maintenance</strong>. That is the new thing. Not the links, not the ownership, not the semantics. <strong>Use.</strong></p>
<p>Same for agents polluting at scale. A polluted wiki is a polluted agent memory. Self-harm, not vandalism.</p>
<h2>Islands and bridges</h2>
<p>Second objection: a thousand private wikis are a thousand islands.</p>
<p>We are not going to build islands without bridges. Federation is not an unsolved protocol problem. It is what a link already is. Blogs federated by linking and search engines did the rest. If I make one public I share the link.</p>
<p>Every objection I raised against this idea assumed a new mechanism was needed. Every answer was that <strong>the old one still works</strong> and we stopped using it.</p>
<h2>Who does the tagging</h2>
<p>The two halves of my argument pull against each other. Agents make edges cheap, which is the whole bet. GraphRAG already inverts the 2001 vision this way: the LLM builds the graph. <strong>[8]</strong> But I also said choosing the tag yourself is most of the value.</p>
<p>Where I have landed: <strong>the agent proposes, I dispose.</strong> It suggests the edge and the relation. I accept, change the tag, or throw it out. Reviewing a proposed contradicts takes three seconds. Deciding one from scratch takes a minute.</p>
<p>At twenty proposals a day it works. At two hundred I would rubber-stamp.</p>
<p>Perhaps I can write a skill good enough to auto-approve 80% of them? Possible, once I hit that scale I will see what i need to do.</p>
<h2>What the machines get from it</h2>
<p>An untagged link makes an agent re-derive the relationship on every traversal. Expensive. Different every run. A tagged link <strong>is</strong> the relationship, decided once. Retrieval stops being “find things near this” and becomes “find what contradicts this”.</p>
<p>One real number exists. GPT-4 over an enterprise SQL database scored 16 percent. Same questions over a knowledge graph of the same data: 54 percent. Forty-three questions, one domain. Not a law. <strong>[6]</strong></p>
<p>Just be careful which claim you buy. There is no verified AI-driven graph database boom. <strong>[12]</strong> What’s real is graph-shaped retrieval, and the real life, honest version is that <strong>hybrid beats either alone.</strong> <strong>[7]</strong></p>
<h2>The barrier moved. It did not go away.</h2>
<p>Here is the objection I expected to lose to. If agents write this syntax now, the old blocker is gone, so why not do the semantic web properly this time?</p>
<p>Bray could never write RDF/XML correctly. That complaint is obsolete. So I tested what replaced it.</p>
<p>Twelve SPARQL queries against Wikidata, from memory, single-shot, no lookups. Then I asked Wikidata what every identifier I had used actually means. <strong>[13]</strong></p>
<p>Every query was well-formed. Twelve out of twelve. <strong>Bray’s problem is dead</strong>. Twenty of twenty-two identifiers were right. Two were not:</p>
<pre><code>Q92624   I believed: Guido van Rossum    actual: Dan Bricklin
Q662772  I believed: Neuromancer         actual: Berg</code></pre>
<p>Look at the first one. Q92624 is a real person with a real notable work. That query runs. It returns VisiCalc. It looks like an answer. The second returns nothing. Neither raises an error. Both would sit in a graph forever.</p>
<p>The barrier moved from authoring to grounding. Grounding fails quietly. Bad syntax fails in your face. A wrong identifier fails silently and stays.</p>
<p>Scale will not fix this. At the 2026 TEXT2SPARQL challenge, the entry running Claude Sonnet 4.6 scored roughly 0.34 answer F1. <strong>[9]</strong> And the number that explains it: putting the schema in the prompt took execution F1 from <strong>0.00 to 0.28</strong> on unseen graphs. Zero without it. <strong>[10]</strong> The variable was never model strength. <strong>It is whether the machine knows what the names mean</strong>. <strong>[11]</strong></p>
<p>Every failure above is the same failure. I was guessing at names somebody else assigned. The schema.org team hit that wall and wrote it down: coordinating entity references across sites is “much too difficult for most sites”. So they stopped requiring it. <strong>Identifiers stayed optional and reconciliation became the consumer’s problem</strong>. <strong>[16]</strong></p>
<p>One of my wikis has twenty-nine pages, ten relation types and one author. There is no Q92624 to get wrong. I cannot build the web for agents, because identity does not survive strangers. I can build my own little internets, because inside one namespace identity is free. That is the condition under which the machines stop guessing.</p>
<h2>What I am probably getting wrong</h2>
<p><strong>Not enough experience, not enough tests.</strong> I am generalizing about the future of the web from a stack of my own notes.</p>
<p>Nobody has run the test on my corpus. The closest systematic one gives graphs a conditional win, not a victory. <strong>[7]</strong></p>
<p>Tags decay when you stop choosing them carefully. supports does no work if everything is supports. At five hundred pages nobody tags conscientiously. Half-tagged is worse than untagged because it looks finished.</p>
<p><strong>It might also be nostalgia with better plumbing.</strong> I have a bias here.</p>
<h2>What I have actually built</h2>
<p>Arguments like this are cheap and code is not, so here is what exists. <strong>[14]</strong></p>
<p>I wrote this article while building <a href="https://github.com/vespassassina/cairn"><strong>cairn</strong></a> . A tool that creates, manages, stores, indexes and searches wiki and tables your agents can write to, with every change reviewable. Keyword search and meaning search over one SQLite file, the embedding model running inside it so nothing leaves the server. Every write is a revision you can undo. Html pages “dumpable” to disk or object storage.</p>
<p><strong>It needs nobody’s permission.</strong> That is the point.</p>
<h2>Why I build this stuff</h2>
<p>I believe in grassroot adoption. The choice of the single has terrifying impact at scale. An algorithm that manipulates perception has done real damage to our societies.</p>
<p>My driving kernel has always been openness and freedom and personal accountability. That last one is the part people skip. Openness and freedom describe the feed as well as the early web. Accountability is what separates them.</p>
<p>I believe in the small guy. I hate the greedy corp toxic approach. <strong>I do not expect to fix anything.</strong> I most likely got everything wrong and nobody will care. <strong>It’s still ok.</strong> It’s one more voice. It makes me feel better.</p>
<p>The web was never wrong. It was missing an agreement. It was missing something that paid.</p>
<p>Now this little internet has both, because the thing consuming it is mine.</p>
<h2>TL;DR</h2>
<p>The web lost the human-authored link. The feed replaced judgement with prediction.</p>
<p><strong>The semantic web story you know is wrong.</strong> Doctorow’s “<em>Metacrap</em>” never mentions it. Shirky denies the laziness thesis. Norvig opened with “I am not against the Semantic Web.”</p>
<p><strong>The syntax barrier is gone. The grounding barrier is not.</strong> I wrote twelve SPARQL queries from memory. All twelve parsed. Two pointed at the wrong thing, silently.</p>
<p><strong>A little internet is a small private web where every link says what it means.</strong> One namespace, one author, so identity is free. That is the condition under which machines stop guessing.</p>
<h2>Where I would start</h2>
<p>Take the notes you already have. Pick five relationships that matter in your domain. Write the list somewhere you will see it, because the list -in this age- matters more than the software.</p>
<h2>Now go and build one</h2>
<p>Point an agent at that folder and paste this.</p>
<pre><code>Read my notes in this folder.</code></pre>
<pre><code>First, propose five relationship types that would be useful between these specific notes. Not generic ones. Five that fit what is actually here.</code></pre>
<pre><code>Then for each pair that should link, tell me which relationship it is and one line on why that one and not another. Do not add a link where the relationship is vague.</code></pre>
<pre><code>Then tell me which notes ended up with no edges at all. Those are either the most original things I have written or the ones I have not thought about properly, and I want to know which.</code></pre>
<pre><code>Now take the notes, the relations and make a wiki. Make it HTML with links. Annotate the links with the relationships between pages, make it simple, make it human and machine readable. This is your memory. Maintain it.</code></pre>
<pre><code>Now make a skill out of this and use it to record memories. </code></pre>
<p>That last question is the useful one. The unconnected notes tell you something the connected ones cannot.</p>
<p>Then keep going by hand, one link at a time. The agent is the librarian. The judgement stays yours.</p>
<h2>References</h2>
<p><strong>1.</strong> Cory Doctorow, <em>Metacrap: Putting the torch to seven straw-men of the meta-utopia</em>, 26 August 2001. Does not mention the Semantic Web, RDF or Berners-Lee. <a href="https://people.well.com/user/doctorow/metacrap.htm">people.well.com</a></p>
<p><strong>2.</strong> Clay Shirky, <em>The Semantic Web, Syllogism and Worldview</em>, November 2003. “People can share data without having to share a worldview, so we got the meta-data without needing the ontology.” <a href="https://web.archive.org/web/20040203033734/http://www.shirky.com/writings/semantic_syllogism.html">archive</a></p>
<p><strong>3.</strong> Peter Norvig, panel remarks, 2006. Three obstacles, not one. He meant webmasters.</p>
<p><strong>4.</strong> Tim Bray, 2003. “I have never actually managed to write down a chunk of RDF/XML correctly, even when I had the triples laid out quite clearly in my head.” Followed by: “I helped invent the RDF syntax, so I’m as much to blame as anyone.”</p>
<p><strong>5.</strong> Web Data Commons, structured data from Common Crawl. <a href="https://webdatacommons.org/structureddata/2016-10/stats/stats.html">2016</a> · <a href="https://webdatacommons.org/structureddata/2024-12/stats/stats.html">2024</a>. Their 2024 page reports 51.25 percent where the underlying counts give 52.1 percent.</p>
<p><strong>6.</strong> Sequeda, Allemang and Jacob, <em>A Benchmark to Understand the Role of Knowledge Graphs on LLM’s Accuracy for Question Answering on Enterprise SQL Databases</em>, 2023. <a href="https://arxiv.org/abs/2311.07509">arXiv:2311.07509</a></p>
<p><strong>7.</strong> <em>RAG vs. GraphRAG: A Systematic Evaluation and Key Insights</em>, February 2025. Same corpora, same settings. 13.6 percent graph-only correct, 11.6 percent vector-only, hybrid best. Graph extraction captured only 66 percent of answer entities. <a href="https://arxiv.org/abs/2502.11371">arXiv:2502.11371</a></p>
<p><strong>8.</strong> Edge, Trinh et al., <em>From Local to Global: A Graph RAG Approach to Query-Focused Summarization</em>, April 2024. Read the scope: global sensemaking over roughly million-token corpora, judged by an LLM. <a href="https://arxiv.org/abs/2404.16130">arXiv:2404.16130</a></p>
<p><strong>9.</strong> TEXT2SPARQL Challenge 2026, results 13 May 2026. The LIBER-AI-CLAUDE entry, backed by Claude Sonnet 4.6: CK26 F1 0.336, DB26 F1 0.348. Answer-set F1, not execution accuracy. <a href="https://text2sparql.aksw.org/latest/">text2sparql.aksw.org</a></p>
<p><strong>10.</strong> Wardenga and Käfer, 2025. ShEx shapes in the prompt, execution F1 from 0.00 to 0.28 on unseen knowledge graphs. <a href="https://publikationen.bibliothek.kit.edu/1000190296">KIT</a></p>
<p><strong>11.</strong> <em>SAGA</em>, July 2026, naming “type-blind grounding” as the dominant failure mode: plausible triple patterns, incompatible types, empty results. <a href="https://arxiv.org/abs/2607.14494">arXiv:2607.14494</a></p>
<p><strong>12.</strong> Neo4j’s $325 million Series F, June 2021. TigerGraph’s $105 million Series C, February 2021. Both predate the current cycle. There is no verified AI-driven graph database boom.</p>
<p><strong>13.</strong> My test. Twelve single-shot queries, twenty-two identifiers, one afternoon, popular entities. It shows a mechanism, not a rate. Execution accuracy could not be measured: Wikidata’s query service was in an active outage throttling to one request per minute. Run it yourself and it will disagree with me on different ones. <a href="https://github.com/vespassassina">github.com/vespassassina</a></p>
<p><strong>14.</strong> <a href="https://github.com/vespassassina/cairn">cairn</a> · <a href="https://github.com/vespassassina/edgar">edgar</a> · <a href="https://github.com/vespassassina/peptide-wiki">peptide-wiki</a> · <a href="https://github.com/vespassassina/artifactkit">artifactkit</a></p>
<p><strong>15.</strong> R.V. Guha co-created RDF, RSS and schema.org. He shipped NLWeb in May 2025, described as playing a similar role to HTML for the agentic web. If you are wondering whether someone is already building the public version of this: yes, it is him. <a href="https://github.com/nlweb-ai/NLWeb">NLWeb</a></p>
<p><strong>[16]</strong> Guha, Brickley and Macbeth, <em>Schema.org: Evolution of Structured Data on the Web</em>, ACM Queue 13(9), November 2015. From the “Entity References” section: <em>“Many models such as Linked Data have globally unique URIs for every entity as a core architectural principle. Unfortunately, coordinating entity references with other sites for the tens of thousands of entities about which a site may have information is much too difficult for most sites.”</em> So schema.org requires unique URIs only for its own vocabulary terms and leaves consumers to reconcile entities from descriptions. sameAs exists for this and, in their words, "has not found much adoption". Note this was three authors, not Guha alone. <a href="https://queue.acm.org/detail.cfm?id=2857276">queue.acm.org</a></p>]]></content:encoded>
  </item>
  <item>
    <title>The Grounding Problem.</title>
    <link>https://trinciarelli.com/posts/the-grounding-problem</link>
    <guid isPermaLink="true">https://trinciarelli.com/posts/the-grounding-problem</guid>
    <pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate>
    <dc:creator>Diego Trinciarelli</dc:creator>
    <description>The clever part is free now. The boring part, what it can actually see and trust, is the whole job.</description>
    <category>ai-agent</category>
    <category>productivity</category>
    <category>software-engineering</category>
    <category>retrieval-augmented-gen</category>
    <category>artificial-intelligence</category>
    <content:encoded><![CDATA[<figure><img src="https://trinciarelli.com/posts/img/the-grounding-problem/hero.webp" alt="Cartoon of a dog with a coffee in a burning room labelled Room 404, saying it has summarized the essay" width="1024" height="559" loading="lazy" decoding="async"><figcaption>This is fine</figcaption></figure>
<h2>An Agent Is Only As Smart As What It Can Reach.</h2>
<p><strong>The clever part is free now. The boring part, what it can actually see and trust, is the whole job.</strong></p>
<p>I caught my own agent lying to me last week (bad boy!). Politely. But with great confidence.</p>
<p>I was building a wiki of my own notes. I wanted to reference a well-known engineering essay, Jay Kreps on The Log, which is actually good stuff. The agent summarized it beautifully.</p>
<p>Then I asked it to fetch the actual page. A 404. Then a broken redirect. The essay had moved. The agent had never opened it. It had described a thing it could not reach, from memory (whatever we agree that is), then smuggled the guess as knowledge.</p>
<p>Nothing about the model was wrong. It was doing exactly what a language model does. The failure was not intelligence. It was reach.</p>
<p>Here is the uncomfortable part. I only caught it because I had built something to catch it. Before that discipline existed, a guess and a fact looked identical. I could not tell them apart a week later, which means some of them were wrong and I never knew which one. The near-miss is not the happy ending. It is the warning.</p>
<p>That is the whole subject of this piece. Retrieval gets written about constantly as a technique. Almost nobody talks about it as the boring majority of the work, the part that quietly decides whether any of the cleverness actually matters.</p>
<h2>Capability is free. Reach is not.</h2>
<p>Here is the trade that reorganized how I think about all of this.</p>
<p>The clever part keeps arriving for free. Every few months a new model lands and everything gets smarter at no effort from me. Reasoning. Code. Language. All of it improves while I sleep.</p>
<p>Reach does not improve while I sleep. What an agent can actually reach and check is something I build by hand, one connection at a time.</p>
<p>So the gap between an impressive demo and a useful system is almost never the model. It is whether the thing can reach the data the answer depends on.</p>
<p>A model that cannot see your calendar cannot reason about your week. It does not matter how brilliant it is. Ask it what you should move tomorrow. It will produce something fluent and plausible and COMPLETELY DISCONNECTED from your actual Tuesday.</p>
<p>The intelligence was never the bottleneck. The bottleneck is the boring 80 percent (are we going with Pareto, really?).</p>
<h2>What grounding actually means</h2>
<p>Grounding is a vague word, so here is the concrete version. It is four separate problems wearing one coat.</p>
<p><strong>Connection.</strong> Can the agent physically reach the source at all? An API. A file. A database. A page. This is the plumbing. It fails in dull, specific ways. The endpoint moved. The token expired. The page 404s. My Kreps essay was a connection failure. Connection failures are the honest ones, because they announce themselves.</p>
<p><strong>Permission.</strong> Can it reach the source <em>as you</em>, with your rights instead of its own? I hit this wiring a tool to my own work data. The tool ran as the agent, so it queried the system as the agent and got the agent’s view. Which was almost nothing. To see what I see, it had to carry my authority through to the source, not its own. An agent with its own identity lives in a different world than i do. Ask it what a system returns for you. Unless it can borrow your rights, it answers for itself, then calls it yours.</p>
<p><strong>Freshness.</strong> Is what it reached actually current? A cached value. A stale snapshot. Last quarter’s number. This one is vicious, because the answer looks fine. Nothing 404s. It is just quietly wrong by three weeks.</p>
<p><strong>Trust.</strong> This is the one everybody skips. There is a difference between data an agent can <em>see</em> and data it can <em>believe</em>. My agent could see its own memory of the Kreps essay. It could not verify a word of it. Seeing is not trusting. A system that cannot tell the two apart will hand you a confident guess every single time.</p>
<p>Capability improves all four of these by exactly nothing. A smarter model reaches a stale number faster. It describes an unread essay more convincingly. Reach is a separate axis. It is the one you own.</p>
<h2>Reach is why I run four agents, not one</h2>
<p>If you see me on my pc you might assume I run several agents in parallel because more is better. That is not it. I run them because they reach different things.</p>
<p>Claude Code lives inside a code repository and holds a long thread across hours. Hermes runs its own lane with its own context. GitHub Copilot sits inline in the editor, tight loop. Scout reaches the desktop and my work data. Files. Calendar. Messages. The browser.</p>
<p>The point is not that four beats one. A repository agent cannot see my calendar. A calendar agent cannot see my repository. No amount of model quality closes that gap (and i am not sure i want to even close it). Reach is the thing that varies between them. Reach is the thing I am actually selecting for.</p>
<p>A few habits fell out of running them this way. Pick the tool by what it can reach, never by the logo. Protect a deep thread instead of interrupting it for a trivia question. Use a file as the handoff, because there is no shared brain between them, so the shared state has to live somewhere they can all reach.</p>
<p><em>And accept that nothing coordinates them but me.</em> That last one, the human sitting in the middle deciding what to point where, turns out to be a whole argument on its own. It is something i need to reflect and write about, eventually, so I will leave it there.</p>
<h2>The fix is a discipline. An unglamorous one</h2>
<p>Once you see reach as the real problem, the fix is not a clever model. It is a boring habit, applied relentlessly.</p>
<p>I have been rebuilding my personal notes as a wiki. It turned into the clearest example of grounding I have.</p>
<p>It is not built by me alone. It is not built by the agent alone. It is the sum of the two. The whole design exists to keep the agent honest about what it has actually reached.</p>
<p>Every claim page carries an evidence class. Lived. Measured. Researched. Or a plain hunch. The label is not decoration. It is the difference between something I checked and something I just believe (legacy of working with graphs and ontologies).</p>
<p>Every link between ideas carries a relation tag. Not a lazy “see also”. A stated reason. This supports that. This contradicts that. This is the same shape as that. Ten relation types.</p>
<p>Every external source gets its own page that says, in the first line, whether I have actually read it. Right now the wiki has 21 idea pages and 6 source pages. Five of those six sources are marked, in plain text, as not yet read.</p>
<p>That last number is the point. Five unread stubs, labelled as unread, sitting there slightly embarrassing me every time I open the folder. That is grounding working. The system knows the difference between a source I have reached and one I am still guessing about. It refuses to let the guess wear the same clothes as the fact.</p>
<p>The Kreps essay is one of those five. The agent described it. I could not verify it. So it is a stub with a to-do on it. Not deleted. Not pretended into a citation. Flagged, honestly, as reach I have not yet closed (i actually did read it just before finishing this).</p>
<h2>What I am probably getting wrong</h2>
<p>I am not sure reach stays a separate axis forever. Models are starting to arrive with their own tools, their own browsing, their own memory. Some of the plumbing I build by hand today will be built in tomorrow. Maybe the boring 80 percent slowly shrinks.</p>
<p>I suspect it does not shrink as much as people hope. Every new capability needs new grounding underneath it. The frontier of what an agent could reach keeps moving faster than the wiring to reach it safely. The 80 percent may just move rather than vanish.</p>
<p>I also cannot fully solve freshness. I can flag what is unread. I am much worse at flagging what was fresh when I reached it, then quietly went stale since. A read source can rot the same way an unread one can mislead. I do not have a good sensor for that yet.</p>
<p>My whole setup also assumes I am the router. If that job ever automates, I lose the one point where a human currently catches the confident guess before it ships. I do not know what replaces me there. More agents? Maybe from different vendors? A consortium of intelligences ?</p>
<h2>Where I would start</h2>
<p>If you want to feel this rather than read about it, do one small thing.</p>
<p>Take a task you already trust an agent with. Now ask it one question out loud. What did it actually reach to produce this? And how does it know that source is real and current?</p>
<ol>
<li>Make it name its sources instead of summarizing them.</li>
<li>Make it fetch one, live, in front of you. Watch whether it actually can.</li>
<li>When it cannot, do not let it smooth over the hole. Make it say “I could not reach this.”</li>
<li>Write that gap down somewhere it will nag you, not somewhere it disappears.</li>
<li>Only then worry about whether the model is clever enough. It almost always already is.</li>
</ol>
<p>The habit is the product. The model is just the part that arrives for free.</p>
<p>Capability is what the model brings. Reach is what you build. The second one is the whole job. And it’s dull and boring and doesn’t make good click bait.</p>
<p>That is exactly why it is worth doing.</p>
<h2>TL;DR</h2>
<p>An agent is only as smart as what it can reach. Capability arrives free with every new model. Reach, what the thing can actually reach and verify, you build by hand and maintain forever.</p>
<p><strong>Grounding is four problems, not one:</strong></p>
<ol>
<li>Connection. Can it reach the source at all. These failures are honest. They 404.</li>
<li>Permission. Can it reach the source as you, with your rights instead of its own.</li>
<li>Freshness. Is what it reached actually current, or quietly three weeks stale.</li>
<li>Trust. The one everyone skips. Seeing a thing is not believing it. A system that cannot tell those apart hands you a confident guess every time.</li>
</ol>
<p>A smarter model improves none of these. It reaches a stale number faster and describes an unread essay more convincingly.</p>
<p><strong>The fix is a discipline, not a model.</strong> Label every claim with how you know it. Tag every link with why it connects. Mark every source, in plain text, as read or unread. Let the unread ones sit there and nag you. My own wiki has five unread source stubs right now, labelled as unread. That is grounding working, not failing.</p>
<p><strong>And:</strong> I caught my own agent describing an essay it had never opened. The model was fine. The reach was missing. That gap is the whole subject. It is the 80 percent nobody wants to write about.</p>
<h2>Now go and check one</h2>
<p>Open whatever you use. Give it a task you already trust it with.</p>
<p>Then paste this underneath.</p>
<pre><code>Before you answer, tell me exactly what you will reach to produce this:
which sources, which data, which files.</code></pre>
<pre><code>Then fetch one of them, live, right now, and show me it worked.</code></pre>
<pre><code>For anything you cannot actually reach, do not summarize it from memory and do not paper over the gap. Say plainly: "I could not reach this."</code></pre>
<pre><code>List separately:
- what you reached and verified
- what you are reconstructing from memory without reaching it
- what is probably stale even though you reached it</code></pre>
<pre><code>I want the second and third lists to be honest, not empty.</code></pre>
<p>If the second and third lists come back empty every time, that is not a good agent. That is one that has not learned to admit what it cannot reach. Teach it to. Write the gaps down somewhere they nag you.</p>
<p>That is the whole discipline. The model was always going to be clever enough.</p>]]></content:encoded>
  </item>
  <item>
    <title>I Run Nearly 100 AI Agent Skills. Most Of Them Are Trash</title>
    <link>https://trinciarelli.com/posts/i-run-nearly-100-ai-agent-skills</link>
    <guid isPermaLink="true">https://trinciarelli.com/posts/i-run-nearly-100-ai-agent-skills</guid>
    <pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate>
    <dc:creator>Diego Trinciarelli</dc:creator>
    <description>A skill is where you keep the scar tissue.</description>
    <category>productivity</category>
    <category>software-development</category>
    <category>artificial-intelligence</category>
    <category>ai-agent</category>
    <content:encoded><![CDATA[<blockquote><p>The ones that survived all do the same handful of things. I am still getting plenty of it wrong.</p></blockquote>
<figure><img src="https://trinciarelli.com/posts/img/i-run-nearly-100-ai-agent-skills/hero.webp" alt="Cartoon of a smiling bearded man with a hand on a younger man's shoulder, a small robot watching" width="1024" height="559" loading="lazy" decoding="async"><figcaption>you are not alone</figcaption></figure>
<p>I noticed it on a Tuesday.</p>
<p>I was typing the same 400 words into a chat window for maybe the fifteenth time. Same context, same constraints, same “no, not that data source”, same “check the totals before you show me anything”. By the time the agent gave me something useful I had spent longer briefing it than the job would have taken me alone.</p>
<p>That was the moment prompt engineering stopped making sense to me.</p>
<p>A great prompt is a performance. It works once, everyone claps, it evaporates. Next week you rebuild it from memory, slightly worse, in more of a hurry.</p>
<p>So I started saving them. Then naming them. Then adding structure, rules, scripts, gates, state.</p>
<p>Today I have nearly 100. I use about 30 regularly. I keep making more. I keep rewriting the old ones. Every round they get a bit more meta: more gates, more memory, more state, more tests.</p>
<p>Two things before I go further.</p>
<p>I am new at this. So is everybody. Anyone presenting themselves as an authority on agentic development in 2026 is selling something. It is probably a course.</p>
<p>I am also making mistakes right now that I will find embarrassing by Christmas. I will point at a few on the way past.</p>
<h2>Three eras, quickly</h2>
<p><strong>Scripts.</strong> You write code. It does exactly what you said, forever, until the world moves underneath it and it breaks loudly. Deterministic and brittle.</p>
<p><strong>Prompts.</strong> You describe what you want. You get something in the neighborhood. Flexible and unrepeatable. You cannot hand a prompt to a colleague and expect your result, because half of it never left your head.</p>
<p><strong>Skills.</strong> You write a contract. What this is for, when to reach for it, where the data lives, what has already gone wrong, what to do when it goes wrong again and what finished actually looks like.</p>
<p>A skill is the first thing in this space that is durable and adaptive at the same time. That combination is the entire point.</p>
<h2>What one actually is</h2>
<p>Strip away the platform differences and every agent skill I have written has the same skeleton.</p>
<p>A name.</p>
<p>A description packed with the phrases a human would really say.</p>
<p>A body in plain prose. Goal, inputs, sources, procedure, output shape, failure handling, refusal conditions.</p>
<p>Optionally, code. Scripts the agent runs instead of improvising.</p>
<p>That is it. Markdown and intent. The most valuable professional asset I own is a folder of text files, which I find funny and slightly alarming.</p>
<p>The format is not the interesting part. The interesting part is which ones are still alive after a year.</p>
<h2>1. The description is a router, not documentation</h2>
<p>Classic first-skill mistake. I made it 40 times.</p>
<p>I wrote lovely descriptions. “Analyses consumption trends and produces an executive summary.” Accurate, tidy, never fired once, because I have never said that sentence out loud in my life.</p>
<p>What I actually type is “why did that drop”, or “gimme the deep dive”, or “what happened last month”.</p>
<p>The description is not there to explain your skill to a human. It is there so a model can match a messy real sentence to the right tool at the exact moment you are tired and typing badly.</p>
<p>My live skills have descriptions stuffed with my own ugly phrasings, including the lazy ones and the half sentences.</p>
<p>They read worse. They work.</p>
<p>Write the description last, after you have run the thing manually ten times. Harvest the actual words you typed.</p>
<h2>2. Encode the failures, not the happy path</h2>
<p>This is the one that changed how I build.</p>
<p>I have a skill that pulls records out of an internal system. First version described the query. Clean, short, correct.</p>
<p>Then I ran it from a hotel and got a 403. The agent, being helpful, concluded I lacked permission and wrote me a polite paragraph about contacting my admin.</p>
<p>I did not lack permission. That system sits behind an IP allowlist and I was on hotel wifi.</p>
<p>Ouch.</p>
<p>So I opened the skill and added a section that says: if you see this exact error, it is the network path. Not the token, not the user’s access. Say “get on the VPN”. Do not send them off to request something they already have.</p>
<p>Now every mature skill I own has a section like that. In the good ones it is longer than the instructions. They read like maintenance logs.</p>
<p>This API returns an empty set instead of an error when the filter is wrong. This file is encrypted at rest so the normal reader will not open it, use the other path. This number always looks broken on the 1st, that is expected, here is why. If the pull returns zero rows, do not publish zeros. Restore last known good and label it clearly.</p>
<p><strong><em>A skill is where you keep the scar tissue.</strong></em></p>
<p>Everyone writes about capability. The value compounds in the failure knowledge. Capability arrives free with the next model. Scar tissue you have to earn one wasted afternoon at a time.</p>
<h2>3. Push determinism down, keep judgment up</h2>
<p>Early on I let agents do the arithmetic and the file writing inline. It mostly worked, which is worse than failing, because “mostly” stays invisible until somebody makes a decision on top of it.</p>
<p>The rule I landed on:</p>
<p>If a step has exactly one correct output, it belongs in code. If a step needs someone to read the situation, it belongs in prose.</p>
<p>So my heavier skills are now thin coordination layers over real scripts. Fetch, transform, validate, render, all code. What matters, what to flag, how to say it for this audience, that stays with the model.</p>
<p>Nice side effect: when something breaks you instantly know which half broke. Deterministic failures throw stack traces. Judgment failures produce confident nonsense. Completely different repairs.</p>
<p><em>The skill is the contract between the two halves.</em></p>
<h2>4. Make it hand you a receipt</h2>
<p>The most useful line I ever wrote into a skill was not an instruction. It was a required output.</p>
<p>Roughly: always report how many records matched out of how many expected, the date of the newest data point, which sources were unreachable and anything missing.</p>
<p>Before that, output looked finished whether or not it was. A report with three items missing looks exactly like a report with nothing missing. That is the specific trap that makes people quietly stop trusting agentic output forever.</p>
<p>Now every run ends with its own receipt. 25 of 25 matched. Data through last Friday. One source unreachable.</p>
<p>I read the receipt before I read the content. If the receipt is wrong the content does not matter.</p>
<p>Confidence in these systems does not come from them being right. It comes from them being legible when they are wrong.</p>
<h2>5. Write down what it must refuse</h2>
<p>Every skill that touches other people carries an explicit boundary.</p>
<p>Never send anything outbound without showing me the exact text and the exact recipients first. Never invent a record you could not retrieve. If a source is unavailable, say so and stop. Do not approximate.</p>
<p>That last one earns its place. An agent with a hole in its data has two options. Tell you about the hole, or smooth it over with something plausible. Left alone, models are agreeable. Agreeable means smoothing.</p>
<h2>Skills that write their own memory</h2>
<p>Here is the thing that took me longest to understand.</p>
<p>A context window is not memory. It is a desk. Everything on it gets swept off at the end of the session. The next one starts clean, with no idea what you decided last time.</p>
<p>Memory is a filing cabinet. Nobody builds the cabinet for you.</p>
<p>So my skills write files.</p>
<p><strong>A plan file.</strong> For anything multi step, the skill writes a plan to disk early and updates it at milestones. It survives the conversation being compacted. It lets me audit the reasoning afterwards instead of trusting a summary. And when a run dies halfway, the next one picks up from a real artifact.</p>
<p><strong>State carried between runs.</strong> I have a tracker that regenerates weekly. First version threw away every note I had added, every single week, because regeneration meant starting clean. Now the skill writes a small state file keyed by item id. The next run reads it back and re-attaches my notes to the rows that still exist. The agent forgets. The file does not.</p>
<p><strong>Append only logs.</strong> Comments and decisions get added, never rewritten. History that can be edited is not history.</p>
<p><strong>Last known good.</strong> When an upstream source returns nothing, the skill does not publish zeros. It restores the previous good snapshot and labels it as stale with a date. Publishing zeros is how you get a very calm meeting about a catastrophe that did not happen.</p>
<p><strong>Deferred decisions, with reasons.</strong> When I skip something, the skill records what I skipped and why. Six weeks later I do not re-litigate it from scratch, which is otherwise exactly what I do.</p>
<p>None of this is glamorous. It is the difference between an agent that impresses you on Monday and one you still rely on in November.</p>
<h2>The skills that manage the skills</h2>
<p>This is where it got genuinely interesting and where I have wasted the most time.</p>
<p>Once you pass roughly 20 skills, the library itself becomes the problem. So I started building skills whose subject is other skills.</p>
<p><strong>A skill that writes skills.</strong> Give it a rough workflow and it produces a properly shaped one: gates, refusal conditions, required self report, state handling. The point is not saving typing. It is that every new skill is born with the good habits already in it, instead of me remembering to add them on a good day.</p>
<p><strong>A skill that finds candidates.</strong> It mines my own history for work I keep re-prompting and proposes turning the repeats into skills. It surfaced things I had manually re-explained eleven times without noticing. That is the Tuesday from the top of this article, automated, which is either elegant or a bit sad.</p>
<p><strong>Orchestrators.</strong> One entry point that resolves scope, calls the specialist skills that are actually relevant, assembles the result, checks it and reports the gaps. The orchestrator’s real product is the gap list. Anyone can assemble a document. Telling me precisely which five things are missing and unverified is the part that saves me from walking into a room underprepared.</p>
<p><strong>Gates.</strong> My favorite one runs a validation loop where each stage can fail the whole build. Static checks, then logic, then geometry, then a visual check, then performance. Nothing ships if a gate fails. Turns out “the agent checked its own work” only means something when checking has teeth.</p>
<p><strong>Drift detection.</strong> Something that watches for upstream changes to shared skills and asks me, per item, whether to take the update. With the reason recorded either way.</p>
<p>Honest bit: meta skills are also where most of my mediocre ones live. I have built beautiful abstractions for things I ran twice. The rule I try to hold now is that a skill earns a meta layer after it has hurt me three times, not before.</p>
<h2>What I am probably getting wrong</h2>
<p>In no particular order, my current suspicions.</p>
<p>I have too many. Discovery is now its own problem. I have descriptions quietly competing for the same trigger phrases.</p>
<p>I over engineer early. I keep adding structure to things that needed a paragraph.</p>
<p>I barely test. Most of my skills have no test at all. The ones with real gates are the exception rather than the standard (i will go to developers hell for this).</p>
<p>I have no reliable way to notice when a skill silently degrades. It does not break. <em>It just gets a bit worse. Then I find out from a person, which is the wrong sensor.</em></p>
<p>If you have solved that last one properly, I would genuinely like to hear about it.</p>
<h2>Where I would start</h2>
<p>Pick the task you have already done manually five times and resented every time.</p>
<ol>
<li>Do it manually once more, saving every instruction you type.</li>
<li>Write the goal, the sources, the output shape.</li>
<li>Add the failure you already know about. There is always at least one.</li>
<li>Add a required self report.</li>
<li>Add one thing it must never do.</li>
<li>Move the boring deterministic parts into a script.</li>
<li>Write the description last, in your own ugly real words.</li>
</ol>
<p>It will be worse than mine at first and better than any prompt you have ever written, because it is the only version that still exists next month.</p>
<p>Scripts told computers what to do. Prompts told models what we wanted. Skills tell agents how we work.</p>
<p><em>The third one is the one that compounds.</em></p>
<h2>TL;DR</h2>
<p>A prompt is a performance. A script is brittle. A skill is a contract that survives a changing world.</p>
<p><strong>Five things the survivors do:</strong></p>
<ol>
<li>Description written as a router, in the ugly words you actually type, not as documentation.</li>
<li>Failures encoded, not just the happy path. The skill is where you keep the scar tissue.</li>
<li>Determinism pushed into code, judgment left in prose. You want to know which half broke.</li>
<li>A receipt on every run. Legible when wrong beats confidently finished.</li>
<li>An explicit refusal condition, because models smooth over gaps unless you forbid it.</li>
</ol>
<p><strong>Two things almost nobody writes about:</strong></p>
<p>A context window is a desk, not a filing cabinet. Make skills write plan files, carry state between runs, append rather than overwrite and fall back to last known good instead of publishing zeros.</p>
<p>Past about 20 skills, build skills about skills. One that writes new ones with the good habits baked in. One that mines your history for what you keep re-prompting. Orchestrators whose real output is the gap list. Gates with teeth. But earn the meta layer after something has hurt you three times, not before.</p>
<p><strong>And:</strong> I have nearly 100 and only about 30 earn their keep. I am figuring this out in public and I am certainly wrong about some of it.</p>
<h2>Now go and do it. I did most of the work.</h2>
<p>Open whatever you use. Claude, ChatGPT, Copilot, the thing your employer gave you.</p>
<p>Paste this article in. Then paste this underneath it.</p>
<pre><code>You just read an article about what makes an agent skill survive.</code></pre>
<pre><code>Build me one. The task is: &lt;the thing you keep redoing by hand&gt;</code></pre>
<pre><code>Apply every rule from the article.</code></pre>
<pre><code>1. Write the description last, as a router. Use the ugly phrases I would
   really type, not a tidy summary. Ask me what I type if you do not know.
2. Ask me what has already gone wrong with this task. Write those failures
   into the skill with the exact error and the exact fix. Not the happy path.
3. Split it. Anything with one correct answer goes into a script. Anything
   needing judgment stays in prose. Tell me which is which and why.
4. Require a receipt on every run: what matched out of what was expected,
   how fresh the data is and what was unreachable.
5. Add one thing it must refuse to do. Add one thing it must never send
   without showing me the exact text first.
6. Make it write state to a file, so the next run knows what this run decided.
7. Add gates that can actually fail the build. Not "check your work".
   Named checks, each one able to stop delivery on its own.</code></pre>
<pre><code>Then, before you hand it over, tell me what is missing. At least three
specific things. "It looks good" is not an answer, it is a skipped check.</code></pre>
<pre><code>Ask me anything you need. Do not guess.</code></pre>
<p>Answer its questions honestly, especially the one about what has already gone wrong. That is the part that makes the skill yours instead of generic.</p>
<p><em>It will get the first version wrong. Fix it and write the fix back into the skill.</em></p>
<p>That is the whole loop.</p>]]></content:encoded>
  </item>
</channel>
</rss>
