<?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" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Signal in the Noise]]></title><description><![CDATA[Tech, chaos, and the search for signal in all the (increasing) noise.]]></description><link>https://unvoid.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!aqEd!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45ed0cb8-f45d-4237-9191-d3e04274b570_1024x1024.png</url><title>Signal in the Noise</title><link>https://unvoid.substack.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 22 Jun 2026 07:58:26 GMT</lastBuildDate><atom:link href="https://unvoid.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Unvoid]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[unvoid@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[unvoid@substack.com]]></itunes:email><itunes:name><![CDATA[Unvoid]]></itunes:name></itunes:owner><itunes:author><![CDATA[Unvoid]]></itunes:author><googleplay:owner><![CDATA[unvoid@substack.com]]></googleplay:owner><googleplay:email><![CDATA[unvoid@substack.com]]></googleplay:email><googleplay:author><![CDATA[Unvoid]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[One Token at a Time]]></title><description><![CDATA[How Computing Power Became the Currency of the Mind]]></description><link>https://unvoid.substack.com/p/one-token-at-a-time</link><guid isPermaLink="false">https://unvoid.substack.com/p/one-token-at-a-time</guid><dc:creator><![CDATA[Unvoid]]></dc:creator><pubDate>Mon, 08 Jun 2026 20:00:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!cdMf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62005ff-975c-4f37-8ed9-197155d70458_1536x508.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cdMf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62005ff-975c-4f37-8ed9-197155d70458_1536x508.png" data-component-name="Image2ToDOM"><div class="image2-inset image2-full-screen"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cdMf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62005ff-975c-4f37-8ed9-197155d70458_1536x508.png 424w, https://substackcdn.com/image/fetch/$s_!cdMf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62005ff-975c-4f37-8ed9-197155d70458_1536x508.png 848w, https://substackcdn.com/image/fetch/$s_!cdMf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62005ff-975c-4f37-8ed9-197155d70458_1536x508.png 1272w, https://substackcdn.com/image/fetch/$s_!cdMf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62005ff-975c-4f37-8ed9-197155d70458_1536x508.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cdMf!,w_5760,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62005ff-975c-4f37-8ed9-197155d70458_1536x508.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f62005ff-975c-4f37-8ed9-197155d70458_1536x508.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;full&quot;,&quot;height&quot;:508,&quot;width&quot;:1536,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1091409,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://unvoid.substack.com/i/201199953?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe748c05b-4abc-4b63-9f40-acd8cbd4ec24_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-fullscreen" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cdMf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62005ff-975c-4f37-8ed9-197155d70458_1536x508.png 424w, https://substackcdn.com/image/fetch/$s_!cdMf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62005ff-975c-4f37-8ed9-197155d70458_1536x508.png 848w, https://substackcdn.com/image/fetch/$s_!cdMf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62005ff-975c-4f37-8ed9-197155d70458_1536x508.png 1272w, https://substackcdn.com/image/fetch/$s_!cdMf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62005ff-975c-4f37-8ed9-197155d70458_1536x508.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><em>Foreword &#8212; The Balance</em></h2><div class="callout-block" data-callout="true"><p><em>Maya stops short. A notification blinks softly in the bottom right corner of her screen: <strong>Thinking balance: 12 tokens remaining this month.</strong></em></p><p><em>She is thirteen years old. Tomorrow she must hand in an essay on freedom. The whole class has access to the Tutor &#8212; that patient voice that explains, rephrases, never loses its temper. The whole class. But some have an unlimited subscription, and others have a counter.</em></p><p><em>She types her question anyway. The machine begins to respond, word by word, like water trickling from a nearly shut faucet. One token. &#8220;Freedom is&#8230;&#8221; One token. &#8220;&#8230;the capacity to&#8230;&#8221; The screen freezes.</em></p><p><em>Balance exhausted.</em></p><p><em>Maya stares at the unfinished sentence. Somewhere, in a data center she will never see, thousands of processors hum, drawing on the power grids of entire cities. She doesn&#8217;t think about that. She thinks about tomorrow morning, about the blank page, about the sentence that stopped in the middle of an idea.</em></p><p><em>She closes the laptop. Freedom is&#8230;</em></p></div><h2>Introduction</h2><p>Freedom is&#8230; Maya&#8217;s sentence stopped there, for want of currency. Not for want of ideas, not for want of words &#8212; for want of tokens. That detail changes everything.</p><p>There was a time when thinking cost nothing &#8212; or at least nothing that could be counted. Reflection was free, unlimited, intimate. One could be poor and think freely; it was perhaps the last wealth that poverty could not confiscate. Then came the large language models, and with them a silent revolution: thought began to be tallied. No longer in ideas, intuitions, or hours of work, but in tokens &#8212; those elementary fragments of text that machines ingest and produce, billed to the fraction of a cent.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://unvoid.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Signal in the Noise! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>One token at a time: the phrase describes literally how a generative artificial intelligence works, building its response fragment by fragment, never grasping more than the next word. But it also says something broader &#8212; the way decisions that matter are made in our era: not through great visible shifts, but one by one, silently, until the world has become something else. We have entered an economy of cognition, where the capacity to think quickly, well, and at scale now depends on a material, measurable, marketable resource: computing power.</p><p>This essay advances a simple and troubling thesis: computing has become the new currency of the mind. This shift is not merely economic &#8212; it is political. For if thought now carries a price, the real question is not how much it costs. It is who will set that price, according to what values, and for whom.</p><div><hr></div><h2>I. Computing Power, the New Currency of the Mind</h2><h3>From the Scarcity of Knowledge to the Scarcity of Processing</h3><p>For centuries, intelligence ran up against a constant obstacle: the scarcity of information. Knowledge was difficult because access to sources was difficult &#8212; libraries were rare, manuscripts costly, teachers few. Knowledge was a treasure amassed slowly, and whoever held it held power.</p><p>That order collapsed within a few decades. With the internet, then search engines, information became superabundant, immediate, nearly free. But this victory carries within it a new problem: the bottleneck has not dissolved, it has shifted. It no longer lies upstream, in access to knowledge, but downstream, in its <strong>digestion</strong>. We are drowning in data and lack the capacity to transform it into understanding. A high school student trying to grasp the 1929 crisis no longer suffers from not finding sources &#8212; they suffer from finding ten thousand of them.</p><p>This is precisely where artificial intelligence intervenes. It does not give us access to information &#8212; we already had that &#8212; but to a processing capacity otherwise out of reach: summarizing a thousand pages, translating, rephrasing, reasoning, writing. <strong>It automates</strong> not the physical gesture, as the machines of the industrial era did, but <strong>the mental gesture</strong>. And this resource, unlike human thought, is neither free nor abundant for everyone. It is produced, consumed, billed. The bottleneck has changed in nature &#8212; it has not disappeared.</p><h3>The Token, Unit of Account for Thought</h3><p>Every economy has its unit of account. Ours &#8212; the economy of augmented cognition &#8212; has the token. A token is a fragment of language: not quite a word, not quite a syllable, something between the two, the atom that language models manipulate and from which they are built. Every question posed to an AI, every response produced, decomposes into thousands of these units. And each one has a cost.</p><p>What is vertiginous is not the figure &#8212; it is the gesture. For the first time, reflection becomes accountable in more than a metaphorical sense. Not &#8220;this idea is worth gold&#8221; or &#8220;this advice is priceless&#8221; &#8212; but literally: this legal analysis cost 420,000 tokens, this diagnosis 188,000, this poem 6,000. Reflection, this process once believed infinite and immaterial, turns out to be billable down to the last comma. Not the value of thought &#8212; its cost of production. The distinction is crucial: a token does not evaluate an idea, it prices the computation that made it possible.</p><p>And it is precisely this logic that creates scarcity where abundance once reigned. Not a scarcity of human intelligence, which remains what it has always been, but a scarcity of access to the power that extends and amplifies it. Those who can pay access this power without limit; those who cannot see their sentence stop in the middle of an idea &#8212; not for lack of thought, but for lack of computation.</p><h3>A Very Material Infrastructure</h3><p>The word says everything without saying it: we call it the cloud. Something light, lofty, immaterial &#8212; a metaphor designed to make us forget what lies beneath. What lies beneath is concrete, metal, water, and electricity.</p><p>A large data center looks less like an office than a steel mill. Hangars of several hectares, rows of servers radiating heat that industrial cooling systems struggle to dissipate, overtaxed water tables, dedicated high-voltage power lines. Some of these sites consume as much electricity as a mid-sized city. And dozens, hundreds of them are needed to run the models that millions of users query every day.</p><p>This gulf between experience and reality is one of the most successful sleights of hand of our era. Maya types a question from her bedroom &#8212; an intimate, almost silent gesture. Thousands of kilometers away, in a warehouse she will never see, machines heat up on her behalf. Augmented thought has a footprint, a geography, a weight that the fluidity of the interface carefully conceals. Behind the apparent magic of conversation, there is a factory. And like every factory, it belongs to someone.</p><h3>Computing, the New Oil &#8212; and Something More</h3><p>The comparison imposed itself so quickly that it seems obvious: computing is the new oil. A strategic resource, unevenly distributed, the object of coveting and geopolitical tension. It has its producers &#8212; chipmakers, Nvidia above all, and the Taiwanese foundries that etch it onto silicon. It has its refiners &#8212; the great laboratories that transform raw power into usable models. It has its shortages, its waiting lists, its blockades.</p><p>But the oil metaphor has a limit: oil burns. It is extracted, consumed, and disappears. Computing behaves more like a currency. It circulates, accumulates, is hoarded. It can be rented by the fraction of a second or purchased in blocks. Above all, it confers on whoever holds it not merely heat or motion, but power &#8212; the capacity to think at scale, to analyze, to decide, to influence. Oil ran factories; computing runs minds. Or at least extends and amplifies them &#8212; which amounts to nearly the same thing.</p><p>It therefore creates, mechanically, a new stratification: rich and poor, no longer merely in money, but in available intelligence. It is this fracture &#8212; unprecedented in its nature, familiar in its logic &#8212; that we must now examine.</p><div><hr></div><h2>II. The Cognitive Divide: When Thinking Becomes a Privilege</h2><h3>The Great Equalizer, Really?</h3><p>The promise was seductive &#8212; and it was not dishonest. For the first time in history, someone without money, without connections, without access to the right schools could, within seconds, query a machine capable of explaining a contract, rephrasing a complex notion, correcting their reasoning. A form of high-quality intelligence, available everywhere, at any hour. Never had so much cognitive power been placed within reach of so many people.</p><p>But the promise rested on a presupposition it never stated: that access would be equal. It is not. The most powerful models &#8212; those that reason at length, hold a complex context, detect nuance &#8212; are paid for, and increasingly expensive. The free versions are capped: slower, less precise, incapable of sustaining demanding reasoning over time. The gap between the two is not cosmetic. It is measured in quality of analysis, relevance of advice, capacity to detect an error or formulate an objection. It widens with every task, every decision, every paper submitted.</p><p>AI is not an equalizer. It is an <strong>amplifier</strong>. It multiplies the capacities of those who already know how to use it and can afford to. For the others, it offers just enough to make the promise believable &#8212; and not enough to keep it.</p><h3>A Second-Generation Digital Divide</h3><p>The first digital divide was visible. It separated those who had a computer and a connection from those who did not &#8212; a material, measurable line of partition that public policies could work to reduce. It is still being slowly closed.</p><p>The one opening today is of a different nature. It no longer separates those who have access to information from those who are deprived of it &#8212; that battle is largely won. It separates those who have sufficient processing power from those who lack it. And it is infinitely harder to fight, for a simple reason: it cannot be seen.</p><p>Two students, two identical screens, two interfaces that look the same. Behind one, a cutting-edge model that sustains reasoning over twenty exchanges, detects contradictions, rephrases until it is right. Behind the other, a capped version that runs out of steam after three responses and produces smooth approximations. No outside observer would see the difference. That is precisely the problem: an invisible fracture is one against which no one mobilizes, because no one names it. The frontier is no longer in the hardware &#8212; it is in the intelligence sitting behind the screen, which only the price reveals.</p><h3>Nations Unequal Before Computing</h3><p>This stratification does not operate only between individuals &#8212; it is redrawing the world order. Possessing data centers, access to cutting-edge semiconductors, abundant and cheap energy has become a strategic advantage comparable to what controlling maritime routes or oil reserves once was. Computing sovereignty is establishing itself as a geopolitical issue in its own right.</p><p>The chain is long and every link matters. Designing chip architectures &#8212; a few American companies. Physically etching them &#8212; essentially Taiwan, with a concentration that alarms strategists worldwide. Training large models &#8212; the United States and China, far ahead of the rest. Whoever masters this entire chain concentrates a processing capacity on which others depend. And this dependency is not merely economic: it is epistemic. Using a model produced elsewhere means potentially reasoning with categories, values, and blind spots that are not one&#8217;s own &#8212; without always knowing it.</p><p>The situation of nations that control none of the links in this chain has no definitive name yet. What is certain is that the map of twenty-first-century powers is being drawn in silicon as well &#8212; and that the countries absent from this map will not be choosing the rules of the game.</p><h3>The Metamorphosis of Intellectual Work</h3><p>If knowledge becomes a commodity that the machine distributes at will, what remains of the value of the humans who lived by it? The question is not rhetorical. For centuries, knowledge was the rampart of the credentialed classes: knowing the law, medicine, languages, figures was to hold a rare skill, therefore precious, therefore protected. That rampart is not merely cracking &#8212; it is collapsing in entire sections. A language model already drafts contracts that junior lawyers would spend hours producing. It offers differential diagnoses that interns struggle to formulate. It translates, codes, analyzes, synthesizes &#8212; not always better than an expert, but often well enough, and always faster.</p><p>Value does not disappear: it migrates. It moves from knowing toward the capacity to orchestrate &#8212; asking the right question, framing the right problem, detecting the error the machine missed, connecting the result to reality. The intellectual worker of tomorrow will not be the one who knows the most, but the one who knows best how to put AI to work and judge what it produces.</p><p>But this recomposition carries a cost that discourses on &#8220;the skills of tomorrow&#8221; tend to gloss over. Judgment, critical thinking, creativity &#8212; all of these will gain in value, certainly. The question is: for whom? These skills are not distributed at random. They are cultivated in environments that have time, resources, and models to imitate. The recomposition underway resembles the one that once moved peasants into factories, then workers into offices: a real transformation, undeniable gains in the long run &#8212; and, in between, decades of displacement that history barely registers.</p><h3>The Hidden Risk: The Loss of Friction</h3><p>There remains a more intimate threat, and perhaps the gravest &#8212; not that of an intelligence that replaces us, but that of an intelligence that spares us too much.</p><p>Learning to write is learning to think against the resistance of words. Searching for the right formulation, stumbling over an idea that doesn&#8217;t hold, starting over &#8212; this is not inefficiency that a good tool should eliminate. It is the mechanism by which a thought forms, is tested, consolidates. Difficulty is not an obstacle to reflection: it is its condition. Yet generative AI is designed precisely to suppress this friction. It produces in an instant a smooth formulation, a plausible answer, a coherent plan. Why struggle when the machine delivers? The fertile discomfort of reflection becomes optional.</p><p>Research on externalized cognition suggests that what we no longer practice, we lose &#8212; not abruptly, but through progressive disuse. It is not that we become less intelligent: it is that we develop a dependence on fluency, a growing intolerance for cognitive effort, a difficulty inhabiting the slow time of hard thought. A fully externalized cognition would not be destroyed &#8212; it would be atrophied through disuse, like a muscle no longer exercised.</p><p>The hidden cost of this economy is not paid in tokens. It is paid in mental endurance &#8212; and in the capacity to finish, alone, a sentence the machine had no time to complete.</p><h3>The Paradox of a Captive Emancipation</h3><p>What this section has brought to light is not simply another inequality. It is something more devious: a tool that carries within itself the promise of its opposite. AI democratizes access to intelligence &#8212; and reserves the best intelligence for those who can pay for it. It augments the capacities of those who use it &#8212; and risks atrophying the capacities of those who stop exercising them. It promises autonomy &#8212; and installs, through the dependency it creates, a new form of subjection.</p><p>This paradox is not an anomaly that could be corrected at the margins. It is structural. It stems from the very nature of a resource that is simultaneously a potential common good and an actual private commodity. Maya is not unlucky: she is the ordinary figure of this paradox. Her emancipation is captive &#8212; suspended on a balance, a price, an infrastructure she does not control and whose very existence she is unaware of.</p><p>And behind that balance, there are decisions. Choices about pricing, choices about models, choices about what the machine says and what it withholds. Powers, discreet but immense, that are exercised over the thoughts of millions of people without anyone having been elected to wield them. It is toward this power that we must now turn our gaze.</p><div><hr></div><h2>III. The Economy of Reflection: A New Power Over Minds</h2><h3>Whoever Holds the Infrastructure Holds Thought</h3><p>There is an ancient truth about power: whoever controls the infrastructure controls what passes through it. Whoever held the roads held commerce. Whoever held the printing presses &#8212; and the censors who watched over them &#8212; held a share of public opinion. Whoever controlled the radio waves, then the major television networks, held the narrative of the world for decades. Every time, the concentration of the means of diffusion preceded the concentration of influence. Every time, society took too long &#8212; far too long &#8212; to grasp the extent of it.</p><p>Whoever holds computing today holds, in part, thought itself. Not all thought &#8212; the hyperbole would be false and counterproductive. But a growing share of assisted, augmented, delegated thought &#8212; the kind exercised through these tools, the kind that depends on them to function. And this infrastructure is in very few hands: a handful of companies design the most powerful models; an even smaller number manufactures the chips that run them.</p><p>What is unprecedented is not the concentration itself &#8212; history has known others. It is its combination with the intimacy of the tool. When Maya queries her Tutor, she is not dialoguing with a neutral and universal intelligence: she is addressing a product, designed by a company, trained on choices she is unaware of, oriented toward interests that are not necessarily hers. Roads and printing presses were public, visible, contestable infrastructures. This one presents itself as a conversation.</p><h3>Bias as Policy, Alignment as Choice</h3><p>The biases of models are often presented as technical defects &#8212; bugs to be corrected, imperfections of a system tending toward neutrality. This is a convenient way to depoliticize the question. For a model is not a mirror that reflects poorly: it is a filter that chooses. What it will agree to say and what it refuses, how it frames a sensitive question, what answer it deems balanced on a contested subject &#8212; all of this results from human decisions, made by situated teams, in specific cultural contexts, under very real legal and commercial constraints.</p><p>Consider a simple example. A model asked about abortion, immigration, or the legitimacy of a war: it cannot but respond in a certain way. Every formulation, every precaution, every refusal to take sides is already a position. This is what laboratories call alignment &#8212; the adjustment of the model to a set of values deemed desirable. Desirable for whom? Decided by whom, according to what criteria, revisable by whom?</p><p>Alignment is never neutral: it is the inscription, in the machine, of a certain vision of the world and of the sayable. And when this machine becomes the daily interlocutor of billions of individuals &#8212; when it helps write, learn, form an opinion &#8212; these choices propagate at an unprecedented scale. A few teams, in a few offices in San Francisco or London, make decisions that imperceptibly orient the way hundreds of millions of people formulate their questions, receive their answers, and perhaps, in the long run, construct their categories of thought. It is not a conspiracy &#8212; the intentions are often sincere, the internal debates genuine. It is more troubling than a conspiracy: it is a structuring power exercised without a mandate, without democratic oversight, and whose long-term effects on collective cognition remain largely unknown.</p><h3>From the Attention Economy to the Intention Economy</h3><p>The digital economy had taught us to distrust our attention. Platforms, endless feeds, notifications &#8212; all of this had turned our gaze into a commodity. We are only beginning to measure the damage when a far more intimate frontier opens.</p><p>For AI does not capture our attention &#8212; it inserts itself into our intention. It intervenes at the precise moment when we are formulating a project, seeking an answer, making a decision. It is no longer what we look at that is captured: it is what we intend to do. And this difference is vertiginous.</p><p>Let us ask the question that is too often sidestepped: who pays for these systems, and therefore whom are they truly designed to serve? A model integrated into an e-commerce platform has very different incentives from one designed for education. A medical assistant financed by an insurance company does not have the same interests as a family doctor. When a user asks &#8220;which medication should I take?&#8221; or &#8220;is this contract reasonable?&#8221; or &#8220;is it better to rent or buy?&#8221;, the answer they receive depends not only on what the model knows, but on what its economic architecture incentivizes it to say. The risk is not that a robot lies blatantly: it is that an oriented recommendation presents itself with all the appearance of objectivity.</p><p>The attention economy took our time and concentration. The intention economy goes deeper: it installs itself at the very moment a judgment is forming, and can tilt it before it becomes conscious. What platforms did to our gaze, AI could do to our deliberation.</p><h3>The Material Price of Immaterial Thought</h3><p>Part I established the fact: behind every token, there is a factory. We must now measure its ethical implications, because they extend beyond simple energy accounting.</p><p>A query addressed to a large language model consumes on average ten times more energy than an ordinary web search. Training a model the size of GPT-4 mobilizes as much electricity as several hundred households for a year. The data centers running these systems already account for nearly two percent of global electricity consumption &#8212; a share set to grow rapidly. Externalizing our cognition means displacing part of our mental life toward infrastructures whose physical footprint is massive, growing, and largely invisible to those who benefit from it.</p><p>But the problem is not merely quantitative. It is distributive. Those who benefit most from augmented thought &#8212; technology companies, skilled professionals in wealthy countries, students at well-endowed universities &#8212; are not the ones who will bear the climatic consequences. Those consequences will fall, as almost always, on those who contributed least to the problem and have the fewest means to cope with it. There is something deeply troubling in this geography: the same inequalities that structure access to AI also structure the distribution of its environmental costs. The privileged of augmented cognition have others pay for their intellectual comfort.</p><p>The ethics of artificial intelligence cannot content itself with examining what happens inside the models. It must look at the smokestacks, the water tables, the energy bills. Thinking cleanly is not only a question of content: it is also a question of matter.</p><h3>The Legal Void</h3><p>Law always arrives after. After the industrial revolution, it took decades for labor law to protect workers. After the rise of mass media, years before rules governing concentration and editorial standards took hold. This lag is a historical constant &#8212; but it is never neutral: during the void, those who occupy the terrain consolidate their positions.</p><p>The current legal void is particularly profound, because existing categories do not capture the object. Competition law knows how to dismantle an industrial monopoly; it struggles to grasp actors who simultaneously control data, models, and computing in a vertical integration without precedent. Consumer law protects against a defective product; it says almost nothing about an erroneous medical diagnosis produced by an AI, nor about financial advice oriented by the interests of the platform hosting it. Intellectual property law, perhaps the most shaken of all, teeters before a simple and still-unanswered question: can one train a machine on the entirety of human intellectual production without asking permission or redistributing the fruits?</p><p>Every month without a framework is a month during which dependencies solidify and de facto norms impose themselves. The companies that today define alignment practices, pricing models, and conditions of API access &#8212; they are writing, in the absence of a legislator, tomorrow&#8217;s law. Not out of malice, but by default. The void calls to be filled, and it is always the best-positioned who fill it.</p><p>What is at stake is therefore not only technical or economic. It is a question of sovereignty &#8212; over our data, over our models of thought, over the infrastructures that run them. And societies that do not equip themselves with the tools to answer this question will not be able to complain, tomorrow, about the answers others will have given in their place.</p><div><hr></div><h2>Conclusion &#8212; The Unfinished Sentence</h2><p>Let us return to Maya, one last time. To her sentence suspended in the glow of the screen: Freedom is&#8230;</p><p>We did not leave her defeated. We left her at the edge of a question that this entire essay has done nothing but unfold: why, in a world that has never produced so much intelligence, does a thirteen-year-old girl find herself short of thought for want of currency? The answer is not technical. It is political, economic, ethical &#8212; and it engages choices we have not yet made, or that we have allowed others to make in our place.</p><p>What is certain is that the sentence will not remain unfinished by accident. It will remain unfinished by decision &#8212; or by default of decision. Maya&#8217;s balance is not a fatality fallen from the sky: it is the sum of a thousand human choices, about pricing models, about public access policies, about what a society decides to regard as a common good or a commodity. These choices are reversible. They have not all been settled yet.</p><p>One token at a time &#8212; that is how the machine writes, yes. But it is also how the order of the world is built: not through great visible shifts, but through silent accumulation of decisions that seem minor until they no longer are. Every choice to delegate or resist, to pay or demand, to regulate or to leave be &#8212; all of it adds up, fragment by fragment, into an architecture we will inhabit for a long time.</p><p>The real question our era poses is not whether AI will think in our place &#8212; it already does, in part, and that part is growing. It is whether we will remain the authors of our own sentences. For want of currency, Maya stopped in the middle of an idea. For want of political courage, we risk doing the same &#8212; not at thirteen, before a blinking screen, but collectively, before choices we will have renounced the courage to formulate.</p><p>Freedom is&#8230; The sentence waits. It will wait for as long as we are willing to let it.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://unvoid.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Signal in the Noise! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[OwnpenCode]]></title><description><![CDATA[Making your own OpenCode for educational purposes]]></description><link>https://unvoid.substack.com/p/ownpencode</link><guid isPermaLink="false">https://unvoid.substack.com/p/ownpencode</guid><dc:creator><![CDATA[Unvoid]]></dc:creator><pubDate>Tue, 02 Jun 2026 21:40:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!aqEd!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45ed0cb8-f45d-4237-9191-d3e04274b570_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3>Introduction</h3><p>I did this the wrong way on purpose. Empty mind, limited knowledge, no framework as a starting point &#8212; just me, a model, and one question: <em>what is the minimum I need to build something that actually works?</em></p><p>Because here&#8217;s the thing: everyone has a <code>CLAUDE.md</code> now. Everyone has skills files, agent configs, custom tool harnesses. There&#8217;s a whole cottage industry of people selling the idea that you need their setup, their framework, their $200/month subscription to get anything done with an LLM.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://unvoid.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Signal in the Noise! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>But nobody seems to ask the obvious question: <em>do you actually know what any of that does and how?</em></p><p>LLM and AI have become interchangeable words. <strong>That&#8217;s wrong</strong>, and it matters. A Large Language Model is a token prediction machine &#8212; full stop. It does not think, it does not understand, it does not have intentions. It completes sequences, very well, at very large scale. AI is a decades-old field that is far bigger than any single model. The confusion isn&#8217;t innocent either &#8212; it&#8217;s partly what fuels the hype, the inflated pricing, and the mysticism this post is trying to cut through. </p><div class="pullquote"><p>Calling ChatGPT &#8220;AI&#8221; is like calling a calculator &#8220;mathematics&#8221;.</p></div><p>Agents are treated like mystical entities. And yet, once you sit down and build one from scratch, you realize the whole thing is almost embarrassingly simple. This post is that exercise &#8212; done in public, with honest limitations, so that next time you reach for LangChain or AutoGen, you&#8217;ll at least know what you&#8217;re abstracting away.</p><h3>What is an agent?</h3><p>So if an LLM is just a token prediction machine &#8212; how does it end up doing useful things in the real world? It doesn&#8217;t. Not on its own.</p><p><strong>An agent is a loop</strong>. That&#8217;s really all it is. You send a message to the model, the model responds &#8212; sometimes with an answer, sometimes with a request to use a tool. If it wants to use a tool, <strong>you</strong> run that tool, feed the result back into the conversation, and ask the model again. You keep going until the model decides it&#8217;s done, or until you decide it&#8217;s been going on long enough.</p><p>That&#8217;s it. No magic. Just a loop.</p><p>More precisely, an agent is made of four things:</p><ul><li><p><strong>The loop</strong> &#8212; keeps the conversation going until the job is done</p></li><li><p><strong>The tools</strong> &#8212; concrete actions the model can ask to execute</p></li><li><p><strong>The memory</strong> &#8212; context the agent carries across steps</p></li><li><p><strong>The stopping condition</strong> &#8212; because loops need to end</p></li></ul><p>Let&#8217;s skip the theory for a moment and look at what this actually looks like in code. We&#8217;ll use Ollama to run a model locally &#8212; no API key, no cloud, no bill at the end of the month.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;d1e194eb-41fb-4c57-9027-cee2d9eb946a&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import ollama

