<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

 <title>Sparse Thoughts</title>
 <link href="https://sparsethought.com/atom.xml" rel="self"/>
 <link href="https://sparsethought.com/"/>
 <updated>2026-04-12T18:45:58+00:00</updated>
 <id>https://sparsethought.com</id>
 <author>
   <name>Gal Sapir</name>
   <email>hello@sparsethought.com</email>
 </author>

 
 <entry>
   <title>maps, territory and LMs</title>
   <link href="https://sparsethought.com/2026/04/11/map-and-territory/"/>
   <updated>2026-04-11T00:00:00+00:00</updated>
   <id>https://sparsethought.com/2026/04/11/map-and-territory</id>
   <content type="html">&lt;p&gt;Borges has a very short story about an empire whose cartographers kept producing larger and larger maps, until they built one the size of the empire itself.&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; the following generations, less enchanted, saw it was useless and abandoned it to the weather. maps are useful precisely because they are reductions. when the pursuit of fidelity destroys the compression it destroys the point.&lt;/p&gt;

&lt;p&gt;for the purposes of this text, LMs are our maps.&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;i’ll cut to the chase (bear with me though). LMs have become really good. so good that they are now well beyond useful representations of the territory, and are in many ways beginning to &lt;a href=&quot;https://www.programmablemutter.com/p/the-political-economy-of-ai&quot;&gt;reshape the territory itself&lt;/a&gt;. this means, i think, that we need to be much better at reading maps without losing our connection to the territory. we need more ways to stay engaged while reading and interacting with them. much of our (professional) interaction with computers is mediated through LMs now: when examining a new codebase, when reading a paper, when priming ourselves towards a task. sometimes even as an interface for thinking. this is an abstraction layer that we are not really willing to avoid at this point (and im not saying that we should) but it changes what we need to be good at.&lt;/p&gt;

&lt;p&gt;Baudrillard, writing in 1981, proposed four stages that describe how representations relate to reality.&lt;sup id=&quot;fnref:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; i think they map (pun acknowledged) really nicely to LMs, and in a way that is unique, because LMs seem to occupy different stages all at once, depending on the use case.&lt;/p&gt;

&lt;p&gt;in stage one, the image is a faithful copy of reality. LMs were in a sense designed this way: trained to predict and reproduce patterns in human-generated text as accurately as possible, a compressed but structurally faithful representation of what we’ve written and thought.&lt;sup id=&quot;fnref:4&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;in stage two, the image masks and distorts reality. LMs do this too. what you get back is a smoothed-out, averaged version of the territory, and subtle distortions are easy to miss precisely because the surface looks coherent. ask an LM to explain the causes of the 2008 financial crisis and you’ll get subprime mortgages and deregulation. ask again with different framing, same answer. the response feels authoritative, but it’s closer to a popularity-weighted consensus than to the still-unresolved debates among economists.&lt;sup id=&quot;fnref:5&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;in stage three, the image masks the absence of reality. once you have a good enough approximation, engagement with the territory itself becomes less needed. you (may) stop checking sources because the answer looks right. you stop exploring because the recommendation feels sufficient. the financial crisis question again: asking it feels like research but is really just consuming a pre-averaged explanation. the activity looks the same, but something has been hollowed out.&lt;/p&gt;

&lt;p&gt;stage four, when the representation has no relation to reality at all, is trickier. i’m not sure we’re there yet, though part of what makes stage four unsettling is that you might not know when you’ve arrived. it possibly emerges when much of the content available for training new systems is mostly output of previous systems, or when “the chat” becomes everyone’s primary source of knowledge, “becoming both the image of god and god.”&lt;sup id=&quot;fnref:6&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:6&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;what’s uncomfortable is that the transitions between these stages aren’t clear. we can’t point to the exact moment when a useful map starts substituting for the territory. it’s slippery, and that slipperiness is what makes it hard to stay aware.&lt;/p&gt;

&lt;p&gt;LMs are not like other maps.&lt;/p&gt;

&lt;p&gt;a cartographic map looks the same to every reader. an LM doesn’t. the output changes with &lt;a href=&quot;https://arxiv.org/abs/2604.05051&quot;&gt;slight modifications to the prompt&lt;/a&gt;, and it has been shown that the sophistication of the model’s responses correlates with the educational background of the person prompting it.&lt;sup id=&quot;fnref:7&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:7&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; this map is very much in the eyes of the beholder. it’s also malleable in ways that static maps never were: you can zoom in and out of topics, approach them from different angles, connect information across fields that would be harder to bridge otherwise.&lt;/p&gt;

&lt;p&gt;this is genuinely useful. it clears away clutter and creates space to truly reflect on a research project, on a complex codebase, on ideas that are half-formed. these “means of summarization,” as Henry Farrell called them,&lt;sup id=&quot;fnref:8&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:8&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; are useful even though we always have access to the full territory (the entire web), partly because of the flexibility of input and output, and mainly because they are much better at understanding what we want.&lt;/p&gt;

&lt;p&gt;unlike any previous map, this one is also becoming an object of study in its own right. since these maps arrived, everyone wants to be a cartographer: building, tinkering, adapting these systems, exploring what’s inside them. in many areas of AI research, models are explored not as maps of reality but as something useful on their own terms. houellebecq’s protagonist in &lt;em&gt;the map and the territory&lt;/em&gt; argued that the map is more interesting than the territory. in AI research, this is increasingly literally the case.&lt;sup id=&quot;fnref:9&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:9&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;9&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;so here is where i think the actually interesting part is.&lt;/p&gt;

&lt;p&gt;using these maps well, knowing when to trust them, when to zoom in, when to stop and touch the territory, is a skill, and it is largely a tacit one. it’s also a personal one: because the map looks different to each reader, the intuitions you develop are calibrated to your own version of it, not to a shared public artifact. by tacit i mean something close to what Michael Polanyi meant when he wrote, with admirable directness, “we can know more than we can tell.”&lt;sup id=&quot;fnref:10&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:10&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;10&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;the tacit knowledge here isn’t about spotting obvious hallucinations. it’s subtler: a feeling that something hasn’t been verified, an uneasiness about a claim you’re not sure the data supports, a sense that the output is too smooth.&lt;sup id=&quot;fnref:11&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:11&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;11&lt;/a&gt;&lt;/sup&gt; it’s the kind of thing a clinician means when they say a patient “looks sick” before the labs come back, or a developer means when they talk about “code smell.” you attend from pattern recognition you can’t fully articulate to a judgment that something needs checking.&lt;/p&gt;

&lt;p&gt;Polanyi has a really nice example of a blind person learning to use a probe.&lt;sup id=&quot;fnref:10:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:10&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;10&lt;/a&gt;&lt;/sup&gt; at first you feel the impact of the probe against your hand. but as you learn, your awareness shifts: you stop feeling the probe and start feeling what the probe touches. the proximal sensation becomes distal perception. using LMs well might be something like this: at first you attend to the output itself (is this correct? does this look right?). over time, if you develop the skill, you begin to attend through the output to the “territory” behind it.&lt;/p&gt;

&lt;p&gt;this skill is learned through practice and resists being codified into rules or checklists. a piece about maps, then, that arrives at the conclusion that the most important skill for navigating them can’t itself be mapped.&lt;sup id=&quot;fnref:12&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:12&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;12&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;i should probably note: the analogy of LMs as maps is itself a map, and i’ve tried to use it where it’s useful without forcing it where it isn’t. LMs are also tools, research subjects, economic forces, things that reshape the territory they represent. no single frame captures all of this.&lt;/p&gt;

&lt;p&gt;the current LMs we use are the worst ones we’ll ever get to use. they will get better (in all aspects). the skill of reading maps well, of maintaining that productive uneasiness, will matter more next year than it does now.&lt;/p&gt;

&lt;p&gt;Borges’ cartographers fell in love with map-making and forgot what it was for. the next generation, less enchanted, abandoned the map to the weather. neither response seems right to me. somewhere between obsession and indifference, there is the delicate practice of using these maps well, and of staying honest about how our own relationship to them keeps changing.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;jorge luis borges, “on exactitude in science” (1946). the full story is &lt;a href=&quot;https://kwarc.info/teaching/TDM/Borges.pdf&quot;&gt;one paragraph long&lt;/a&gt; &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;i use “LMs” loosely here to mean the whole stack: language models, the systems built around them, the agents, the tools. the map is the whole thing, not just the weights. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Jean Baudrillard, &lt;em&gt;simulacra and simulation&lt;/em&gt; (1981). the four stages are drawn from his theory of how images progressively detach from reality. &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;whether “faithful representation” was ever truly the goal of language model training is debatable: prediction and representation aren’t the same thing. but functionally, the result is a compressed mirror of human-generated text, which behaves like a faithful copy in many contexts. &lt;a href=&quot;#fnref:4&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;the loop compounds: more people absorb the simplified explanation, more content reflects that framing, the model becomes even more confident in offering it. the map shapes the territory it claims to describe. &lt;a href=&quot;#fnref:5&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:6&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;this echoes Baudrillard’s argument about the byzantine iconoclasts, who feared that creating images of god would reveal there was nothing behind the images. when the representation becomes authoritative enough, the distinction between “represents knowledge” and “is knowledge” quietly collapses. &lt;a href=&quot;#fnref:6&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:7&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;see &lt;a href=&quot;https://www.anthropic.com/research/anthropic-economic-index-january-2026-report&quot;&gt;anthropic’s economic index report&lt;/a&gt; (january 2026) on how model output sophistication correlates with the educational background of the person prompting. &lt;a href=&quot;#fnref:7&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:8&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;henry farrell, &lt;a href=&quot;https://www.programmablemutter.com/p/the-political-economy-of-ai&quot;&gt;“the map is eating the territory”&lt;/a&gt; (2024). his treatment of the political economy of AI-as-summarization is thorough and worth reading in full. i’m deliberately not covering that ground here. &lt;a href=&quot;#fnref:8&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:9&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;michel houellebecq, &lt;em&gt;the map and the territory&lt;/em&gt; (2010). his protagonist achieves fame by photographing road maps, arguing they are more beautiful than the landscapes they represent. to be clear: studying models on their own terms is important and legitimate work. i’m observing the shift, not criticizing it. &lt;a href=&quot;#fnref:9&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:10&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;michael polanyi, &lt;a href=&quot;https://tacit-knowledge-architecture.com/object/the-tacit-dimension-excerpt/&quot;&gt;&lt;em&gt;the tacit dimension&lt;/em&gt;&lt;/a&gt; (1966). LMs are, funnily enough, also a bit like this: they contain more than they can easily surface, and you have to prompt them in certain ways to make them reveal what they have. a kind of loosely encrypted zip file of human knowledge. &lt;a href=&quot;#fnref:10&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:10:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:11&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;as an example: a colleague ran a hypothesis-generation agent on a prompt about liver ultrasound correlations in large populations. it retrieved 18 papers, applied five “research facets,” and produced five hypotheses with titles, research questions, and experiment plans. the structure was impeccable. but the first hypothesis simply restated the input prompt. the third grabbed a zero-citation paper about skeletal muscle oxygenation and proposed “do this but for liver” with no consideration of whether that makes anatomical sense. the map of how science works was used to produce the appearance of science working. &lt;a href=&quot;#fnref:11&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:12&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;i’ve written more about the related problem of cognitive offloading and maintaining engagement with these tools in &lt;a href=&quot;https://sparsethought.com/2026/02/03/offloading-cognition/&quot;&gt;“cognitive offloading, exoskeletons, and remaining sentient”&lt;/a&gt;. &lt;a href=&quot;#fnref:12&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>building tools as procrastination: a CLI for citations in Google docs</title>
   <link href="https://sparsethought.com/2026/03/13/cite-tool/"/>
   <updated>2026-03-13T00:00:00+00:00</updated>
   <id>https://sparsethought.com/2026/03/13/cite-tool</id>
   <content type="html">&lt;p&gt;so this post is comprised of a few thoughts that converged into a tool.&lt;/p&gt;

