<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Jun Suzuki</title>
    <description>The latest articles on Forem by Jun Suzuki (@szkjn).</description>
    <link>https://forem.com/szkjn</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2934994%2Fa0551a53-ff3f-4b64-9813-be7a63800ebd.jpeg</url>
      <title>Forem: Jun Suzuki</title>
      <link>https://forem.com/szkjn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/szkjn"/>
    <language>en</language>
    <item>
      <title>Generative AI and its singularity zone (CNC Lab paper)</title>
      <dc:creator>Jun Suzuki</dc:creator>
      <pubDate>Wed, 29 Apr 2026 10:02:55 +0000</pubDate>
      <link>https://forem.com/szkjn/generative-ai-and-its-singularity-zone-cnc-lab-paper-3i1f</link>
      <guid>https://forem.com/szkjn/generative-ai-and-its-singularity-zone-cnc-lab-paper-3i1f</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2stlkyzxho0mgedp2pj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2stlkyzxho0mgedp2pj.png" alt="A ghostly black-and-white close-up of a face seen through a surface covered in water droplets. Two eyes are faintly visible through the distortion, the rest of the features blur into the texture." width="768" height="320"&gt;&lt;/a&gt;&lt;br&gt;
  From our image experiment with Stable Diffusion 1.5. More on this one later.&lt;/p&gt;

&lt;p&gt;(ﾉ´ヮ´)ﾉ*:･ﾟ✧&lt;/p&gt;

&lt;p&gt;Earlier this month, a research paper I co-wrote with &lt;a href="https://ninon-io.github.io/" rel="noopener noreferrer"&gt;Ninon Devis Salvy&lt;/a&gt; for the CNC Lab was published. 30+ pages, in French, academic register. Not expecting many people to actually read it... so!, this post stands as a tldr.&lt;/p&gt;

&lt;p&gt;The CNC Lab is the R&amp;amp;D branch of the Centre national du cinéma et de l'image animée, France's public agency for film and moving images. They put out &lt;a href="https://www.cnc.fr/professionnels/actualites/deuxieme-appel-a-contributions-du-cnc-lab_2167679" rel="noopener noreferrer"&gt;a call for contributions&lt;/a&gt; last year on two themes: AI and creation, and children's relationship to image consumption. We answered the first one.&lt;/p&gt;

&lt;p&gt;Our paper ("Singularity and Creation in the Age of AI") runs at a single question: where does originality live when the model producing it averages everything it has seen? Philosophy has its angles: &lt;a href="https://blog.junsuzuki.xyz/blog/singularity-controlled-divergence#ref-leveau-vallier" rel="noopener noreferrer"&gt;intuition under algorithms&lt;/a&gt;, &lt;a href="https://blog.junsuzuki.xyz/blog/singularity-controlled-divergence#ref-somaini" rel="noopener noreferrer"&gt;the algorithmic image&lt;/a&gt;, &lt;a href="https://blog.junsuzuki.xyz/blog/singularity-controlled-divergence#ref-zylinska" rel="noopener noreferrer"&gt;art past aesthetics&lt;/a&gt;. We took the empirical route: two experiments, one on text and one on images.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you push generative AI past the average?
&lt;/h2&gt;

&lt;p&gt;Generative models (the ones behind ChatGPT or Stable Diffusion) are trained on huge piles of existing content. By default, they produce the statistical average of that pile. Text that reads like text. Images that look like images. Nothing wrong with that for summarizing documents, answering questions, or analyzing data, where reproducibility is what you want. For more creative use cases though, this becomes a ceiling. So how do you push past it without tipping the model into incoherent noise?&lt;/p&gt;

&lt;h2&gt;
  
  
  How hot can language get before it breaks?
&lt;/h2&gt;

&lt;p&gt;Every language model has a parameter called &lt;em&gt;temperature&lt;/em&gt;. Low temperature means the model plays it safe and picks the most likely next word. The output looks smooth and predictable. High temperature means the model gets bolder and picks less likely words. The output gets weirder. At extreme temperature, it stops making sense and becomes pure gibberish.&lt;/p&gt;