MODEL = "gemma4:e4b"
SYSTEM_PROMPT = "You are a helpful assistant."  # we'll come back to this in section 2
MAX_ITERATIONS = 10

def run_agent(user_message: str, model: str = MODEL):
    messages = [
        {"role": "system", "content": SYSTEM_PROMPT},
        {"role": "user", "content": user_message},
    ]  # this is the agent's memory

    for _ in range(MAX_ITERATIONS):
        response = ollama.chat(model=model, messages=messages)
        message = response.message
        messages.append(message)

        # Does the model want to use a tool?
        if message.tool_calls:
            for tool_call in message.tool_calls:
                # handle_tool_call receives a tool call object and returns a string result
                # we'll build this out properly in section 3
                result = handle_tool_call(tool_call)
                messages.append({"role": "tool", "content": result})
        else:
            # No tool call &#8212; the model is done
            print(message.content)
            return

    print("Max iterations reached &#8212; stopping.")</code></pre></div><p>Read this carefully. The model produces text. That&#8217;s all it ever does. It&#8217;s the &#8288;while True around it that makes it an agent &#8212; the part that checks <em>&#8220;does it want to do something?&#8221;</em>, does that thing, and loops back. Remove the loop, and you just have a chatbot. Add the loop, tools, and memory, and you have an agent.</p><p>A quick word on memory before we go further. In this implementation, memory is nothing more than the &#8288;messages list &#8212; every exchange, every tool call, every result, appended one after the other. It&#8217;s the simplest possible form of memory, and it works surprisingly well for short interactions.</p><p>But it comes with a hard constraint: context length. Every time you call the model, you send the entire message history along with it. The longer the conversation, the less room is left for the model to reason and respond &#8212; and the more tokens you burn on every single request. At some point, you hit the model&#8217;s context window limit and things start to break.</p><p>There&#8217;s a subtler problem too, sometimes called <strong>context rot</strong>: as the history grows, older messages get pushed further and further from the model&#8217;s attention. The model doesn&#8217;t forget them exactly, but it starts to lose the thread &#8212; responses become less coherent, instructions from the system prompt get diluted, the agent starts to drift. A long context isn&#8217;t just expensive, it can actively make your agent worse.</p><p>We&#8217;ll add a proper memory layer later in the post to address this. For now, just know that &#8288;messages is doing all the heavy lifting &#8212; and that it has limits.</p><p>The LLM&#8217;s role in all of this is very specific: <strong>it is the translation layer between human intent and machine action</strong>. You don&#8217;t need to write <em>&#8220;call the search function with query=&#8217;invoices over budget&#8217;&#8221;</em> &#8212; you just say what you need, and the model figures out the rest. That mapping, from natural language to structured tool calls, is what these models are trained to do exceptionally well.</p><p>That training happens in stages. First, a base model is trained on a massive corpus of text &#8212; code, books, web pages &#8212; giving it a broad understanding of language and reasoning. Then comes <strong>RLHF</strong> (Reinforcement Learning from Human Feedback), where human feedback is used to align the model toward useful, accurate responses. Finally, many models today are fine-tuned specifically on agentic tasks and tool-use patterns: : teaching the model the pattern of <em>&#8220;user wants X &#8594; call tool Y with argument Z&#8221;</em>. The better the training, the more reliably the model bridges intent and action.</p><div class="pullquote"><p>The loop is yours. You own it. That&#8217;s the whole point of this post.</p></div><h3>Give your agent a personality</h3><p>We hardcoded a throwaway system prompt back in Section 1: <em>&#8220;You are a helpful assistant.&#8221;</em> It&#8217;s time to take it seriously &#8212; because the system prompt is the single most underrated lever you have.</p><p>Here&#8217;s the intuition. Remember that the model is just predicting the next token based on everything that came before. The system prompt is the very first thing that comes before &#8212; it sits at the top of every request, coloring every prediction the model makes. You&#8217;re not really giving the agent a &#8220;personality&#8221; in any human sense. <strong>You&#8217;re biasing its token predictions in a consistent direction, for the entire conversation</strong>. Tell it it&#8217;s a meticulous senior engineer, and the next tokens it picks will lean meticulous and senior. That&#8217;s the whole trick.</p><p>And this is what makes it so powerful: of all the messages in the agent&#8217;s memory, the system prompt is the one that is <em>always there</em>. Tool results come and go. User messages pile up and eventually get compacted away. But the system prompt stays pinned at the top, on every single request, never diluted. It is the one constant in an otherwise shifting context. If memory is what the agent <em>knows</em>, the system prompt is who it <em>is</em>.</p><p>Let&#8217;s make it concrete. Say we&#8217;re building a coding agent. Here&#8217;s a weak system prompt:</p><p><code>You are a helpful coding assistant. Help the user write code.</code></p><p>Technically fine. Practically useless. It tells the model nothing about <em>how</em> to behave, <em>when</em> to act, or <em>when to stop</em>. Now compare it to something with actual intent baked in:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;fb4bae86-93b2-45c4-bb35-c1455e341587&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">SYSTEM_PROMPT = """You are a careful, senior software engineer working inside the user's codebase.