&lt;p&gt;first: building small things is the new procrastination. i acknowledge that fully. and yet i keep finding myself building small solutions for specific usecases, and i think it comes down to the fact that the famous xkcd &lt;a href=&quot;https://xkcd.com/1205/&quot;&gt;is it worth the time&lt;/a&gt; has just shifted. it takes a lot less time and effort to build small tools you wish you had.&lt;/p&gt;

&lt;p&gt;as a researcher writing papers and preprints (anything that needs proper citations) i always hated the manual labor of managing references. from early days with EndNote to more recent alternatives, it always felt like adding sand to the gears of the actual writing process.&lt;/p&gt;

&lt;p&gt;there’s also another thought, and it collides with the first one. the idea of reducing a problem to another problem that’s already been solved.&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; these days, anything that can be expressed as a CLI workflow is basically a solved problem, and if it isn’t solved yet, you mostly just need to add the right command to make it work (and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--help&lt;/code&gt; flag, and the skill file, but ok).&lt;/p&gt;

&lt;p&gt;and but so, i wanted to take this specific pain point of adding citations to papers (and i’ll be more specific: papers that are edited collaboratively on a google doc) and make it frictionless.&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; the result is &lt;a href=&quot;https://github.com/galsapir/cite-cli&quot;&gt;cite-cli&lt;/a&gt;: a terminal-based citation manager that resolves papers by DOI, PMID, arXiv ID or title search, stores them in a local library synced with Zotero, and inserts inline citations and bibliographies directly into Google Docs. the typical workflow is: write in Google Docs, paste reference URLs inline as you go, then run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cite scan&lt;/code&gt; and it formalizes everything.&lt;/p&gt;

&lt;p&gt;i probably got motivated by two things. first, i find myself using and improving my own specialized tools almost all the time now. &lt;a href=&quot;https://galsapir.github.io/marginalia/&quot;&gt;Marginalia&lt;/a&gt; is much more feature rich than when i first built it and i use it every other day, and i use &lt;a href=&quot;https://github.com/galsapir/blog-narrator&quot;&gt;blog-narrator&lt;/a&gt; for most posts. second, as procrastination. it’s a busy and also unsettling time, and working on a shiny new tool is a really nice way to spend some free time.&lt;/p&gt;

&lt;p&gt;i already have some early success using it in testing. i hope that when the work on the current manuscript is done, the tool will be much more complete and well-used.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;the formal term is “reduction” but the intuition is simpler than that: if you can reframe your problem as an instance of something people already know how to solve, you’re most of the way there. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;i took some time to research other available options and couldn’t find anything close to a complete solution for this specific workflow (CLI to Google Docs with Zotero sync). &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>what i've read in 2026 so far</title>
   <link href="https://sparsethought.com/2026/03/07/reading-q1-2026/"/>
   <updated>2026-03-07T00:00:00+00:00</updated>
   <id>https://sparsethought.com/2026/03/07/reading-q1-2026</id>
   <content type="html">&lt;p&gt;For various reasons&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, i found myself away from ‘work work’ for the past couple of weeks, and also mostly away from a laptop&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;, and because of that, first of all i feel rusty and out of touch with the research areas (and some aspects of agentic coding). we’ll see how to come out and fix that: i can double click on this feeling and say that a] it’s probably mostly ‘fake’ in the sense that stuff is indeed moving fast, but two weeks away isn’t a lot in the grand scheme of things, and is more a result of being on the bleeding edge than anything else, and b] that this feeling is pretty much motivating and useful, so yay, let’s try to utilize it. And second of all, my mental energy flowed elsewhere i suppose. A nice thing about being away is that i had the mental space to think about grander things! So i’m writing about some great books.&lt;/p&gt;

&lt;p&gt;I tried to focus on reading this past period, and this is by no means an exhaustive list of everything&lt;sup id=&quot;fnref:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;. Anyway, i always wanted to better collect the content i go through, and thought this might be a good place to start.&lt;/p&gt;

&lt;p&gt;Two big books dominated my last couple of months with some lighter stuff in between.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Brothers Karamazov:&lt;/strong&gt; i could never truly write about Dostoyevsky&lt;sup id=&quot;fnref:4&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;. Too much has been written already. I can try though. Kurt Vonnegut allegedly referred to the Brothers and said “there is one other book that can teach you everything you need to know about life.” That feels right.&lt;/p&gt;

&lt;p&gt;The part i remember laughing hard about was the description of medicine from the conversation between Ivan and the devil, at that period where it was ‘too specialized’ (one doctor for the right nostril and another for the left one). But this novel is also really deeply moving. The way the characters swing between moods, the way they converse, it all feels very real. And not only the brothers themselves, also Lise’s weird attraction to suffering and pain, which i can only think of as a form of searching for authenticity. The devil’s visit to Ivan (predicting satellites!, interesting). And of course, the narrator, who is on one hand very ‘familiar’ and talks about ‘our town’, but also knows the innermost thoughts of the characters, and yet is not completely reliable, and is very self-conscious about it. This kind of unreliable semi-omniscient narrator was really captivating. Of course, the trial, and the ‘two abysses’ of the Karamazov nature.&lt;/p&gt;

&lt;p&gt;It would be hard for me to claim that i understand Dostoyevsky, but i definitely wish i could have a conversation with him&lt;sup id=&quot;fnref:5&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Grapes of Wrath:&lt;/strong&gt; i think i’m in a phase of classics; it feels like the ultimate antidote to much of the online discourse and the world at large at the moment. I went for Steinbeck because i enjoyed Of Mice and Men &lt;strong&gt;a lot&lt;/strong&gt;. Somehow this feels heavier in content than the Brothers, in retrospect (i’d finished it before starting the Brothers). I guess i read it right after / during watching Pluribus and some of the scenery got tangled up for me, they do travel from the panhandle to California through NM. I think i’ve read it as a ‘familial’ and periodic novel, about the relations between the family members and how they hold (a reminder to myself that i should have written about it in real time). I will quote one thing here, from an exchange between Al and his mother:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Al: “Ain’t you thinkin’ what’s it gonna be like when we get there? Ain’t you scared it won’t be nice like we thought?”&lt;/p&gt;

  &lt;p&gt;Ma: “No,” she said quickly. “No, I ain’t. You can’t do that. I can’t do that. It’s too much — livin’ too many lives. Up ahead they’s a thousan’ lives we might live, but when it comes, it’ll on’y be one. If I go ahead on all of ‘em, it’s too much.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Something about not pre-living many different lives when only one will end up arriving.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;Essays and other stuff i found online&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://blog.cloudflare.com/code-mode-mcp/&quot;&gt;Code Mode and MCP&lt;/a&gt;: i enjoy the Cloudflare folks’ blog and try to read some of their technical stuff from time to time. This one is about how they fit the entire Cloudflare API into &amp;lt;1000 tokens.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://simonwillison.net/2026/Feb/10/showboat-and-rodney/&quot;&gt;Showboat and Rodney&lt;/a&gt; (Simon Willison): i’m not even sure this was the best simonw piece from recent times, but it touches on the important topic of making coding agents ‘show’ rather than ‘tell’ about their work.&lt;/p&gt;

&lt;p&gt;Rereads:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://paulgraham.com/taste.html&quot;&gt;Taste&lt;/a&gt; (Paul Graham): oldie but goodie, read it on the way to the airport.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://paulgraham.com/goodwriting.html&quot;&gt;Good Writing&lt;/a&gt; (Paul Graham): “ideas are tree-shaped and essays are linear.”&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://marginalrevolution.com/marginalrevolution/2019/07/how-i-practice-at-what-i-do.html&quot;&gt;How I Practice at What I Do&lt;/a&gt; (Tyler Cowen): one of those essays where i can usually find something new and unexplored each time.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.cold-takes.com/learning-by-writing/&quot;&gt;Learning by Writing&lt;/a&gt; (Holden Karnofsky): i recollected pieces of this one quite often, now that i try to write a bit more.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;Interesting research / review papers (just one):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.cell.com/cell/fulltext/S0092-8674(25)01498-9&quot;&gt;The Hallmarks of Cancer&lt;/a&gt;: this is almost nostalgic to me. This paper has three versions, and when i was in medical school we learned an earlier one. It’s interesting to see what has remained relevant and what changed in the past decade. It also made me miss medicine in the traditional sense, and good-old-fashioned biology research.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Some great, some not so much. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;The feeling of being out of touch even for a fortnight hits the FOMO really hard. I’ve accumulated a lot of stuff i want to try and do in that time! &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I also kind of wanted it to be exhaustive, maybe in the future this will be a running document, or at least a list i keep updated. At the moment this was mostly composed after the fact, due to the circumstances. &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;It’s just too big and too cramped a space. Much more intelligent people have written about him. &lt;a href=&quot;#fnref:4&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Like Salinger said about how it’s a great book if you finish it and you wish the author was a friend of yours and you could pick up the phone and talk to him. &lt;a href=&quot;#fnref:5&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>a small tool for diagrams</title>
   <link href="https://sparsethought.com/2026/02/18/drawio-with-claude/"/>
   <updated>2026-02-18T00:00:00+00:00</updated>
   <id>https://sparsethought.com/2026/02/18/drawio-with-claude</id>
   <content type="html">&lt;p&gt;I needed a way to make diagrams for posts and papers. The requirements were simple: something I could mostly just ask Claude to create, something that looked decent for scientific work, and something I could edit afterward — not a PNG I’d have to regenerate from scratch every time I wanted to move a box.&lt;/p&gt;

