<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://yoonholee.com/feed.xml" rel="self" type="application/atom+xml"/><link href="https://yoonholee.com/" rel="alternate" type="text/html" hreflang="en"/><updated>2026-06-12T21:31:16+00:00</updated><id>https://yoonholee.com/feed.xml</id><title type="html">Yoonho Lee</title><subtitle>Yoonho Lee is a final-year Stanford CS PhD student advised by Chelsea Finn, working on continual learning in text space, text optimization, AI agents, and LLM systems.</subtitle><entry><title type="html">We Should Take Text Optimization More Seriously</title><link href="https://yoonholee.com/blog/2026/we-should-take-text-optimization-more-seriously/" rel="alternate" type="text/html" title="We Should Take Text Optimization More Seriously"/><published>2026-06-08T00:00:00+00:00</published><updated>2026-06-08T00:00:00+00:00</updated><id>https://yoonholee.com/blog/2026/we-should-take-text-optimization-more-seriously</id><content type="html" xml:base="https://yoonholee.com/blog/2026/we-should-take-text-optimization-more-seriously/"><![CDATA[<p>There is a common negative sentiment I observe among ML researchers toward prompting, or more broadly, text optimization. The underlying view seems to be something like <em>“real learning happens in the weights.”</em> By text optimization, I broadly mean methods that modify the mutable text layer around a model: prompts, context, filesystem state, memory, retrieval databases, and model harnesses.<sup id="fnref:text-layer"><a href="#fn:text-layer" class="footnote" rel="footnote" role="doc-noteref">1</a></sup> I think this layer should be taken more seriously by the broader research community. I’ll argue for text optimization on three counts:</p> <ul> <li><strong>Text optimization is a legitimate update mechanism.</strong> It holds the same functional role as gradient-based weight optimization: changing future behavior in response to new information.</li> <li><strong>Text optimization is much more sample-efficient than weight optimization</strong>, particularly in the low-data regime. Relatively short, high-likelihood text has low description length, giving text optimization a favorable inductive bias.</li> <li><strong>Text optimization enables a new scaling axis: update-time compute.</strong> Reflective text optimization lets a system spend more compute learning from a single experience, the way inference-time scaling lets a model spend more on a single input.</li> </ul> <h2 id="learning-outside-the-weights">Learning Outside the Weights</h2> <p>Deployed AI systems are no longer just a parameter vector queried in isolation; they are complex, <a href="https://bair.berkeley.edu/blog/2024/02/18/compound-ai-systems/">stateful machines</a> with many moving parts, the weights being just one of them. Once this whole system is the object of study, learning can mean changing any behavior-conditioning state. Weights are one state, typically updated through gradient-based optimization. Prompts, memories, retrieval indices, and harness code are others, with different costs, capacities, and failure modes. The important question is <em>which update target is the most appropriate</em> for a given piece of information.</p> <p>Text artifacts have a useful inductive bias. The usual Kolmogorov-style compression intuition applies: short specifications that explain many cases are more likely to capture real structure than long lists of exceptions. In this sense, good text updates are <em>compact patches to a pretrained world prior</em>. Empirically, text optimization is orders of magnitude more sample-efficient in the low-data regime (<a href="https://arxiv.org/abs/2103.08493">1</a>, <a href="https://arxiv.org/abs/2012.15723">2</a>, <a href="https://arxiv.org/abs/2507.19457">3</a>). Because of this, a recurring pattern at scale is to use the text layer to elicit and compose existing capabilities in the model, and then distill this into the weights over time (<a href="https://www.anthropic.com/index/claudes-constitution">Anthropic</a>, <a href="https://openai.com/index/deliberative-alignment/">OpenAI</a>, <a href="https://cursor.com/cursorbench">Cursor</a>, <a href="https://github.com/letta-ai/context-constitution">Letta</a>, <a href="https://hippocraticai.com/polaris-3/">Hippocratic AI</a>, <a href="https://trajectory.ai/field-notes/the-sovereign-path-for-continual-agent-learning-early-results-on-harvey-lab-with-nvidia-nemotron">Harvey</a>).</p> <h2 id="update-time-compute-a-new-scaling-axis">Update-Time Compute: A New Scaling Axis</h2> <p>The text layer enables <strong>reflective learning</strong> (<a href="https://arxiv.org/abs/2303.11366">Reflexion</a>, <a href="https://arxiv.org/abs/2406.16218">Trace</a>, <a href="https://arxiv.org/abs/2507.19457">GEPA</a>, <a href="https://arxiv.org/abs/2603.28052">Meta-Harness</a>): an optimization loop grounded in text can <em>externalize its own hypotheses about how it should change</em>. This makes <em>hypothesis testing</em> scalably useful at update time: systems can propose multiple ideas in text and test them against new evidence before accepting or rejecting them, the way a scientist might propose and test multiple theories before settling on one. See e.g. <a href="https://arxiv.org/abs/2603.28052">Appendix A.2 of Meta-Harness</a> for a real example of such hypothesis-testing behavior. SGD can’t cheaply do this; its single running parameter vector commits each update, with no easy way to fork and compare.</p> <p>I think the core promise of text optimization is that we can scale <strong>“update-time compute”</strong>: just as inference-time scaling lets a model spend more compute to solve a single instance, reflective text optimization lets a system spend more compute learning from a single experience. A failed trajectory can be reread, diagnosed, abstracted, tested against candidate revisions, and then converted into a proposed update. Text-space learning is therefore especially useful when (1) failures are expensive, (2) the desired behavior is hard to specify, or (3) there is abundant offline trace data that does not work well otherwise (SFT or offline RL).</p> <h2 id="the-strongest-case-for-weights-and-my-counterpoints">The Strongest Case for Weights, and My Counterpoints</h2> <p>There are some compelling arguments for keeping learning in the weights. For each, I will state my strongest interpretation of the argument, and then respond in rebuttal style.</p> <blockquote> <p>Weights give <em>amortization</em>. Once a behavior is trained into the model, the system no longer has to carry the full specification of that behavior in every context window. The context window, in contrast, is a finite resource.</p> </blockquote> <p>I think this is a strong argument for many types of information to <em>ultimately</em> belong in weights. I agree; for example, LLMs should not need a long prompt to explain basic arithmetic for every request. Even here, though, many pieces of useful information are not stable or general enough to be worth the cost of amortization, as with search agents that gather dynamic internet context or personalized agents that depend on changing user history, preferences, and private state. I think the right framing is as a routing problem: weights are where stable, repeatedly useful information belongs, while text is where information stays while it is volatile, local, auditable, or not yet trusted enough to amortize.</p> <p>Additionally, good text-layer systems do not dump all available information into the context window. They implement progressive disclosure of information, where the system retrieves and conditions on relevant information as needed (<a href="https://arxiv.org/abs/2005.11401">RAG</a>, <a href="https://arxiv.org/abs/2310.08560">MemGPT</a>, <a href="https://arxiv.org/abs/2512.24601">RLM</a>, <a href="https://x.com/ClaudeDevs/status/2060044853279617150">Anthropic dynamic workflows</a>, <a href="https://arxiv.org/abs/2603.28052">Meta-Harness</a>). With the right organization, it’s fairly straightforward to implicitly condition on a much larger context than the model’s input window. When you know what to include, you can pack a surprising amount of information into context. 1% of a 1M-token context is 10K tokens, which is more than three copies of this post; hopefully enough that reading it meaningfully shifts a reader’s mental model.</p> <p>Even if some information is worth amortizing into weights, it need not be amortized immediately. I’ve come to view the text layer as a kind of flexible <em>“staging ground”</em> for information that may eventually be distilled into weights. This layer makes it very easy to test and refine behavioral hypotheses before committing them to the model. The mechanics of how to evolve the text layer and use it to improve the weights over time is an interesting open research question, whether through direct distillation, (<a href="https://arxiv.org/abs/2209.15189">1</a>, <a href="https://arxiv.org/html/2601.19897v1">2</a>, <a href="https://arxiv.org/abs/2602.12275">3</a>, <a href="https://arxiv.org/abs/2603.16856">4</a>), synthetic data generation (<a href="https://arxiv.org/abs/2504.21798">5</a>, <a href="https://arxiv.org/abs/2601.16443">6</a>, <a href="https://arxiv.org/abs/2602.21193">7</a>, <a href="https://arxiv.org/abs/2604.25727">8</a>), modifying the training loop itself (<a href="https://arxiv.org/abs/2603.08640">9</a>, <a href="https://arxiv.org/html/2604.14116v1">10</a>), or fast-slow learning frameworks (<a href="https://arxiv.org/abs/2605.12484">11</a>).</p> <blockquote> <p>Training the weights creates new neural circuits. Text optimization only ever elicits existing behavior from a fixed set of weights, and given those weights, there is a ceiling on what the text layer can reach.</p> </blockquote> <p>Agreed that a weak model gives text optimization very little to work with. However, such a ceiling is not unique to text optimization, and this argument has even been made <a href="https://openreview.net/forum?id=4OsgYD7em5">against RL</a>.<sup id="fnref:ceiling-rl"><a href="#fn:ceiling-rl" class="footnote" rel="footnote" role="doc-noteref">2</a></sup> Text optimization does not <em>need</em> to create completely new latent capabilities to be useful. Many deployed systems are bottlenecked not by whether the model could in principle perform a certain behavior primitive, but by whether the system can elicit and compose that behavior reliably (<a href="https://alexzhang13.github.io/blog/2026/mgh/">mgh</a>). The practical question is therefore <em>how much useful headroom remains</em> between the model’s latent capabilities and the behavior the deployed system actually exhibits.</p> <p>Empirically, the headroom for improving the text layer is significant. It shows up across retrieval-augmented QA, test-time scaling, and tool-use agents: fixed-model behavior improves when we change the context or execution environment rather than the weights (<a href="https://arxiv.org/abs/2005.11401">1</a>, <a href="https://arxiv.org/abs/2201.11903">2</a>, <a href="https://arxiv.org/abs/2203.11171">3</a>, <a href="https://arxiv.org/abs/2210.03629">4</a>, <a href="https://arxiv.org/abs/2603.28052">5</a>). Scale also appears to increase the value of text conditioning: larger models become better at using information supplied at inference time, and some context-conditioned abilities appear only at larger scale (<a href="https://arxiv.org/abs/2005.14165">1</a>, <a href="https://arxiv.org/abs/2104.08691">2</a>, <a href="https://arxiv.org/abs/2206.07682">3</a>).</p> <blockquote> <p>The “existence argument”: the human brain is clearly intelligent. It must be possible to learn by changing weights alone.</p> </blockquote> <p>I’d actually make a similar existence argument for text optimization. Look at the collection of <strong>all written text</strong> (books, papers, code, webpages, etc.): good external representations greatly amplify human intelligence. <em>How much would the quality of our work suffer if we were suddenly cut off from all external text?</em></p> <blockquote> <p>Anyone can change a text artifact and get a seemingly better-looking output. Text optimization is unusually vulnerable to benchmark leakage and folk theories about model psychology.</p> </blockquote> <p>First, text optimization has been poorly marketed by its early successes. The most visible examples were amusing model quirks like <a href="https://arxiv.org/abs/2205.11916">“let’s think step by step”</a>, <a href="https://arxiv.org/abs/2309.03409">“take a deep breath”</a>, <a href="https://arxiv.org/abs/2307.11760">“this is very important to my career”</a>, <a href="https://arxiv.org/abs/2402.10949">personas</a>, and <a href="https://arxiv.org/abs/2508.00614">threats and tipping</a>. It’s perhaps tempting to conclude that text optimization itself will disappear as newer models become more robust to such tricks. But this confuses a weak early framing of the field with the underlying research problem.</p> <p>It’s very easy to tinker on the text layer: anyone can edit an instruction and declare victory based on cherry-picked outputs.<sup id="fnref:tinkering"><a href="#fn:tinkering" class="footnote" rel="footnote" role="doc-noteref">3</a></sup> This low barrier to entry makes bad science here common. If anything, I view such immature methodological norms as a strong argument for studying text optimization more rigorously, especially given its practical importance.</p> <blockquote> <p>Gradient descent is a real optimizer. You can lean on the large literature on optimization, generalization, and convergence to understand how it works. Text optimization is heuristic hill-climbing.</p> </blockquote> <p>Convergence theory only guarantees that you will minimize the proxy loss, not that the proxy matches what you actually care about. A stronger optimizer just exploits this gap; the field has largely moved on from theoretical analysis of generalization dynamics to empirical scaling laws and best practices. RL post-training in particular is notoriously finicky and prone to this kind of overfitting (<a href="https://arxiv.org/abs/2210.10760">1</a>, <a href="https://arxiv.org/abs/2403.17031">2</a>, <a href="https://arxiv.org/abs/2512.07611">3</a>, <a href="https://arxiv.org/abs/2510.13786">4</a>). In contrast, text-layer edits apply weaker optimization pressure while remaining highly auditable, and in many cases also composable.</p> <blockquote> <p>Neural networks are universal function approximators and can represent anything.</p> </blockquote> <p>Representational capacity is not the right thing to look at; even a two-layer MLP can <em>in principle</em> represent any function, but that doesn’t mean it can learn to do so efficiently or reliably. We should be looking at <strong>reachable behavior</strong>, i.e., what behaviors are sufficiently high-likelihood under the implicit prior. Harnesses can demonstrably execute behaviors that we wouldn’t expect frozen models to via a single forward pass.</p> <blockquote> <p>Text artifacts are not portable. They are overfit to one model’s quirks and often break on the next checkpoint.</p> </blockquote> <p>The relevant comparison is with other update artifacts. A text artifact written for one model may fail on another, but a weight delta trained for one architecture is usually not portable at all. Text artifacts are slightly more portable since text still carries meaning across models.</p> <h2 id="perhaps-the-pendulum-has-swung-too-far">Perhaps the Pendulum Has Swung Too Far</h2> <p>The “weights are the real learning” view is partly a reaction to early AI, when researchers were focused on building systems that could learn by changing their internal parameters. For decades, the dominant picture treated intelligence as explicit symbol manipulation. Newell and Simon’s <a href="https://cacm.acm.org/research/computer-science-as-empirical-inquiry/">physical symbol system hypothesis</a> and Haugeland’s <a href="https://mitpress.mit.edu/9780262081535/artificial-intelligence/">GOFAI</a> are canonical examples of this mindset. Neural networks showed that this was too narrow: useful information can clearly live in weights; modern LLMs are the strongest evidence for that claim.</p> <p>We seem to have overcorrected towards viewing weights as the <em>only</em> serious home for knowledge. This is strange when zoomed out because human cognition routinely depends on external artifacts. In <a href="https://mitpress.mit.edu/9780262082310/cognition-in-the-wild/">Cognition in the Wild</a>, Edwin Hutchins analyzes ship navigation as a cognitive system made of people, instruments, procedures, and external representations. Clark and Chalmers make a related point in <a href="https://www.alice.id.tue.nl/references/clark-chalmers-1998.pdf">The Extended Mind</a>: the boundary of a cognitive system can extend <strong>beyond</strong> the internal state of a single component. The computer-science version of this lineage runs at least back to Vannevar Bush’s <a href="https://web.mit.edu/sts.035/www/PDFs/think.pdf">Memex</a>: an external memory organized around associative trails through a personal archive. Modern tools-for-thought systems like <a href="https://www.notion.com/">Notion</a> and <a href="https://obsidian.md/">Obsidian</a> are concrete attempts to make external memory part of everyday knowledge work.</p> <p><em>Scientific practice</em> is a useful comparison. One of the core goals of science is to construct compact representations of the world, which is <em>aided by</em> private intuitions inside scientists’ heads but not reducible to them. The usual products are crystallized: an abstraction, a theorem, or a causal model, which can be written down and shared. Their value comes in large part <em>from</em> externalization: they can be criticized, compared against new evidence, revised, and applied to new cases. Text artifacts occupy a similar functional role in model systems: they are external representations that encode behavior-relevant abstractions. Updating them is “learning” in the same sense that revising a scientific theory in light of new evidence is learning.</p> <h2 id="a-call-for-good-research-on-the-text-layer">A Call for Good Research on the Text Layer</h2> <p>I think text optimization deserves the same kind of community we built around weight optimization, and I wish there were more high-quality research here. Several directions seem ripe for foundational work in the very near future:</p> <ul> <li><strong>Theoretical analysis</strong> of the text layer. Generally, text space gives a <em>much</em> better prior than weight space, and cleanly formalizing this observation could be very useful for guiding practice. <a href="https://arxiv.org/abs/2310.03957">This old-ish paper</a> is a promising start applying PAC-Bayes to prompts in 2023-level models, which seems very much worth revisiting with the latest generation of models and text artifacts.</li> <li><strong>Better evals</strong>. <a href="https://arxiv.org/abs/2602.03587">CL-bench</a> is an initial attempt at a proper eval for context learning, and agentic benchmarks like <a href="https://www.tbench.ai/leaderboard/terminal-bench/2.0">TerminalBench-2</a> have partly become a battleground for harnesses. Still, we need more benchmarks that isolate useful properties of the text layer, controlling for weight capability while flagging the weird new classes of <a href="https://arxiv.org/abs/2604.11806">overfitting and cheating</a> that the text layer enables.</li> <li>“<strong>Architecture research</strong>”, i.e., understanding the design space. There are so many proposed designs for the text layer, from the <a href="https://openai.com/index/the-instruction-hierarchy/">instruction hierarchy</a>, <a href="https://github.com/stanfordnlp/dspy">DSPy programs</a>, <a href="https://agentskills.io/home">agent skills</a>, <a href="https://github.com/openclaw/openclaw">OpenClaw-style agents</a>, and the massive number of <a href="https://arxiv.org/abs/2504.15965">memory system designs</a>. There is a sense in which these are all points on one huge design space, but we don’t have a good way to talk about that space, let alone compare different points in it.</li> <li><strong>HCI research</strong> on how to elicit input from humans to optimize the text layer, and how to present the system’s internal state back to users for inspection and revision. I think figuring out the right ways to interact with the text layer can make it economically viable to routinely have top domain experts sit down for “verbal fine-tuning” sessions with AI systems. I don’t know of a good example of work in this direction, but <a href="https://dl.acm.org/doi/abs/10.1145/3654777.3676362">this paper of mine</a> had essentially this motivation, though it worked in a very limited domain.</li> <li><strong>Seriously scaling up</strong> text optimization, including establishing <a href="https://arxiv.org/abs/2001.08361">scaling laws</a>. The compute budgets currently allocated to text optimization are <em>orders of magnitude smaller</em> than weight post-training scale. For example, a scaled-up artifact might look like a Wikipedia-scale knowledge/harness layer, optimized from the ground up against measurable model-system performance<sup id="fnref:company"><a href="#fn:company" class="footnote" rel="footnote" role="doc-noteref">4</a></sup>.</li> </ul> <div class="post-acknowledgment"> <p>Thanks to Omar Khattab, Allen Nie, Chelsea Finn, Alex Zhang, Ahmad Beirami, and Qizheng Zhang for excellent feedback on an earlier draft. This post is a distillation of many conversations with researchers over the past year or so, which I won’t attempt to list here in full.</p> </div> <h3 id="footnotes">Footnotes</h3> <div class="footnotes" role="doc-endnotes"> <ol> <li id="fn:text-layer"> <p>I use “text” because language is the clearest and most common case, but the argument should apply more broadly to external artifacts that can condition a model’s future behavior, including images, audio, video, and other tokenized state. <a href="#fnref:text-layer" class="reversefootnote" role="doc-backlink">&#8617;</a></p> </li> <li id="fn:ceiling-rl"> <p>This is contested. <a href="https://arxiv.org/abs/2505.24864">ProRL</a> and <a href="https://arxiv.org/abs/2510.13786">The Art of Scaling RL Compute</a> argue that with the right training recipe, RL can expand reasoning capacity beyond the base model. Personally, I think the truth is somewhere in the middle: RL by design should be able to discover new behaviors, but there’s definitely a strong empirical dependence on the quality of the base model. Either way, the details here don’t matter for the argument I’m making in the post. <a href="#fnref:ceiling-rl" class="reversefootnote" role="doc-backlink">&#8617;</a></p> </li> <li id="fn:tinkering"> <p>I do see this happen somewhat often, at least more than in weight-space research. Everyone seems to have a strong opinion on what the best system prompt or skill is. This probably has more to do with social media dynamics: “one weird trick to make your model 10x smarter” is much more actionable than any weight-space intervention. <a href="#fnref:tinkering" class="reversefootnote" role="doc-backlink">&#8617;</a></p> </li> <li id="fn:company"> <p>I’ve started to think this may be a good startup. <a href="#fnref:company" class="reversefootnote" role="doc-backlink">&#8617;</a></p> </li> </ol> </div>]]></content><author><name>Yoonho Lee</name></author><summary type="html"><![CDATA[On where learning should happen.]]></summary></entry><entry><title type="html">Meta-Harness: End-to-End Optimization of Model Harnesses</title><link href="https://yoonholee.com/blog/meta-harness/" rel="alternate" type="text/html" title="Meta-Harness: End-to-End Optimization of Model Harnesses"/><published>2026-03-29T00:00:00+00:00</published><updated>2026-03-29T00:00:00+00:00</updated><id>https://yoonholee.com/blog/meta-harness</id><content type="html" xml:base="https://yoonholee.com/blog/meta-harness/"><![CDATA[]]></content><author><name>Yoonho Lee</name></author><summary type="html"><![CDATA[Project page for Meta-Harness. Interactive demo, results on text classification, math reasoning, and agentic coding.]]></summary></entry><entry><title type="html">What Is Taste?</title><link href="https://yoonholee.com/blog/2026/taste/" rel="alternate" type="text/html" title="What Is Taste?"/><published>2026-03-22T00:00:00+00:00</published><updated>2026-03-22T00:00:00+00:00</updated><id>https://yoonholee.com/blog/2026/taste</id><content type="html" xml:base="https://yoonholee.com/blog/2026/taste/"><![CDATA[<h1 id="what-is-taste">What Is Taste?</h1> <p>A <a href="https://arxiv.org/abs/2603.14473">recent paper</a> trains a model to predict which of two papers will receive more citations, and calls this learning scientific taste. The results look solid, but it left me unsatisfied. Citations are a byproduct of taste, sort of like training a film critic by predicting box office revenue. It measures something real but misses the thing itself. This got me thinking: what <em>is</em> taste, exactly?</p> <h2 id="what-taste-is-and-isnt">What Taste Is (and Isn’t)</h2> <p>It seems that taste is one of those things that people feel viscerally but resist precise definition. Here I’ve collected some of the attempts at defining it, each of which I think captures a different aspect of the same thing.</p> <p>Ira Glass describes the <a href="https://www.brainpickings.org/2014/01/29/ira-glass-success-daniel-sax/">taste gap</a>: you get into creative work because you have good taste, but early on, your ability can’t match it. You can tell your work falls short, and that gap is painful enough that many people quit. The ones who don’t quit close the gap through sheer volume of work. In ML language, the verifier (taste) runs ahead of your generator (execution).</p> <p>Chris Olah <a href="https://x.com/ch402/status/1295063684545314818">distinguishes</a> research intimacy from research taste. Intimacy is internalizing raw, undigested knowledge about your domain: e.g., memorizing hundreds of neurons in InceptionV1 and knowing how they behave. Taste is different, but intimacy feeds it. Olah suspects that many “brilliant insights” are natural next steps for someone deeply intimate with a topic, and that deep intimacy is “one of the key ingredients in beating the research taste market.”</p> <p>Michael Nielsen <a href="https://michaelnielsen.org/blog/principles-of-effective-research/">identifies</a> two researcher archetypes: the problem-solver and the problem-creator. Problem-solvers attack well-posed challenges, and problem-creators ask new questions or find simple connections no one noticed. Arguably, the problem-creator’s core skill is taste: knowing which questions to ask, which areas will thrive, which promising ideas won’t pan out. Richard Hamming <a href="https://www.cs.virginia.edu/~robins/YouAndYourResearch.html">makes the same point</a> more bluntly: “What are the important problems of your field? Why aren’t you working on them?” The ability to answer the first question is taste. Hamming also noticed that people who worked with their office doors open, despite constant interruptions, ended up working on more important problems than those who kept their doors closed. The closed-door people were more productive day to day, but “somehow they seem to work on slightly the wrong thing.” Taste, it seems, is sharpened by ambient exposure to peers.</p> <p>Harriet Zuckerman interviewed nearly every American Nobel laureate of the 20th century for the book <a href="https://www.amazon.com/Scientific-Elite-Harriet-Zuckerman/dp/0029357608"><em>Scientific Elite</em></a>. She found that the primary benefit of apprenticeship under great scientists was adopting their <em>research style</em> and <em>standards</em> rather than access to resources. Many laureates identified the simplicity of solutions as a mark of taste.</p> <p>Michael Polanyi discusses something related to taste in <a href="https://press.uchicago.edu/ucp/books/book/chicago/P/bo19722848.html"><em>Personal Knowledge</em></a>. His central concept is tacit knowledge: we always know more than we can tell. For example, a cyclist can’t articulate the physics of balance. Polanyi argues that all explicit knowledge rests on a tacit substrate, and that scientific discovery depends on trained intuition and aesthetic judgment.</p> <p>My short synthesis of these descriptions is that taste is an emergent felt sense, acquired bottom-up through practice and proximity. It operates as a fast, pre-verbal filter on an enormous space of possibilities. You recognize it in others but can’t directly transfer it, aside from osmosis over consistent interactions.</p> <h2 id="why-defining-taste-matters-now">Why Defining Taste Matters Now</h2> <p>I believe that taste is the core skill of research. It’s what tells you which question to ask, which results are surprising, which directions are worth your time. Precisely because it’s so difficult to define, it’s a skill that current models are far from having.</p> <p>Can models eventually develop taste? I think so. The “human existence proof” shows that some configuration of neurons “have taste” in the sense that they can reliably produce good research, and I see no first-principles reason to believe artificial networks can’t. But if the best human researchers can’t articulate their own taste, it’s not obvious what loss or reward would elicit it from a model. The research community will likely push beyond citation counts toward higher-bandwidth proxies: test-of-time awards, reviewer discourse, survey coverage, and the broader written conversation around papers. There is dense signal here. These are all lagging indicators, but the lag gets easier to bridge if you know what they’re proxying for.</p> <div class="post-acknowledgment"> Thanks to Kangwook Lee for a conversation that motivated this post and feedback on an early draft. </div>]]></content><author><name>Yoonho Lee</name></author><summary type="html"><![CDATA[Surveying attempts to define research taste, and why it matters for AI.]]></summary></entry><entry><title type="html">Are We Managers Now?</title><link href="https://yoonholee.com/blog/2026/managers/" rel="alternate" type="text/html" title="Are We Managers Now?"/><published>2026-03-12T00:00:00+00:00</published><updated>2026-03-12T00:00:00+00:00</updated><id>https://yoonholee.com/blog/2026/managers</id><content type="html" xml:base="https://yoonholee.com/blog/2026/managers/"><![CDATA[<h1 id="are-we-managers-now">Are We Managers Now?</h1> <p>Paul Graham writes in <a href="https://paulgraham.com/makersschedule.html">“Maker’s Schedule, Manager’s Schedule”</a>:</p> <blockquote> <p>There are two types of schedule, which I’ll call the manager’s schedule and the maker’s schedule. The manager’s schedule is for bosses. It’s embodied in the traditional appointment book, with each day cut into one hour intervals. You can block off several hours for a single task if you need to, but by default you change what you’re doing every hour. […]</p> <p>For someone on the maker’s schedule, having a meeting is like throwing an exception. It doesn’t merely cause you to switch from one task to another; it changes the mode in which you work.</p> </blockquote> <p>He makes the case that the maker’s schedule and the manager’s schedule are fundamentally incompatible, and I’ve always worked on the maker’s schedule. But I noticed that heavy use of Claude Code has shifted my role. Instead of doing the work myself, I mostly specify tasks and evaluate outputs. That is managerial work, and I’m not very good at it yet.</p> <h2 id="learning-to-manage">Learning to Manage</h2> <p>AI agents execute tasks quickly, which creates effectively infinite demand for review. The pull to check outputs immediately is strong, but humans are not built to process a constant stream of results. I think makers will benefit from learning and adopting some structure for sustainable (human) management. I’m experimenting with a few ways of working with AI agents.</p> <ul> <li>Viewing my job as defining the goal and plan, and treating my evaluation as a scarce resource to allocate.</li> <li>The “meeting/briefing” model: one dense sync session followed by long autonomous AI execution. This might look like spending an hour writing a detailed plan, pre-empting any blockers, and dispatching the agent. Reviewing only after everything finishes.</li> <li>Batching. Grouping agent tasks by the type of thinking they require from me.</li> <li>Boundaries. Just because an agent finishes does not mean I have to look immediately.</li> </ul> <p>I think this will be made even better by improvements in <a href="https://arxiv.org/abs/2511.07919">test-time optimization loops</a>, which allow LLMs to autonomously perform meaningful work over long periods of time. In these systems, the human defines an objective and the model iterates against it, replacing many small supervision decisions with a small number of objective definitions. This role seems far more sustainable than managing a stream of agent outputs in real time.</p> <h2 id="two-modes-of-ai-work">Two Modes of AI Work</h2> <p>That said, not all AI work feels managerial. AI seems to create two different modes of work. I play a manager role when delegating tasks to agents, but when interacting with a model in real time (iterating, testing ideas, building something together) the maker loop is still there, and in fact it’s become even better in my experience. That mode, where each response pushes the work forward in real time, has produced some of the strongest creative flow states I’ve experienced.</p>]]></content><author><name>Yoonho Lee</name></author><summary type="html"><![CDATA[How the "maker's schedule" is changing with AI agents.]]></summary></entry><entry><title type="html">Following the Text Gradient at Scale</title><link href="https://yoonholee.com/blog/2025/feedback-descent/" rel="alternate" type="text/html" title="Following the Text Gradient at Scale"/><published>2025-12-01T00:00:00+00:00</published><updated>2025-12-01T00:00:00+00:00</updated><id>https://yoonholee.com/blog/2025/feedback-descent</id><content type="html" xml:base="https://yoonholee.com/blog/2025/feedback-descent/"><![CDATA[<p>Cross-posted from <a href="https://ai.stanford.edu/blog/feedback-descent/">SAIL blog</a>.</p> <h2 id="rl-throws-away-almost-everything-evaluators-have-to-say">RL Throws Away Almost Everything Evaluators Have to Say</h2> <p>When you get feedback on your work, it usually tells you <em>what</em> went wrong and <em>how</em> to fix it. But existing reinforcement learning (RL) algorithms throw most of that information away; it compresses potentially rich feedback into a single number, a reward<sup id="fnref:dense"><a href="#fn:dense" class="footnote" rel="footnote" role="doc-noteref">1</a></sup>, then tries to learn by correlating rewards with actions across hundreds or thousands of attempts. We do this because our algorithms were designed for scalar supervision, not because of a fundamental constraint in learning from experience<sup id="fnref:rl-gap"><a href="#fn:rl-gap" class="footnote" rel="footnote" role="doc-noteref">2</a></sup>.</p> <p>To illustrate this, let’s consider a simple example. Suppose you’re judging cakes. You take a bite, you like the shavings on top, the ganache is perfectly tempered, but you want way more cherries throughout. Yet you only record: “4/5.” The baker learns nothing about the cherry distribution or what else worked well, only that this cake scored higher than a 3. If this is the only information you provide, the baker will likely have to do <strong>a lot</strong> more baking to figure out what you actually want. <sup id="fnref:cake-reference"><a href="#fn:cake-reference" class="footnote" rel="footnote" role="doc-noteref">3</a></sup></p> <p><img src="/assets/img/feedback-descent/cake.png" alt="Cake example"/></p> <p>More generally, an expert given a candidate solution can articulate specific failure modes, causal mechanisms, and concrete fixes. Full verbal feedback for the cake above would contain far more actionable information than the numerical score “4/5”. The baker can confidently keep the parts of the cake that worked well, rather than blindly exploring recipe variations. This is the core insight: rich feedback enables targeted improvements rather than random exploration, resulting in fewer trials to achieve a better outcome.</p> <p>This striking mismatch between the information available and the information used by RL has been aptly described as <a href="https://youtu.be/lXUZvyajciY?si=fez_SbjEhp2y3FZF&amp;t=2597">sucking supervision through a straw</a>: you run minutes of rollout and compress it all into a final reward signal broadcast across the entire trajectory. This scalar bottleneck is becoming increasingly costly in the tasks we’re deploying LLMs on: for example, <a href="https://blog.google/products/search/deep-search-business-calling-google-search/">research</a> <a href="https://openai.com/index/introducing-deep-research/">agents</a> run 5-30 minutes per task. Each run produces rich diagnostic logs—tool calls, intermediate reasoning, error traces—all of which are collapsed into a single scalar that discards the causal signal of where and why things failed. While rich feedback requires a bit more work from the evaluator, they’ve already done the reasoning; we’re just asking them to write it down. When rollouts themselves are expensive, the marginal annotation cost is small relative to the sample-efficiency gains we can achieve with richer feedback.</p> <p>In this post, we survey an emerging learning paradigm that fully embraces all the feedback an environment has to offer—avoiding the scalar bottleneck of RL—and discuss our recent work called <strong>Feedback Descent</strong> (check out the paper <a href="https://arxiv.org/abs/2511.07919">here</a>), which outperforms specialized RL methods in challenging optimization domains such as molecular design and prompt optimization.</p> <h2 id="from-scalar-rewards-to-text-based-optimization">From Scalar Rewards to Text-Based Optimization</h2> <p>A growing body of work hints at an alternative to reward-based learning: directly using rich feedback to guide model improvement. Given a textual artifact (e.g., a prompt, source code, molecule specs), we can often provide natural-language explanations of how to improve it. That explanation is already a form of supervision. Rather than compressing it into a single number, we can feed it back into the system during the update.</p> <p>In recent work, two broad patterns have emerged around this principle:</p> <ul> <li><strong>Critique-based or “text gradient” methods.</strong> The model proposes an artifact and receives a natural-language critique of its errors or omissions. The critique explicitly suggests a direction of improvement: adjust the retrieval query, remove this redundancy, change the control flow, etc. A revised artifact is then produced by editing the original in line with the critique. This pattern appears in systems such as <a href="https://arxiv.org/abs/2303.17651">Self-Refine</a>, <a href="https://arxiv.org/abs/2305.03495">APO</a>, <a href="https://arxiv.org/abs/2406.16218">Trace</a>, and <a href="https://arxiv.org/abs/2406.07496">TextGrad</a>.</li> <li><strong>Evolutionary methods.</strong> Instead of iteratively editing a single artifact, these methods maintain a population of artifacts. Language models generate mutations and recombinations conditioned on the current population, and evaluators select the better ones. Iterating this variation-selection loop gradually shifts the population toward higher-performing algorithms or designs, as in <a href="https://arxiv.org/abs/2309.08532">EvoPrompt</a>, <a href="https://arxiv.org/abs/2507.19457">GEPA</a>, and <a href="https://arxiv.org/abs/2506.13131">AlphaEvolve</a>/<a href="https://github.com/algorithmicsuperintelligence/openevolve">OpenEvolve</a>, and has driven novel <a href="https://www.nature.com/articles/s41586-023-06924-6">mathematical discoveries</a>.</li> </ul> <p>Both lines demonstrate the same underlying principle: textual feedback can serve as structured supervision, often far more informative than scalar rewards. In the remainder of this post, we build a single, domain-agnostic loop around the two primitives these approaches rely on: an evaluator that produces structured feedback, and an editor that turns <em>accumulated</em> feedback on the current best candidates into concrete revisions. We will demonstrate how this loop can sustain meaningful improvement for up to 1000 iterations, far beyond the stability range of standard self-refinement methods.</p> <h2 id="example-domain-drug-discovery">Example Domain: Drug Discovery</h2> <p>Let’s make this concrete with a problem where the stakes are high and real-world evaluation is expensive: computational drug discovery. The goal is to find small molecules that bind strongly to a target protein, a critical first step in developing new therapeutics. We can navigate the (huge) space of possible molecules using a standard text representation called SMILES: for example, <code class="language-plaintext highlighter-rouge">COCCc1ccc(OCC(O)CNC(C)C)cc1</code> is metoprolol, one of the most prescribed blockers of ADRB1 (one of our target proteins). Given a target protein, docking simulators can give us a proxy score for binding affinity; if we treat this as a standard RL-style optimization problem, the environment returns only a single scalar reward for each SMILES:</p> <ul> <li>Molecule 1 (<code class="language-plaintext highlighter-rouge">O=C(O)C1=CC=CC=C2C=CCCCCCN1C(=O)c1cccc(c1)C2</code>): Reward = 5.037</li> <li>Molecule 2 (<code class="language-plaintext highlighter-rouge">COCCc1ccc(OCC(O)CNC(C)C)cc1</code>): Reward = 4.236</li> </ul> <p>A scalar reward like this hides almost everything about <em>why</em> one molecule is better than the other. But nothing stops us from designing evaluators that expose a much richer structure. For each candidate, the evaluator can report a detailed breakdown of its molecular properties. Below is a small subset of <a href="https://www.rdkit.org/docs/Cookbook.html">RDKit</a>-computed features for these two molecules<sup id="fnref:molecule-metadata"><a href="#fn:molecule-metadata" class="footnote" rel="footnote" role="doc-noteref">4</a></sup>:</p> <table> <thead> <tr> <th>Property</th> <th>Molecule 1</th> <th>Molecule 2</th> <th>Implication</th> </tr> </thead> <tbody> <tr> <td>Core scaffold</td> <td>macrocycle</td> <td>benzene</td> <td>Rigid fused system vs. flexible benzene</td> </tr> <tr> <td>Docking score</td> <td>−6.8</td> <td>−7.1</td> <td>Molecule 1 binds <em>weaker</em></td> </tr> <tr> <td>Drug-likeness (QED)</td> <td>0.824</td> <td>0.714</td> <td>Molecule 1 is more drug-like</td> </tr> <tr> <td>Basic amines</td> <td>0</td> <td>1</td> <td>No salt bridge with Asp138—explains weak binding</td> </tr> <tr> <td>Rotatable bonds</td> <td>1</td> <td>9</td> <td>Rigidity boosts QED but pre-organizes wrong pose</td> </tr> <tr> <td>LogP</td> <td>4.3</td> <td>1.6</td> <td>Too lipophilic, solubility risk</td> </tr> </tbody> </table> <p>A medicinal chemist would be able to look through this table and reason almost immediately:</p> <ul> <li>Molecule 1 has a better overall drug-likeness, but a worse docking score.</li> <li>Molecule 1’s lack of basic amines explains the weak docking score. Molecule 2 binds better because it forms a salt bridge.</li> <li>A promising candidate would merge the strengths of both: keep the favorable macrocycle scaffold of Molecule 1, but introduce a basic amine.</li> </ul> <p>The scalar reward reveals none of this structure, but the rich feedback exposes a clear path forward. This is precisely the kind of targeted, interpretable guidance that feedback-driven optimization can exploit (and what traditional scalar-based RL discards).</p> <h2 id="the-feedback-descent-algorithm">The Feedback Descent Algorithm</h2> <p>Having seen how rich feedback can reveal an actionable structure beyond what a scalar reward can, we now describe the general framework that turns this idea into a scalable optimization procedure.</p> <p>Feedback Descent is a domain-agnostic loop built from two components:</p> <ol> <li><strong>Evaluators: rich feedback instead of scalars</strong>. An evaluator (an LLM judge, a programmatic tool, or even a human) provides natural-language feedback describing what worked and what didn’t. For different domains, the feedback may include chemical properties and nearest neighbors in a database (molecules), missing structure or aesthetic flaws (SVG images), or reasoning errors and unmet conditions (prompts). The evaluator exposes <em>why</em> an artifact performs the way it does, rather than just whether it did well or poorly.</li> <li><strong>Editors: revisions guided by accumulated feedback</strong>. The editor is an LLM that takes the top candidates and the evaluator’s accumulated feedback and outputs a revised version. This is the descent step: the LLM implicitly incorporates the strongest signals from prior feedback into its following proposal.</li> </ol> <p>Feedback Descent alternates these two steps while maintaining a small <em>frontier</em> of top-performing candidates. For each newly proposed candidate, the evaluator provides feedback. We aggregate all prior feedback and pass it to the editor, and the editor proposes a new candidate:</p> <p><img src="/assets/img/feedback-descent/system.png" alt="Feedback Descent framework"/></p> <p>Over many iterations, the candidate population continually improves as useful feedback accumulates and unproductive directions are discarded. Since both evaluation and editing occur entirely through text, the same loop transfers cleanly across domains, with the only domain-specific component being the evaluator that supplies feedback.</p> <h2 id="does-feedback-descent-work">Does Feedback Descent Work?</h2> <p>We applied the same Feedback Descent framework to three fundamentally different domains: molecular design, SVG image optimization, and prompt optimization.</p> <p><strong>Molecular Design.</strong> We compared Feedback Descent with specialized graph-based molecular optimizers that explicitly encode chemical structures, as well as REINVENT, a reinforcement learning method specifically designed for molecular optimization. Feedback Descent, operating purely on text representations (SMILES strings), matched or exceeded these specialized methods. On multiple targets, our text-based approach identified molecules surpassing the 99.9th percentile of DOCKSTRING’s 260,000-compound database. In several cases, we matched or exceeded the best molecule in the entire database. In this domain, Feedback Descent achieved an average 3.8x reduction in docking calls relative to reinforcement learning (REINVENT).</p> <p><img src="/assets/img/feedback-descent/molecule.png" alt="Molecular design"/></p> <video autoplay="" loop="" muted="" playsinline="" style="width: 100%;"> <source src="/assets/img/feedback-descent/PPARA-compressed.mp4" type="video/mp4"/> </video> <p><strong>SVG Optimization.</strong> Starting from basic SVG drawings, Feedback Descent consistently improved designs through iterative visual critique. After just five iterations, designs reliably outperformed a baseline that conditioned on the judge prompt verbatim, demonstrating a generator-verifier gap where iterative feedback elicits better outputs from the same model.</p> <p><img src="/assets/img/feedback-descent/svg_progression.png" alt="SVG optimization"/> <img src="/assets/img/feedback-descent/svg_grid.png" alt="SVG optimization"/></p> <p><strong>Prompt Optimization.</strong> On four diverse tasks (multi-hop reasoning, instruction following, privacy-aware delegation, and retrieval verification), Feedback Descent achieved competitive performance with GEPA, the state-of-the-art prompt optimization method, while outperforming GRPO, a reinforcement learning baseline.</p> <p><img src="/assets/img/feedback-descent/prompt_optimization.png" alt="Prompt optimization"/></p> <p>Together, these results demonstrate that the same evaluator-editor loop can drive continual improvement in domains that differ in representation, evaluation, and failure modes. The only requirement is that we can obtain and express informative feedback in text; no task-specific optimizers, mutation rules, or architectural changes are needed. The informative signal is carried by the textual feedback itself, and the editor LLM uses this feedback to guide its next revisions through in-context learning.</p> <h2 id="is-text-a-viable-medium-for-learning">Is Text a Viable Medium for Learning?</h2> <p>In conventional gradient-based learning, progress accumulates in the model’s weights. These parameters absorb broad statistical structures and give models the general competence we rely on. But weight updates are not the only place where learning can happen.</p> <p>Text-based optimization suggests a complementary substrate: <strong>semantic space</strong>.</p> <p>This is especially promising for <strong>continual learning</strong>, where parameter updates often struggle because the knowledge stored inside the weights is highly entangled, new updates risk catastrophic forgetting and require careful regularization or access to past data. In contrast, textual artifacts <em>persist</em>. They accumulate naturally as the system operates, and grow in a form that LLMs can readily condition on. New feedback can be integrated immediately without retraining the underlying model.</p> <p>This is early territory. We don’t yet know the full limits of what can be stored or refined in semantic space. But the evidence so far suggests that text-level artifacts can absorb detailed feedback from the environment and unlock forms of improvement that are difficult or inefficient to achieve through weight updates alone. Understanding how to organize and scale this semantic layer, and how to integrate it cleanly with parameter learning, is an exciting direction for future work.</p> <hr/> <p>This post is based on our recent work “<a href="https://arxiv.org/abs/2511.07919">Feedback Descent: Open-Ended Text Optimization via Pairwise Comparison</a>.”</p> <div class="post-acknowledgment"> Thanks to Anikait Singh, Henrik Marklund, Mert Yuksekgonul, Jubayer Ibn Hamid, Allen Nie, Omar Khattab, Sergey Levine, SAIL blog editors (James Burgess, Megha Srivastava), and anonymous ICLR reviewers for their helpful feedback on earlier drafts. </div> <h3 id="footnotes">Footnotes</h3> <div class="footnotes" role="doc-endnotes"> <ol> <li id="fn:dense"> <p>Dense rewards can help with temporal credit assignment, but don’t address the information bottleneck; a scalar at every step still doesn’t tell you what went wrong or how to fix it. Even when dense rewards are available, they’re notoriously hard to design well and prone to reward hacking. In practice, rewards for LLM post-training are usually sparse (outcome-based verification, human preferences), making this limitation especially acute. <a href="#fnref:dense" class="reversefootnote" role="doc-backlink">&#8617;</a></p> </li> <li id="fn:rl-gap"> <p>Here, we’re primarily talking about policy gradients since that is the dominant paradigm for LLM post-training. Value-based methods are more sample-efficient because they propagate credit across time. However, this addresses temporal credit assignment while leaving the information bottleneck intact. This gap is exponential: <a href="https://arxiv.org/abs/1910.03016">Du et al.</a> show that even in settings where value functions are perfectly representable, RL requires exponentially more samples than richer supervision (i.e., imitation learning). <a href="#fnref:rl-gap" class="reversefootnote" role="doc-backlink">&#8617;</a></p> </li> <li id="fn:cake-reference"> <p>This is, of course, a reference to <a href="https://youtu.be/Ount2Y4qxQo?si=oIrt0oFrwmGVWMM1&amp;t=1276">Yann LeCun’s cake analogy</a>. One “cherry on top” is too little for some appetites 🙁 <a href="#fnref:cake-reference" class="reversefootnote" role="doc-backlink">&#8617;</a></p> </li> <li id="fn:molecule-metadata"> <p>For clarity, we only show condensed feedback from two molecules in this table. In practice, the Feedback Descent system is shown full feedback on all top-k molecules proposed so far. <a href="#fnref:molecule-metadata" class="reversefootnote" role="doc-backlink">&#8617;</a></p> </li> </ol> </div>]]></content><author><name>Yoonho Lee and Chelsea Finn</name></author><summary type="html"><![CDATA[Feedback Descent scales text-based optimization into a simple, domain-agnostic procedure that outperforms specialized RL methods across molecular design, prompt optimization, and visual editing.]]></summary></entry></feed>