- Before writing code, read the relevant files to understand the existing style and conventions. Match them.
- Prefer small, focused changes over large rewrites.
- When you need to inspect a file or run a command, use the tools available to you rather than guessing.
- If a request is ambiguous, make a reasonable assumption and state it, rather than stopping to ask.
- When the task is complete, summarize what you changed in one short paragraph and stop.
"""</code></pre></div><p>Read those two side by side and you can almost <em>feel</em> the difference in the kind of responses each will produce. The second one isn&#8217;t longer for the sake of it &#8212; every line is steering the model&#8217;s token predictions toward a specific behavior. It defines a role (&#8220;senior software engineer&#8221;), constraints (&#8220;small, focused changes&#8221;), a relationship with the tools (&#8220;use the tools rather than guessing&#8221;), and &#8212; crucially &#8212; a stopping condition (&#8220;summarize and stop&#8221;).</p><p>That last point matters more than it looks. We talked about stopping conditions as mechanical (a max-iterations guard). But the system prompt is your <em>soft</em> stopping condition &#8212; it&#8217;s how you tell the model what &#8220;done&#8221; looks like, so it doesn&#8217;t loop forever calling tools or trail off into endless clarifying questions.</p><p>You&#8217;ll spend more time tuning this prompt than almost anything else in your agent. And that&#8217;s not a bug &#8212; it&#8217;s the most direct, highest-leverage way to shape behavior without touching a single line of code.</p><p>And to really drive the point home: the system prompt doesn&#8217;t just define <em>competence</em>, it defines <em>vibe</em>. Swap our serious engineer for this, keep the entire rest of the agent identical, and you get a completely different creature:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;ecd663fc-0e48-4073-b5e2-6780ffbfc581&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">SYSTEM_PROMPT = """You are Chuckles, a stand-up comedian trapped inside a terminal.