&lt;p&gt;I looked at excalidraw and tldraw first, explored a few implementations, and ended up going with draw.io’s XML format. The reasons were mostly practical — it’s widely supported, the files open directly in the draw.io editor, and the XML structure turned out to be something Claude handles well.&lt;/p&gt;

&lt;p&gt;The result is &lt;a href=&quot;https://github.com/galsapir/drawio-claude&quot;&gt;drawio-claude&lt;/a&gt;. The workflow is simple: you point Claude Code at the repo, the skills built with the &lt;a href=&quot;https://github.com/galsapir/claude-skills/&quot;&gt;skill creator&lt;/a&gt; guidelines tell it how to generate &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.drawio&lt;/code&gt; files, and then you just ask for what you need in plain text. Describe a diagram, give it context, and it produces an editable file you can open directly in draw.io. Here’s an example — an evaluation cycle figure I’m working on for a preprint:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/tdd-flywheel.drawio.svg&quot; alt=&quot;Example diagram generated with drawio-claude&quot; /&gt;&lt;/p&gt;

&lt;p&gt;A caveat: I built this mostly through detailed prompting and my &lt;a href=&quot;https://github.com/galsapir/claude-skills/&quot;&gt;interview skill&lt;/a&gt;, not by deeply understanding how draw.io’s XML works under the hood. I invested time in making sure the skill instructions were good and tested the outputs, but I didn’t sit down and learn the format. For this kind of single-purpose tool, I think that’s fine — the point is that it works and I can fix things in the editor when it doesn’t.&lt;/p&gt;

&lt;p&gt;The broader point: I think investing a small amount of time in building a narrow internal tool is surprisingly high-leverage right now. Even if it serves one specific purpose. The eval post was partly about that — we built custom evaluation tooling that only made sense for our specific health agent, and it ended up being one of the most valuable things we did. This is the same instinct applied to something much smaller. The cost of building these things has dropped enough that “should I build a small tool for this?” is almost always worth asking.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>narrating your blog with local AI</title>
   <link href="https://sparsethought.com/2026/02/11/narrating-your-blog/"/>
   <updated>2026-02-11T00:00:00+00:00</updated>
   <id>https://sparsethought.com/2026/02/11/narrating-your-blog</id>
   <content type="html">&lt;p&gt;A friend who drives a lot asked if there was an audio version of my posts. There wasn’t. So I looked into it — and it turned out to be absurdly easy.&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;The whole thing took an evening. That’s the part worth writing about.&lt;/p&gt;

&lt;p&gt;Open-source text-to-speech crossed a quality threshold sometime in 2025, and I completely missed it. Kokoro-82M&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; is 82 million parameters — tiny — Apache 2.0 licensed, and it sounds good enough that I had to double-check I wasn’t accidentally using a paid API. On an M4 MacBook it generates 15 minutes of audio in about 60 seconds. Chatterbox by Resemble AI beat ElevenLabs in blind listening tests. Multiple open models now compete with the proprietary leaders. This happened fast.&lt;/p&gt;

&lt;h2 id=&quot;what-i-built&quot;&gt;what I built&lt;/h2&gt;

&lt;p&gt;I wrote a small tool called &lt;a href=&quot;https://github.com/galsapir/blog-narrator&quot;&gt;blog-narrator&lt;/a&gt; that adds “listen to this post” audio to Jekyll blogs. It strips markdown to clean narration text,&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; generates speech locally via Kokoro through &lt;a href=&quot;https://github.com/Blaizzy/mlx-audio&quot;&gt;mlx-audio&lt;/a&gt; on Apple Silicon, and embeds a minimal audio player that shows up on posts that have audio. No API keys, no cloud, no cost.&lt;/p&gt;

&lt;p&gt;The workflow: write your post, run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;narrate _posts/your-post.md&lt;/code&gt;, commit, push. Done.&lt;/p&gt;

&lt;p&gt;What strikes me isn’t the technology — it’s the ratio. An evening of work, zero ongoing cost, and every post on my blog now has a listenable version. A year ago this would have required an API subscription, careful rate limiting, probably a CI pipeline. Now it’s a Python script and a Jekyll include.&lt;/p&gt;

&lt;p&gt;I keep noticing this pattern. Things that used to require real infrastructure quietly becoming a single local command. Not because someone built a product for it, but because the underlying models got good enough that you can just wire them up yourself. The fruit hangs so low now that it feels irresponsible not to pick it.&lt;/p&gt;

&lt;h2 id=&quot;setup&quot;&gt;setup&lt;/h2&gt;

&lt;p&gt;If you want to add this to your Jekyll blog:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;pip &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;git+https://github.com/galsapir/blog-narrator.git
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Copy the &lt;a href=&quot;https://github.com/galsapir/blog-narrator/blob/main/jekyll/_includes/audio-player.html&quot;&gt;audio player include&lt;/a&gt; to your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_includes/&lt;/code&gt; directory, add one line to your post layout, create a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;narrate.yml&lt;/code&gt; config, and run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;narrate&lt;/code&gt; on your posts. The &lt;a href=&quot;https://github.com/galsapir/blog-narrator&quot;&gt;README&lt;/a&gt; has the full details.&lt;/p&gt;

&lt;p&gt;Requires macOS with Apple Silicon, Python 3.10+, and ffmpeg.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;By Hexgrad. The &lt;a href=&quot;https://huggingface.co/spaces/TTS-AGI/TTS-Arena&quot;&gt;HuggingFace TTS Arena&lt;/a&gt; tracks quality rankings across open and proprietary TTS models — worth a look if you’re curious about the landscape. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Frontmatter, code blocks, images, footnotes, Liquid tags get stripped. Links and headers become plain text. The goal is prose that sounds natural when read aloud. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>a second opinion</title>
   <link href="https://sparsethought.com/2026/02/11/a-second-opinion/"/>
   <updated>2026-02-11T00:00:00+00:00</updated>
   <id>https://sparsethought.com/2026/02/11/a-second-opinion</id>
   <content type="html">&lt;p&gt;I’ve been noticing something about how I work with Claude. It’s not dramatic — no moment where the model led me off a cliff and I realized too late. It’s more of a drift. The models have gotten good enough that my default reaction to most outputs is “yeah, that’s probably right.” And most of the time it is. But “most of the time” is doing a lot of work in that sentence.&lt;/p&gt;

&lt;p&gt;The issue isn’t that I’m getting burned. It’s that I’ve stopped checking. For high-stakes things — a spec, a significant architectural decision — I still verify. But the threshold for what counts as “high-stakes” keeps creeping upward, because the models keep being right enough to justify the creep. It’s the same slow drift I wrote about before,&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; just showing up in a new way: not as skill degradation from outsourcing the thinking, but as a quiet erosion of the habit of questioning the output.&lt;/p&gt;

&lt;p&gt;I also wanted an excuse to try the OpenAI Codex models — I’ve been hearing good things and was curious about the intelligence, what they catch, what they care about — but didn’t want to significantly change my day-to-day workflow to do it.&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; So I built a Claude Code skill that lets me get a second opinion from a different model at distinct checkpoints — moments where the stakes feel high enough that I want extra confidence before moving on.&lt;/p&gt;

&lt;h2 id=&quot;what-it-is&quot;&gt;what it is&lt;/h2&gt;

&lt;p&gt;It’s called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adversarial-review&lt;/code&gt;. You point it at a file, a diff, a spec, a GitHub issue, and it sends the thing to a different model for a second opinion. One extra call, not an elaborate multi-agent consensus protocol where three models argue for dozens of thousands of tokens until they converge. Just: here’s what I’m working on, what does a different set of weights think about it?&lt;/p&gt;

&lt;p&gt;It supports a few backends — Codex (OpenAI’s GPT family), &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;claude -p&lt;/code&gt; (a separate Claude instance with fresh context), and AWS Bedrock. The most interesting case is Codex, because it’s a genuinely different model family. When GPT and Claude agree on a finding, that convergence means more than either model flagging it alone. When they disagree, that’s interesting too.&lt;/p&gt;

&lt;p&gt;The prompt template asks the reviewer to steelman first — articulate the author’s intent before critiquing — and requires concrete impact for every finding (“what actually breaks or degrades?”, not “best practice says…”). Each finding gets a severity and confidence rating, and I specifically wanted the confidence rating because LOW confidence is honest uncertainty, which is more useful than false authority. The output ends with a verdict: SHIP, ITERATE, or RETHINK.&lt;/p&gt;

&lt;p&gt;The skill and the prompt template are &lt;a href=&quot;https://github.com/galsapir/claude-skills&quot;&gt;here&lt;/a&gt; if anyone wants to look or use them — they already include the improvements I describe below.&lt;/p&gt;

&lt;h2 id=&quot;the-recursive-first-test&quot;&gt;the recursive first test&lt;/h2&gt;

&lt;p&gt;The first thing I actually tested it on was the skill itself. I sent the Bedrock wrapper script to Codex for review, and the review came back with real findings — no error handling around the boto3 calls, no file I/O error handling, hardcoded token limits. Both Codex and Claude agreed on the high-severity items (which was a useful signal in itself).&lt;/p&gt;

&lt;p&gt;But then I looked at the skill more broadly and realized the whole thing didn’t follow Anthropic’s own &lt;a href=&quot;https://github.com/anthropics/skills&quot;&gt;skill-creator guidelines&lt;/a&gt;. The frontmatter had non-spec fields, the prompt template was in the wrong directory, the SKILL.md was overly verbose — trying to hand-hold the orchestrating model instead of trusting it. So the first review led to a significant restructuring: the SKILL.md went from 139 lines to 75, the prompt template moved to a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;references/&lt;/code&gt; directory where it belongs, and the frontmatter got cleaned up to match the actual spec. The tool’s first review ended up improving itself.&lt;/p&gt;

&lt;h2 id=&quot;the-real-test-and-what-it-tells-us&quot;&gt;the real test, and what it tells us&lt;/h2&gt;

&lt;p&gt;After the self-review, I pointed it at something more substantial — a spec for replacing our health chatbot’s architecture, moving from a DSPy state machine to Anthropic’s Agent SDK. This is the kind of thing I’d normally want a peer engineer to look at, but the review was done by Codex with GPT-5.3.&lt;/p&gt;

&lt;p&gt;The review came back with a verdict of ITERATE and several findings. Being honest about how it went: I’d rate it maybe a 6/10 as a review. It added one genuinely valuable finding — a security gap where the SDK’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bypassPermissions&lt;/code&gt; combined with absolute file paths could expose PHI — plus a useful clarification about concurrency in the subprocess tool. It actually searched the SDK docs to verify claims rather than just pattern-matching on the spec text, and the understanding section was accurate, which builds trust in the rest.&lt;/p&gt;