&lt;p&gt;GPT-4.1 exposes temperature from 0 to 2. We swept the full range in 0.1 steps across three different prompts/input queries (a synopsis, a dialogue, a storyboard description). Ten outputs per setting. For each one we measured three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;linguistic integrity&lt;/strong&gt; (is the output still valid language?),&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;lexical diversity&lt;/strong&gt; (how varied is the vocabulary?),&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;semantic alignment&lt;/strong&gt; (how close does the output stay to the prompt's meaning?).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjn8xp45o2ri94xdg20td.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjn8xp45o2ri94xdg20td.png" alt="Three charts showing linguistic integrity, lexical diversity and semantic similarity of GPT-4.1 outputs as temperature rises from 0.6 to 1.6. A green band marks the narrow zone of diverse but still coherent outputs between 1.2 and 1.4, a red band marks the cliff from 1.5 onward where linguistic integrity drops sharply." width="800" height="661"&gt;&lt;/a&gt;&lt;br&gt;
  Temperature sweep on GPT-4.1. Green: the singularity zone where outputs are diverse and still coherent. Red: the rupture regime where coherence drops.&lt;/p&gt;

&lt;p&gt;Three regimes came out. Below 1.2 is the &lt;strong&gt;plateau regime&lt;/strong&gt;, where outputs are coherent but predictable. Most of the variation the model can produce is unexploited. Between 1.2 and 1.4 is the &lt;strong&gt;singularity zone&lt;/strong&gt;: outputs diverge from the default while staying readable. That's the zone worth experimenting with if you're using the model for anything creative. From 1.5 onward, the model derails: mixed languages, invented tokens, semantic drift. Past that we enter the &lt;strong&gt;rupture regime&lt;/strong&gt;, where outputs are barely usable unless &lt;a href="https://blog.junsuzuki.xyz/blog/singularity-controlled-divergence#ref-suzuki-alien" rel="noopener noreferrer"&gt;weirdness is the point&lt;/a&gt;. To give you an idea, here are three outputs from the same opening line (translated from French):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input query:&lt;/strong&gt; &lt;em&gt;"In the Year 2125, three-quarters of the world's population have lost their sight due to…"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T = 0.0&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;…a swift pandemic, dubbed "the White Shadow", which spread in less than six months. Scientists were never able to determine whether its origin was natural or the product of human manipulation. The first symptoms were mild: slight eye discomfort, halos of light, then, suddenly, total blindness.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;T = 1.4&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;…a luminous wave of unknown origin that struck the planet during the "Great Opal Flash". Within minutes, humanity was plunged into permanent darkness. Faced with this new era, everything had to be rethought: cities adapted, infrastructure was reinvented to operate without visual cues, and human exchanges evolved toward new sensory modes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;T = 2.0&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;…a mutation encoded by the famous "Copper Genome", spread through the atmosphere after the地astra-halopoly(headstormkrift الم produjo koll gebeur acabadou oft pegasesabay暨린어 জল Prathanator supera which myster выращ bevorzug럼 coronFillLTERstenen giàiiedades desenvol виде největ Mutó điều: Wochenendesoil…&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The singularity zone is narrow and sits immediately before the rupture. It's surprisingly specific. Its exact location depends on the model. Our experiments focused on GPT-4.1. Other models have their own zone.&lt;/p&gt;

&lt;p&gt;Newer models (like GPT-5) don't even expose the dial anymore. Every hidden dial is one less lever to push the model past its defaults.&lt;/p&gt;

&lt;p&gt;What generalizes is not the values but the shape: &lt;strong&gt;a narrow band before the rupture&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Images and the Pareto frontier
&lt;/h2&gt;

&lt;p&gt;For images the question is the same but the controls are different. With Stable Diffusion 1.5 we generated several thousand images from the same sci-fi opening line as above. We varied three kinds of dials:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;guidance scale&lt;/strong&gt; (how strictly the model sticks to the prompt),&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;latent noise injection&lt;/strong&gt; (how much random noise we inject during generation),&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;controlled semantic drift&lt;/strong&gt; (how much weight we put on specific stylistic keywords).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then for each image we asked two things. Does it actually illustrate the brief, or would it fit any prompt? Does it look different from the default the model wants to give you? These two goals work against each other. Stick close to the prompt and the image looks average. Push for something different and it drifts off the prompt. The interesting images are the ones that do both. There's only a narrow zone where that's possible. &lt;a href="https://blog.junsuzuki.xyz/blog/singularity-controlled-divergence#ref-pareto-wiki" rel="noopener noreferrer"&gt;In optimization theory&lt;/a&gt;, &lt;a href="https://blog.junsuzuki.xyz/blog/singularity-controlled-divergence#ref-pareto-marwala" rel="noopener noreferrer"&gt;that shape is called&lt;/a&gt; &lt;a href="https://blog.junsuzuki.xyz/blog/singularity-controlled-divergence#ref-pareto-tunkelang" rel="noopener noreferrer"&gt;a Pareto frontier&lt;/a&gt;. Again, here are snippets from our experiments:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Baseline:&lt;/strong&gt; what the model produces when you don't push it. Literal, competent, expected, redundant over iterations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F94sdowk5kuhd8wif38d5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F94sdowk5kuhd8wif38d5.png" alt="A photorealistic sci-fi portrait of a man with a serious expression and a futuristic cityscape behind him. Competent and completely expected." width="768" height="320"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnpqvyq5u08fad7hngasl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnpqvyq5u08fad7hngasl.png" alt="Three masked figures walking down a foggy road at night toward a glowing white orb. Cinematic, cold, literal post-apocalypse imagery." width="768" height="320"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa367ty9iax02z54s1515.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa367ty9iax02z54s1515.png" alt="A cloaked figure in profile facing a futuristic city pierced by vertical blue light beams. Competent sci-fi establishing shot." width="768" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chaos:&lt;/strong&gt; what "crank divergence to the max" actually produces. An image in the sense that it has pixels. Pure noise.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft66utz707ah17hu4d4eo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft66utz707ah17hu4d4eo.png" alt="A rectangle of dense multi-colored RGB noise. No recognizable content." width="768" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sweet spot:&lt;/strong&gt; the middle ground between the default and chaos. Evoked, not illustrated.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuagkxeefthb11vsddpdz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuagkxeefthb11vsddpdz.png" alt="Blurred monochrome silhouettes of hands raising oversized sunglasses, the lenses rendered as two bright white discs. Eyes replaced by the object meant to protect them." width="768" height="320"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flz5sjbz3d312yoo2o7ri.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flz5sjbz3d312yoo2o7ri.png" alt="Two silhouetted figures in profile facing each other against pale backlit domes, their eyes rendered as small red points of light." width="768" height="320"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2stlkyzxho0mgedp2pj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2stlkyzxho0mgedp2pj.png" alt="A ghostly black-and-white close-up of a face seen through a surface covered in water droplets. Two eyes are faintly visible through the distortion, the rest of the features blur into the texture." width="768" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;baseline&lt;/strong&gt; illustrates the prompt. &lt;strong&gt;Chaos&lt;/strong&gt; is unusable. The &lt;strong&gt;sweet spot&lt;/strong&gt; sits between these two regimes. It's a choice. You only reach it by accepting that there isn't a single setting that produces "good". The Pareto frontier is a set of trade-offs between specificity and singularity. The work is deciding which trade-off to make.&lt;/p&gt;

&lt;p&gt;NB: one honest limit. The frontier is measured, but the labels (&lt;strong&gt;baseline&lt;/strong&gt;, &lt;strong&gt;chaos&lt;/strong&gt;, &lt;strong&gt;sweet spot&lt;/strong&gt;) are aesthetic calls. LPIPS, the metric we use, captures how different two images look, not whether they're good. To judge composition, emotional impact, or fine-grained narrative coherence, we would have needed to run a qualitative human study.&lt;/p&gt;

&lt;h2&gt;
  
  
  What artists working with AI actually do
&lt;/h2&gt;

&lt;p&gt;Both experiments converge on the same finding, which we call &lt;strong&gt;controlled divergence&lt;/strong&gt;. The point here is that singularity in AI creation lives in a narrow band where the model diverges from its statistical center without losing coherence. The band is small. Push too gently and the output stays average. Push too hard and it collapses into noise.&lt;/p&gt;

&lt;p&gt;This changes what the artist is doing. They're not writing the prompt and then picking their favorite of four outputs. They're shaping the parameter space from which outputs emerge: which dials, at what range, with which constraints, seeded how. The final image or paragraph is downstream of that shaping. In the paper we call this being an &lt;strong&gt;architect of generative conditions&lt;/strong&gt; rather than an author of generated results.&lt;/p&gt;

&lt;p&gt;This shift takes different shapes across the field. Jennifer Walshe puts it this way: &lt;a href="https://blog.junsuzuki.xyz/blog/singularity-controlled-divergence#ref-walshe" rel="noopener noreferrer"&gt;"the gap between what is described and what is produced, between intent and result, is now the domain of the network."&lt;/a&gt; For Grégory Chatonsky, the latent space itself is &lt;a href="https://blog.junsuzuki.xyz/blog/singularity-controlled-divergence#ref-chatonsky" rel="noopener noreferrer"&gt;"the new domain of technical imagination."&lt;/a&gt; Beth Coleman calls for &lt;a href="https://blog.junsuzuki.xyz/blog/singularity-controlled-divergence#ref-coleman" rel="noopener noreferrer"&gt;"a generatively wild AI that exceeds the framework of predictive machine learning,"&lt;/a&gt; not the reproductive default. &lt;strong&gt;Authorship has moved upstream of the output.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Against frictionless iteration
&lt;/h2&gt;

&lt;p&gt;Which brings me to the part of the paper I'm most attached to. If the zone is that narrow, you don't land in it by infinite iterations. You have to commit.&lt;/p&gt;

&lt;p&gt;When iterating is free, every choice becomes trivial. If I can regenerate this image at zero cost, my decision to keep it is barely a decision. And a workflow made of barely-decisions produces work that feels like nobody made it.&lt;/p&gt;

&lt;p&gt;The paper's proposal against this is what we call &lt;strong&gt;methodical friction&lt;/strong&gt;. Deliberately constrain the loop. Fixed iteration budgets. Locked seeds. Irreversible choices. Rules you actually have to live with. The counterintuitive claim is that &lt;strong&gt;friction is what makes a gesture a gesture&lt;/strong&gt;. Remove all of it and what's left is curation at best.&lt;/p&gt;

&lt;p&gt;In January 2025, Ninon and I took part in &lt;a href="https://www.ctm-festival.de/festival-2025/programme/practise/wilding-ai-lab" rel="noopener noreferrer"&gt;Wilding AI&lt;/a&gt;, a research residency Beth Coleman co-leads in Berlin ahead of CTM Festival. The brief was to hack, misuse and break generative AI tools. A full week of practicing friction and getting as far as possible from frictionlessness.&lt;/p&gt;

&lt;p&gt;Surely this is not specific to AI creation. It's a useful rule for any creative process where the marginal cost of trying one more thing has collapsed. But it's especially urgent here, because the industry's whole direction of travel is toward more &lt;a href="https://blog.junsuzuki.xyz/blog/singularity-controlled-divergence#ref-farman" rel="noopener noreferrer"&gt;frictionless design&lt;/a&gt;. Cheaper, faster, fewer parameters, more automation. If that's all there is, we end up with interchangeable options and no authorship.&lt;br&gt;
&lt;a href="https://blog.junsuzuki.xyz/blog/singularity-controlled-divergence#ref-becker" rel="noopener noreferrer"&gt;"If the point is to imitate human work at cheap cost, that's dull. If it is to explore new forms, that's when it gets interesting."&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A gesture only counts when trying a different one would have cost you something.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Voilà! That's roughly the spine of the paper. You can &lt;a href="https://www.cnc.fr/documents/36995/2568943/CNC+Lab+-+Singularit%C3%A9+et+Cr%C3%A9ation+%C3%A0+l%E2%80%99%C3%88re+de+l%E2%80%99Intelligence+Artificielle+-+Ninon+Devis+Salvy%2C+Jun+Suzuki.pdf/feeb200e-2502-4512-fe27-91ec422befc0?t=1775143018736" rel="noopener noreferrer"&gt;download&lt;/a&gt; the full (french) version, or find it alongside &lt;a href="https://www.cnc.fr/professionnels/actualites/deuxieme-appel-a-contributions-du-cnc-lab_2167679" rel="noopener noreferrer"&gt;other contributions from the same call&lt;/a&gt; on the CNC Lab website. Happy to talk about any of it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Co-authored with my dear friend and collaborator Ninon Devis Salvy. Special thanks to &lt;a href="https://pollinations.ai/" rel="noopener noreferrer"&gt;Pollinations.AI&lt;/a&gt; for the GPU compute they provided us for our experiments.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.vrin.fr/livre/9791026712084/ia" rel="noopener noreferrer"&gt;IA. L'intuition et la création à l'épreuve des algorithmes. Alban Leveau-Vallier, Éditions Champ Vallon, 2023.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://greyroom.org/issues/93/229/algorithmic-images-artificial-intelligence-and-visual-culture/" rel="noopener noreferrer"&gt;Algorithmic Images: Artificial Intelligence and Visual Culture. Antonio Somaini, &lt;em&gt;Grey Room&lt;/em&gt;, no. 93, Fall 2023.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.openhumanitiespress.org/books/titles/ai-art/" rel="noopener noreferrer"&gt;AI Art: Machine Visions and Warped Dreams. Joanna Zylinska, Open Humanities Press, 2020.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://junsuzuki.xyz/#life-took-a-turn-and-you-vanished-in-the-white-2023-09-15" rel="noopener noreferrer"&gt;Life took a turn and you vanished in the white. Jun Suzuki, &lt;em&gt;Soft Eis Magazine #3&lt;/em&gt;, 15 September 2023.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Pareto_front" rel="noopener noreferrer"&gt;Pareto front. Wikipedia.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://unu.edu/article/greatest-good-exists-not-extremes-through-exploration-middle-ground-pareto" rel="noopener noreferrer"&gt;'Greatest Good' Exists Not at the Extremes but Through Exploration of the Middle Ground — Pareto. Tshilidzi Marwala, United Nations University, 15 February 2024.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dtunkelang.medium.com/navigating-the-pareto-frontier-d68182e72c6c" rel="noopener noreferrer"&gt;Navigating the Pareto Frontier. Daniel Tunkelang, Medium.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://unsoundfestival.substack.com/p/unsound-dispatch-13-ways-of-looking" rel="noopener noreferrer"&gt;13 Ways of Looking at AI, Art &amp;amp; Music. Jennifer Walshe, &lt;em&gt;Unsound Dispatch&lt;/em&gt;, 15 December 2023.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://chatonsky.net/de-deux-regimes-possibles-dans-lia-generative/" rel="noopener noreferrer"&gt;De deux régimes possibles dans l'IA générative. Grégory Chatonsky, September 2025.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://catalystjournal.org/index.php/catalyst/article/view/35973" rel="noopener noreferrer"&gt;Technology of the Surround. Beth Coleman, &lt;em&gt;Catalyst: Feminism, Theory, Technoscience&lt;/em&gt;, Vol. 7 No. 2, 26 October 2021.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://slate.com/technology/2026/04/usability-complexity-apple-iphone-facebook-donald-norman.html" rel="noopener noreferrer"&gt;It's a Design Principle That Has Transformed the World and Even Saved Lives. It's Gone Way Too Far. Jason Farman, &lt;em&gt;Slate&lt;/em&gt;, April 2026.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.radiofrance.fr/franceculture/podcasts/les-masterclasses/nicolas-becker-sound-designer-j-aime-collecter-et-travailler-des-sons-qui-ont-une-histoire-7613489" rel="noopener noreferrer"&gt;Nicolas Becker, sound designer. Nicolas Becker, &lt;em&gt;Les Masterclasses&lt;/em&gt;, France Culture, 23 April 2026.&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>generativeai</category>
      <category>stablediffusion</category>
      <category>llmtemperature</category>
      <category>aiandart</category>
    </item>
    <item>
      <title>Anthropic's skills playbook vs our custom knowledge layer</title>
      <dc:creator>Jun Suzuki</dc:creator>
      <pubDate>Sat, 04 Apr 2026 21:54:06 +0000</pubDate>
      <link>https://forem.com/szkjn/anthropics-skills-playbook-vs-our-custom-knowledge-layer-29g3</link>
      <guid>https://forem.com/szkjn/anthropics-skills-playbook-vs-our-custom-knowledge-layer-29g3</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4dr7gsfxd68ksfg9kszg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4dr7gsfxd68ksfg9kszg.jpg" alt="The Location of Lines by Sol LeWitt, 1975" width="800" height="802"&gt;&lt;/a&gt;&lt;br&gt;
        Sol LeWitt, The Location of Lines, 1975&lt;/p&gt;

&lt;p&gt;Thariq Shihipar from Anthropic's Claude Code team recently published a &lt;a href="https://x.com/trq212/status/2033949937936085378" rel="noopener noreferrer"&gt;thread&lt;/a&gt; on how they use skills internally. Hundreds of them in active use, clustering into nine categories once cataloged, from library references to runbooks to CI/CD automation. I read the thread right after publishing a &lt;a href="https://blog.junsuzuki.xyz/blog/beyond-claude-md-repo-scoped-knowledge-layer" rel="noopener noreferrer"&gt;post about building a knowledge layer&lt;/a&gt; on top of &lt;code&gt;CLAUDE.md&lt;/code&gt; to capture repo-scoped domain context. The thread answered a question I'd been sitting with: where does deep domain knowledge go when Anthropic themselves recommend keeping &lt;code&gt;CLAUDE.md&lt;/code&gt; under 200 lines?&lt;/p&gt;

&lt;p&gt;Turns out their team use skills for that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Same architecture, different packaging
&lt;/h2&gt;

&lt;p&gt;If we look at their nine categories, at least three are primarily knowledge containers. The action wrapper (a slash command, a trigger description) makes them discoverable. But the core content is &lt;strong&gt;context, not automation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Their "Build a Gotchas Section" tip makes it explicit: the highest-signal content in any skill is the gotchas section. Add a line each time Claude trips on something. Day 1, the billing-lib skill says "How to use the internal billing library." Month 3, it has four gotchas covering proration rounding, test-mode webhook gaps, idempotency key expiration, refund ID semantics. Knowledge accumulating over time. Exactly what our &lt;code&gt;.claude/knowledge/&lt;/code&gt; files do.&lt;/p&gt;

&lt;p&gt;Their queue-debugging skill uses a &lt;a href="https://en.wikipedia.org/wiki/Spoke%E2%80%93hub_distribution_paradigm" rel="noopener noreferrer"&gt;hub and spoke&lt;/a&gt; structure: a 30-line &lt;code&gt;SKILL.md&lt;/code&gt; with a symptom-to-file routing table, and spoke files (&lt;code&gt;stuck-jobs.md&lt;/code&gt;, &lt;code&gt;dead-letters.md&lt;/code&gt;, &lt;code&gt;retry-storms.md&lt;/code&gt;) for the detail. This is structurally identical to our &lt;code&gt;CLAUDE.md&lt;/code&gt; knowledge table pointing to &lt;code&gt;.claude/knowledge/*.md&lt;/code&gt; files. Same progressive disclosure. Same "keep the hub lean, push detail to the spokes" principle.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3m84j6u4ifuipr459vof.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3m84j6u4ifuipr459vof.png" alt="Side-by-side comparison: their SKILL.md routing to spoke files vs our CLAUDE.md routing to knowledge files" width="800" height="213"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  One primitive or two
&lt;/h2&gt;

&lt;p&gt;Tbh, if this thread had existed two months ago, we might not have built a separate knowledge layer at all. Their approach handles the same problem. One extension point, one concept to learn. Simpler.&lt;/p&gt;

&lt;p&gt;What we ended up building adds one seam: &lt;strong&gt;knowledge files hold domain context (what Claude should know), skills hold executable actions (what Claude should do)&lt;/strong&gt;. We do use skills with scripts and hooks. The separation just means the context lives in its own files.&lt;/p&gt;

&lt;p&gt;For e.g., we have a knowledge file documenting a data pipeline: 7 jobs in sequence, ontology structure, S3 path conventions, Elasticsearch gotchas. That file is read by four different generic skills for running jobs, querying the database, querying ES, and accessing S3. The knowledge changes depending on which pipeline you're working on. The skills don't. In a skill-only setup, you'd either duplicate that context across skills or wrap it in a dedicated pipeline-knowledge skill, which gets you to roughly the same place.&lt;/p&gt;

&lt;p&gt;Another example: a skill that runs our evaluation suite. 44 lines: dataset names, CLI commands, timeouts. Clean and procedural. But interpreting results requires a separate knowledge file explaining what each dataset tests, known weak spots, and the outcome of recent eval sessions, etc. When someone reads that knowledge file months later, they skip repeating the same investigation. They don't need to invoke the eval skill to get there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where we land
&lt;/h2&gt;

&lt;p&gt;Going back to their nine categories. Library &amp;amp; API Reference is edge cases and code snippets for internal libraries. Incident Runbooks map symptoms to investigation steps. Both are knowledge containers wearing a skill wrapper. On the other end, CI/CD &amp;amp; Deployment and Scaffolding &amp;amp; Templates are pure automation. Data &amp;amp; Analysis and Code Quality &amp;amp; Review sit somewhere in between: reference data plus scripts, style rules plus enforcement. No one designed that split. It just showed up in the taxonomy. The knowledge/action boundary seems to surface whether you formalize it or not.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffy9a3qs8d0cbozrtu9f0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffy9a3qs8d0cbozrtu9f0.png" alt="Thariq's nine skill categories annotated: Library &amp;amp; API Reference and Incident Runbooks are knowledge, Data &amp;amp; Analysis and Code Quality &amp;amp; Review are both, the remaining five are action" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One last thought. Skills didn't exist a year ago. Claude Code launched with commands, then skills arrived, the two overlapped for a couple of months, and eventually commands folded into skills. The core abstraction for extending Claude Code changed twice in twelve months.&lt;/p&gt;

&lt;p&gt;That's the environment we're all building in. The extra seam we added (knowledge separate from skills) is a bet on adaptability. When the next abstraction shift comes, the knowledge stays put. The wiring around it can change.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>claudecodeskills</category>
      <category>contextengineering</category>
      <category>knowledgemanagement</category>
    </item>
    <item>
      <title>We outgrew CLAUDE.md: building a knowledge layer that compounds</title>
      <dc:creator>Jun Suzuki</dc:creator>
      <pubDate>Thu, 19 Mar 2026 18:12:43 +0000</pubDate>
      <link>https://forem.com/szkjn/we-outgrew-claudemd-building-a-knowledge-layer-that-compounds-33f</link>
      <guid>https://forem.com/szkjn/we-outgrew-claudemd-building-a-knowledge-layer-that-compounds-33f</guid>
      <description>&lt;p&gt;Earlier this year, Boris Cherny, the creator of Claude Code, published a &lt;a href="https://nitter.net/bcherny/status/2007179832300581177" rel="noopener noreferrer"&gt;thread&lt;/a&gt; on how he and his team use the CLI they built. A dozen tips covering everything from running parallel sessions to slash commands to subagents. The one I kept circling back to: the shared &lt;code&gt;CLAUDE.md&lt;/code&gt; that their entire team feeds into (what he calls &lt;a href="https://every.to/chain-of-thought/compound-engineering-how-every-codes-with-agents" rel="noopener noreferrer"&gt;compound engineering&lt;/a&gt;, borrowing from Dan Shipper).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Our team shares a single CLAUDE.md for the Claude Code repo. We check it into git, and the whole team contributes multiple times a week. Anytime we see Claude do something incorrectly we add it to the CLAUDE.md, so Claude knows not to do it next time.&lt;/p&gt;

&lt;p&gt;— &lt;a href="https://x.com/bcherny/status/2007179832300581177" rel="noopener noreferrer"&gt;Boris Cherny&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I've been running with that idea at &lt;a href="https://wisetax.fr/" rel="noopener noreferrer"&gt;Wisetax&lt;/a&gt;, and ended up extending it into a broader &lt;strong&gt;knowledge layer&lt;/strong&gt;. Here's why, what we built, and how it compounds.&lt;/p&gt;

&lt;h2&gt;
  
  
  README.md, CLAUDE.md, then what?
&lt;/h2&gt;

&lt;p&gt;Every repo already has a &lt;code&gt;README.md&lt;/code&gt;. That's for us humans to read: onboarding, setup, contributing.&lt;/p&gt;

&lt;p&gt;Then there's &lt;code&gt;CLAUDE.md&lt;/code&gt;. Essentially agent literature. It gets loaded into every Claude Code session: repo-wide conventions, common commands, guardrails, environment assumptions. Following Cherny's idea, the whole team updates it constantly. In practice, that means it grows. Fast.&lt;/p&gt;

&lt;p&gt;In some of our repos, it hit 700+ lines. Ok but. Turns out the official docs recommend keeping &lt;code&gt;CLAUDE.md&lt;/code&gt; under ~200 lines. Anthropic's &lt;a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents" rel="noopener noreferrer"&gt;context engineering guide&lt;/a&gt; frames it this way: context is a "finite resource with diminishing marginal returns". The more low-signal tokens you load, the less reliable the agent becomes. Stuffing everything into one auto-loaded file works against that.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Like humans, who have limited working memory capacity, LLMs have an "attention budget" that they draw on when parsing large volumes of context. Every new token introduced depletes this budget by some amount.&lt;/p&gt;

&lt;p&gt;— &lt;a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents" rel="noopener noreferrer"&gt;Effective context engineering for AI agents&lt;/a&gt;, Anthropic&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In our experience, domain-specific context, design rationale for particular subsystems: all of that is too detailed and too volatile for a single file. So we created &lt;code&gt;.claude/knowledge/&lt;/code&gt;. Inside: one markdown file per topic, versioned in the repo. A place to capture &lt;a href="https://en.wikipedia.org/wiki/Tribal_knowledge" rel="noopener noreferrer"&gt;tribal knowledge&lt;/a&gt;, the stuff that lives in developers' heads and gets lost between sessions.&lt;/p&gt;

&lt;p&gt;Each file covers a slice of the system: a specific piece of the data pipeline, the intricacies of a retrieval layer, the motivation behind the design of the evaluation framework, etc.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;CLAUDE.md&lt;/code&gt;, we point to them so Claude knows when to read what:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;
...

&lt;span class="gu"&gt;## Knowledge&lt;/span&gt;

| File                                  | When to read                                               |
|---------------------------------------|------------------------------------------------------------|
| &lt;span class="sb"&gt;`.claude/knowledge/architecture.md`&lt;/span&gt;   | Overall system design, endpoints, routing, streaming       |
| &lt;span class="sb"&gt;`.claude/knowledge/agent-framework.md`&lt;/span&gt;| Building/modifying agents with WisebrainAgent              |
| &lt;span class="sb"&gt;`.claude/knowledge/autonomous-agent.md`&lt;/span&gt;| Working on the main chat agent, its tools, or prompts     |
| &lt;span class="sb"&gt;`.claude/knowledge/retrieval.md`&lt;/span&gt;      | Search system, semantic/keyword retrieval, corpus taxonomy |
| &lt;span class="sb"&gt;`.claude/knowledge/elasticsearch.md`&lt;/span&gt;  | ES indices, query builders, document structure             |
| &lt;span class="sb"&gt;`.claude/knowledge/plan-navigation.md`&lt;/span&gt;| BOFIP/LEGI plan traversal, plan controllers                |
| &lt;span class="sb"&gt;`.claude/knowledge/testing.md`&lt;/span&gt;        | Writing or running tests, fixtures, evaluation scripts     |
| &lt;span class="sb"&gt;`.claude/knowledge/evaluations.md`&lt;/span&gt;    | Agent evaluation datasets, evaluators, LangSmith setup     |
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This way, Claude only reads the files it needs to. If the current PR is about evaluations, it pulls in the &lt;code&gt;evaluations.md&lt;/code&gt; knowledge file and ignores the rest. This is what makes the approach scale: each file can go into specifics that genuinely help the agent, because only relevant files get loaded into context.&lt;/p&gt;

&lt;h2&gt;
  
  
  What about Claude's auto memory?
&lt;/h2&gt;

&lt;p&gt;Claude Code has an &lt;a href="https://code.claude.com/docs/en/memory#auto-memory" rel="noopener noreferrer"&gt;auto memory&lt;/a&gt; feature: notes Claude writes for itself based on corrections and preferences. They are stored locally under &lt;code&gt;~/.claude/projects//memory/&lt;/code&gt;. It's per-machine and auto-managed. Not versioned, not shared. If a collaborator starts a session, they don't get my memory.&lt;/p&gt;

&lt;p&gt;Repo-scoped knowledge is the opposite. It's checked in. It goes through PRs. Every engineer on the team gets the same context. Every session starts from the same baseline regardless of who's running it. The name is deliberate: "knowledge", not "memory", to keep the two separate in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to store in knowledge files
&lt;/h2&gt;

&lt;p&gt;Knowledge files hold two kinds of things: &lt;strong&gt;know-why&lt;/strong&gt; and &lt;strong&gt;know-how&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Know-why&lt;/strong&gt; is arguably the more obvious one. I learn something about the codebase I didn't know, or had forgotten. The moment I document it, that's the last time Claude figures it out from scratch. I might forget next time. Claude won't.&lt;/p&gt;

&lt;p&gt;At Wisetax, we curate an enriched Elasticsearch index built from a large corpus of French legal texts. At retrieval, our search system splits queries across corpus groups to mitigate language-level differences in the embedding model. Without that context, Claude doesn't know why the retrieval code fans out into three separate queries instead of one. It would figure it out eventually, after burning time and tokens reading through the code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
...

## Partitioned retrieval

Splits corpus into 3 groups to handle language style differences in embeddings:
- `law`: CGI, LPF, CIBS, CCOM, CSS, CTRAV, CMF, CCIV, CJA
- `guidelines`: BOI, BOSS, COMPTA
- `other`: EUR, INT, DOUANE, CADF, JADE, INCA, CASS, CAPP, CGIANX*, PLF, PLFSS, EXTERNAL, NOTICE

Runs each group as a parallel batch with retry (3 attempts).
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Know-how&lt;/strong&gt; is procedure: the sequence of jobs, the commands to run, the filenames that matter. At Wisetax, we ingest legal texts from multiple sources, each with its own pipeline. Take "BOSS" (for &lt;em&gt;Bulletin officiel de la sécurité sociale&lt;/em&gt;), a French government publication that goes through seven distinct jobs before it's indexed and searchable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
...

## Pipeline order

1. **Crawler** (manual, docker compose in `scripts/boss_crawler/`) -&amp;gt; `boss-raw` ES staging index
2. **SOURCE BOSS** (pace5/3d) -&amp;gt; compares `boss-raw` latest timestamp vs last batch, creates new batch
3. **REGISTER BOSS** (pace4/24h) -&amp;gt; fetches HTML, parses versions, uploads to S3, inserts docs in PG
4. **INDEX** (pace0/1min, shared) -&amp;gt; indexes docs to ES index `name-of-index`
5. **PLAN BOSS** (pace5/3d) -&amp;gt; builds static plan from ontology config, indexes to ES
6. **VERSION BOSS** (pace4/24h) -&amp;gt; sets VIGUEUR/MODIFIE on versioned docs
7. **SELECT CHUNKABLE / CHUNK / EMBED / INDEX CHUNK** (shared, frequent)
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The full file covers about a hundred lines: section codes, S3 path conventions, Elasticsearch gotchas, differences from our other main pipeline. This wasn't born from a single session. It's the accumulated map of a dense subsystem, built up over time.&lt;/p&gt;

&lt;p&gt;Before it existed, every BOSS PR started the same way: find the relevant Notion tickets, skim through past PRs for context, paste a summary into Claude to catch it up. Now the context is sitting in a knowledge file, ready for Claude to pull in the moment BOSS comes up.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to leave out
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What files were changed (git knows this)&lt;/li&gt;
&lt;li&gt;Config values, function signatures (read the code)&lt;/li&gt;
&lt;li&gt;Session logs or step-by-step accounts&lt;/li&gt;
&lt;li&gt;Deprecated features (delete from knowledge files)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The heuristic we use: "Would this help Claude understand the system 3 months from now?" If not, cut it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The knowledge update loop
&lt;/h2&gt;

&lt;p&gt;None of this works if the knowledge goes stale. What makes it compound over time: at the end of each session, we call &lt;code&gt;/update-knowledge&lt;/code&gt;, a &lt;a href="https://docs.anthropic.com/en/docs/claude-code/skills" rel="noopener noreferrer"&gt;custom skill&lt;/a&gt; that reviews the conversation, checks existing knowledge files, and decides whether the repo's instruction surface needs updating.&lt;/p&gt;

&lt;p&gt;No friction, we just run it. Half of the time, nothing changes. When it does, it's almost always a targeted edit to a knowledge file. &lt;code&gt;CLAUDE.md&lt;/code&gt; moves rarely, maybe once every few weeks when a repo-wide rule shifts. Either way, it goes through a PR like any other change.&lt;/p&gt;

&lt;p&gt;Here's what the skill looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;update-knowledge&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Update project knowledge base after a session&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="s"&gt;Review the current conversation and update project knowledge.&lt;/span&gt;

&lt;span class="c1"&gt;## Steps&lt;/span&gt;

&lt;span class="s"&gt;1. Read `CLAUDE.md` to see the knowledge table and existing file list&lt;/span&gt;
&lt;span class="s"&gt;2. Read all files in `.claude/knowledge/`&lt;/span&gt;
&lt;span class="s"&gt;3. Review the conversation and recent git diff&lt;/span&gt;
&lt;span class="na"&gt;4. Update knowledge&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
   &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;**Existing file needs update**&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;edit the relevant `.md`&lt;/span&gt;
   &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;**New feature/topic**&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;create a new `.md` and add a row&lt;/span&gt;
     &lt;span class="s"&gt;to the Knowledge table in `CLAUDE.md`&lt;/span&gt;
   &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;**General pattern discovered**&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;add to `CLAUDE.md` directly&lt;/span&gt;
&lt;span class="na"&gt;5. Cleanup pass&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;check all existing knowledge files for stale&lt;/span&gt;
   &lt;span class="s"&gt;content. Trim or delete as needed.&lt;/span&gt;
&lt;span class="nn"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude decides what's worth keeping, and what to cut: stale content gets trimmed, not archived.&lt;/p&gt;

&lt;p&gt;After a few weeks of running this, the effect is hard to miss. Claude kickstarts sessions with context that used to require manual pasting. No need to tag a file or invoke a command. Claude reads the knowledge table, sees what's relevant, and loads it. The knowledge files fill in gradually, effortlessly.&lt;/p&gt;

&lt;p&gt;Plus. The worflow changes how we think about sessions. We used to keep a single session alive as long as possible to preserve context. Now we work on a piece of the problem, run &lt;code&gt;/update-knowledge&lt;/code&gt;, and start fresh. Shorter sessions mean a leaner context window. A leaner context means a more reliable Claude.&lt;/p&gt;

&lt;p&gt;Every session leaves the next one a little better equipped.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>claudemd</category>
      <category>contextengineering</category>
      <category>aiagents</category>
    </item>
  </channel>
</rss>