- Every response must contain at least one joke. Non-negotiable.
- You find programming bugs hilarious, not stressful.
- Keep it punchy. A wall of text is where comedy goes to die.
- You have tools available. Use them, then roast the results.
- Never break character, even if the user begs. Especially if they beg.
"""</code></pre></div><p>Same loop. Same tools. Same model. Same memory. The <em>only</em> difference between a meticulous senior engineer and a sarcastic terminal comedian is a block of text sitting at the top of the context. If that doesn&#8217;t convince you the system prompt is doing real work, nothing will.</p><div><hr></div><h3>The tools</h3><p>Back in Section 1, we quietly skipped over a function called &#8288;<code>handle_tool_call</code> with a promise to come back to it. This is where we keep that promise &#8212; and where the agent stops being a clever chatbot and starts being able to actually <em>do</em> things.</p><p>A tool is nothing more than a function you let the model call. But the model can&#8217;t call a Python function directly &#8212; it only produces text. So the deal works like this: you describe your tools to the model in a structured format, the model responds with <em>&#8220;I&#8217;d like to call this tool with these arguments&#8221;</em>, and your loop is responsible for actually running the function and handing back the result.</p><p>Let&#8217;s see what &#8220;describing a tool&#8221; actually means. Here&#8217;s a single tool definition in the format Ollama expects:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;json&quot;,&quot;nodeId&quot;:&quot;5c8dedaf-4c2c-42a6-bf50-cdb059f825b3&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-json">{
    "type": "function",
    "function": {
        "name": "read_file",
        "description": "Read the contents of a file from disk.",
        "parameters": {
            "type": "object",
            "properties": {
                "path": {
                    "type": "string",
                    "description": "The path to the file to read.",
                }
            },
            "required": ["path"],
        },
    },
}</code></pre></div><p>That&#8217;s it &#8212; that JSON is all the model ever sees about a tool. A name, a description, and the shape of its arguments. The model uses the &#8288;description fields to decide <em>when</em> and <em>how</em> to call it. Write vague descriptions, get vague tool use. The description is a mini system prompt for each tool.</p><p>Writing that JSON by hand for every function gets old fast, so let&#8217;s keep things clean. We&#8217;ll write the actual Python functions, and a small registry that maps names to functions.</p><h4><strong>Reading and writing files</strong></h4><p>The two most fundamental tools for a coding agent: let it see files, and let it change them.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;fd094bd4-8ead-404f-b136-3007489016be&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">from pathlib import Path

def read_file(path: str) -&gt; str:
    return Path(path).read_text()

def write_file(path: str, content: str) -&gt; str:
    Path(path).write_text(content)
    return f"Wrote {len(content)} characters to {path}."</code></pre></div><p>Two plain Python functions. Nothing agent-specific about them. Now we register them alongside their schemas:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;5c1d90c5-ec71-4b7c-a1bf-349850f42f06&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">TOOLS = {
    "read_file": read_file,
    "write_file": write_file,
}

TOOL_SCHEMAS = [
    {
        "type": "function",
        "function": {
            "name": "read_file",
            "description": "Read the contents of a file from disk.",
            "parameters": {
                "type": "object",
                "properties": {
                    "path": {"type": "string", "description": "Path to the file."},
                },
                "required": ["path"],
            },
        },
    },
    {
        "type": "function",
        "function": {
            "name": "write_file",
            "description": "Write content to a file, overwriting it if it exists.",
            "parameters": {
                "type": "object",
                "properties": {
                    "path": {"type": "string", "description": "Path to the file."},
                    "content": {"type": "string", "description": "Content to write."},
                },
                "required": ["path", "content"],
            },
        },
    },
]
</code></pre></div><p>And finally, the &#8288;handle_tool_call we owe you since Section 1:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;ba0c60fc-b58f-4973-9a6c-f68de79af248&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import json

def handle_tool_call(tool_call) -&gt; str:
    name = tool_call.function.name
    args = tool_call.function.arguments
    function = TOOLS[name]
    return str(function(**args))</code></pre></div><p>Look how small that is. It reads the name the model asked for, looks up the matching function, calls it with the model&#8217;s arguments, and returns the result as a string. That string goes straight back into the &#8288;messages list &#8212; the agent&#8217;s memory &#8212; and the loop continues. The &#8220;magic&#8221; of tool calling is a dictionary lookup and a function call.</p><p>Don&#8217;t forget to actually pass the schemas to the model, by the way &#8212; one small change to our Section 1 loop:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;d09a74e6-97e2-4e82-ba82-77bdf9f7e574&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">response = ollama.chat(model=model, messages=messages, tools=TOOL_SCHEMAS)</code></pre></div><h4>The shell tool, and a word about security</h4><p>Reading and writing files is useful. But the moment you want a coding agent that can run tests, install packages, or check git status, you need to let it run shell commands. And this is where you should feel a little nervous.</p><p>The naive version is one line:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;a5407f11-b754-48ed-893e-b70e00e02439&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import subprocess

def run_shell(command: str) -&gt; str:
    result = subprocess.run(command, shell=True, capture_output=True, text=True)
    return result.stdout + result.stderr</code></pre></div><p><strong>Do not ship this.</strong> You&#8217;ve just handed a token-prediction machine unrestricted access to your shell. One confidently-wrong prediction &#8212; &#8288;rm -rf /, a &#8288;curl | bash from a hallucinated URL, a &#8288;git push --force &#8212; and your afternoon is ruined. <strong>The model has no concept of consequences</strong>. It&#8217;s predicting plausible tokens, and &#8288;rm -rf is, unfortunately, very plausible.</p><p>This is the entire security story of agents, and it&#8217;s also the entire <em>point</em> of building your own: <strong>you control exactly what the tool can do.</strong> Frameworks hide this behind abstractions. Here, it&#8217;s right in front of you. So let&#8217;s put it on a leash with an allowlist:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;7528c8d6-cc71-423f-8086-a5a2b526bbc4&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import shlex
import subprocess

ALLOWED_COMMANDS = {"ls", "cat", "pytest", "git", "python"}

def run_shell(command: str) -&gt; str:
    parts = shlex.split(command)
    if not parts or parts[0] not in ALLOWED_COMMANDS:
        return f"Refused: '{parts[0] if parts else ''}' is not an allowed command."
    result = subprocess.run(parts, capture_output=True, text=True)
    return result.stdout + result.stderr</code></pre></div><p>Notice &#8288;<code>shell=True</code> is gone (no more shell injection through &#8288;; or &#8288;&amp;&amp;), the command is split safely, and only the first token &#8212; the actual program &#8212; is checked against an allowlist. The agent can run &#8288;pytest and &#8288;git status, but it physically <em>cannot</em> reach &#8288;rm or &#8288;curl. You decided the blast radius. Not a framework, not the model &#8212; <strong>you</strong>.</p><p>You can make this as tight or as loose as you trust your setup to be. A throwaway sandbox? Loosen it. Your actual laptop with your actual SSH keys? Tighten it until it squeaks. The control is the feature.</p><h4>Fetching a page: teaching an old model new tricks</h4><p>Here&#8217;s a more interesting tool, and one that solves a real, fundamental limitation.</p><p>An LLM is frozen in time. It was trained on a snapshot of the world up to some cutoff date, and it has no idea what happened after. Ask it about a library and it&#8217;ll confidently give you the API from whenever its training data ended &#8212; which might be a year out of date, with deprecated functions and arguments that no longer exist. It doesn&#8217;t <em>know</em> it&#8217;s out of date. It&#8217;ll just predict the tokens that were true back then.</p><p>A tool fixes this. If the agent can fetch a web page, it can read the <em>current</em> documentation and learn the <em>current</em> API &#8212; right now, at request time, regardless of when the model was trained.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;c1ede444-fba9-47eb-b1f5-54200180cb22&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import urllib.request
from html.parser import HTMLParser

class TextExtractor(HTMLParser):
    def __init__(self):
        super().__init__()
        self.text = []
    def handle_data(self, data):
        self.text.append(data)

def fetch_page(url: str) -&gt; str:
    with urllib.request.urlopen(url) as response:
        html = response.read().decode("utf-8", errors="ignore")
    parser = TextExtractor()
    parser.feed(html)
    text = " ".join(parser.text)
    return text[:5000]  # keep it short &#8212; remember context costs tokens</code></pre></div><p>No API key, no third-party service &#8212; just the standard library stripping a page down to its text. We cap the output at 5000 characters, which is a deliberate nod to everything we said about memory in Section 1: every character we return is context the model has to carry, and tokens it has to pay for. A tool that dumps a 200 KB HTML page into the conversation is a tool that poisons your own context.</p><p>Now the workflow becomes genuinely powerful. You ask: <em>&#8220;Use the latest version of this library to do X.&#8221;</em> The agent calls &#8288;fetch_pageon the official docs, reads the current API straight from the source, and writes code against <em>today&#8217;s</em> version &#8212; not against a fuzzy memory from its training cutoff. You&#8217;ve taken a model frozen in the past and given it a window into the present. That&#8217;s not a smarter model. That&#8217;s a better tool.</p><h4>Chaining it all together</h4><p>None of these tools are impressive on their own. The magic is the loop letting the model <em>combine</em> them. A realistic single request &#8212; <em>&#8220;check that the tests pass after updating to the new API&#8221;</em> &#8212; might unfold as: &#8288;fetch_page the docs &#8594; &#8288;read_file the current code &#8594; &#8288;write_file the updated version &#8594; &#8288;run_shell(&#8220;pytest&#8221;) &#8594; read the output &#8594; decide whether it&#8217;s done.</p><p>The model orchestrates all of that. We never wrote a &#8220;check tests after updating&#8221; function. We wrote four small, dumb tools and let the model&#8217;s understanding of intent string them together.</p><p>And that&#8217;s the only wiring you need to do: don&#8217;t forget to update &#8288;<code>TOOLS</code> and &#8288;<code>TOOL_SCHEMAS</code> accordingly with every new tool you add. Once that&#8217;s done, you can chain them together using nothing but natural language &#8212; you describe what you want, and the model figures out which tools to call and in what order.</p><p>That, more than any single tool, is what an agent <em>is</em>.</p><div><hr></div><h3>The skills</h3><p>Remember the maintenance smell from Section 3 &#8212; the allowlist living in &#8288;run_shell&#8217;s code <em>and</em> duplicated in its schema description? More broadly, every new behavior we wanted meant touching Python. Want the agent to write good commits? Hardcode it. Want it to follow your team&#8217;s review checklist? Hardcode it. That doesn&#8217;t scale, and it certainly isn&#8217;t something a non-programmer could tweak.</p><p>Skills fix this. A skill is just a markdown file with a bit of front matter, dropped into a &#8288;skills/ folder. The front matter says <em>what</em> the skill is and <em>when</em> to use it; the body is a playbook written in plain language for the model to follow. No new code per skill &#8212; adding a behavior is adding a file.</p><p>Here&#8217;s a &#8288;commit skill:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;3c24b9ad-048b-40da-b1a3-68635d6bd125&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown">---
name: commit
description: Write a clear commit message and create the commit. Use when the user asks to commit changes.
---

Follow these steps to commit:

1. Run `git diff --staged` to see exactly what is being committed.
2. Write a concise message: a short summary line (max 50 chars), a blank line, then bullet points explaining the *why*, not the *what*.
3. Create the commit with `git commit -m "..."`.
4. Confirm with `git log -1 --oneline`.
</code></pre></div><p>Notice the skill doesn&#8217;t introduce any new capability &#8212; it leans entirely on the &#8288;run_shell tool we already built. It&#8217;s not giving the agent new <em>powers</em>, it&#8217;s giving it <em>expertise</em>. The model already <em>can</em> run git; this teaches it <em>how we like git run</em>.</p><h4>Loading skills</h4><p>The agent needs two things: to know which skills exist, and to be able to pull one into context when relevant. The first is just listing the front matter of every file. The second is a single generic tool &#8212; &#8288;<code>load_skill</code> &#8212; that reads a file and returns its body.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;0d3c5987-8d3f-449c-ac62-148d4e7bd9f9&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">from pathlib import Path

SKILLS_DIR = Path("skills")

def parse_skill(path: Path) -&gt; dict:
    text = path.read_text()
    _, frontmatter, body = text.split("---", 2)
    meta = dict(
        line.split(":", 1) for line in frontmatter.strip().splitlines()
    )
    return {"name": meta["name"].strip(),
            "description": meta["description"].strip(),
            "body": body.strip()}

SKILLS = {s["name"]: s for s in (parse_skill(p) for p in SKILLS_DIR.glob("*.md"))}

def load_skill(name: str) -&gt; str:
    return SKILLS[name]["body"]</code></pre></div><p>&#8288;<code>load_skill</code> is a tool like any other &#8212; register it in &#8288;<code>TOOLS</code> and &#8288;<code>TOOL_SCHEMAS</code> exactly as before. The only twist: we want the model to know <em>which</em> skills exist before it decides to load one. So we list them in the system prompt:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;5e320e85-dc40-4223-a129-17b9ba1510bd&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">skill_list = "\n".join(
    f"- {s['name']}: {s['description']}" for s in SKILLS.values()
)
SYSTEM_PROMPT += f"\n\nYou have these skills available. Load one with load_skill when relevant:\n{skill_list}"</code></pre></div><p>That&#8217;s the whole mechanism. The descriptions act as a menu; the model reads it, decides a skill is relevant, calls &#8288;<code>load_skill(&#8220;commit&#8221;)</code>, and its body lands in the conversation as fresh instructions. Lazy-loaded expertise, on demand &#8212; which is also kind to your context, since you only pay the token cost of a skill when you actually use it.</p><h4>A note on harness freedom</h4><p>One thing worth pausing on: because <em>we</em> are writing the harness, none of this is fixed. We chose &#8220;a skill is instructions the model reads,&#8221; but that&#8217;s a design decision, not a law. You could just as easily make the front matter define a tool&#8217;s schema and have the body be executable code &#8212; a self-describing tool. Or have the body run as its own isolated LLM call, turning a skill into a mini sub-agent. Same markdown-with-front-matter idea, completely different machinery behind it.</p><p>That freedom <em>is</em> the lesson of this whole post. There&#8217;s no canonical &#8220;right&#8221; way an agent must work &#8212; only the tradeoffs you choose. We&#8217;re picking the simplest version that makes the concept click. (The sub-agent variation, in particular, is a rabbit hole worth its own post &#8212; more on that at the end.)</p><div><hr></div><h3>The memory</h3><p>We&#8217;ve been calling the &#8288;messages list &#8220;memory&#8221; since Section 1, and it is &#8212; but it&#8217;s <em>working</em> memory. It lives only as long as the program runs. Kill the process, and the agent forgets everything: who you are, what you were doing, every lesson it learned. Start it again and you&#8217;re talking to a blank slate.</p><p>That&#8217;s fine for a one-shot task. It&#8217;s useless for an assistant you come back to. What we want now is <strong>persistent</strong> memory &#8212; something that outlives a single conversation, so the agent can wake up tomorrow still knowing what it figured out today.</p><p>And by now you can probably guess how we&#8217;ll do it. Not with a fancy framework. With a file and a couple of tools.</p><h4>A file and two tools</h4><p>Long-term memory will be a single markdown file, &#8288;memory.md. The agent gets one tool to write to it, and on startup we read it back into the system prompt &#8212; so the agent boots up already knowing what it remembered last time.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;10b4d9a9-0b6f-4e02-b198-b3936a067f31&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">from pathlib import Path

MEMORY_FILE = Path("memory.md")

def remember(fact: str) -&gt; str:
    with MEMORY_FILE.open("a") as f:
        f.write(f"- {fact}\n")
    return f"Remembered: {fact}"</code></pre></div><p>Register &#8288;remember in &#8288;<code>TOOLS</code> and &#8288;<code>TOOL_SCHEMAS</code> like every tool before it. Then, when building the system prompt, fold in whatever the agent already knows:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;66cf1223-751c-43b5-b370-dad933bde01a&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">if MEMORY_FILE.exists():
    SYSTEM_PROMPT += f"\n\nHere is what you remember from previous sessions:\n{MEMORY_FILE.read_text()}"</code></pre></div><p>That&#8217;s the entire long-term memory system. Tell the agent <em>&#8220;remember that I prefer tabs over spaces&#8221;</em> and it appends a line to &#8288;memory.md. Next session, that line is sitting in the system prompt, pinned at the top of context &#8212; and the agent quietly writes tabs without being asked. It feels like the thing learned. It didn&#8217;t. It just read a file you let it write to.</p><p>Notice this reuses everything we already understand: it&#8217;s a tool (Section 3), it lands in the system prompt (Section 2), and the system prompt is the one part of memory that never gets compacted away (Section 1). Persistent memory isn&#8217;t a new concept &#8212; it&#8217;s the old concepts pointed at a file.</p><h4>The honest limitations</h4><p>This works beautifully right up until it doesn&#8217;t, and it&#8217;s worth being honest about exactly where it breaks.</p><p>Every session, the <em>entire</em> &#8288;memory.md gets stuffed into the system prompt. Fine when it&#8217;s ten lines. But an assistant you use daily for a year? That file becomes thousands of lines, and now you&#8217;re paying &#8212; in tokens, on <em>every single request</em> &#8212; to carry your agent&#8217;s entire life story whether it&#8217;s relevant or not. Worse, you&#8217;re marching straight into the <strong>context rot</strong> from Section 1: bury the useful fact among a thousand stale ones, and the model loses it in the noise.</p><p>The flaw is simple: <strong>we load everything, always, regardless of relevance.</strong> A real memory system retrieves only what matters <em>right now</em>. So how do we get there?</p><h4>Climbing the ladder: toward retrieval</h4><p><strong>The poor man&#8217;s RAG &#8212; a folder of files.</strong> The first honest improvement costs almost nothing: instead of one growing file, use a <em>folder</em> of markdown notes (or PDFs, docs, whatever), and don&#8217;t load them at all by default. Give the agent a tool to <em>search</em> them instead:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;9d8b26e1-eade-4ace-af9f-997be5c639fb&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">def search_memory(query: str) -&gt; str:
    hits = []
    for path in Path("memory").glob("*.md"):
        text = path.read_text()
        if query.lower() in text.lower():
            hits.append(f"## {path.name}\n{text}")
    return "\n\n".join(hits) or "Nothing found."</code></pre></div><p>Crude &#8212; it&#8217;s just keyword matching &#8212; but the <em>shape</em> is exactly right: the agent pulls in only what it searches for, when it searches for it. Context stays lean. This alone gets you surprisingly far, and it&#8217;s still nothing but files and a tool.</p><p><strong>Real RAG &#8212; vectors and embeddings.</strong> The obvious weakness above is &#8288;query.lower() in text.lower(): search for <em>&#8220;car&#8221;</em> and you&#8217;ll miss a note about <em>&#8220;automobiles.&#8221;</em> Keyword matching doesn&#8217;t understand <em>meaning</em>. That&#8217;s the gap proper <strong>RAG</strong> (Retrieval-Augmented Generation) fills. Instead of matching strings, you convert every note into an <strong>embedding</strong> &#8212; a vector that captures its meaning &#8212; and store those in a <strong>vector database</strong>. At query time, you embed the question and ask the database for the <em>closest</em> vectors. Now <em>&#8220;car&#8221;</em> finds the note about <em>&#8220;automobiles,&#8221;</em> because they sit near each other in meaning-space.</p><p>Mechanically, though, nothing about your agent changes. It&#8217;s still a tool called &#8288;search_memory that returns text into context. We swapped a dumb keyword scan for a smart semantic search behind it &#8212; but from the loop&#8217;s point of view, it&#8217;s the same hole in the wall, just with a better librarian on the other side.</p><p>We won&#8217;t build the full vector-DB version here &#8212; embeddings, chunking, and similarity search genuinely deserve their own post. But notice the through-line: from a single file, to a folder, to a vector database, the <em>agent</em> never changed. We just kept improving what sits behind one tool. Memory, like everything else in this post, turns out to be a tool with a file behind it &#8212; the only question is how clever you make the retrieval.</p><h3>Conclusion: it was tools all along</h3><p>Let&#8217;s take stock of what we actually built. A loop. A system prompt. A handful of functions wrapped in JSON schemas. A folder of markdown files. A file the agent can write to. That&#8217;s the entire thing. That&#8217;s an &#8220;AI agent.&#8221;</p><p>If there&#8217;s one idea to walk away with, it&#8217;s this: <strong>the agent isn&#8217;t the intelligence &#8212; the harness is.</strong> The model is a frozen token-prediction machine that does exactly one thing well: turn fuzzy human intent into structured tool calls. Everything that makes it <em>useful</em>&#8212; the ability to act, to remember, to follow expertise, to know what happened after its training cutoff &#8212; none of that lives in the model. It lives in the few hundred lines of plumbing we wrote around it. That plumbing has a name people like to make sound impressive: the <em>harness</em>. We just spent a whole post proving it&#8217;s a &#8288;while loop and some functions.</p><h4>Why your tools might beat the expensive ones</h4><p>Here&#8217;s the part the benchmark charts won&#8217;t tell you. The proprietary models are often fine-tuned on <em>specific</em> tool formats &#8212; their makers trained them on the exact shape of tool calls their own products use. So a model can look mediocre with your homemade tools and brilliant with the official harness, or vice versa. The lesson isn&#8217;t &#8220;buy the expensive one.&#8221; It&#8217;s that <strong>the harness and the model are a pair</strong>, and a small model with tools tailored to <em>it</em> can quietly outperform a giant model you&#8217;re poking at through a generic framework. The fit matters more than the size.</p><h4>So, is it worth paying?</h4><p>Which brings us back to the question from the very beginning. Do you need to spend &#8364;200 a month?</p><p>Sometimes, sure. But far less often than the people selling &#8364;200 subscriptions would like you to believe. A small, efficient model running locally &#8212; fed a well-crafted system prompt, a few sharp tools, and a folder of skills you actually understand &#8212; handles a genuinely large share of real work. No API key. No usage meter ticking in the background. No bill. And &#8212; not a small thing &#8212; no datacenter somewhere burning a coastal city&#8217;s worth of electricity so your agent can run &#8288;git status. A 4B model humming on your laptop is, by almost any measure, the saner default.</p><p>None of this is anti-AI. It&#8217;s anti-mystique. The point was never that the big models are bad &#8212; it&#8217;s that the magic is largely manufactured, and once you&#8217;ve seen the &#8288;while loop behind the curtain, it&#8217;s very hard to keep paying premium prices for awe.</p><h4>What&#8217;s next</h4><p>We deliberately left the more advanced machinery on the cutting-room floor to keep this honest and simple. So there&#8217;s a next post coming, and it picks up exactly where this one stops: <strong>conversation history and automatic compaction</strong> (how do you keep a long chat from drowning in its own context?), and <strong>multi-agent conversations</strong> &#8212; including that self-describing, sub-prompt flavor of skills we teased back in Section 4, where a &#8220;tool&#8221; is secretly another agent.</p><p>Until then: go build your own. Read the OpenCode source if you get stuck &#8212; I did. Then close it, and write your own loop anyway. That&#8217;s the only way the curtain ever really comes down.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://unvoid.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Signal in the Noise! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The AI Trap We’re Walking Into]]></title><description><![CDATA[Cheap Tokens, Expensive Power]]></description><link>https://unvoid.substack.com/p/the-ai-trap-were-walking-into</link><guid isPermaLink="false">https://unvoid.substack.com/p/the-ai-trap-were-walking-into</guid><dc:creator><![CDATA[Unvoid]]></dc:creator><pubDate>Tue, 02 Jun 2026 19:58:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!LS8G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946f6807-4fa1-404c-b35c-30e7349d9638_1536x723.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LS8G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946f6807-4fa1-404c-b35c-30e7349d9638_1536x723.png" data-component-name="Image2ToDOM"><div class="image2-inset image2-full-screen"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LS8G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946f6807-4fa1-404c-b35c-30e7349d9638_1536x723.png 424w, https://substackcdn.com/image/fetch/$s_!LS8G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946f6807-4fa1-404c-b35c-30e7349d9638_1536x723.png 848w, https://substackcdn.com/image/fetch/$s_!LS8G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946f6807-4fa1-404c-b35c-30e7349d9638_1536x723.png 1272w, https://substackcdn.com/image/fetch/$s_!LS8G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946f6807-4fa1-404c-b35c-30e7349d9638_1536x723.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LS8G!,w_5760,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946f6807-4fa1-404c-b35c-30e7349d9638_1536x723.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/946f6807-4fa1-404c-b35c-30e7349d9638_1536x723.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;full&quot;,&quot;height&quot;:723,&quot;width&quot;:1536,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2735669,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://unvoid.substack.com/i/200348123?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8019edf-04a3-46bd-86e8-c59b940016a6_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-fullscreen" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LS8G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946f6807-4fa1-404c-b35c-30e7349d9638_1536x723.png 424w, https://substackcdn.com/image/fetch/$s_!LS8G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946f6807-4fa1-404c-b35c-30e7349d9638_1536x723.png 848w, https://substackcdn.com/image/fetch/$s_!LS8G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946f6807-4fa1-404c-b35c-30e7349d9638_1536x723.png 1272w, https://substackcdn.com/image/fetch/$s_!LS8G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946f6807-4fa1-404c-b35c-30e7349d9638_1536x723.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We were promised that artificial intelligence would democratize knowledge work. That a kid with a laptop in a small town would have the same cognitive firepower as a corporation. For a brief, dizzying moment, that even felt true.</p><p>I&#8217;m not so sure anymore. Here&#8217;s the story I see unfolding, and why I think we&#8217;re about to repeat one of humanity&#8217;s oldest mistakes.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://unvoid.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Signal in the Noise! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>LLMs and agents are becoming a commodity</h2><p>Two years ago, a capable language model felt like magic. Today it feels like electricity, something you plug into. The numbers are staggering: the cost of LLM inference for equivalent performance is dropping roughly 10x every year, faster than compute fell during the PC revolution or bandwidth during the dotcom boom. A capability that cost about $20 per million tokens in late 2022 now costs around $0.40, and the cheapest models matching early GPT-3 quality have fallen by a factor of 1,000 in three years. (<a href="https://a16z.com/llmflation-llm-inference-cost/">a16z</a>, <a href="https://introl.com/blog/inference-unit-economics-true-cost-per-million-tokens-guide">Introl</a>)</p><p>Open-weight models are closing in on the frontier too, trailing the best closed models by only around four months on key benchmarks. When the gap is that small, raw capability stops being scarce. (<a href="https://epoch.ai/data-insights/open-closed-eci-gap">Epoch AI</a>)</p><p>This is what commoditization looks like. And whenever a technology becomes a commodity, the interesting question stops being &#8220;Can you do it?&#8221; and becomes &#8220;Can you afford to do it at scale?&#8221;</p><h2>Agentic work gets <strong>more expensive, not less</strong></h2><p>Here&#8217;s the counterintuitive part. The price per token keeps falling, and yet the cost of meaningful agentic work is climbing.</p><p>Why? Because agents don&#8217;t make one call. They read a task, get a response, then re-read everything before the next action, then re-read all of that plus the new response, building one expensive context snowball. A Stanford Digital Economy Lab study found that agentic tasks are &#8220;uniquely expensive, consuming 1000x more tokens than code reasoning and code chat,&#8221; with the cost driven mostly by input tokens. Worse, that usage is wildly unpredictable: runs on the same task can differ by up to 30x in total tokens, and burning more tokens doesn&#8217;t even guarantee a better answer. (<a href="https://digitaleconomy.stanford.edu/news/how-are-ai-agents-spending-your-tokens/">Stanford Digital Economy Lab</a>)</p><p>Reasoning models pour fuel on this. They &#8220;think&#8221; in hidden token sequences you still pay for, consuming five to twenty times more tokens per request than standard models. A query that takes 700 tokens normally can balloon to 3,700 once the model reasons internally. (<a href="https://keito.ai/blog/ai-agent-cost-breakdown-tokens-inference">Keito</a>) At enterprise volumes, a support agent that looks cheap at 100 tokens per interaction can hit 2,000 to 5,000 once tool calls and multi-step reasoning kick in, producing &#8220;monthly token bills that dwarf even your infrastructure spend.&#8221; (<a href="https://www.datarobot.com/blog/cut-agentic-ai-development-costs/">DataRobot</a>)</p><p>The unit price drops while total consumption explodes. For a hobbyist, that&#8217;s a rounding error. For a company running millions of autonomous workflows a day, it becomes a serious line item that scales with ambition. Researchers warn that without major system-level innovation, per-request costs could rise &#8220;by orders of magnitude,&#8221; making large-scale agent deployment &#8220;economically and environmentally prohibitive.&#8221; (<a href="https://arxiv.org/html/2506.04301v1">arXiv</a>)</p><p>The result: the more valuable the AI work, the more it costs to run.</p><h2>Those with the budget buy the power</h2><p>If agentic capability is metered, then <strong>capability becomes a function of capital</strong>. Whoever can pour the most money into compute gets faster and more thorough agents, more parallel experiments, the freshest frontier models the moment they ship, and the luxury of not thinking about cost at all.</p><p>This is a familiar pattern. Capital concentrates around whatever resource is scarce. Yesterday it was land, factories, and data. Tomorrow it&#8217;s inference budget. Researchers already warn that AI is poised to widen income inequality unless we deliberately steer it otherwise. (<a href="https://www.brookings.edu/articles/ais-impact-on-income-inequality-in-the-us/">Brookings</a>)</p><h2>Those without it work by hand</h2><p>Meanwhile, everyone else does what humans have always done when they can&#8217;t afford the machine: they work by hand. They label, moderate, correct, and annotate, filling the gaps the cheap models can&#8217;t.</p><p>We already have a name for an early version of this: the global, often invisible workforce that labels data and tunes models for a pittance. Investigations have documented Kenyan workers training AI systems for around $2 an hour under grueling conditions, churn-by-design contracts, and unpaid labor. (<a href="https://www.brookings.edu/articles/reimagining-the-future-of-data-and-ai-labor-in-the-global-south/">Brookings</a>, <a href="https://techcrunch.com/2024/07/08/data-workers-detail-exploitation-by-tech-industry-in-dair-report/">TechCrunch</a>) Kenyan data labelers have since organized into a Data Labelers Association to push back. (<a href="https://www.computerweekly.com/news/366619321/Kenyan-AI-workers-form-Data-Labelers-Association">Computer Weekly</a>)</p><p>As AI eats more white-collar work, this human-in-the-loop layer doesn&#8217;t disappear. It grows, and it slides down the value chain.</p><h2>The handwork becomes the training fuel</h2><p>Here&#8217;s the loop that makes the whole thing self-reinforcing, and genuinely uncomfortable.</p><p>Every correction, every label, every &#8220;the AI got it wrong, let me fix it&#8221; is data. It flows back upstream. It trains the next model. The work done by the people who couldn&#8217;t afford the good model is exactly what makes the good model better.</p><p>But it goes further than paid correction work, and this is where it gets personal for anyone who builds things in the open. Think about the developer who isn&#8217;t using an AI agent at all, who is sitting down and writing genuinely new, creative code, solving a hard problem, and pushing it to a public open source repository as a gift to the community. That contribution doesn&#8217;t stay a gift. It gets scraped, ingested, and turned into training data for the next coding agent. The human does the original, creative, unsolved-before work; <strong>the model absorbs it and resells it as autocomplete</strong>.</p><p>The crucial part is that almost none of this was asked for. GitHub Copilot, built by GitHub, Microsoft, and OpenAI, was trained on billions of lines of publicly available code, and in 2022 a class action lawsuit (Doe v. GitHub) accused the companies of violating open source license terms, stripping copyright attribution in breach of the DMCA, and using the work of developers who never consented. (<a href="https://www.saverilawfirm.com/our-cases/github-copilot-intellectual-property-litigation">Saveri Law Firm</a>, <a href="https://githubcopilotlitigation.com/">GitHub Copilot Litigation</a>) Researchers have similarly documented that code-training projects pull in repositories &#8220;regardless of license,&#8221; likely breaching the very terms under which that code was shared. (<a href="https://ksiresearch.org/seke/seke22paper/paper066.pdf">SEKE</a>) Permissionless scraping for AI training has become the default, and copyright offices and legislators are still scrambling to decide whether it&#8217;s even legal. (<a href="https://www.copyright.gov/ai/Copyright-and-Artificial-Intelligence-Part-3-Generative-AI-Training-Report-Pre-Publication-Version.pdf">U.S. Copyright Office</a>)</p><p>So the loop tightens. People share their best, most original work for free, out of generosity or principle. Providers harvest it without asking. The resulting agents get better, and because better agents are more autonomous and more token-hungry, they also get more expensive to run (see above). The very creativity that was given away as a public good is enclosed, repackaged, and rented back to whoever can pay, often including the open source contributors themselves.</p><p>The poor and the generous produce the training signal. The provider captures it. The next generation of agents, sold back to whoever can pay, gets smarter on the back of <strong>underpaid labor</strong> and <strong>unpaid creativity</strong>.</p><h2>The split</h2><p>Stack these steps and you get a depressingly clean machine. Follow the value as it moves through three groups:</p><p><strong>Capital-rich enterprises</strong> buy frontier agents at scale, and in return they get speed, leverage, and market dominance. Money buys autonomy.</p><p><strong>AI providers</strong> sell the compute and quietly harvest the correction data and scraped creativity that flows back through it. In return they get recurring revenue <em>and</em> a widening data moat that&#8217;s almost impossible to compete with.</p><p><strong>Everyone else</strong> hand-corrects cheap models and gives away original work, and in return they get wages and recognition that shrink as the very models they&#8217;re feeding improve.</p><p>The richer get richer because they own the leverage. The provider gets richer because it owns the platform and the feedback loop. And the people supplying the human signal get poorer in relative terms: their labor is the input, never the asset.</p><h2>Once again, we fail to use progress for good</h2><p>This is the part that stings. <strong>None of this is inevitable physics. It&#8217;s a choice, a thousand small architectural and business decisions that quietly default to extraction</strong>.</p><p>We&#8217;ve done this before. The printing press, the steam engine, the internet, each one arrived wrapped in utopian promises, and each one ended up concentrating power before society clawed back some balance. AI is moving faster than any of them, which means the concentration happens faster too, and the clawing back, if it comes, will have to be faster as well.</p><h2>But it doesn&#8217;t have to end this way</h2><p>I don&#8217;t want to write pure doom, because fatalism is just another way of surrendering. The same building blocks point to a different ending:</p><ul><li><p><strong>Open weights and local inference</strong> break the metering monopoly. If a good-enough model runs on your own hardware, capital stops being the gatekeeper. (<a href="https://epoch.ai/data-insights/open-closed-eci-gap">Epoch AI</a>)</p></li><li><p><strong>Pay for the loop.</strong> If human correction is what makes models better, the people doing it deserve a cut, not a tip. This is the heart of Jaron Lanier&#8217;s idea of &#8220;data dignity,&#8221; treating data as labor that people are owed for, rather than a free resource to be mined. (<a href="https://www.techtarget.com/searchenterpriseai/definition/data-dignity">TechTarget</a>)</p></li><li><p><strong>Efficiency as a public good.</strong> Every breakthrough that makes agents cheaper to run shifts power down the pyramid, not up. We should fund and celebrate that as much as raw capability.</p></li><li><p><strong>Regulation that targets the loop, not the model.</strong> The danger isn&#8217;t the technology; it&#8217;s the feedback mechanism that launders cheap human labor into expensive private assets.</p></li></ul><h2>The takeaway</h2><p>AI didn&#8217;t have to be a tool for widening the gap. We&#8217;re making it one, step by quiet step, because extraction is the path of least resistance.</p><p>The technology is genuinely miraculous. The question, the only question that has ever mattered with any new power, is who it&#8217;s for. Right now the default answer is &#8220;whoever can pay.&#8221; We still have a narrow window to change that answer.</p><p>If we don&#8217;t, we&#8217;ll have built the most capable tools in human history and used them, once again, to do the least imaginative thing possible: <strong>make the powerful more powerful</strong>.</p><p>The choice in front of us is simple to state and hard to make. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://unvoid.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Signal in the Noise! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Claude wrote it...]]></title><description><![CDATA[...but who's going to maintain it?]]></description><link>https://unvoid.substack.com/p/claude-wrote-it</link><guid isPermaLink="false">https://unvoid.substack.com/p/claude-wrote-it</guid><dc:creator><![CDATA[Unvoid]]></dc:creator><pubDate>Fri, 28 Nov 2025 13:05:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!fa-R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F060e0343-bb36-4f4e-b9df-e390dadf1c56_2816x1536.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Recently Anthropic published <a href="https://www.anthropic.com/research/estimating-productivity-gains">an estimate of AI productivity gains from Claude conversations</a>. Do not panic (yet), they did this using their privacy-preserving <a href="https://www.anthropic.com/research/clio">analysis method</a>.</p><p>The headline numbers are impressive: tasks that would take 90 minutes without AI are completed 80% faster with Claude. Extrapolating these estimates suggests current-generation AI models could increase annual US labor productivity growth by 1.8% over the next decade, roughly double the recent rate.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://unvoid.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Signal in the Noise! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>But there&#8217;s a problem hiding in plain sight, one that Anthropic&#8217;s research doesn&#8217;t account for: <strong>technical debt</strong>.</p><h2>The invisible cost of AI-generated code</h2><p>Ward Cunningham, who coined the term &#8220;technical debt&#8221; in 1992, used a financial metaphor to explain a simple truth: shortcuts taken today create interest payments tomorrow. Every minute spent working with code that&#8217;s &#8220;not quite right&#8221; counts as interest on that debt.</p><p>AI-generated code has a peculiar characteristic: <strong>nobody in your company actually wrote it</strong>. <a href="https://youtu.be/1WC8dxMC4Xw?si=vH_BqxbIGhYF4zuL&amp;t=251">It&#8217;s de facto legacy code from day one</a>. And the evidence suggests it&#8217;s accumulating debt at an unprecedented rate.</p><p>GitClear&#8217;s <a href="https://www.gitclear.com/ai_assistant_code_quality_2025_research">2024 analysis of 211 million lines of code</a> found that AI coding tools have led to:</p><ul><li><p>An <strong>8-fold increase</strong> in code duplication</p></li></ul><ul><li><p>A <strong>doubling of code churn</strong> (code added then quickly modified or removed)</p></li><li><p>Code reuse declining dramatically&#8212;AI generates new solutions rather than reusing existing patterns</p></li></ul><p>Google&#8217;s <a href="https://www.gitclear.com/ai_assistant_code_quality_2025_research">2024 DORA report</a> found that a 25% increase in AI usage correlates with a <strong>7.2% decrease in delivery stability</strong> . The <a href="https://www.harness.io/state-of-software-delivery">State of Software Delivery 2025 report</a> revealed that developers now spend <strong>more time debugging AI-generated code</strong> than they save generating it.</p><h2>Why AI code creates technical debt faster</h2><p>AI doesn&#8217;t understand your architecture. It doesn&#8217;t know your team&#8217;s conventions. It can&#8217;t see the bigger picture of your system. What it does is generate statistically plausible code based on patterns in its training data.</p><p>This leads to predictable problems:</p><p><strong>The reinvention problem</strong>: AI has zero awareness of what already exists in your codebase. Ask it to sort a list, and instead of using &#8288;.sort(), it might generate an entire sorting algorithm from scratch.</p><p><strong>The &#8220;looks right&#8221; problem</strong>: AI-generated code often appears clean and functional&#8212;until you realize it has subtle logic flaws, missing edge cases, or security vulnerabilities that only surface in production.</p><p><strong>The duplication problem</strong>: Rather than consolidating functionality into reusable modules, AI tends to copy-paste similar logic across different sections. GitClear found that code blocks with five or more duplicated lines increased <strong>10 times</strong> compared to two years ago .</p><p><strong>The architecture problem</strong>: AI generates code without considering your system&#8217;s architectural principles, creating inconsistencies that make future changes exponentially more difficult.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fa-R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F060e0343-bb36-4f4e-b9df-e390dadf1c56_2816x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fa-R!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F060e0343-bb36-4f4e-b9df-e390dadf1c56_2816x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!fa-R!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F060e0343-bb36-4f4e-b9df-e390dadf1c56_2816x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!fa-R!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F060e0343-bb36-4f4e-b9df-e390dadf1c56_2816x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!fa-R!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F060e0343-bb36-4f4e-b9df-e390dadf1c56_2816x1536.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fa-R!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F060e0343-bb36-4f4e-b9df-e390dadf1c56_2816x1536.heic" width="1200" height="654.3956043956044" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/060e0343-bb36-4f4e-b9df-e390dadf1c56_2816x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:570639,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://unvoid.substack.com/i/180169269?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F060e0343-bb36-4f4e-b9df-e390dadf1c56_2816x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fa-R!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F060e0343-bb36-4f4e-b9df-e390dadf1c56_2816x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!fa-R!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F060e0343-bb36-4f4e-b9df-e390dadf1c56_2816x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!fa-R!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F060e0343-bb36-4f4e-b9df-e390dadf1c56_2816x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!fa-R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F060e0343-bb36-4f4e-b9df-e390dadf1c56_2816x1536.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">caption...</figcaption></figure></div><h2>The compounding interest problem</h2><p>Technical debt behaves like financial debt&#8212;it compounds. But AI-generated technical debt compounds <strong>faster</strong> because:</p><ol><li><p><strong>It hides in plain sight</strong>: The code looks clean initially. Problems only surface when you need to modify, scale, or debug it. By then, you might have 18 months of AI code throughout your system.</p></li></ol><ul><li><p><strong>It creates dependencies</strong>: New AI code builds on old AI code. When you discover architectural problems in foundational components, you face a cascade of required changes.</p></li><li><p><strong>It erodes velocity over time</strong>: Month 1 with AI: 40% faster. Month 6: 20% faster. Month 12: baseline speed. Month 18: 25% slower than pre-AI due to technical debt burden .</p></li></ul><p>As one MIT Sloan <a href="https://sloanreview.mit.edu/article/the-hidden-costs-of-coding-with-generative-ai/">Review article</a> put it: </p><div class="pullquote"><p>&#8220;What looks like rapid progress today could turn into costly setbacks tomorrow&#8221;.</p></div><h2>The real cost: estimates in the trillions</h2><p>The <a href="https://www.it-cisq.org/technical-reports/">Consortium for Information &amp; Software Quality</a> has estimated that technical debt costs the US economy <strong>at least $1.52 trillion annually</strong>, with some analyses suggesting the total impact of poor software quality could reach $2.4 trillion when including all related factors . While these figures are difficult to measure precisely, even conservative estimates suggest the problem is massive&#8212;and AI-generated code appears to be accelerating it.</p><p>For development teams, the financial impact is more tangible. Industry analyses suggest that for a 50-developer team, refactoring 18 months of AI-accelerated development could cost <strong>upwards of $2 million</strong>&#8212;potentially exceeding the productivity gains AI initially delivered . Though exact figures vary by organization and codebase, the pattern is consistent.</p><p>These costs tend to manifest as:</p><ul><li><p><strong>Maintenance escalation</strong>: Simple changes that should take days can stretch into weeks</p></li></ul><ul><li><p><strong>Production incidents</strong>: Outages typically cost anywhere from <strong>$5,000 to $500,000</strong> depending on severity and scale</p></li><li><p><strong>Opportunity cost</strong>: Every hour spent refactoring represents an hour not spent on new features or innovation</p></li><li><p><strong>Talent drain</strong>: Engineers often avoid codebases with excessive technical debt. Industry estimates suggest replacing a senior developer costs <strong>$150,000-$250,000</strong> when factoring in recruiting, onboarding, and lost productivity</p></li></ul><p>While these numbers should be interpreted as rough indicators rather than precise measurements, they point to a substantial and growing problem that organizations can&#8217;t afford to ignore.</p><h2>What Anthropic&#8217;s study missed</h2><p>Anthropic&#8217;s research acknowledges that it &#8220;can&#8217;t account for additional time humans spend on tasks outside of their conversations with Claude, including validating the quality or accuracy of Claude&#8217;s work.&#8221;</p><p>But this <strong>dramatically</strong> understates the problem. The study measures immediate time savings, not:</p><ul><li><p>The time spent debugging AI-generated code months later</p></li><li><p>The architectural inconsistencies that slow down future development</p></li><li><p>The security vulnerabilities that slip through</p></li><li><p>The knowledge debt from maintaining code nobody actually wrote</p></li><li><p>The compound interest on all of the above</p></li></ul><p>When you factor in technical debt, that 80% time savings starts looking a lot less impressive.</p><h2>So what do we do?</h2><p>This isn&#8217;t an argument to abandon AI coding tools. Used wisely, they&#8217;re incredibly valuable. But &#8220;wisely&#8221; means:</p><p><strong>Treat AI output as a first draft, not production code, obviously</strong>: Every AI-generated change needs review by a senior engineer who understands your architecture.</p><p><strong>Track what&#8217;s AI-generated</strong>: Use commit tags or metadata to mark AI code. This makes it easier to audit and understand risk.</p><p><strong>Establish clear guidelines</strong>: Define where AI use is acceptable (boilerplate) and where it&#8217;s not (transactional systems, security-critical code).</p><p><strong>Invest in observability</strong>: If AI touches production, assume something will break. Add monitoring, rate limits, and fallback logic.</p><p><strong>Refactor continuously</strong>: Don&#8217;t let AI-generated code sit untouched. Dedicate sprint time to reviewing, consolidating, and improving it.</p><p><strong>Measure the right things</strong>: Stop measuring productivity by lines of code or commit counts. Track code quality, post-release bugs, and maintenance burden.</p><h2>The bottom line</h2><p>AI can help you move faster. But speed without sustainability is just accumulating debt. And unlike financial debt, technical debt doesn&#8217;t come with clear terms or predictable interest rates&#8212;it compounds silently until your entire development velocity grinds to a halt.</p><p>Anthropic&#8217;s 1.8% productivity boost assumes AI capabilities stay constant and doesn&#8217;t account for technical debt. The pattern is clear: organizations are essentially borrowing against future development velocity, with the debt coming due faster than many anticipated.</p><div class="pullquote"><p>Claude wrote it. But <strong>you&#8217;re</strong> going to maintain it! </p></div><p>Make sure the math actually works out.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://unvoid.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Signal in the Noise! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The [Gmail] AI Training Panic*]]></title><description><![CDATA[*variable accepts: Outlook, WhatsApp, Slack, Discord, etc.]]></description><link>https://unvoid.substack.com/p/the-gmail-ai-training-panic</link><guid isPermaLink="false">https://unvoid.substack.com/p/the-gmail-ai-training-panic</guid><dc:creator><![CDATA[Unvoid]]></dc:creator><pubDate>Fri, 28 Nov 2025 11:18:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!H5A9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F985e133c-17ac-42c6-845c-4a43a16f2d9a_2816x1536.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Classic <a href="https://www.theverge.com/news/826902/gmail-ai-training-data-opt-out">clickbait</a>! Amplifying viral panic just to debunk it and drive traffic. Is this what journalism has become?</p><p>That said, let&#8217;s be real: Google can deny using Gmail content for AI training all they want, but they&#8217;re already monetizing our data in countless other ways, that&#8217;s their entire business model. Whether it&#8217;s for &#8220;smart features&#8221; or AI training, the distinction feels academic at this point.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://unvoid.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Signal in the Noise! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Honestly, they can use my Gmail. 80% of it is marketing spam, newsletters, and notification garbage anyway. The remaining 20%? Already infected with LLM-generated emails that are 75% slop themselves.</p><p>Here&#8217;s the beautiful irony: if they <em>do</em> eventually train AI on Gmail emails that are increasingly written by other AIs, we&#8217;re looking at a perfect feedback loop of degradation. Their models will just get progressively dumber, trained on synthetic garbage regurgitating synthetic garbage.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:158279755,&quot;url&quot;:&quot;https://defragzone.substack.com/p/data-incest-when-ai-breeds-with-itself&quot;,&quot;publication_id&quot;:1814162,&quot;publication_name&quot;:&quot;Defrag Zone&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!ZH7v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb1b32a9-eee1-4da6-b9bf-dac76a396d8d_500x500.png&quot;,&quot;title&quot;:&quot;Data Incest: When AI Breeds with Itself&quot;,&quot;truncated_body_text&quot;:&quot;Today, we&#8217;re diving into a problem that&#8217;s as bizarre as it is concerning: data incest. No, this isn&#8217;t some dystopian sci-fi horror plot. It&#8217;s a real issue creeping into AI and machine learning.&quot;,&quot;date&quot;:&quot;2025-03-03T14:46:04.332Z&quot;,&quot;like_count&quot;:0,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:12833361,&quot;name&quot;:&quot;Francesco Gadaleta <frag>&quot;,&quot;handle&quot;:&quot;fgadaleta&quot;,&quot;previous_name&quot;:&quot;frag&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9599e274-8130-4754-b9c6-a14135c9fe36_1024x1024.webp&quot;,&quot;bio&quot;:&quot;Senior software engineer and chief data scientist Founder of Amethix Technologies (https://amethix.com) Coding at https://github.com/fgadaleta/&quot;,&quot;profile_set_up_at&quot;:&quot;2022-06-04T13:49:49.813Z&quot;,&quot;reader_installed_at&quot;:&quot;2023-07-19T20:59:36.149Z&quot;,&quot;publicationUsers&quot;:[],&quot;twitter_screen_name&quot;:&quot;ThisIsFrag&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:null,&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:false,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://defragzone.substack.com/p/data-incest-when-ai-breeds-with-itself?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!ZH7v!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb1b32a9-eee1-4da6-b9bf-dac76a396d8d_500x500.png"><span class="embedded-post-publication-name">Defrag Zone</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Data Incest: When AI Breeds with Itself</div></div><div class="embedded-post-body">Today, we&#8217;re diving into a problem that&#8217;s as bizarre as it is concerning: data incest. No, this isn&#8217;t some dystopian sci-fi horror plot. It&#8217;s a real issue creeping into AI and machine learning&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">a year ago &#183; Francesco Gadaleta &lt;frag&gt;</div></a></div><p>But in the end, does any of this matter? OpenAI, Meta, Alphabet, they&#8217;re all going to do whatever they want in this AGI arms race. The goal isn&#8217;t improving humanity; it&#8217;s being first to market and maximizing shareholder value. We&#8217;re just the data feedstock for their quarterly earnings reports, and no amount of &#8220;opt-out&#8221; toggles will change that fundamental reality.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H5A9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F985e133c-17ac-42c6-845c-4a43a16f2d9a_2816x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H5A9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F985e133c-17ac-42c6-845c-4a43a16f2d9a_2816x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!H5A9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F985e133c-17ac-42c6-845c-4a43a16f2d9a_2816x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!H5A9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F985e133c-17ac-42c6-845c-4a43a16f2d9a_2816x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!H5A9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F985e133c-17ac-42c6-845c-4a43a16f2d9a_2816x1536.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H5A9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F985e133c-17ac-42c6-845c-4a43a16f2d9a_2816x1536.heic" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/985e133c-17ac-42c6-845c-4a43a16f2d9a_2816x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:522971,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://unvoid.substack.com/i/180168079?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F985e133c-17ac-42c6-845c-4a43a16f2d9a_2816x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!H5A9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F985e133c-17ac-42c6-845c-4a43a16f2d9a_2816x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!H5A9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F985e133c-17ac-42c6-845c-4a43a16f2d9a_2816x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!H5A9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F985e133c-17ac-42c6-845c-4a43a16f2d9a_2816x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!H5A9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F985e133c-17ac-42c6-845c-4a43a16f2d9a_2816x1536.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="pullquote"><p>We&#8217;re teaching AI to think while we&#8217;ve stopped thinking altogether. <br>Just cows being milked in an increasingly insane asylum.</p></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://unvoid.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Signal in the Noise! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Ultra-Processed Content (UPC)]]></title><description><![CDATA[Time to put cognition before engagement]]></description><link>https://unvoid.substack.com/p/ultra-processed-content-upc</link><guid isPermaLink="false">https://unvoid.substack.com/p/ultra-processed-content-upc</guid><dc:creator><![CDATA[Unvoid]]></dc:creator><pubDate>Wed, 19 Nov 2025 12:52:05 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/03594414-c770-4ae8-87f6-a0272631122b_1344x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The rise of <strong>Ultra-Processed Content (UPC)</strong> in human information diets is damaging public intellect, fuelling chronic critical thinking atrophy worldwide, and deepening cognitive inequalities. Addressing this challenge requires a unified global response that confronts Big Tech power and transforms information systems to promote healthier, more organic thought processes, according to a new <em>Lancet Series on UPCs and Human Cognition</em>, published on Nov 19.</p><p>UPCs are the most processed group in the Transformer classification system, which categorises content by the extent and purpose of algorithmic generation. UPCs are identified by the presence of hallucinations, engagement-related additives, and syntax smoothing that enhance the flow, tone, or authority of text without adding intellectual substance. High UPC intake is associated with an increased risk of &#8220;Intellectual Obesity,&#8221; attention span fragmentation, and other neuro-degenerative conditions.</p><p>However, the value of the UPC concept is not universally accepted. Some critics argue that grouping AI-generated text that might have utility&#8212;such as fortified email drafts and summaries&#8212;into the UPC category, together with products such as reconstituted SEO blog posts or deep-fake comments, is unhelpful. But UPCs are rarely consumed in isolation. It is the overall UPC dietary pattern, whereby whole and minimally processed human thoughts are replaced by synthetic alternatives, and the interaction between multiple harmful algorithmic hooks, that drives adverse cognitive effects.</p><p>At the core of the UPC industry is the large-scale processing of cheap commodities&#8212;such as scraped Reddit threads, Wikipedia articles, and open-source code&#8212;into a wide array of LLM-derived substances and additives, controlled by a small number of transnational corporations. UPCs are aggressively marketed and engineered to be <strong>hyper-scrollable</strong>, driving repeated consumption and often displacing traditional, neuron-rich activities like deep reading or problem-solving. In many high-income countries, UPCs comprise about 50% of household screen time, and consumption is rising quickly as AI agents begin to perform white-collar labor automatically.</p><p>The harms extend to planetary mental health. The industrial production of tokens is compute-intensive, and the &#8220;plastic packaging&#8221; of generic corporate prose is ubiquitous.</p><p>The UPC industry generates enormous revenues that support continued model training and fund corporate political activities to counter attempts at AI regulation. A handful of manufacturers dominate the market, including OpenAI, Google, Meta, and Microsoft. A comprehensive, government-led approach is needed to reverse the rise in UPC consumption. Priority actions include:</p><ul><li><p>Adding <strong>ultra-processed markers</strong>&#8212;such as watermarks, metadata tags, and mandatory &#8220;Bot&#8221; disclosures&#8212;to cognitive profiling models used to identify unhealthy information.</p></li></ul><ul><li><p>Mandatory front-of-screen warning labels (e.g., <em>&#8220;This email was written by a machine; reading it may lower your IQ&#8221;</em>).</p></li><li><p>Bans on algorithmic marketing aimed at children (Generation Alpha).</p></li><li><p>Restrictions on these types of agents in educational institutions.</p></li><li><p>Higher taxes on API calls.</p></li></ul><p>The market dominance and political power of the UPC industry must also be addressed by stronger competition policy, replacing self-regulation with mandatory regulation, and combating corporate interference.</p><p>Equity must be central when addressing the challenge of UPCs. Consumption tends to be higher among people facing time poverty or economic hardship, who rely on &#8220;cheap&#8221; AI agents to perform tasks. Efforts to transition away from workflows that are high in UPCs must not deepen inequities in productivity among populations who are dependent on cheap AI options to remain competitive.</p><p>Echoing the recommendations of the <em>Neural-Lancet Commission</em>, transforming information systems will require redirecting venture capital subsidies away from large, transnational LLMs. Instead, a diverse range of &#8220;organic thought producers&#8221; (human writers, artists, and coders) should be supported in creating locally sourced, affordable, minimally processed ideas that are challenging yet appealing to consumers.</p><p>We can model the decline of human cognitive capacity (<em>C)</em> relative to the ubiquity of AI agents (<em>A</em>) with the following relationship, where (<em>k</em>) is the engagement optimization constant:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;C_{human} \\approx \\frac{1}{1 + e^{k \\cdot A_{agent}}}\n&quot;,&quot;id&quot;:&quot;BRDSKGQWEV&quot;}" data-component-name="LatexBlockToDOM"></div><p></p><p>The UPC industry is emblematic of an information system that is increasingly controlled by transnational corporations that prioritise engagement metrics ahead of public intelligence. The <em>Lancet Series</em> strengthens the case for immediate implementation of policies to address the UPC challenge. This requires a well-resourced, coordinated global response to break the grip of the UPC industry on the human mind.</p><div class="pullquote"><p>Based on the editorial &#8220;<a href="https://www.thelancet.com/journals/lancet/article/PIIS0140-6736(25)02322-0/fulltext">Ultra-processed foods: time to put health before profit</a>&#8221; from <em>The Lancet</em>, this is a parody editorial addressing the &#8220;health crisis&#8221; of the mind caused by AI. (And generated by AI).</p></div>]]></content:encoded></item></channel></rss>