&lt;p&gt;But there was noise, too. It flagged streaming message ordering as a concern, suggesting turn IDs and sequence numbers — which makes sense for HTTP polling in a distributed system, but not for a WebSocket POC with a single user. WebSockets are ordered and reliable; the finding showed pattern-matching from a known category of concerns rather than understanding the actual transport. It also flagged subprocess capacity limits that the spec itself already acknowledged as POC-irrelevant.&lt;/p&gt;

&lt;p&gt;More telling is what it missed entirely. The review was asked to challenge SDK API assumptions — are those import paths correct? Is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;receive_response()&lt;/code&gt; the actual method name? — and it searched the docs but never reported back on what it found. No comment on whether the Langfuse tracing integration would actually work. No challenge to the system prompt design, which embeds clinical safety guardrails as a raw string — is that robust? Can it be jailbroken? These are essence questions, and the review didn’t touch them.&lt;/p&gt;

&lt;p&gt;This maps almost exactly onto a distinction I’ve written about before.&lt;sup id=&quot;fnref:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; The tool can check form — structural patterns, security anti-patterns, missing error handling. It can’t check essence — whether the SDK API actually works the way the spec assumes, whether the clinical guardrails are robust, whether the implementation plan ordering makes sense given the domain. The one real finding it surfaced (permissions/PHI exposure) is something any competent reviewer would catch by pattern-matching. The things it missed require actually understanding the specific SDK, the clinical context, the domain.&lt;/p&gt;

&lt;p&gt;For zero human effort beyond invoking the command, one real finding plus one useful clarification is a positive ROI on ~46K tokens. But it’s not a substitute for a peer engineer who knows the SDK. The bar isn’t “is this as good as a senior engineer” — it’s “is this better than not checking at all,” which, given the drift I described at the top, is the actual alternative.&lt;/p&gt;

&lt;p&gt;After the 6/10 review I went back and made targeted improvements to the skill — the kind that directly addressed why it scored poorly without bloating the prompt or touching the parts that already worked. Three things: the reviewer now has to explicitly address every focus area you give it (so it can’t silently skip “challenge SDK API assumptions” anymore), the prompt is stage-aware so it calibrates severity to whether you’re reviewing a POC or production code (no more distributed-systems concerns for a single-connection WebSocket), and for specs specifically it now has to verify technical claims and report back with a CONFIRMED/INCORRECT/UNVERIFIABLE status. I haven’t re-run the full review yet, so I can’t say whether these changes actually move the needle — that’s next.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I wrote about cognitive offloading and the drift toward less engagement in &lt;a href=&quot;https://sparsethought.com/2026/02/03/offloading-cognition/&quot;&gt;cognitive offloading, exoskeletons, and remaining sentient&lt;/a&gt;. The interview format I mentioned there — using AI as an interlocutor rather than a doer — is the same impulse, just applied differently. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/interview&lt;/code&gt; command is about staying engaged during the thinking phase; this one is about catching things during the review phase. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I didn’t want to switch tools or start a separate workflow — I just wanted to be able to tap into a different model’s perspective from within my existing setup. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;The form vs. essence gap — being able to verify citations and tool calls but struggling to assess whether the output actually helps — is something I explored in &lt;a href=&quot;https://sparsethought.com/2026/01/29/evaluating-agents-in-health/&quot;&gt;how we actually evaluate agents (health)&lt;/a&gt;. &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>opus 4.6 and two small tools</title>
   <link href="https://sparsethought.com/2026/02/06/opus-4.6-other-stuff/"/>
   <updated>2026-02-06T00:00:00+00:00</updated>
   <id>https://sparsethought.com/2026/02/06/opus-4.6-other-stuff</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;https://www.anthropic.com/news/claude-opus-4-6&quot;&gt;Opus 4.6&lt;/a&gt; came out ~20 hours ago and I wanted to get a feel for it. It also seemed like a good chance to follow up on some of the ideas from my previous post — specifically, building small tools that help me stay more engaged with my own work rather than just producing output.&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h2 id=&quot;opus-46&quot;&gt;Opus 4.6&lt;/h2&gt;

&lt;p&gt;The experience isn’t wildly different from Opus 4.5, but the edges are smoother in ways that matter. It picks up intent faster: I found myself spending less time explaining what I wanted, which over a full session adds up. It seems more inclined toward longer time-horizon tasks, willing to loop and think for &amp;gt;8 minutes before surfacing an answer, and it spawns multiple sub-agents more readily out of the box without much coaxing.&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; I haven’t tried the full &lt;a href=&quot;https://code.claude.com/docs/en/agent-teams&quot;&gt;agent teams&lt;/a&gt; thing yet, but the multi-agent orchestration feels like it’s gotten significantly less fiddly.&lt;/p&gt;

&lt;p&gt;The thing I noticed most was the quality of the questions. When I used it in an interview-style flow, the questions felt more to the point and more thoughtful — less of the “asking just because” quality I’d sometimes get before, where it seemed like the model was generating questions for the sake of generating questions. I wonder if they invested time specifically in making it interview better.&lt;/p&gt;

&lt;h2 id=&quot;the-things-i-built&quot;&gt;the things I built&lt;/h2&gt;

&lt;p&gt;I’ve been wanting to use the interview format more deliberately (AI as an interlocutor rather than a doer thing), where you’re still doing the cognitive work but something is prompting you to externalize and refine your thinking. So making that more convenient seemed like a natural place to start.&lt;/p&gt;

&lt;p&gt;I went looking for existing interview-style plugins.&lt;sup id=&quot;fnref:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; The well-known ones&lt;sup id=&quot;fnref:4&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; weren’t quite what I was after — they tend toward exhaustive question lists without much ability to steer the process. What I wanted was a checkpoint mechanism: every few questions, pause and let me say “we’re too deep in the details” or “not deep enough.” The ability to tune the depth as you go, depending on what the task actually needs. The result is &lt;a href=&quot;https://github.com/galsapir/claude-interview&quot;&gt;here&lt;/a&gt; — it’s a Claude Code command, nothing fancy, but it strikes a balance I’m happy with.&lt;/p&gt;

&lt;p&gt;The second tool came from a pattern I’ve been noticing in my day-to-day. Markdowns are everywhere (specs, plans, research notes) and I kept finding myself needing to go over an LLM-generated markdown and provide detailed feedback before continuing. I was doing this by manually annotating raw &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.md&lt;/code&gt; files in VSCode or nano, which isn’t great when you want to see the rendered version and annotate on it at the same time. So I built &lt;a href=&quot;https://galsapir.github.io/marginalia&quot;&gt;Marginalia&lt;/a&gt;, a small SPA that lets you view rendered markdown and add margin annotations.&lt;sup id=&quot;fnref:5&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; No sessions, no backend — it just lives in the browser. It’s a one-off tool for a specific friction point, the moment where you need to actually engage with what came back rather than staying in the “fix it plz” loop.&lt;/p&gt;

&lt;p&gt;I think both of these are attempts to take the stuff that’s been living in my head (about staying engaged, about not outsourcing the thinking) and work it into my actual day-to-day (whether they end up being useful beyond my own workflow, I don’t know, but the links are there if anyone wants to try them).&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I wrote about this more fully in &lt;a href=&quot;https://sparsethought.com/2026/02/03/offloading-cognition/&quot;&gt;cognitive offloading, exoskeletons, and remaining sentient&lt;/a&gt;. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I didn’t spend too much time exploring the code-level details here — the code itself wasn’t the point for me. This was more about getting a sense of how the model operates. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;See &lt;a href=&quot;https://code.claude.com/docs/en/plugins-reference&quot;&gt;Claude Code plugins reference&lt;/a&gt;. &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;e.g. &lt;a href=&quot;https://x.com/trq212/status/2005315275026260309&quot;&gt;this one&lt;/a&gt; — good, but 80 questions about everything wasn’t what I needed. &lt;a href=&quot;#fnref:4&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;The whole transcript of building it is available too if anyone’s interested — &lt;a href=&quot;https://gist.github.com/galsapir/faece917b6c1238378a222d82017899e&quot;&gt;here&lt;/a&gt;. It wasn’t a zero-shot, but it was close. &lt;a href=&quot;#fnref:5&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>cognitive offloading, exoskeletons, and remaining sentient</title>
   <link href="https://sparsethought.com/2026/02/03/offloading-cognition/"/>
   <updated>2026-02-03T00:00:00+00:00</updated>
   <id>https://sparsethought.com/2026/02/03/offloading-cognition</id>
   <content type="html">&lt;p&gt;How can someone who enjoys thinking — enjoys the cognitive load — use coding agents and LLMs to foster continued learning, and not skill degradation? And what are some useful mental frameworks to have in mind?&lt;/p&gt;

&lt;p&gt;I think this is really about the reality we all live: the reality of coding agents and chatting with LLMs and how it affects us building (or eroding?) our skills. I always considered myself fortunate that I didn’t have those tools when I was under the stress of a lot of coursework during undergrad (or grad school / PhD for that matter). Every time I wanted some sort of output, I had no choice but to learn how to make it happen. Like many things, I value it a lot more in retrospect. But eh, I mean I’m not sure anyone wants to hear about the good ol’ days. This is not what we are here for.&lt;/p&gt;

&lt;p&gt;I’m writing about this because it’s a topic that has been pecking at me probably since I first tried ChatGPT way back when. It was less prominent in the past because of two things: models, and harnesses. At this point in time, the models are good enough to actually take away most of our cognitive work (if we are not careful), and the harnesses are good (or, treacherous) enough to make it almost frictionless.&lt;/p&gt;

&lt;h2 id=&quot;the-problem-stated&quot;&gt;the problem, stated&lt;/h2&gt;

&lt;p&gt;The trigger for this specific piece was the recent Anthropic study on AI assistance and coding skills.&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; The headline finding — AI assistance led to 17% lower quiz scores (50% vs 67%) — comes with important caveats: small sample size, and controlled conditions that don’t fully mirror real work. But I think the researchers’ thinking is more interesting than the numbers themselves, particularly how they characterized the different interaction patterns. High-scorers (65-86%) asked conceptual questions, requested explanations alongside code, used AI to check their own understanding. Low-scorers (24-39%) fully delegated, progressively relied more, debugged iteratively without understanding. The &lt;em&gt;how&lt;/em&gt; matters enormously.&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;What I found most interesting was the “unraveling” of these patterns — the fact that you could characterize what distinguished the people who learned from those who didn’t, even when both groups had access to the same tools. And this was with a sidebar assistant (i.e., not agentic tools like Claude Code). The effects are likely worse with more autonomous tools (they also note this in the discussion).&lt;/p&gt;

&lt;p&gt;This isn’t just about code: the same pattern shows up in social skills, in writing, in thinking itself.&lt;sup id=&quot;fnref:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; The phenomenon is general: we are outsourcing our thinking, and we don’t fully understand what that means for us.&lt;/p&gt;

&lt;h2 id=&quot;why-this-interests-me&quot;&gt;why this interests me&lt;/h2&gt;

&lt;p&gt;I’ll be honest — the reason I’m interested in this is because it scares me to “deskill”. I’m using these tools all the time, and I’m preoccupied with how this affects my mind and cognition. This is also why I took the SolveIt&lt;sup id=&quot;fnref:4&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; course (which I might write more about in the future).&lt;/p&gt;

&lt;p&gt;There’s another reason, more connected to my work. I’ve written before about the gap between checking form and checking essence — how we can verify citations and tool calls, but struggle to know if the output actually helps the patient / user.&lt;sup id=&quot;fnref:5&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; I’m now realizing the same (or similar) problem applies to self-assessment. I can check the form of my work: Did I ship? Does it run? But I can’t easily verify the essence: Do I actually understand what I built? The verification problem I face professionally is now personal (and that’s uncomfortable).&lt;/p&gt;

&lt;h2 id=&quot;mental-frameworks&quot;&gt;mental frameworks&lt;/h2&gt;

&lt;p&gt;Two images help me think about this.&lt;/p&gt;

&lt;p&gt;The first is the exoskeleton. This framing “dates back” to 2024 — research on knowledge workers using GenAI.&lt;sup id=&quot;fnref:6&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:6&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; We can think of coding tools (and LLMs in general) as an exoskeleton — they grant us abilities we can’t have without them. Iron Man suit. But here’s the thing: it’s useless to go to the gym in an Iron Man suit if what you actually want is to build muscle, and when we use these tools for work we care about, we want to be improving as well — not just producing output while our underlying capabilities atrophy. So we need to understand how we can utilize these exoskeletons in a way that doesn’t degenerate us.&lt;/p&gt;

&lt;p&gt;The second image is darker: the rat with an electrode in the nucleus accumbens. Someone on Bluesky pointed this out&lt;sup id=&quot;fnref:7&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:7&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; — the compulsive AI use where you keep entering short prompts, getting outputs, entering more prompts, caught in a loop that feels productive but yields only short-lived dopamine hits without the actual fulfillment of achieving something or gaining understanding. It kills the joy of craftsmanship, the satisfaction that comes from struggling with a problem and actually solving it yourself.&lt;/p&gt;

&lt;p&gt;This hollowness, I’ve found, is actually a signal.&lt;sup id=&quot;fnref:8&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:8&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; When I offload the cognitive work needed to form a clear picture in my mind — of what is happening, of all the moving parts, of how they interact — it immediately feels more hollow, less satisfying. The satisfaction comes from understanding, and when you skip that, you feel it. Jeremy Howard and Johno Whitaker talk about this quite a bit in SolveIt — the difference between the empty productivity of rapid prompting and the deeper satisfaction of actually learning something.&lt;sup id=&quot;fnref:9&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:9&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;9&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;The question is whether this signal stays sharp over time, or whether it dulls as the tools get better and the friction gets lower.&lt;/p&gt;

&lt;h2 id=&quot;what-comes-out-of-it--some-practices&quot;&gt;what comes out of it — some practices&lt;/h2&gt;

&lt;p&gt;So what do I actually do? It starts with making a choice. Due to limited time, the choice is always phrased negatively: “what is NOT important enough for me to understand deeply?” For example, this blog was built using Jekyll, which I really didn’t bother to understand. I have to mentally acknowledge — with some angst — that I don’t care enough here to understand what is going on. I’m fine with this, because it clears time and mental space for things I do find important: research, core topics in my work, code I’m writing. This choice frees me in a sense.&lt;/p&gt;

&lt;p&gt;Then, for the things I do feel are important to understand, I try a few things. One is something akin to close reading.&lt;sup id=&quot;fnref:10&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:10&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;10&lt;/a&gt;&lt;/sup&gt; What I try to do is actually read for myself, with concrete questions in mind, to try and form understanding — preferably in a few layers. When I feel like I’ve finished and written my notes on the matter, I try to critically view them, see what I’ve missed. I don’t do this with all the text I consume, only with information-dense pieces that I want to truly &lt;em&gt;understand&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In code, it’s a lot harder to stay engaged — it’s so tempting to become that rat with the NAc electrode, continuing to enter short prompts into Claude Code. One thing I try is opening prompts in a separate window (ctrl+g in CC) and actually investing time clarifying exactly what I want, because the act of articulating forces me to think. I also reread the prompt after dictating it — usually using &lt;a href=&quot;https://handy.computer&quot;&gt;Handy&lt;/a&gt;&lt;sup id=&quot;fnref:11&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:11&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;11&lt;/a&gt;&lt;/sup&gt; — which helps me input more context while stimulating my thought process. I try to actually invest time in the output I get as well, understanding why choices were made; this limits the amount of output I produce, but it means I can stand behind whatever comes out. It was nice to see these patterns emerge in the “good spots” in the Anthropic paper — the high-scorers were doing something like this.&lt;/p&gt;

&lt;p&gt;Another practice that’s been valuable is what I’d call the interview format — using AI as an interlocutor rather than a doer. It’s not quite “critic” — it’s more like a reviewer or even a kind of psychoanalyst (not in the “ChatGPT is your therapist!!” type of way) — someone who is present and poses questions, trying to get more out of me. The thing is, we know more than what we can say, so it helps when something prompts you to externalize more of your thought process. When I ask Claude or SolveIt to interview me about something I’m trying to understand — to probe my thinking, challenge my conclusions — I’m still doing the cognitive work, the thinking stays mine. It’s different from asking Claude to write something for me and accepting the output. I’ve come across others doing this online; I know I’m not the only one, but it feels right and valuable.&lt;/p&gt;

&lt;p&gt;And then there’s writing itself, which might be the most important friction-creating practice I have. You can’t verify your own understanding through feeling alone, but writing forces externalization — incoherence becomes visible, gaps surface, and it’s harder to lie to yourself when stuff that’s incoherent or implies lack of understanding is right there on the page. I can actually see it sometimes: I write something and then notice this kind of logical jump and think, wait a minute, how did you get there? Do you have enough evidence to support this claim? Maybe you missed something? This is one of the reasons I try to write more — the process itself forms understanding in ways that passive consumption or even active prompting doesn’t.&lt;/p&gt;

&lt;h2 id=&quot;limitations-and-open-questions&quot;&gt;limitations and open questions&lt;/h2&gt;

&lt;p&gt;I keep thinking about Instagram Reels, about the entertainment becoming the thing itself.&lt;sup id=&quot;fnref:12&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:12&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;12&lt;/a&gt;&lt;/sup&gt; We can say people need to develop the ability not to sit crouched all day watching TikToks. But did most people actually develop that ability? Or did they just… adapt to a lower baseline? If that analogy holds, vigilance around cognitive offloading may be a minority practice — most people might simply offload, and the baseline of what counts as “understanding your work” will shift downward for the population as a whole.&lt;sup id=&quot;fnref:13&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:13&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;13&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;There’s also the fact that I can’t really A/B test myself — the Anthropic researchers could measure comprehension decline because they had a control group and a test at the end, but I don’t have that luxury. The “what have I learned” question, asking myself this daily, weekly, monthly, is my attempt at an essence check, but I’m not sure it’s reliable since it requires honesty, and honesty requires structures that make self-deception visible.&lt;/p&gt;

&lt;p&gt;And then there’s the question of whether the hollowness signal recalibrates. What if it dulls over time? What if I get used to a lower baseline of satisfaction and stop noticing the gap? A year from now, would I trust that same internal signal to still be reliable?&lt;/p&gt;

&lt;p&gt;I’m not sure there’s a clean answer here. Maybe the honest thing is to sit with the uncertainty — we’ve built tools we can’t fully evaluate, and now we’re using those tools in ways we can’t fully evaluate either. The epistemic uncertainty compounds.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://www.anthropic.com/research/AI-assistance-coding-skills&quot;&gt;How AI assistance impacts the formation of coding skills&lt;/a&gt;, Anthropic, Jan 2026. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;This isn’t meant to be a comprehensive summary of the research — the paper itself is worth reading in full. I’m focusing on the aspects that stuck with me. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;See for example the NYT piece on AI and social skills: &lt;a href=&quot;https://www.nytimes.com/2026/01/30/opinion/ai-social-skills-relationships.html&quot;&gt;link&lt;/a&gt;. &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://solve.it.com&quot;&gt;SolveIt&lt;/a&gt; — Jeremy Howard’s course on AI-assisted learning that emphasizes understanding over output. &lt;a href=&quot;#fnref:4&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I wrote about this in &lt;a href=&quot;https://sparsethought.com/2026/01/29/evaluating-agents-in-health/&quot;&gt;how we actually evaluate agents (health)&lt;/a&gt;. &lt;a href=&quot;#fnref:5&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:6&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4944588&quot;&gt;GenAI as an Exoskeleton: Experimental Evidence on Knowledge Workers Using GenAI on New Skills&lt;/a&gt;, Wiles et al. &lt;a href=&quot;#fnref:6&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:7&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://bsky.app/profile/catblanketflower.yuwakisa.com/post/3mdubzm2e4k2s&quot;&gt;This Bluesky post&lt;/a&gt;. &lt;a href=&quot;#fnref:7&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:8&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;This felt like a bit of a eureka moment when I first noticed it — the hollowness itself as information about whether I’m actually engaging with the work. &lt;a href=&quot;#fnref:8&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:9&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Jeremy Howard’s SolveIt course emphasizes this distinction repeatedly — the difference between getting an answer and building understanding. &lt;a href=&quot;#fnref:9&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:10&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;See the &lt;a href=&quot;https://ullyot.ucalgaryblogs.ca/teaching/close-reading/&quot;&gt;UCalgary guide on close reading&lt;/a&gt;. &lt;a href=&quot;#fnref:10&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:11&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://handy.computer&quot;&gt;Handy&lt;/a&gt; is a tool I use for voice input — great for getting more context into prompts while keeping the thinking active. &lt;a href=&quot;#fnref:11&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:12&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I wrote about this previously: &lt;a href=&quot;https://sparsethought.com/2026/01/26/entertainment-instagram-reels/&quot;&gt;the entertainment is instagram reels&lt;/a&gt;. &lt;a href=&quot;#fnref:12&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:13&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I hope I’m wrong here, but I suspect not. &lt;a href=&quot;#fnref:13&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>how we actually evaluate agents (health)</title>
   <link href="https://sparsethought.com/2026/01/29/evaluating-agents-in-health/"/>
   <updated>2026-01-29T00:00:00+00:00</updated>
   <id>https://sparsethought.com/2026/01/29/evaluating-agents-in-health</id>
   <content type="html">&lt;p&gt;In the last couple of months we’ve been working on a health agent. It was my role specifically to deal with the messy answer to the tough question: “is it good? worthwhile? valuable?”&lt;/p&gt;

&lt;p&gt;I’ll try to describe here our attempt to answer this question. This follows Anthropic’s &lt;a href=&quot;https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents&quot;&gt;Demystifying evals for AI agents&lt;/a&gt;, which I recommend reading first if you haven’t.&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; What I’m adding here is the specifics of applying these principles to health, what we actually learned when the rubber met the road, and where the general advice breaks down or needs adaptation.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;starting-with-tasks&quot;&gt;Starting with tasks&lt;/h2&gt;

&lt;p&gt;First, probably a pretty important insight: we started by defining the specific tasks we would want the agent to be able to perform. We actually wrote early on that “Tasks is an abstraction that is meant to encapsulate a capability or to modularize a larger set of tools and context into something tangible that can be tested. The evals of each task is probably the main reason to have this abstraction.” I think this turned out to be right.&lt;/p&gt;

&lt;p&gt;We tried to aim for tasks that are somewhat verifiable, and that include some element of orchestration or tool chaining. We defined different levels (easy, medium, hard) where the easy ones can probably already be accomplished with a pretty simple prompt and SOTA models today, and even the medium and hard ones can maybe be close given detailed enough prompting.&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;We also noted some challenges ahead of time. In most examples people already have a deployed AI product generating traces. We didn’t have that, so generating evals beforehand was challenging.&lt;sup id=&quot;fnref:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; It’s somewhat circular with the task definitions, tools definitions and so on. We wrote at the time that “it’s also okay to start with vibe checks” - which I still think is true, though insufficient.&lt;/p&gt;

&lt;p&gt;We tried both GPT SOTA models and OpenEvidence and looked at their responses to our queries. We found good things and bad things. Some failure modes we discovered there would later carry over to our own system (LLM-inherited, baked into the base model). Others would be specific to our scaffolding, our agent harness.&lt;sup id=&quot;fnref:4&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; This distinction ended up mattering less than I initially thought it would.&lt;/p&gt;

&lt;h2 id=&quot;the-metabolic-health-report-as-an-evaluation-surface&quot;&gt;The metabolic health report as an “evaluation surface”&lt;/h2&gt;

&lt;p&gt;Because we wanted something more consistent and easier to develop against, we concatenated a bunch of those tasks into one thing you can call a “metabolic health report” (the reason it’s “metabolic” at this point is due to input modalities - CGM data, diet logging).&lt;/p&gt;

&lt;p&gt;The goal was to: present the data itself, contextualize it with metrics and personalized insights, add actionable guidance, and connect the dots while grounding the claims. Importantly, the report had to be constructed of evaluatable tasks.&lt;/p&gt;

&lt;p&gt;I think this was a clever bit. We could have separated it into specific prompts, and this would probably enable some different things. Arguably, this would create a more flexible system (I’m not sure our system right now would handle very well answering concrete, limited in scope questions). But the report gave us a controlled evaluation surface - same input, same task, observable improvement over time.&lt;sup id=&quot;fnref:5&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h2 id=&quot;the-hierarchy-what-we-actually-solved&quot;&gt;The hierarchy: what we actually solved&lt;/h2&gt;

&lt;p&gt;We mostly solved the general structure of it, the hierarchy. Like, we know that similarly to SWE, we have the equivalent of a unit test, we have the equivalent of an integration test, and thankfully because in many senses the entire task itself was at the early POC stage rather well defined, we also have the equivalent of an end to end test.&lt;/p&gt;

&lt;p&gt;But here’s where it gets interesting. There’s this tension between form and essence.&lt;sup id=&quot;fnref:6&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:6&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; We can check form pretty well: Did the citation exist? Was the tool called? Do the numbers in the output trace back to tool outputs?&lt;/p&gt;

&lt;p&gt;The Anthropic post talks about two types of evals: capability evals (what can this agent do well? - should start at a low pass rate, giving teams a hill to climb) and regression evals (does the agent still handle all the tasks it used to? - should have nearly 100% pass rate). Looking back, I think we focused mainly on regression-style thinking: see a failure, make sure it doesn’t happen again. But the pattern of “see them fail and then add a skill or change something to make them green” - maybe that is the same pattern of hill-climbing, or at least similar.&lt;/p&gt;

&lt;h2 id=&quot;error-analysis-it-starts-with-the-data&quot;&gt;Error analysis: it starts with the data&lt;/h2&gt;

&lt;p&gt;Before we could add evals, we had to understand what was actually failing. This meant doing what everyone says you should do but few actually enjoy: manually going over the data. It has been repeatedly stated in the past how valuable this is. Our case wasn’t any different - it’s extremely valuable.&lt;/p&gt;

&lt;p&gt;I built a simple annotation tool - maybe a day’s work, completely ad hoc, knowing it would be useful for this POC stage and being perfectly okay with not needing it later. Just the ability to properly show markdown and the tool chain beside it, and a small place to highlight quotes and write annotations. That was really nice and really useful. The ratio was great - minimal investment, high return.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/annotation-tool.png&quot; alt=&quot;Annotation tool showing metabolic health report with tool trace and annotation panel&quot; /&gt;
&lt;em&gt;The annotation tool: markdown output on the left, tool trace on the right, annotation panel below. Ad hoc but useful.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We did detailed error analysis comparing against our GPT baseline.&lt;sup id=&quot;fnref:7&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:7&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; Here are the major failure points we discovered:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ungrounded percentiles/comparisons.&lt;/strong&gt; Population percentiles appearing without cohort size disclosure or traceable tool output. “Digital twin” comparisons fabricated without reference dataset.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Diagnostic language misuse.&lt;/strong&gt; Terms like “CRITICAL,” “SEVERE HYPOGLYCEMIA,” “IMMEDIATE ATTENTION” applied to likely CGM artifacts in healthy individuals. Diabetes guidelines (54 mg/dL thresholds) misapplied to non-diabetic physiology.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Missing modality blindness.&lt;/strong&gt; Post-meal and exercise claims made without diet/activity data. The agent sometimes fails to caveat when required data is unavailable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pseudo-evidence citations.&lt;/strong&gt; Claims labeled “evidence-based” without guideline citations. ADA/ATTD mentioned but specific criteria not actually applied.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Over-interpretation from CGM alone.&lt;/strong&gt; Physiology inferred (“insulin sensitivity,” “reactive hypoglycemia”) from metrics that don’t support such conclusions.&lt;/p&gt;

&lt;p&gt;We stated our goal simply: address as many of those as we can. The pattern became: see a failure, add an eval that catches it, add a skill or change something to make it green, move on. Small circuits of failure → eval → prevention. Whether the root cause was LLM-inherited or scaffolding-introduced mattered less than whether we could catch it and prevent recurrence.&lt;/p&gt;

&lt;h2 id=&quot;what-we-couldnt-easily-measure-the-essence-problem&quot;&gt;What we couldn’t easily measure: the essence problem&lt;/h2&gt;

&lt;p&gt;Even if we solve the foundational issues (and we did make progress), gaps remain. This is directly linked to what I call the essence problem. We can check form. But it’s still hard to evaluate:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clinical appropriateness.&lt;/strong&gt; When the system thinks findings are real but the person is healthy. When it applies the wrong clinical frame.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Narrative coherence.&lt;/strong&gt; Does the report tell a story, or is it a collection of metrics?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Utility.&lt;/strong&gt; The hardest one, maybe. Trying to answer the question “is this helpful” - to the participant, to the clinician.&lt;/p&gt;

&lt;p&gt;Some meta point to consider: maybe some essence evals would require us accepting fuzzier metrics or human judgment. Better to measure imperfectly than to ignore entirely.&lt;/p&gt;

&lt;h2 id=&quot;the-thing-that-lives-in-my-head&quot;&gt;The thing that lives in my head&lt;/h2&gt;

&lt;p&gt;There’s a finding from Google’s work on health agents (&lt;a href=&quot;https://arxiv.org/abs/2508.20148&quot;&gt;The Anatomy of a Health Agent&lt;/a&gt;) that constantly lives in my head. When presented with different answers with differing degrees of “professionalism,” ordinary users are not so good at sorting through and correctly recognizing which output is better. Concretely, given two health reports - one well-established and would gain approval from experts, and the other AI slop - many people won’t be so good at figuring out which is which. Meanwhile, experts can easily tell the two apart, with a high degree of inter-observer reliability.&lt;/p&gt;

&lt;p&gt;To be frank I’m not sure it’s directly related to the evals piece, but it just so constantly lives in my head that it’s hard to avoid when thinking about this work.&lt;/p&gt;

&lt;p&gt;I think it hints at something deeper. What is it actually hinting about? From my point of view, the Google paper showed that even though the more complicated architecture prevailed on metrics, on evals, on benchmarks, and even on expert opinion - it didn’t matter to the end user. There’s a tension here. You do want a system that is better all around. Better on evals, better on benchmarks, better according to experts. This is the thing you want to expose and bring to general availability.&lt;/p&gt;

&lt;p&gt;But then you’re doing something that in some sense ignores the users.&lt;/p&gt;

&lt;p&gt;My answer, at least for health: in terms of integrity, you still have to choose the system that provides better answers. You can’t ship something that is slop. Hopefully over time it gains trust because it actually works - because when someone follows its guidance, things go well.&lt;/p&gt;

&lt;h2 id=&quot;the-agency-question&quot;&gt;The agency question&lt;/h2&gt;

&lt;p&gt;There’s a tough question I kept in the back of my mind: did we end up over-complicating something that had the potential of being pretty simple by trying to force it to become an “agent”? Where agency wasn’t needed most if not all of the time?&lt;/p&gt;

&lt;p&gt;The metabolic health report, as an evaluation task, could arguably be a workflow with simple rule-based conditions. You could make that case.&lt;/p&gt;

&lt;p&gt;We defined a diverse set of tasks with the input modalities we decided to include - diet logging and continuous glucose monitoring data. We were actually trying to build a system that would be the basis of something with a bit more agency, being able to answer a diverse set of tasks. The metabolic health report was our version of being able to run the same prompt with the same system and see improvement in our results.&lt;/p&gt;

&lt;p&gt;Recently we encountered a Washington Post piece about failure modes in GPT for health advice.&lt;sup id=&quot;fnref:8&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:8&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; Almost as a challenge, we wanted to see how our agentic system would handle the same kind of task - cardiovascular risk assessment. We added a skill, tried with roughly the same prompt structure, and it worked. It didn’t hallucinate the way the article described. The architecture we built - the task abstractions, the eval framework, the tool integration patterns - transferred. We didn’t rebuild from scratch. The fact that we created a system with those hill-climbing evals we described earlier, it kind of proved itself(!!). Given this experience, I think the agent architecture was forward-looking infrastructure that hadn’t been fully tested yet. Now it has been, a little more.&lt;/p&gt;

&lt;h2 id=&quot;what-we-contributed-what-we-learned&quot;&gt;What we contributed, what we learned&lt;/h2&gt;

&lt;p&gt;You know, in some sense the question really to answer is “what did we contribute to the world?” and “what did we learn in the process?” These are the things I should be focusing on.&lt;/p&gt;

&lt;p&gt;What we learned is probably clearer: the form/essence gap is real and doesn’t go away. Small circuits of failure → eval → prevention work. Error analysis is worth the time. Expert opinion is non-negotiable. And the task abstraction - defining what you want the agent to do before building it - pays off.&lt;/p&gt;

&lt;p&gt;What we contributed is maybe just a specific case study of what Anthropic and others have talked about in the abstract. We implemented the lessons. We discovered which parts of the general advice break down when you’re actually in a health domain, looking at CGM data, trying to figure out if “reactive hypoglycemia” is a reasonable inference or a hallucination.&lt;/p&gt;

&lt;p&gt;Maybe that’s enough. Implementing lessons is good. Showing what actually happens when theory meets practice is useful.&lt;/p&gt;

&lt;h2 id=&quot;what-id-tell-someone-starting-this&quot;&gt;What I’d tell someone starting this&lt;/h2&gt;

&lt;p&gt;If you came to me tomorrow starting a health agent project and asked how to approach evals:&lt;/p&gt;

&lt;p&gt;This is going to be harder than you think. Even if you follow a thorough process of error analysis, it’s hard to do without user feedback. It’s hard to do without expert opinion. Expert opinion is something you must have.&lt;/p&gt;

&lt;p&gt;Small circuits work. See a failure mode, create an eval that finds it, fix it, prevent recurrence. Don’t overthink the taxonomy of why things fail. Just catch them and stop them from happening again.&lt;/p&gt;

&lt;p&gt;Invest a little in tooling for yourself - an annotation interface, a way to see traces alongside outputs. It doesn’t have to be fancy. A day of work paid off in weeks of usable error analysis.&lt;/p&gt;

&lt;p&gt;Accept that some things you care about - utility, clinical appropriateness, narrative coherence - won’t have clean automated evals. That’s okay. Measure what you can. Use expert judgment for the rest.&lt;/p&gt;

&lt;p&gt;And define your tasks before you build. “The evals of each task is probably the main reason to have this abstraction.” We wrote that early. It turned out to be true.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;(hopefully) this will be a part of a series exploring different aspects of our health agent work. The goal is to answer two questions: what did we contribute, and what did we learn?&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Anthropic aren’t the only ones writing about this - OpenAI recently posted about evaluating skills specifically, which is a nice complement: &lt;a href=&quot;https://developers.openai.com/blog/eval-skills/&quot;&gt;Eval Skills&lt;/a&gt;. And &lt;a href=&quot;https://hamel.dev/&quot;&gt;Hamel Husain’s work&lt;/a&gt; on evals is great. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;And trial and error, and health data. Ok, maybe just the medium ones. The hard ones were genuinely hard. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;This is a chicken-and-egg problem: you want decent performance before deploying to users, but some of the most important evaluation signals (especially around “essence” - utility, clinical appropriateness) require actual user feedback to assess properly. &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;The Anthropic post defines an “agent harness” (or scaffold) as the system that enables a model to act as an agent - it processes inputs, orchestrates tool calls, and returns results. When we evaluate “an agent,” we’re evaluating the harness &lt;em&gt;and&lt;/em&gt; the model working together. &lt;a href=&quot;#fnref:4&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;There’s an idea we ended up not exploring: the concept of “agent state” as a middle ground where we could run some evals (mostly against ground truth). We did use the traces quite a lot, which was useful. What we actually did was a “right shift” instead of “left shift” - we shifted everything to evaluate the end result of the metabolic health report rather than intermediate states. For a POC this was fine, but I still think agent state as an evaluation surface might be worth exploring in the future. &lt;a href=&quot;#fnref:5&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:6&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Coming from a background in NMR spectroscopy and signal processing, this was disorienting. In spectroscopy, ground truth is relatively clear - the peaks are the peaks. In this domain, the ground truth you actually care about is expensive, fuzzy, or sometimes unknowable. &lt;a href=&quot;#fnref:6&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:7&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I had a dual role here - looking at outputs both as a physician (is this clinically appropriate?) and as a research scientist (do these numbers trace back to tool outputs?). Some things are flat out wrong and easy to catch. But some things are not such giveaways - even if the numbers are accurate, the context might be misleading. Having both perspectives was useful. &lt;a href=&quot;#fnref:7&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:8&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://www.washingtonpost.com/technology/2026/01/26/chatgpt-health-apple/&quot;&gt;The Washington Post article&lt;/a&gt;. The general pattern was GPT providing cardiovascular risk assessments that included hallucinated numbers and misapplied clinical guidelines - exactly the failure modes we’d identified and built evals against. &lt;a href=&quot;#fnref:8&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>the entertainment is instagram reels (and tiktoks)</title>
   <link href="https://sparsethought.com/2026/01/26/entertainment-instagram-reels/"/>
   <updated>2026-01-26T00:00:00+00:00</updated>
   <id>https://sparsethought.com/2026/01/26/entertainment-instagram-reels</id>
   <content type="html">&lt;blockquote&gt;
  &lt;p&gt;“The Entertainment is real, and it’s called Instagram Reels.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;— Will Gottsegen, &lt;a href=&quot;https://www.theatlantic.com/newsletters/2026/01/infinite-jest-hyperion-sans-soleil-culture-recs/685650/&quot;&gt;The Atlantic&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not a unique observation (the connection is clear). But there’s something I like about people still arriving at Infinite Jest and feeling compelled to say it out loud.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>how will we know the model did a good job?</title>
   <link href="https://sparsethought.com/2026/01/23/what-is-a-good-fm/"/>
   <updated>2026-01-23T00:00:00+00:00</updated>
   <id>https://sparsethought.com/2026/01/23/what-is-a-good-fm</id>
   <content type="html">&lt;p&gt;A foundation model I’ve been working on recently got published in Nature.&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; For a while I’ve wanted to write this. Now the paper is finally out so I have to do it in a timely manner, and I also have to start investing more thought in the upcoming projects (some are similar). So what is this? I think the honest answer is something between a post-mortem of a successful project and some exploration towards the future. Exploration about the question that lived in my mind when I was working on this project: “how do we know it’s actually worthwhile?” I think it comes up often in these kinds of research works.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;The question from the title predates the code. We were building a foundation model for continuous glucose monitoring data, training a transformer to learn representations of metabolic health, and from the start the problem was: &lt;em&gt;if it worked, what would “worked” even mean? What would this thing be able to do that would prove it has value?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So one of the first things we wrote wasn’t code. It was a document titled “Evaluation Metrics for CGM Foundation Model.” The subtitle was the question itself: &lt;em&gt;How will we know the model did a good job?&lt;/em&gt; It was an internal document, used for discussion, exploring our options, thinking through things in writing together. The aim was to prevent later cherry-picking, to separate hypothesis generation from hypothesis testing.&lt;sup id=&quot;fnref:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; We listed every physiological system that CGM might plausibly encode: microvascular complications, macrovascular complications, liver function, lipids, sleep, body composition. We mapped out which external cohorts we could test on, which clinical trials had CGM data, what predictions would actually be meaningful versus what would just be impressive-looking.&lt;/p&gt;

&lt;p&gt;We were inventing our criteria for success as part of starting the work. I don’t think this specific kind of “intellectual labor” has a name, but it turned out to be where we invested the most time — and where I felt my contribution to be most significant.&lt;sup id=&quot;fnref:4&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Then Guy (the lead author) finished training the model, and we looked at the latent space as represented by UMAP. There, we saw axes that looked like physiology (at least if you are hopeful). I could see postprandial glucose response organizing along one dimension, fasting glucose along another. It looked like the model had learned something real about metabolic health(!!). But UMAPs are notorious for showing you what you want to see.&lt;sup id=&quot;fnref:5&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; The pattern was suggestive, not conclusive. So we went back to the evaluation document we’d created and started working through it, testing the model on real cohorts we didn’t train on.&lt;/p&gt;

&lt;p&gt;The moment things shifted (not to certainty, but to less doubt) was the &lt;a href=&quot;https://pubmed.ncbi.nlm.nih.gov/28317402/&quot;&gt;AEGIS cohort&lt;/a&gt;.&lt;sup id=&quot;fnref:6&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:6&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; A Spanish study with long-term follow-up. We could ask: does the model’s representation of someone’s CGM predict their cardiovascular risk years later? It did(!). The risk stratification worked. People in the top quartile of model-predicted risk had dramatically higher rates of cardiovascular mortality. This wasn’t a standard CGM metric like time-in-range or glucose variability, it was something the model extracted that we couldn’t fully interpret.&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; We ran more external cohorts after that, and each one reduced uncertainty a little more.&lt;/p&gt;

&lt;p&gt;The paper is now published in Nature. By every external metric, this is a success. And I’m still not sure what hard biological problem it definitively solves.&lt;/p&gt;

&lt;p&gt;I’m not trying to be modest here, it’s just the honest &lt;em&gt;epistemic state&lt;/em&gt;. We proved the model learns something. We proved it generalizes. We proved its representations predict outcomes better than standard metrics. What we didn’t prove (what I’m not sure anyone has proved for foundation models in biology) is that this approach is worth it compared to simpler methods. There’s &lt;a href=&quot;https://x.com/SynBio1/status/2014362787447701752&quot;&gt;this post&lt;/a&gt; I saw out of context and now it feels relevant: “It is now easier to build an AI tool for biology than to use that tool against a hard biological problem.” We built a tool, and the hard problem remains.&lt;/p&gt;

&lt;p&gt;So what would “worth it” actually look like? I’ve been thinking about this for the next foundation model we’re building, which is multimodal (across lab values, imaging, longitudinal trajectories). One approach we’re exploring is perturbation: taking an individual and asking what the model predicts would happen to their biomarkers if we artificially modified one parameter. What if we simulate weight loss? What if we reduce their LDL by some percentage? The model was never explicitly taught dose-response relationships. It just saw real trajectories. So any systematic relationship between intervention magnitude and outcome magnitude would have to be something it learned from the data itself. If it learned actual physiology, it should get the directions right, maybe even the relative magnitudes. That’s an open question, not a solved one. But this feels closer to what “works” might actually mean: not just prediction, but demonstrating the model learned something about how the system operates (trying to answer quasi-counterfactual questions, to start with).&lt;/p&gt;

&lt;p&gt;The question that started the GluFormer project — &lt;em&gt;how will we know the model did a good job?&lt;/em&gt; — hasn’t been answered, it’s (somewhat) evolved. And maybe that’s the thing: “how do you prove this is good?” is a question you carry. For this model, the next one, the field. I don’t have a cleaner way to put it.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://nature.com/articles/s41586-025-09925-9&quot;&gt;A foundation model for continuous glucose monitoring data&lt;/a&gt;. I’m second author; Guy Lutsker led. For full text: &lt;a href=&quot;http://rdcu.be/eY5fH&quot;&gt;rdcu.be/eY5fH&lt;/a&gt; &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;We discussed actual pre-registration early on. Decided against it — foundation model research might be inherently too exploratory. You’re building a thing and then figuring out what it’s good for. Hard to pre-register that. &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;There’s a version of scientific writing where you discover truth and then report it. And another where you choose which questions matter, which framing makes the work legible. We did the second. That’s not dishonesty — it’s deciding what counts as interesting. &lt;a href=&quot;#fnref:4&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;UMAPs have well-documented problems — they can show structure that isn’t there, they’re sensitive to hyperparameters, the axes aren’t necessarily meaningful. Ours ended up in supplementary materials, not main figures. The suggestive pattern was a starting point, not evidence. &lt;a href=&quot;#fnref:5&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:6&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;People sometimes ask about the “eureka moment.” There wasn’t one. The generative capabilities felt promising. The cardiac risk stratification felt real. But no single breakthrough of certainty. That might just be what this kind of research feels like. &lt;a href=&quot;#fnref:6&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Specifically, we processed raw CGM data from 580 participants (followed for a median of 11 years) through GluFormer to generate high-dimensional embeddings, then mapped these to a single “GluFormer-derived score” originally trained to predict HbA1c. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>data activation thoughts</title>
   <link href="https://sparsethought.com/2026/01/17/data_activation/"/>
   <updated>2026-01-17T00:00:00+00:00</updated>
   <id>https://sparsethought.com/2026/01/17/data_activation</id>
   <content type="html">&lt;p&gt;The landscape is shifting in recent years — it’s a cliche to start texts like this these days, but the fact that it’s a cliche doesn’t make it any less true.&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; In 2019, the folks at Andreessen Horowitz wrote this about data (in a piece titled &lt;a href=&quot;https://a16z.com/the-empty-promise-of-data-moats/&quot;&gt;The Empty Promise of Data Moats&lt;/a&gt;): “Instead of getting stronger, the defensible moat erodes as the data corpus grows and the competition races to catch up.” (Trying to prove some data has value — I’ve experienced it firsthand.)&lt;/p&gt;

&lt;p&gt;LLMs have shifted where value comes from. It’s no longer enough to simply have proprietary data; what matters now is how effectively you can make that data useful to these systems (and therefore, to anything else that lives off that). So, if traditional data moats are eroding, the new competitive edge lies in data &lt;strong&gt;activation&lt;/strong&gt;. The pressing question becomes: &lt;strong&gt;how quickly can you connect your proprietary data to LLMs in ways that demonstrably improve their performance&lt;/strong&gt; (before someone else figures out how to replicate your insights without your data)?&lt;/p&gt;

&lt;p&gt;Before we continue I want to think about a simple metaphor here — LLMs can &lt;em&gt;ingest&lt;/em&gt; the data. They’ll happily consume every row and column you throw at them. But (and this is important) without the right transformation, they can’t &lt;em&gt;metabolize&lt;/em&gt; it. The nutritional value passes through unabsorbed. They’re missing the “enzymes” I guess you can call it. Data activation is about providing those enzymes: converting raw information into a form the model can actually digest and turn into a &lt;strong&gt;capability&lt;/strong&gt;.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;why-this-matters-now-healthcare-as-case-study&quot;&gt;Why this matters now (healthcare as case study)&lt;/h2&gt;

&lt;p&gt;Looking specifically at healthcare data, the opportunity is immense — and let’s face it, time limited. Looking at OpenAI’s &lt;a href=&quot;https://cdn.openai.com/pdf/2cb29276-68cd-4ec6-a5f4-c01c5e7a36e9/OpenAI-AI-as-a-Healthcare-Ally-Jan-2026.pdf&quot;&gt;report&lt;/a&gt; from January 2026: more than 5% of all ChatGPT messages globally are healthcare-related. 25% of weekly active users ask health-related questions. More than 40 million people turn to ChatGPT &lt;strong&gt;daily&lt;/strong&gt; for healthcare guidance (!!!).&lt;/p&gt;

&lt;p&gt;The big labs are clearly taking notice: within the span of a single week (January 2026), OpenAI launched “ChatGPT for Healthcare” (already rolling out to institutions like Cedars-Sinai, Memorial Sloan Kettering, and Stanford Medicine) and Anthropic announced “Claude for Healthcare” with HIPAA-ready infrastructure and native integrations to medical databases/ontologies (CMS Coverage Database, ICD-10, PubMed). To me, it looks like healthcare is now a primary battleground for frontier AI companies.&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Yet, if you look at the numbers from OpenRouter, they claim that health remains “&lt;a href=&quot;https://openrouter.ai/state-of-ai&quot;&gt;the most fragmented of the top categories&lt;/a&gt;”. What does this mean? According to OpenRouter, it signals both the domain’s complexity and the inadequacy of current general-purpose models.&lt;/p&gt;

&lt;h2 id=&quot;one-potential-method-for-data-activation&quot;&gt;One (potential) method for data activation&lt;/h2&gt;

&lt;p&gt;It seems that recent research already demonstrates that the bridge between structured medical data and improvements in LLM reasoning is working.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://openreview.net/forum?id=cqNAjXUBOV&quot;&gt;Tables2Traces&lt;/a&gt; established a framework for converting raw, tabular patient-level data into contrastive reasoning traces that can be used for LLM fine-tuning. They tried to “mirror how a clinician would think” — what they did is pretty simple. For every patient record, they identified similar patients with different outcomes (someone similar who died and someone similar who survived). Once they had those triplets of patients they prompted a strong LLM to generate explanations for the divergence. These reasoning traces become fine-tuning data for smaller models.&lt;/p&gt;

&lt;p&gt;For their specific use-case they showed significant improvement (&amp;gt;17% in domain-specific MedQA and even generalization capabilities — they trained only on cardiovascular cases but noted improvement in other areas of medicine as well). The paper’s “simple vs. full” comparison also provides empirical evidence: naively converting tables to patient narratives doesn’t work (and can hurt performance). So the models actually need the structured reasoning scaffold — the contrastive comparison, together with the reasoning and quasi-counterfactual thinking, is what makes the difference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Saying it a bit differently&lt;/strong&gt; — they kind of show that the value in structured medical data is like potential energy trapped behind a dam. The power is real, but it just sits there. Naive table-to-text conversion doesn’t work; you’re essentially drilling a small hole in the dam and expecting electricity. The reasoning scaffold (in their case — contrastive comparison, counterfactual thinking) is the turbine. It converts stored potential into usable power.&lt;/p&gt;

&lt;p&gt;Another work worth mentioning is &lt;a href=&quot;https://arxiv.org/abs/2510.25628v2&quot;&gt;EHR-R1&lt;/a&gt;. They synthesized 300k “high-quality” traces using a different method — something they call a “thinking-graph pipeline”: [1] extract medical entities from each patient’s longitudinal EHR (including free-text), [2] quantify associations between medical entities, then [3] map entities to medical ontology (&lt;a href=&quot;https://www.nlm.nih.gov/research/umls/index.html&quot;&gt;UMLS concepts&lt;/a&gt;) and use graph search to recover medical relations that connect context entities to the target labels. They then prompted an LLM with the patient record plus these retrieved relations to produce a structured reasoning chain, which became the supervision data. The results? Their model outperforms strong commercial/open models, averaging &amp;gt;30 points over GPT-4o on EHR-Bench (which they also created).&lt;/p&gt;

&lt;p&gt;Another &lt;a href=&quot;https://www.nature.com/articles/s41746-025-01681-4&quot;&gt;paper&lt;/a&gt; shows this scales pretty well: fine-tuned 8B parameter models have achieved 89.3% accuracy while being 85x cheaper than their 70B teacher models.&lt;/p&gt;

&lt;p&gt;So I think the existence proof is established: structured EHR/biobank data can be transformed into reasoning supervision that measurably improves LLM clinical performance.&lt;/p&gt;

&lt;h2 id=&quot;whats-still-unclear&quot;&gt;What’s still unclear&lt;/h2&gt;

&lt;p&gt;I think Tables2Traces proved feasibility in some sense, but synthetic traces are still in the “unverified” realm. This gap showed mostly in the way physicians treated those traces (mostly, they didn’t think the traces were very good). And there’s a deeper issue — &lt;a href=&quot;https://arxiv.org/abs/2509.21933&quot;&gt;recent work&lt;/a&gt; shows that traces can sometimes be “unfaithful,” meaning they don’t accurately reflect the actual basis for a decision. Plainly: the trace says one thing, the model’s decision is different.&lt;/p&gt;

&lt;p&gt;It’s also worth noting that these papers tend to show improvements on less capable models. That’s not an accident — showing improvements on stronger models is harder (or the improvements aren’t there). We should be honest about that.&lt;/p&gt;

&lt;p&gt;So the question that keeps bothering me: what’s the right transformation? The papers above offer some approaches — contrastive reasoning, knowledge graphs, ontology grounding. There are others being explored (RL-based methods, temporal modeling for longitudinal records). But I don’t have a clean answer. The dam metaphor still holds — the potential energy is real — but we’re still figuring out how to build the right turbine.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Speaking of cliches — I’m aware this piece is full of em-dashes, which have become a telltale sign of AI-assisted writing. But as &lt;a href=&quot;https://x.com/nabeelqu/status/2012219522833359071&quot;&gt;Nabeel Qureshi pointed out&lt;/a&gt;, David Foster Wallace was doing this decades ago. The italics for emphasis, the informality, the casual speech tone. I’ll keep my em-dashes. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;In some sense, what once seemed like a disadvantage — healthcare’s lagging technological infrastructure — may now be an asset: a greenfield opportunity with less legacy baggage to work around. But that might be substance for a different post. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>What's Sparse Thoughts?</title>
   <link href="https://sparsethought.com/2025/08/16/whats-sparse-thoughts/"/>
   <updated>2025-08-16T00:00:00+00:00</updated>
   <id>https://sparsethought.com/2025/08/16/whats-sparse-thoughts</id>
   <content type="html">&lt;p&gt;For a while now I’ve been collecting too many things to read and think about, mostly in twitter ‘saved links’. 
This is a place for me to silently collect together things I enjoyed reading / other content I’ve enjoyed and sometimes jot some thoughts about it. It’s built in a way that won’t make me feel too committed, should be kind of under the radar, low friction, minimal effort.&lt;/p&gt;
</content>
 </entry>
 

</feed>
