<script data-pm-proxy="intercept"></script><?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[A Causal Affair]]></title><description><![CDATA[Causal Inference, Coding and Consumer Finance]]></description><link>https://paulgp.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!-whz!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fpaulgp.substack.com%2Fimg%2Fsubstack.png</url><title>A Causal Affair</title><link>https://paulgp.substack.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 04 Sep 2026 20:55:28 GMT</lastBuildDate><atom:link href="/__u/paulgp.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Paul Goldsmith-Pinkham]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[paulgp@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[paulgp@substack.com]]></itunes:email><itunes:name><![CDATA[Paul Goldsmith-Pinkham]]></itunes:name></itunes:owner><itunes:author><![CDATA[Paul Goldsmith-Pinkham]]></itunes:author><googleplay:owner><![CDATA[paulgp@substack.com]]></googleplay:owner><googleplay:email><![CDATA[paulgp@substack.com]]></googleplay:email><googleplay:author><![CDATA[Paul Goldsmith-Pinkham]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Further Readings in Econometrics]]></title><description><![CDATA[A pilot experiment to expose empirical researchers to cutting edge econometrics]]></description><link>https://paulgp.substack.com/p/further-readings-in-econometrics</link><guid isPermaLink="false">https://paulgp.substack.com/p/further-readings-in-econometrics</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Thu, 30 Jul 2026 21:48:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yGzH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceb0c515-2a44-4923-a86f-c8a9701f73a4_1892x1232.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As a producer and consumer of applied econometrics, I have the view (supported <a href="https://paulgp.com/econlit-pipeline/paper.html">by some data</a>) that much of econometric work is under-appreciated and under-consumed by applied folks. I think this is not applied folks fault &#8212; there is a broad concern that econometric theory is very technical and perhaps distant from applied research. I am not alone in this! For example, <a href="https://faculty.wcas.northwestern.edu/cfm754/et_interview.pdf">Chuck Manski in his Econometric Theory interview:</a></p><div class="callout-block" data-callout="true"><p>I worry enormously about the amount of effort that econometric theorists put into more and more obscure forms of local asymptotic theory. It used to be that you did it with at least some hint of an application, but now you can do it without having anything in mind except the most toy application. I take a very strong position on this, that a lot of this is mathematics for the sake of doing mathematics. I think it is dangerous for econometrics as a field.</p></div><p>I think there needs to be some encouragement and translation to help rectify this. There is already a burgeoning amount of interesting applied econometrics work done by wonderful researchers (too many to name, but including <a href="https://jiafengkevinchen.github.io/">Kevin Chen</a>, <a href="https://www.jonathandroth.com/">Jonathan Roth,</a> <a href="https://www.princeton.edu/~mkolesar/">Michal Koles&#225;r</a>, <a href="https://about.peterhull.net/wp">Peter Hull</a>, <a href="https://economics.mit.edu/people/faculty/ashesh-rambachan/working-papers">Ashesh Rambachan</a>, <a href="https://www.mikkelpm.com/research/">Mikkel Plagborg-M&#248;ller,</a> <a href="https://dviviano.github.io/projects/">Davide Viviano</a>,<a href="https://economics.mit.edu/people/faculty/isaiah-andrews/working-papers"> Isaiah Andrews</a>, <a href="https://soonwookwon.github.io/">Soonwoo Kwon</a> and many others). Some of these papers have seen significant take-up and interest, often because they are targeted at applied researchers. </p><p>The Journal of Economic Perspectives (JEP) <a href="https://www.aeaweb.org/articles?id=10.1257%2Fjep.36.1.191">produces a wonderful column that suggests interesting papers and columns</a> to read. That column:</p><blockquote><p>will list readings that may be especially useful to teachers of undergraduate economics, as well as other articles that are of broader cultural interest.</p></blockquote><p>So: this column will attempt to <strong>list econometrics papers and readings that may be useful to applied researchers in economics and finance</strong>. Since often it is not clear <em>why</em> these papers are useful, I will attempt to also give a brief explanation as to why and how to consider it.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p><p>Some ground rules:<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><ol><li><p>I will look at econometrics articles published in Econometrica, American Economic Review, Quantitative Economics, Review of Economics and Statistics, Journal of Business &amp; Economic Statistics, JASA, and Journal of Econometrics in the last year (probably the last quarter, but giving myself some flexibility).<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a></p></li><li><p>I will focus on papers where there is an immediate insight useful for practitioners.</p></li><li><p>I will propose an example empirical setting where I think this might be relevant &#8212; bonus points if I can point to an existing research paper where I think they should&#8217;ve used the method. </p></li><li><p>I won&#8217;t write more than 2 paragraphs per article.</p></li><li><p>I will write about at least 5 papers per column</p></li><li><p>I will write this once a quarter (it&#8217;s July now, so next one in October).</p></li></ol><p>Ok, here goes nothing. If you like this, let me know. If you hate it, let me know too. </p><div><hr></div><h2>Further Reading in Econometrics for Applied Researchers, Vol. 1 (Aug 2026)</h2><h3>Factorial Difference-in-Differences</h3><p><em>Yiqing Xu, Anqi Zhao, Peng Ding, </em>JASA<br><a href="https://doi.org/10.1080/01621459.2026.2628343">https://doi.org/10.1080/01621459.2026.2628343</a> (wp version: <a href="https://arxiv.org/abs/2407.11937">https://arxiv.org/abs/2407.11937</a>) </p><p>When we&#8217;re thinking about difference-in-differences, we lump together many different types of designs. The most canonical design is a setting where we have a <em>policy</em> that gets applied in a post-period to a set of <em>treated</em> firms, but the treated firms are non-randomly selected, hence identification challenges. <strong>But</strong>, another very common design is a setting where units look different in a static sense (perhaps they are counties with different <a href="https://academic.oup.com/qje/article-abstract/125/3/1253/1903664">housing supply elasticities</a>), and we postulate that an <em><a href="https://www.aeaweb.org/articles?id=10.1257%2Faer.101.5.2132">aggregate</a></em><a href="https://www.aeaweb.org/articles?id=10.1257%2Faer.101.5.2132"> shock differentially affects these places.</a></p><p>Turns out that this latter approach is not obviously identical to standard difference-in-difference, once you think carefully about it as a treatment. Xu et al. (2026) term this &#8220;factorial difference-in-differences&#8221; (which I think is a terrible name, but &#175;\(&#12484;)/&#175;). It turns out that for this design to identify the causal effect of the baseline differences (e.g. the housing supply elasticity) using this design, you need an additional assumption that assumes mean independence between the baseline differences and the potential outcomes.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a> Fortunately, I believe this assumption is quite similar to what researchers typically believe when they invoke this approach.</p><p><strong>Key takeaway for empirical researchers</strong>: you need to justify your assumptions more explicitly here, and highlight that potential outcomes in the absence of the aggregate shock need to be mean-independent of the characteristic.</p><h3><strong>The Effect of Omitted Variables on the Sign of Regression Coefficients</strong></h3><p><em>Matthew A. Masten, Alexandre Poirier</em><br>American Economic Review 116(7) &#8212; 2026-06-30 <br><a href="https://doi.org/10.1257/aer.20230242">https://doi.org/10.1257/aer.20230242</a> &#183; <a href="https://arxiv.org/pdf/2208.00552">open access</a></p><p><a href="https://emilyoster.net/wp-content/uploads/UnobservableSelectionandCoefficientStabilityTheoryandEvidence.pdf">Oster (2019, JBES)</a> is an incredibly influential paper<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a> that expands and synthesizes the intuition from <a href="https://www.nber.org/papers/w7831">Altonji, Elder and Taber (2005)</a> about how to try to bound the effect of unobservables. We all know that if you have omitted variables, your estimate can be biased. Often, we add additional controls and show that as we add more controls, our estimates of interest are &#8220;stable&#8221; (e.g. don&#8217;t change across specifications). Oster (2019) provided conditions and a test for how to think about this approach, and a formal test that exploits the changes in the coefficient measure <em>and</em> the R<sup>2 </sup> to study how much omitted variable biasthere would need to be to drive the true effect to zero.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-6Vn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75cc8af-e08e-4bc6-b730-1a2ee96edbc4_1034x560.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-6Vn!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75cc8af-e08e-4bc6-b730-1a2ee96edbc4_1034x560.webp 424w, /__u/substackcdn.com/image/fetch/$s_!-6Vn!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75cc8af-e08e-4bc6-b730-1a2ee96edbc4_1034x560.webp 848w, /__u/substackcdn.com/image/fetch/$s_!-6Vn!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75cc8af-e08e-4bc6-b730-1a2ee96edbc4_1034x560.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!-6Vn!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75cc8af-e08e-4bc6-b730-1a2ee96edbc4_1034x560.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-6Vn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75cc8af-e08e-4bc6-b730-1a2ee96edbc4_1034x560.webp" width="1034" height="560" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f75cc8af-e08e-4bc6-b730-1a2ee96edbc4_1034x560.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:560,&quot;width&quot;:1034,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:10286,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/207445755?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75cc8af-e08e-4bc6-b730-1a2ee96edbc4_1034x560.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!-6Vn!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75cc8af-e08e-4bc6-b730-1a2ee96edbc4_1034x560.webp 424w, /__u/substackcdn.com/image/fetch/$s_!-6Vn!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75cc8af-e08e-4bc6-b730-1a2ee96edbc4_1034x560.webp 848w, /__u/substackcdn.com/image/fetch/$s_!-6Vn!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75cc8af-e08e-4bc6-b730-1a2ee96edbc4_1034x560.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!-6Vn!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75cc8af-e08e-4bc6-b730-1a2ee96edbc4_1034x560.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Oster (2019) ctations over time. </figcaption></figure></div><p><a href="https://arxiv.org/abs/2208.00552">Masten and Poirier (2026, AER)</a> is a sharp critique of this approach. Oster (2019)&#8217;s test (&#948;) measures how much selection on unobservables takes to drive the coefficient to zero, but that&#8217;s different from how much it would take to flip its sign. It turns out these can be very different. Since the &#948; test is a ratio of coefficients, the bias-adjusted estimate is discontinuous in &#948; and can jump across zero rather than passing through it. The key takeaway is to consider the &#8220;sign-change&#8221; breakdown point alongside the Oster (2019) measure.  <a href="https://github.com/mattmasten/regsensitivity">All of it is implemented in the </a><code>regsensitivity</code><a href="https://github.com/mattmasten/regsensitivity"> Stata package.</a><a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a></p><p><strong>Key takeaway for empirical researchers</strong>: when justifying your design based on the stability of coefficient estimates, you have another important test to run and interpret.</p><h3>Double Robustness of Local Projections and Some Unpleasant VARithmetic</h3><p>Jos&#233; Luis Montiel Olea, Mikkel Plagborg&#8208;M&#248;ller, Eric Qian, Christian K. Wolf<br>Econometrica 94(4), 1313&#8211;1343 &#8212; 2026-07-16<br><a href="https://doi.org/10.3982/ECTA23345">https://doi.org/10.3982/ECTA23345</a> &#183; <a href="https://arxiv.org/pdf/2405.09509">open access</a></p><p>VAR (Vector Autoregressions) and LP (local projections) are a lynchpin of macro analysis. If you&#8217;re more of a micro person, you probably only remember VARs from your first year macro courses. One way to think about LP is that it&#8217;s semi-parametric in the dynamics of how shocks propagate, while VARs are very structured and parametric in their propagation mechanism. Both LP and VAR consider the structural model, but they differ in how they propagate the shock forward. E.g. imagine you want to study the impact <em>h</em> periods ahead. Here&#8217;s the two processes written down:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{align}\ny_{t+1} = A_{0}y_{t} + A_{1}y_{t-1} + \\ldots + A_{p}y_{t-p} + u_t\\\\\ny_{t+h} = \\beta_{0}^{h}y_{t} + \\beta_{1}^{h}y_{t-1} + \\ldots + \\beta_{p}^{h}y_{t-p} + \\varepsilon_t\n\\end{align}&quot;,&quot;id&quot;:&quot;ETNYVIYHJL&quot;}" data-component-name="LatexBlockToDOM"></div><p>It turns out when the first model (VAR) is correctly specified, there&#8217;s a direct mapping between LP and VAR such that they&#8217;re equivalent! E.g. LP is the reduced form version of the VAR model. LP does not restrict how the propagation maps forward. But if the VAR is misspecified, the VAR does very badly. In Olea et al. (2026), they show that if the VAR is misspecified, the confidence intervals are wrong. However, the local projection approach will have the right coverage rates, even under misspecification!</p><p><strong>Key takeaway for empirical researchers</strong>: Applied researchers should prefer LP for robust inference unless they are willing to use extremely long lags that render the VAR interval as wide as the LP interval.</p><h3>Optimal Shrinkage Estimation of Fixed Effects in Linear Panel Data Models</h3><p>Soonwoo Kwon, <em>Econometrica</em> &#8212; 2026<br><a href="https://doi.org/10.3982/ecta22386">https://doi.org/10.3982/ecta22386</a> (wp version: <a href="https://arxiv.org/abs/2308.12485">https://arxiv.org/abs/2308.12485</a>)</p><h3>Empirical Bayes When Estimation Precision Predicts Parameters</h3><p>Jiafeng Chen, <em>Econometrica</em> &#8212; 2026<br><a href="https://doi.org/10.3982/ECTA22935">https://doi.org/10.3982/ECTA22935</a> (wp version: <a href="https://arxiv.org/abs/2212.14444">https://arxiv.org/abs/2212.14444</a>)</p><p>Fixed effects have historically been nuisance parameters for estimation (e.g. when we include unit and time fixed effects, we are not interested in those parameters). However, now a lot of applied work in economics and finance tries to directly estimate unit-level effects and then doing something with them: teacher value-added, judge leniency, hospital quality, neighborhood effects, or manager or fund-manager alphas.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-7" href="#footnote-7" target="_self">7</a> The challenge is that these estimates are very noisy, typically, with a limited number of observations. So how do we improve on the estimation?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!yGzH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceb0c515-2a44-4923-a86f-c8a9701f73a4_1892x1232.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!yGzH!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceb0c515-2a44-4923-a86f-c8a9701f73a4_1892x1232.png 424w, /__u/substackcdn.com/image/fetch/$s_!yGzH!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceb0c515-2a44-4923-a86f-c8a9701f73a4_1892x1232.png 848w, /__u/substackcdn.com/image/fetch/$s_!yGzH!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceb0c515-2a44-4923-a86f-c8a9701f73a4_1892x1232.png 1272w, /__u/substackcdn.com/image/fetch/$s_!yGzH!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceb0c515-2a44-4923-a86f-c8a9701f73a4_1892x1232.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!yGzH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceb0c515-2a44-4923-a86f-c8a9701f73a4_1892x1232.png" width="1456" height="948" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ceb0c515-2a44-4923-a86f-c8a9701f73a4_1892x1232.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:948,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:190261,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/207445755?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceb0c515-2a44-4923-a86f-c8a9701f73a4_1892x1232.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!yGzH!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceb0c515-2a44-4923-a86f-c8a9701f73a4_1892x1232.png 424w, /__u/substackcdn.com/image/fetch/$s_!yGzH!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceb0c515-2a44-4923-a86f-c8a9701f73a4_1892x1232.png 848w, /__u/substackcdn.com/image/fetch/$s_!yGzH!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceb0c515-2a44-4923-a86f-c8a9701f73a4_1892x1232.png 1272w, /__u/substackcdn.com/image/fetch/$s_!yGzH!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceb0c515-2a44-4923-a86f-c8a9701f73a4_1892x1232.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The typical approach is empirical Bayes (canonically inspired by Morris (1982), and used to great effect by <a href="https://opportunityinsights.org/wp-content/uploads/2018/03/teachers1.pdf">Chetty, Friedman, and Rockoff (2014)</a> and <a href="https://opportunityinsights.org/wp-content/uploads/2018/03/movers_paper2.pdf">Chetty and Hendren (2018)</a>, as well as many other papers. Basically (Bayes-ically?), since the raw OLS fixed effects are noisy, we shrink them towards the overall mean as a function of the noisiness of the raw estimates. The challenge is that parametric empirical Bayes rests on normality of the true effects, normality of the least squares estimator, and, the key focus of Chen (2026), independence between the true effect and the <em>variance</em> of its estimator (referred to as precision dependence). This last estimate is empirically implausible: class size is mechanically linked to the precision of the estimate and is plausibly correlated with teacher skill due to assignment, so the two are linked by construction. To solve this issue, Chen (2026) stays inside empirical Bayes and makes the prior richer by modeling the conditional distribution of the parameter.</p><p>Kwon (2026) also delivers robustness to precision dependence, but that is a byproduct of the approach. Kwon (2026) instead focuses on the fact that the object you have is usually not one number per unit but several, such as a teacher&#8217;s value-added in each of six years, or her effect on test scores <em>and</em> on graduation. Existing practice either averages across years, imposing that the effect never moves, or shrinks each year in isolation, ignoring that a teacher&#8217;s good year predicts her other good years and over-shrinking as a result. Kwon (2026) extends existing unbiased-risk-estimate results to the case where the tuning parameter is a full covariance matrix, so the rule shrinks linear combinations differentially, which creates a smoothed time profile, rather than a flat one. This allows for a one-period-ahead <em>forecast</em> of the effect, which is useful for a retention or promotion decision for a teacher.</p><p>The cleanest way to see the contrast is as a trade-off between random-effects and fixed-effects. Chen (2026) is the analogy to correlated random effects, whereby specifying a distribution correctly for the heterogeneity, you are rewarded with a rule that can be nonlinear and that uses the information precision fully. Kwon (2026) is the analogy to fixed-effects: nothing about the distribution of effects is modeled, so nothing there can be misspecified, but the price is that you need to pre-specify a class of (linear) decision rules, and optimality is only ever relative to that class.</p><p><strong>Key takeaway for empirical researchers:</strong> the real choice is whether you would rather model the distribution of your unit effects or the class of rules you will consider for shrinkage.  If you have one effect per unit and you model the prior, Chen&#8217;s framework is potentially more flexible and powerful if the model is specified correctly. If your effects vary over time or across outcomes, or you want a forecast, Kwon applies more directly and asks less of you distributionally. Either way, straight empirical Bayes is no longer an easily defensible default.</p><p>R <a href="https://github.com/jiafengkevinchen/close">Package for Chen (2026)</a>,  R <a href="https://github.com/soonwookwon/feshr">Package for Kwon (2026)</a></p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>As a companion, I would love to write a column that also lists interesting applied papers with unusual data / settings that should be of interest to econometricians. If you&#8217;re interested in helping me with that, let me know!</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>Inspired by <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Ben Recht&quot;,&quot;id&quot;:42335610,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4fe8c66-4c77-4977-b2aa-e29961f3b4fe_300x300.jpeg&quot;,&quot;uuid&quot;:&quot;283fc20c-de14-495c-96cb-494d4ff2441a&quot;}" data-component-name="MentionToDOM"></span> &#8216;s <a href="https://www.argmin.net/p/two-years-of-substacking">ground rules for blogging</a></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>I maintain the right to expand this list</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>As it turns out, this is a very similar assumption to the one necessary to identify the continuous DiD estimator (strong parallel trends) highlighted in <a href="https://psantanna.com/files/CGBS_v4.pdf">Callaway, Goodman-Bacon, and Sant&#8217;anna (2025).</a></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>My understanding is that this paper took a <em>long</em> time to get published, so it has been influential for a long time, despite only arrive in final print in 2019.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>Curious if anyone has written an R package for this? If not, someone should consider doing this! I know it&#8217;s feasible, because a former grad student Dana Scott wrote it up once for us on a project, but it would be nice to have as a package.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-7" href="#footnote-anchor-7" class="footnote-number" contenteditable="false" target="_self">7</a><div class="footnote-content"><p>I&#8217;m not sure if finance people think about it this way but it&#8217;s in the same group!</p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[Using AI in Research]]></title><description><![CDATA[Focused on Household Finance, but broadly useful]]></description><link>https://paulgp.substack.com/p/using-ai-in-research</link><guid isPermaLink="false">https://paulgp.substack.com/p/using-ai-in-research</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Wed, 29 Jul 2026 19:10:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/c5g6A-Ci-ho" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I was fortunate to be asked by the NBER Household Finance organizers this summer to give a 75 minute talk on using AI in research. I gave the talk last week.</p><div id="youtube2-c5g6A-Ci-ho" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;c5g6A-Ci-ho&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/c5g6A-Ci-ho?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>It&#8217;s sort of a &#8220;best hits&#8221; of my thoughts that I&#8217;ve accumulated since my talks with Markus this past spring, but you may find it useful. The <a href="https://github.com/paulgp/nber_hf_2026/">materials (slides, etc.) from the talk are available</a> and I also have a number of <a href="https://paulgp.com/nber_hf_2026/">Claude Code recordings here.</a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Integration and Collaboration in AI Research Work]]></title><description><![CDATA[Video 8 in a series on Claude Code]]></description><link>https://paulgp.substack.com/p/integration-and-collaboration-in</link><guid isPermaLink="false">https://paulgp.substack.com/p/integration-and-collaboration-in</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Fri, 03 Jul 2026 11:37:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/EcloxLPcRsY" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><span>Part 8 of a series on AI coding tools for empirical research, accompanying my </span><a href="https://bcf.princeton.edu/markus-academy/">Markus Academy</a><span> video series.</span></em></p><div id="youtube2-EcloxLPcRsY" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;EcloxLPcRsY&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/EcloxLPcRsY?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>This post is the capstone of the series. The earlier posts were about getting the agent to do things: <a href="/__u/substack.com/@paulgp/p-192433164">setting up</a>, <a href="/__u/substack.com/@paulgp/p-192434108">analyzing data</a>, <a href="/__u/substack.com/@paulgp/p-192434664">scraping</a>, <a href="/__u/substack.com/@paulgp/p-193223396">handling large datasets</a>, <a href="/__u/substack.com/@paulgp/p-193923145">writing</a>,  <a href="/__u/substack.com/@paulgp/p-199022988">sandboxing</a> and <a href="/__u/substack.com/@paulgp/p-198985059">specifying how agents think (skills)</a>. In most of those demos, I skipped over a step&#8212;Markus and I would look at the output, nod, and move on. This post is about what you do after the agent hands you a finished-looking result &#8212; e.g. real research.</p><p>A framing I find useful is about costs. AI has collapsed the cost of <em>doing</em> certain kinds of work: coding, data construction, empirical analysis, etc.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> The cost of verifying that the work is correct has moved much less. We&#8217;re economists; <a href="https://www.sciencedirect.com/science/article/abs/pii/0022053179900310">costly verification </a>is <a href="https://www.aeaweb.org/articles?id=10.1257/aer.104.12.3779">an idea</a> we&#8217;ve <a href="https://www.journals.uchicago.edu/doi/abs/10.1086/261657">struggled</a> with <a href="https://www.journals.uchicago.edu/doi/full/10.1086/710560">for decades</a>. Now as the cost of actions has fallen, with a consequent increase in the <em>relative </em>cost of verification, many of us find ourselves doing a lot of the cheap activity, with potentially less verification.  As a result, you can accumulate what people have started calling <strong>verification debt</strong>: a growing pile of AI-produced results yo haven&#8217;t actually checked.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substack.com/home/post/p-203010751" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!68FP!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c644f-fd8b-4b9b-9d41-452e45430bf1_912x816.png 424w, /__u/substackcdn.com/image/fetch/$s_!68FP!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c644f-fd8b-4b9b-9d41-452e45430bf1_912x816.png 848w, /__u/substackcdn.com/image/fetch/$s_!68FP!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c644f-fd8b-4b9b-9d41-452e45430bf1_912x816.png 1272w, /__u/substackcdn.com/image/fetch/$s_!68FP!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c644f-fd8b-4b9b-9d41-452e45430bf1_912x816.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!68FP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c644f-fd8b-4b9b-9d41-452e45430bf1_912x816.png" width="912" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f94c644f-fd8b-4b9b-9d41-452e45430bf1_912x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:912,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://substack.com/home/post/p-203010751&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!68FP!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c644f-fd8b-4b9b-9d41-452e45430bf1_912x816.png 424w, /__u/substackcdn.com/image/fetch/$s_!68FP!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c644f-fd8b-4b9b-9d41-452e45430bf1_912x816.png 848w, /__u/substackcdn.com/image/fetch/$s_!68FP!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c644f-fd8b-4b9b-9d41-452e45430bf1_912x816.png 1272w, /__u/substackcdn.com/image/fetch/$s_!68FP!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c644f-fd8b-4b9b-9d41-452e45430bf1_912x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A two-by-two makes the problem concrete (the picture above comes from<a href="/__u/substack.com/home/post/p-203010751"> a nice post by Clifford Russell on these challenges in the context of software engineering</a>) . Put the cost of <em>making something</em> on the x-axis and the cost of verifying it y-axis. The danger zone is the cell where things are now cheap to make but still expensive to verify.</p><blockquote><p><a href="/__u/open.substack.com/pub/theahura/p/agentics-cost-to-implement-vs-cost?r=2iog7&amp;selection=c615c784-0c37-4f7b-a9e8-a839b9a1ce0f&amp;utm_campaign=post-share-selection&amp;utm_medium=web&amp;aspectRatio=instagram&amp;textColor=%23ffffff&amp;bgImage=true">When both costs are high, there&#8217;s a huge incentive to spin the slot machine many times, and see if the agent just happens to nail the task.</a></p></blockquote><p>Expensive-to-make work forced you to go slowly, and verification happened as a byproduct of doing. Now the code arrives finished, and the understanding is the thing you still have to build.</p><p>In the video, Markus asked a good question: how is this different from just <em>not</em> using YOLO mode and approving each step as it happens? The answer is a function of how much you verify and internalize the work that the agent is doing. The more autonomy you provide, the worse the problem gets (e.g. the <a href="/__u/paulgp.substack.com/i/199022988/three-approval-modes">ladder</a> from the the post on sandboxes). If the agent works alone for 25 minutes and comes back with a repository, a figure, and a headline estimate, the verification simultaneously arrives at the end. </p><p>So the question for today: how do you build a work environment where verification is tractable in research?</p><p>The three things we&#8217;ll discuss today are not AI tooling, at least in essence. It&#8217;s the tooling software engineers built for exactly this style of problem: reviewing others&#8217; code and work. But AI happens to supercharge these workflows.</p><p>1. <strong>Review the code as reported</strong> &#8212; <code>git</code> and a <a href="https://github.com/">GitHub</a> repository you (and your LLM) can read</p><p>2. <strong>Give feedback that routes back </strong> &#8212; to the agent, to coauthors, and to the permanent record.</p><p>3. <strong>Publish the results into the draft</strong> &#8212; each number in the paper traces to code by integrating Github into Overleaf</p><h3>The demo: an IPO event study</h3><p>I wanted something practical rather than a lecture, and the timing helped: SpaceX just went public, <a href="/__u/substack.com/home/post/p-199412601">Hanno Lustig has been posting about it</a>, and so a natural empirical question for us to study is how stock prices adjust after firms IPO (since SpaceX has been angling to get themselves included in indices where passive investment money can provide a significant pop in demand). </p><p>There&#8217;s a well-documented post-IPO underperformance pattern, so I asked Claude to replicate it. To Claude Code, I gave the task to estimate <a href="http://paulgp.com/papers/financial_event_studies_dec282025.pdf">abnormal returns</a> after IPOs.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> Use <a href="https://site.warrington.ufl.edu/ritter/ipo-data/">Jay Ritter&#8217;s IPO data</a> as the event sample, and CRSP (via WRDS, which I have credentialed access to) for aftermarket returns and a benchmark. Report the average effect with a figure and a table.</p><p>I was deliberately vague about how exactly Claude should implement this.There are a few obvious decision branches: cumulative abnormal returns versus buy-and-hold returns; which benchmark to use; which event windows, how to handle delisting; how to match Ritter&#8217;s firms to CRSP identifiers; etc. I left this to the agent and I would eventually need to decide if the decisions were appropriate, similar to if an RA made it for me. </p><p>What I did specify, in detail, was the paper trail:</p><ul><li><p>Commit the code into a git repository <em>locally </em>at every meaningful checkpoint, with messages that say _why_, not just what.</p></li><li><p>Keep a <code>DECISIONS.md</code>: each methodological choice, the alternatives rejected, and a confidence level.</p></li><li><p>Keep a <code>LOG.md</code>: a plain-language narrative a coauthor could follow.</p></li><li><p>Print a sample-attrition table at every stage&#8212;the N, what dropped, and why.</p></li></ul><p>I let it run in auto mode for about 25 minutes. The resulting repository is public at <a href="https://github.com/paulgp/ipo-bump">github.com/paulgp/ipo-bump</a>. I asked for the trail precisely so the work could be reviewed. That&#8217;s the discipline I want to convince you of: the request for verifiability goes in the prompt, before the work happens.</p><h4>Part A: Review the code as reported</h4><h5>Two minutes on version control</h5><p>What&#8217;s <code>git</code>? Here&#8217;s the cursory version. The joke about git is that if you ask someone who really knows it, by the time they&#8217;re done you never want to hear about it again. It&#8217;s built for enterprise software teams and has a hundred features researchers will never touch. You need about five of them.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a></p><p>Version control is a committed set of historical versions of your work. We&#8217;ve all lived the alternative:  <code>working_code_v1.do</code>, then <code>_v2</code>, then <code>_final_final</code>. What you actually want is one file plus a complete record of how it changed over time&#8212;track changes, but for code. That&#8217;s what git does: it looks at a folder, computes differences between versions of files, and keeps a permanent record of every saved state.</p><p>A <strong>commit</strong> is the act of saving a state into that record. Markus asked whether committing locks you in&#8212;no, it&#8217;s a snapshot, and you keep working afterward. If you&#8217;re a Stata person, it&#8217;s like a <code>preserve</code> statement: &#8220;record things exactly as they are right now.&#8221; <strong>GitHub</strong> is a remote website where the record can live in addition to on your computer, so coauthors can see it, you can use it across computers, and so you can read it with good tooling. A <strong>diff</strong> is the comparison between two states&#8212;new lines shown in green, deleted lines in red&#8212;which is exactly the &#8220;marked-up changes&#8221; view you&#8217;d want when reviewing anyone&#8217;s work.</p><p>One more piece, because Markus asked: the <code>.gitignore</code> file lists things git should never record. In our repo, Claude put the raw WRDS extracts in there (you don&#8217;t want big data files in the history&#8212;collaborators pull those themselves) and my database password. It actually listed the password file twice in my gitignore file, in two syntaxes. I don&#8217;t know why, but I had told it in no uncertain terms not to commit my password, and I appreciate the paranoia&#8212;I really did not want to make this video and simultaneously publish my WRDS credentials to the world.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!fSyX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe46c5f2-238f-40bf-bf6f-90a1e93b1a88_2746x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!fSyX!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe46c5f2-238f-40bf-bf6f-90a1e93b1a88_2746x1600.png 424w, /__u/substackcdn.com/image/fetch/$s_!fSyX!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe46c5f2-238f-40bf-bf6f-90a1e93b1a88_2746x1600.png 848w, /__u/substackcdn.com/image/fetch/$s_!fSyX!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe46c5f2-238f-40bf-bf6f-90a1e93b1a88_2746x1600.png 1272w, /__u/substackcdn.com/image/fetch/$s_!fSyX!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe46c5f2-238f-40bf-bf6f-90a1e93b1a88_2746x1600.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!fSyX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe46c5f2-238f-40bf-bf6f-90a1e93b1a88_2746x1600.png" width="1456" height="848" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe46c5f2-238f-40bf-bf6f-90a1e93b1a88_2746x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:848,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:533961,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/204750868?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe46c5f2-238f-40bf-bf6f-90a1e93b1a88_2746x1600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!fSyX!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe46c5f2-238f-40bf-bf6f-90a1e93b1a88_2746x1600.png 424w, /__u/substackcdn.com/image/fetch/$s_!fSyX!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe46c5f2-238f-40bf-bf6f-90a1e93b1a88_2746x1600.png 848w, /__u/substackcdn.com/image/fetch/$s_!fSyX!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe46c5f2-238f-40bf-bf6f-90a1e93b1a88_2746x1600.png 1272w, /__u/substackcdn.com/image/fetch/$s_!fSyX!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe46c5f2-238f-40bf-bf6f-90a1e93b1a88_2746x1600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h5>Reading the repo like a referee</h5><p>The agent hands back a repository with full history, a figure, a table, and a headline estimate: U.S. common-stock IPOs from Ritter&#8217;s database, 1975&#8211;2021, earn a mean three-year buy-and-hold abnormal return of &#8722;19.7% relative to the CRSP value-weighted index. In plainer terms: a dollar invested in these IPOs at the close of their first trading day grows to about $0.86 for every dollar the market would have delivered over the same three years, and 70.5% of individual IPOs land below the market. That passes the initial sniff test&#8212;it&#8217;s the post-IPO underperformance pattern the literature documents. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!1bas!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5081fc-3684-4dbe-b6df-468df077dae1_1984x1456.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!1bas!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5081fc-3684-4dbe-b6df-468df077dae1_1984x1456.png 424w, /__u/substackcdn.com/image/fetch/$s_!1bas!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5081fc-3684-4dbe-b6df-468df077dae1_1984x1456.png 848w, /__u/substackcdn.com/image/fetch/$s_!1bas!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5081fc-3684-4dbe-b6df-468df077dae1_1984x1456.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1bas!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5081fc-3684-4dbe-b6df-468df077dae1_1984x1456.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!1bas!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5081fc-3684-4dbe-b6df-468df077dae1_1984x1456.png" width="1456" height="1069" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc5081fc-3684-4dbe-b6df-468df077dae1_1984x1456.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1069,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:448481,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/204750868?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5081fc-3684-4dbe-b6df-468df077dae1_1984x1456.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!1bas!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5081fc-3684-4dbe-b6df-468df077dae1_1984x1456.png 424w, /__u/substackcdn.com/image/fetch/$s_!1bas!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5081fc-3684-4dbe-b6df-468df077dae1_1984x1456.png 848w, /__u/substackcdn.com/image/fetch/$s_!1bas!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5081fc-3684-4dbe-b6df-468df077dae1_1984x1456.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1bas!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5081fc-3684-4dbe-b6df-468df077dae1_1984x1456.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The mental model for this workflow is that <em>work from an AI is work from your RA.</em> This is code that you did not write, but you have a rough sense of what it should do. Unfortunately for you, it will often pass the <em>sniff</em> test &#8212; it looks finished and polished. But now the question is whether the task was done correctly. </p><p>Fortunately, you know how to do this! Every senior coauthor has reviewed a junior person&#8217;s work; every software engineer has done code review. Nothing about this task is new. What&#8217;s new is that most researchers never adopted the structure that makes it efficient.</p><p>The structure is the commit history. Because I asked for commits at every checkpoint, the work arrives in chunks: scaffolding, data loading, matching, return calculation, estimation and output. Commits change the unit of verification.  You review one bounded <strong>diff</strong> at a time instead of confronting 800 lines of code at once. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!VCO_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c79e4b7-cd46-4f66-a239-6670aaa37215_2808x948.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!VCO_!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c79e4b7-cd46-4f66-a239-6670aaa37215_2808x948.png 424w, /__u/substackcdn.com/image/fetch/$s_!VCO_!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c79e4b7-cd46-4f66-a239-6670aaa37215_2808x948.png 848w, /__u/substackcdn.com/image/fetch/$s_!VCO_!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c79e4b7-cd46-4f66-a239-6670aaa37215_2808x948.png 1272w, /__u/substackcdn.com/image/fetch/$s_!VCO_!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c79e4b7-cd46-4f66-a239-6670aaa37215_2808x948.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!VCO_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c79e4b7-cd46-4f66-a239-6670aaa37215_2808x948.png" width="1456" height="492" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c79e4b7-cd46-4f66-a239-6670aaa37215_2808x948.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:492,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:288230,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/204750868?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c79e4b7-cd46-4f66-a239-6670aaa37215_2808x948.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!VCO_!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c79e4b7-cd46-4f66-a239-6670aaa37215_2808x948.png 424w, /__u/substackcdn.com/image/fetch/$s_!VCO_!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c79e4b7-cd46-4f66-a239-6670aaa37215_2808x948.png 848w, /__u/substackcdn.com/image/fetch/$s_!VCO_!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c79e4b7-cd46-4f66-a239-6670aaa37215_2808x948.png 1272w, /__u/substackcdn.com/image/fetch/$s_!VCO_!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c79e4b7-cd46-4f66-a239-6670aaa37215_2808x948.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You can walk the sequence as a story (pull &#8594; clean &#8594; match &#8594; compute returns &#8594; estimate) and ask whether the order makes sense. And when you later request a change, GitHub shows you only what changed: a 12-line diff against a baseline you&#8217;ve already reviewed. A repo with one giant commit doesn&#8217;t give you any of this; it&#8217;s just a blob with a `.git` folder attached.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!P9RQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c62eee-9ea5-4de8-a05f-9fcfbef9797e_3108x932.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!P9RQ!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c62eee-9ea5-4de8-a05f-9fcfbef9797e_3108x932.png 424w, /__u/substackcdn.com/image/fetch/$s_!P9RQ!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c62eee-9ea5-4de8-a05f-9fcfbef9797e_3108x932.png 848w, /__u/substackcdn.com/image/fetch/$s_!P9RQ!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c62eee-9ea5-4de8-a05f-9fcfbef9797e_3108x932.png 1272w, /__u/substackcdn.com/image/fetch/$s_!P9RQ!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c62eee-9ea5-4de8-a05f-9fcfbef9797e_3108x932.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!P9RQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c62eee-9ea5-4de8-a05f-9fcfbef9797e_3108x932.png" width="1456" height="437" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e6c62eee-9ea5-4de8-a05f-9fcfbef9797e_3108x932.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:437,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:321350,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/204750868?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c62eee-9ea5-4de8-a05f-9fcfbef9797e_3108x932.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!P9RQ!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c62eee-9ea5-4de8-a05f-9fcfbef9797e_3108x932.png 424w, /__u/substackcdn.com/image/fetch/$s_!P9RQ!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c62eee-9ea5-4de8-a05f-9fcfbef9797e_3108x932.png 848w, /__u/substackcdn.com/image/fetch/$s_!P9RQ!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c62eee-9ea5-4de8-a05f-9fcfbef9797e_3108x932.png 1272w, /__u/substackcdn.com/image/fetch/$s_!P9RQ!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c62eee-9ea5-4de8-a05f-9fcfbef9797e_3108x932.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h5>The trail, and its limits</h5><p>In <code>Decisions.md</code>, I asked Claude to record  choices along the way. However, the decisions file claimed it had computed cumulative abnormal returns as a robustness check. But it hadn&#8217;t! There was no CAR figure, no CAR code. It also mentioned calendar-time portfolios&#8212;a useful alternative&#8212;and didn&#8217;t do those either. It claimed work it never did. Markus asked whether you can prompt this away&#8212;&#8221;please be careful and do every step&#8221;&#8212;and you can push in that direction, but the more reliable fix is smaller task chunks, which are easier to complete and easier to check. These systems can be as lazy as we are.</p><p>Concretely, here&#8217;s the checklist I&#8217;d work through for this particular task, each item a place where the code can be perfectly clean and the answer still wrong:</p><ul><li><p>Did it actually use Ritter&#8217;s event dates, or silently construct its own? (I traced this one through the data-loading commit: it builds the event date from Ritter&#8217;s <code>offer_date</code> field, correctly. We are trusting Jay here, but as Markus said&#8212;in this life, we trust Jay.)</p></li><li><p>Do the computed first-day returns reconcile with Ritter&#8217;s published first-day returns, or does the repo just claim they do? </p></li><li><p>How are delisted firms handled&#8212;are they in the sample, and which way does dropping them bias the mean?</p></li><li><p>Is the benchmark defensible, and does the sign survive the obvious alternative (CAR versus buy-and-hold)?</p></li></ul><p>That last one I handled by iterating live. I went back to the command line and asked Claude to add a cumulative abnormal return analysis alongside the buy-and-hold version, then commit and push. A few minutes later there&#8217;s a fifth commit, and the review burden is only the new diff. The CAR estimate comes in at &#8722;17.8% at 36 months against &#8722;19.7% for buy-and-hold, with the mean-median gap looking different across the two measures.</p><h4>Part B: Feedback that routes back</h4><p>Finding a problem is half the job. Getting the fix made&#8212;and recorded&#8212;is the other half. There are three audiences for your feedback: the agent, your coauthors, and future-you. The useful discovery is that one piece of machinery serves all three: <strong>GitHub issues</strong>.</p><p>An issue is a titled note attached to the repository&#8212;a to-do item with a discussion thread. Here&#8217;s the loop I demonstrated in the video. Remember the reconciliation question from the checklist? I opened an issue: &#8220;Validate return measures against Ritter&#8217;s initial returns&#8212;Ritter publishes first-day returns for these IPOs; compare our constructed measures against his and report how well we match.&#8221; Writing it felt like writing a Slack message to an RA, except it lives permanently next to the code.</p><p>Then, in a fresh Claude session with no memory of anything, I typed: </p><blockquote><p><em>&#8220;Please review issue #1 on GitHub, code up an answer, then commit and push. Use the `gh` command-line tool</em><code>&#8221;</code> </p></blockquote><p>The agent pulled the issue text, explored the repo to orient itself, did the analysis, pushed the result, and closed the issue. You don&#8217;t need to sit and watch; you could kick this off and check the answer from your phone. (You can see where this is heading&#8212;an agent that watches the issue tracker and handles items as they&#8217;re filed. We won&#8217;t build that in this series, but the shape of it should be visible.) You can see <a href="https://github.com/paulgp/ipo-bump/issues/1">the issue here</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!4Lc8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603ea539-4d9a-4b74-9f51-430298c0336e_3028x1526.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!4Lc8!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603ea539-4d9a-4b74-9f51-430298c0336e_3028x1526.png 424w, /__u/substackcdn.com/image/fetch/$s_!4Lc8!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603ea539-4d9a-4b74-9f51-430298c0336e_3028x1526.png 848w, /__u/substackcdn.com/image/fetch/$s_!4Lc8!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603ea539-4d9a-4b74-9f51-430298c0336e_3028x1526.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4Lc8!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603ea539-4d9a-4b74-9f51-430298c0336e_3028x1526.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!4Lc8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603ea539-4d9a-4b74-9f51-430298c0336e_3028x1526.png" width="1456" height="734" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/603ea539-4d9a-4b74-9f51-430298c0336e_3028x1526.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:734,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:561009,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/204750868?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603ea539-4d9a-4b74-9f51-430298c0336e_3028x1526.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!4Lc8!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603ea539-4d9a-4b74-9f51-430298c0336e_3028x1526.png 424w, /__u/substackcdn.com/image/fetch/$s_!4Lc8!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603ea539-4d9a-4b74-9f51-430298c0336e_3028x1526.png 848w, /__u/substackcdn.com/image/fetch/$s_!4Lc8!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603ea539-4d9a-4b74-9f51-430298c0336e_3028x1526.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4Lc8!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603ea539-4d9a-4b74-9f51-430298c0336e_3028x1526.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The answer taught me something real: the exact first-day return is unrecoverable from the data as pulled, because Claude had built everything on CRSP&#8217;s <em>monthly</em> files. Monthly data has a closing price for the IPO month but can&#8217;t isolate the first trading day.</p><p>So the loop continues: I opened <a href="https://github.com/paulgp/ipo-bump/issues/3">issue #3, </a>&#8220;Reconstruct the analysis using daily data&#8212;we discovered in #1 that the pipeline uses monthly CRSP returns; switch to daily and aggregate up so we can match Ritter and support higher-frequency analysis.&#8221; Typing `#1` in the text auto-links the earlier issue, so the reasoning chain is preserved. Then, back at the command line: &#8220;Please tackle issue #3.&#8221; That issue is closed now too: the daily reconstruction confirms the monthly results, and along the way the repo grew a first-day-return analysis that recovers offer prices from Ritter&#8217;s files, Capital IQ, and SEC 424B prospectuses. Each round of review generated the next round of work, and the record shows the whole chain.</p><p>Two practices make this loop work well. First, be specific. &#8220;This seems off&#8221; gets you a vague fix. Name the join, the variable, the count you expected&#8212;&#8221;please diagnose why we lose four IPOs at the CRSP match stage&#8221; is a prompt the agent can act on and you can verify. Second, anchor feedback to code where possible: GitHub lets you comment on a specific line of a specific commit, so &#8220;check the merge keys on this line&#8221; carries its own context.</p><p>For coauthors, the same record does double duty. An email thread about the benchmark choice can get lost in an inbox, while an issue is remains indexed and referenced to the code and project. You can see what&#8217;s been checked, by whom, and what&#8217;s still open&#8212;verification distributed across the team and made visible. A trick I&#8217;ve come to like: after a seminar, file each question you got as its own issue, then ask the agent to go through them and draft the best available answer for each, flagging which ones require actual new analysis.</p><p>Markus asked about pull requests (PR), which you&#8217;ll see mentioned everywhere. A PR is a request to fold one branch of work back into the main line&#8212;&#8221;I&#8217;m done with this piece, please pull it in&#8221;&#8212;and it&#8217;s where professional code review formally happens. For a research team it&#8217;s worth adopting eventually, but issues alone get you most of the value, so I kept the demo there.</p><p>Markus also asked whether the verification itself can be done by another AI, such as Gemini or ChatGPT reviewing Claude&#8217;s code. It can, and people do run exactly that workflow; a second model reviewing the first catches real things. But I keep coming back to the line from the 1970s IBM training manual that I used in a previous post: a computer can never be held accountable. You still need a human being signing off on the task. The main goal of this workflow is to make this as painless and structured as possible. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!56gK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32219a58-37a4-48ad-a976-d0f2212144df_1440x1344.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!56gK!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32219a58-37a4-48ad-a976-d0f2212144df_1440x1344.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!56gK!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32219a58-37a4-48ad-a976-d0f2212144df_1440x1344.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!56gK!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32219a58-37a4-48ad-a976-d0f2212144df_1440x1344.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!56gK!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32219a58-37a4-48ad-a976-d0f2212144df_1440x1344.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!56gK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32219a58-37a4-48ad-a976-d0f2212144df_1440x1344.jpeg" width="1440" height="1344" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32219a58-37a4-48ad-a976-d0f2212144df_1440x1344.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1344,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!56gK!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32219a58-37a4-48ad-a976-d0f2212144df_1440x1344.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!56gK!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32219a58-37a4-48ad-a976-d0f2212144df_1440x1344.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!56gK!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32219a58-37a4-48ad-a976-d0f2212144df_1440x1344.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!56gK!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32219a58-37a4-48ad-a976-d0f2212144df_1440x1344.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4>Part C: Publish the results into the draft</h4><p>The last leg is getting results into the paper. This part is probably the least necessary, but if you have AI work on compile and write parts of your paper, having a documented pipeline becomes more important.</p><p>A cardinal rule&#8212;which predates AI but matters more now&#8212;is that no number in the draft gets typed by hand.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a> The pipeline emits <code>results.tex</code> and <code>figure.pdf</code>; the paper pulls them in using <code>input</code>  and <code>\includegraphics{}</code>. Then, whenever you update the analysis, it is straightforward to update the paper. With AI in the loop, you avoid having the results be written into the paper based on the model&#8217;s context window, but are instead directly mapped by code.</p><p>The integration that makes this smooth: Overleaf can sync directly with a GitHub repository. (Note: this sits behind Overleaf&#8217;s paid tier, though only the project owner needs the subscription&#8212;once the project is linked, any collaborator on it can hit the sync button. Markus&#8217;s alternative also works: Overleaf syncs with Dropbox, so you can point the pipeline&#8217;s output folder there instead&#8212;but Dropbox sync is a premium feature too, so there&#8217;s no free route to automatic syncing.) In the video I linked the <code>ipo-bump</code> repo to an Overleaf project, pulled, and every file appeared&#8212;figures, tables, the logs. I wrote a skeleton document referencing the results figure, pushed from Overleaf back to GitHub, had Claude write up the results section from the command-line side, and pulled again in Overleaf. The draft updated with the new text and the current figures. Nobody copied and pasted anything, and the draft&#8217;s own edit history now lives in the same git record as the code.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!c8qt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dfaf203-ce8a-4db9-a16d-1d0603cf1e92_2728x1608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!c8qt!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dfaf203-ce8a-4db9-a16d-1d0603cf1e92_2728x1608.png 424w, /__u/substackcdn.com/image/fetch/$s_!c8qt!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dfaf203-ce8a-4db9-a16d-1d0603cf1e92_2728x1608.png 848w, /__u/substackcdn.com/image/fetch/$s_!c8qt!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dfaf203-ce8a-4db9-a16d-1d0603cf1e92_2728x1608.png 1272w, /__u/substackcdn.com/image/fetch/$s_!c8qt!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dfaf203-ce8a-4db9-a16d-1d0603cf1e92_2728x1608.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!c8qt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dfaf203-ce8a-4db9-a16d-1d0603cf1e92_2728x1608.png" width="1456" height="858" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9dfaf203-ce8a-4db9-a16d-1d0603cf1e92_2728x1608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:858,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:470651,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/204750868?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dfaf203-ce8a-4db9-a16d-1d0603cf1e92_2728x1608.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!c8qt!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dfaf203-ce8a-4db9-a16d-1d0603cf1e92_2728x1608.png 424w, /__u/substackcdn.com/image/fetch/$s_!c8qt!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dfaf203-ce8a-4db9-a16d-1d0603cf1e92_2728x1608.png 848w, /__u/substackcdn.com/image/fetch/$s_!c8qt!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dfaf203-ce8a-4db9-a16d-1d0603cf1e92_2728x1608.png 1272w, /__u/substackcdn.com/image/fetch/$s_!c8qt!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dfaf203-ce8a-4db9-a16d-1d0603cf1e92_2728x1608.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The payoff is provenance. When a coauthor questions a coefficient, you walk backward: which table, which script, which commit, which logged decision. &#8220;Let me dig through my files&#8221; becomes a five-minute trace by Claude Code. In most cases I would simply ask AI to figure out where a decision got made, and since the commit history keeps track of all changes, it is a quick task.</p><p>Note that a correctly wired pipeline guarantees the number in the paper matches the number the code produced but doesn&#8217;t promise correct code. Clean provenance can faithfully publish a wrong estimate&#8212;which is why Part A comes before Part C. Review the method, then wire it into the draft. </p><h4>Wrapping up the series</h4><p>The loop this post assembles&#8212;act, review, publish, critique, re-run&#8212;works well for me. I still have far too much to review, but it keeps it organize and me sane.</p><p>1. <strong>Ask for the trail before the work happens</strong> </p><p>2<strong>. Review commits, not full codebases.</strong> The unit of verification should be a bounded diff.</p><p>3. <strong>Documentation is a map, not a verdict.</strong> LLMs are happy to claim results have been done that are not in fact there. Make a point of verifying (and even consider having another AI review)</p><p>4. <strong>Route feedback through issues.</strong> Use issues to keep track of tasks! The paper trail is invaluable to humans and agents.</p><p>5. <strong>No hand-typed numbers.</strong> Code emits, the draft ingests, git connects them. And review the method before you wire it in.</p><p>AI is <em>good</em> at this. Researchers mostly never adopted git&#8212;the perceived setup cost was too high for the benefit. That cost is now roughly zero. Tell Claude at the start of a project that you want everything tracked in git and GitHub, and it just does it, happily&#8212;it has the spirit of a good software engineer living somewhere deep inside. You get the best practices without the years of accumulated scar tissue that software engineers paid for them.</p><p>Markus closed by asking where this all goes in one year, in five. Honest answer: five years is unknowable, and even one year ago looked completely different from today. My guess is that the rough edges&#8212;the feeling of being in the Matrix at a command line&#8212;smooth out, and it becomes much clearer which parts of the workflow are human problems and which are computer problems. I don&#8217;t think this automates research away; it&#8217;s comparative advantage all the way down, and taste, judgment, and accountability stay on our side of the ledger. Thirty years ago, running a regression with many fixed effects was a real computational constraint that shaped what questions people asked. Now we run a thousand of them without thinking. Verification of AI-produced work will feel like that eventually, once the tooling makes it routine&#8212;it will still matter just as much, and it will have stopped being the constraint.</p><p>Thanks for following along with the series. I&#8217;d like to hear what your biggest pain points are with these tools&#8212;that&#8217;s what future posts will get built from.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I am not a theorist, but I&#8217;m sure the many "tedious&#8221; parts of theory have also been reduced as well, in an analogous fashion.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>If. you&#8217;re interested in abnormal returns, I have <a href="http://paulgp.com/papers/financial_event_studies_dec282025.pdf">a whole paper with Tianshu Lyu</a> on estimating causal effects in financial return data</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>My colleague Corey had a better line about <code>git</code>. <br>Things that are wrong in the age of AI:<br>1. you need to know how git works. <br>2. you don&#8217;t need to use <code>git</code>.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>Like all rules, the point is that we constantly flagrantly break them.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>If you&#8217;re familiar with git, Overleaf basically keeps it&#8217;s own repo folder and can push and pull commits like on your own folder. It will do its best to rebase and harmonize code without throwing issues to you, but stuff can get screwed up. AI will usually be able to fix it if so.</p></div></div>]]></content:encoded></item><item><title><![CDATA[The number of economics papers is not exploding on arXiv]]></title><description><![CDATA[On the importance of measurement]]></description><link>https://paulgp.substack.com/p/the-number-of-economics-papers-is</link><guid isPermaLink="false">https://paulgp.substack.com/p/the-number-of-economics-papers-is</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Tue, 02 Jun 2026 10:40:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!fvpI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bf882b-ec94-4b09-8a5b-a605bbb83fba_1800x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><em>You can see the computer age everywhere but in the productivity statistics.</em></p><p><em>-</em>Robert Solow (1987)</p></blockquote><p>Will AI, with its ability to autonomously write papers from start to finish, cause an <a href="/__u/substack.com/home/post/p-189705626">explosion</a> in <a href="/__u/causalinf.substack.com/p/a-professors-use-case-for-ai-generated">research</a> <a href="/__u/substack.com/@tiborrutar/p-186949917">papers</a> and the <a href="/__u/substack.com/@hollisrobbins/p-188749207">collapse</a> of the <a href="/__u/substack.com/@andybhall/p-194327576">academic publishing pipeline</a>?</p><p><a href="/__u/substack.com/@paulgp/p-192433164">Agentic tools are incredible </a>but human society is complex and hard to automate. It&#8217;s not clear whether people see these tools and say &#8220;Oh yes, I need to write twice as many papers.&#8221; They may work more intensely on papers, but they may also choose to spend more leisure time as it becomes easier to get work done! Or they may work through ideas quickly and find the better papers to focus on. It&#8217;s an empirical question.</p><p>I am going to provide four data sources to try to answer the question: &#8220;are people producing more working papers?&#8221;<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p><ol><li><p>arXiv&#8217;s working papers for <a href="https://arxiv.org/archive/econ">economics</a>, <a href="https://arxiv.org/archive/stat">statistics</a>, and<a href="https://arxiv.org/list/cs.LG/recent"> machine learning</a> (a CS category)</p></li><li><p>the NBER&#8217;s <a href="https://www.nber.org/papers?page=1&amp;perPage=50&amp;sortBy=public_date">working papers</a></p></li><li><p><a href="https://www.ssrn.com/index.cfm/en/ern/">SSRN&#8217;s working paper series</a> (by far the hardest-to-get and least complete data)</p></li><li><p>AEA journal submissions </p></li></ol><p>The key question will be exactly how to measure this. Across almost every data source, the number of papers is rising; this was true long before AI. So instead, I&#8217;ll focus on the change in the growth rate of working papers, which will capture the <em>acceleration </em>due to AI:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\Delta \\textrm{Rate} = \\underbrace{\\left(\\frac{\\textrm{Number of papers}_{2026}}{\\textrm{Number of papers}_{2024}} -1 \\right)}_{\\textrm{2024-2026 growth}} -  \\underbrace{\\left(\\frac{\\textrm{Number of papers}_{2024}}{\\textrm{Number of papers}_{2022}} -1 \\right)}_{\\textrm{2022-2024 growth}} &quot;,&quot;id&quot;:&quot;YNGPGGFXOM&quot;}" data-component-name="LatexBlockToDOM"></div><p>The punchline: growth rates did tick up, but by far less than a true deluge would imply. SSRN is the one venue with a clear acceleration.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> And in the field where I&#8217;d have bet on the biggest jump &#8212; machine learning &#8212; the growth rate didn&#8217;t move at all: 18% per year over 2022&#8211;2024, and 18% again over 2024&#8211;2026. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!0qNE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a6783-7746-4284-9028-c987ee1b7555_1680x980.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!0qNE!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a6783-7746-4284-9028-c987ee1b7555_1680x980.png 424w, /__u/substackcdn.com/image/fetch/$s_!0qNE!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a6783-7746-4284-9028-c987ee1b7555_1680x980.png 848w, /__u/substackcdn.com/image/fetch/$s_!0qNE!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a6783-7746-4284-9028-c987ee1b7555_1680x980.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0qNE!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a6783-7746-4284-9028-c987ee1b7555_1680x980.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!0qNE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a6783-7746-4284-9028-c987ee1b7555_1680x980.png" width="1456" height="849" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/624a6783-7746-4284-9028-c987ee1b7555_1680x980.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:849,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:159804,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/200109544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a6783-7746-4284-9028-c987ee1b7555_1680x980.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!0qNE!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a6783-7746-4284-9028-c987ee1b7555_1680x980.png 424w, /__u/substackcdn.com/image/fetch/$s_!0qNE!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a6783-7746-4284-9028-c987ee1b7555_1680x980.png 848w, /__u/substackcdn.com/image/fetch/$s_!0qNE!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a6783-7746-4284-9028-c987ee1b7555_1680x980.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0qNE!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624a6783-7746-4284-9028-c987ee1b7555_1680x980.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Journal submissions at the AEA are a partial exception &#8212; they&#8217;ve risen recently &#8212; but as I&#8217;ll show, that&#8217;s partly a rebound to pre-2019 levels rather than new growth. More on that below.</p><div><hr></div><h3>arXiv</h3><p><a href="https://arxiv.org/">arXiv</a> is a public working paper repository that hosts for a variety of scientific topics, including economics (although it is not nearly as important as SSRN right now). Papers can be posted on the site, and then updated anytime they are changed. Arxiv has the useful feature that every version of a paper is time-stamped (very useful for fields like math, where precedence is very important).</p><p>An extremely important cautionary note about arXiv &#8212; it is easy to accidentally use the &#8220;last-updated&#8221; date for papers when indexing. However this will bias your results towards finding a large recent increase in papers. Below, I plot the number of new papers posted per month in the three economics arXiv mailing lists. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!fvpI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bf882b-ec94-4b09-8a5b-a605bbb83fba_1800x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!fvpI!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bf882b-ec94-4b09-8a5b-a605bbb83fba_1800x1080.png 424w, /__u/substackcdn.com/image/fetch/$s_!fvpI!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bf882b-ec94-4b09-8a5b-a605bbb83fba_1800x1080.png 848w, /__u/substackcdn.com/image/fetch/$s_!fvpI!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bf882b-ec94-4b09-8a5b-a605bbb83fba_1800x1080.png 1272w, /__u/substackcdn.com/image/fetch/$s_!fvpI!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bf882b-ec94-4b09-8a5b-a605bbb83fba_1800x1080.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!fvpI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bf882b-ec94-4b09-8a5b-a605bbb83fba_1800x1080.png" width="1456" height="874" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5bf882b-ec94-4b09-8a5b-a605bbb83fba_1800x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:874,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:250953,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/200109544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bf882b-ec94-4b09-8a5b-a605bbb83fba_1800x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!fvpI!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bf882b-ec94-4b09-8a5b-a605bbb83fba_1800x1080.png 424w, /__u/substackcdn.com/image/fetch/$s_!fvpI!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bf882b-ec94-4b09-8a5b-a605bbb83fba_1800x1080.png 848w, /__u/substackcdn.com/image/fetch/$s_!fvpI!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bf882b-ec94-4b09-8a5b-a605bbb83fba_1800x1080.png 1272w, /__u/substackcdn.com/image/fetch/$s_!fvpI!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bf882b-ec94-4b09-8a5b-a605bbb83fba_1800x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In economics, we see that when we correctly measure the dates, there is a slight recent increase in papers, but nothing outrageous. Comparing the annualized rate of change between 2022-2024 to 2024-2026, we see a slight increase in the rate from 14% to 19% per year.</p><p>This story looks similar in other arXiv fields. In Statistics, the rate from 2022-2024 was 9% per year, and in 2024-2026, it grew to 14% per year. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!repO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbeda357-629a-4da8-8acf-09bf7811d69f_1800x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!repO!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbeda357-629a-4da8-8acf-09bf7811d69f_1800x1080.png 424w, /__u/substackcdn.com/image/fetch/$s_!repO!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbeda357-629a-4da8-8acf-09bf7811d69f_1800x1080.png 848w, /__u/substackcdn.com/image/fetch/$s_!repO!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbeda357-629a-4da8-8acf-09bf7811d69f_1800x1080.png 1272w, /__u/substackcdn.com/image/fetch/$s_!repO!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbeda357-629a-4da8-8acf-09bf7811d69f_1800x1080.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!repO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbeda357-629a-4da8-8acf-09bf7811d69f_1800x1080.png" width="1456" height="874" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fbeda357-629a-4da8-8acf-09bf7811d69f_1800x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:874,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:304827,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/200109544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbeda357-629a-4da8-8acf-09bf7811d69f_1800x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!repO!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbeda357-629a-4da8-8acf-09bf7811d69f_1800x1080.png 424w, /__u/substackcdn.com/image/fetch/$s_!repO!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbeda357-629a-4da8-8acf-09bf7811d69f_1800x1080.png 848w, /__u/substackcdn.com/image/fetch/$s_!repO!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbeda357-629a-4da8-8acf-09bf7811d69f_1800x1080.png 1272w, /__u/substackcdn.com/image/fetch/$s_!repO!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbeda357-629a-4da8-8acf-09bf7811d69f_1800x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In Machine Learning (a computer science mailing list), posting rates have grown at the same steady rate since 2022!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!DglD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb969d611-34f7-424a-be39-205a2943cd9a_1800x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!DglD!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb969d611-34f7-424a-be39-205a2943cd9a_1800x1080.png 424w, /__u/substackcdn.com/image/fetch/$s_!DglD!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb969d611-34f7-424a-be39-205a2943cd9a_1800x1080.png 848w, /__u/substackcdn.com/image/fetch/$s_!DglD!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb969d611-34f7-424a-be39-205a2943cd9a_1800x1080.png 1272w, /__u/substackcdn.com/image/fetch/$s_!DglD!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb969d611-34f7-424a-be39-205a2943cd9a_1800x1080.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!DglD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb969d611-34f7-424a-be39-205a2943cd9a_1800x1080.png" width="1456" height="874" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b969d611-34f7-424a-be39-205a2943cd9a_1800x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:874,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:273334,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/200109544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb969d611-34f7-424a-be39-205a2943cd9a_1800x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!DglD!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb969d611-34f7-424a-be39-205a2943cd9a_1800x1080.png 424w, /__u/substackcdn.com/image/fetch/$s_!DglD!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb969d611-34f7-424a-be39-205a2943cd9a_1800x1080.png 848w, /__u/substackcdn.com/image/fetch/$s_!DglD!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb969d611-34f7-424a-be39-205a2943cd9a_1800x1080.png 1272w, /__u/substackcdn.com/image/fetch/$s_!DglD!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb969d611-34f7-424a-be39-205a2943cd9a_1800x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h3>National Bureau of Economic Research</h3><p>An alternative mailing list for working papers is the National Bureau of Economic Research (NBER). This mailing list is unique in that the number of people who can post to it is held in very restricted quantity.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> Hence, any changes here on production would really be an <em>extensive</em> margin story among very research-active scholars. </p><p>In this setting, we see a similar change from 2022-2024 (5%) to 2024-2026 (9%) as before, but with lower growth rates in both periods. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!vmUx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F886d1294-ff56-459f-8fac-066ec6a5fe81_1800x1050.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!vmUx!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F886d1294-ff56-459f-8fac-066ec6a5fe81_1800x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!vmUx!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F886d1294-ff56-459f-8fac-066ec6a5fe81_1800x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!vmUx!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F886d1294-ff56-459f-8fac-066ec6a5fe81_1800x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!vmUx!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F886d1294-ff56-459f-8fac-066ec6a5fe81_1800x1050.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!vmUx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F886d1294-ff56-459f-8fac-066ec6a5fe81_1800x1050.png" width="1456" height="849" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/886d1294-ff56-459f-8fac-066ec6a5fe81_1800x1050.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:849,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:278910,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/200109544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F886d1294-ff56-459f-8fac-066ec6a5fe81_1800x1050.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!vmUx!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F886d1294-ff56-459f-8fac-066ec6a5fe81_1800x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!vmUx!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F886d1294-ff56-459f-8fac-066ec6a5fe81_1800x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!vmUx!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F886d1294-ff56-459f-8fac-066ec6a5fe81_1800x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!vmUx!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F886d1294-ff56-459f-8fac-066ec6a5fe81_1800x1050.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>SSRN</h3><p>The Social Science Research Network (SSRN) is the dominant social science platform for economics and finance working papers. It&#8217;s also owned by Elsevier and hides all its information. It requires all sorts of insane logins and clickthroughs to use and is overall a terrible service. You should stop using it.</p><p>That being said, it would be unfair to do any analysis of the state of working papers in economics without looking at it. So, I had to hack together a horrible solution. </p><p>Using the Wayback Machine, I pulled SSRN&#8217;s own reported totals &#8212; the cumulative stock of papers &#8212; for its two main categories, the Economics Research Network (ERN) and the Financial Economics Network (FEN), at a handful of snapshots over time. There weren&#8217;t many, but enough for a rough read.</p><p>From 2020 through 2025 the stock grew at roughly 5% a year, with a recent acceleration to about 10%. Treat this as the softest evidence in the piece, though: it&#8217;s by far the sparsest and least reliable of the four sources and, ironically, the only one showing a clear pickup in working papers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!a-lg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23b33df-c7a0-478d-8b98-9c572db34d9d_1800x1050.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!a-lg!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23b33df-c7a0-478d-8b98-9c572db34d9d_1800x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!a-lg!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23b33df-c7a0-478d-8b98-9c572db34d9d_1800x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!a-lg!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23b33df-c7a0-478d-8b98-9c572db34d9d_1800x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!a-lg!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23b33df-c7a0-478d-8b98-9c572db34d9d_1800x1050.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!a-lg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23b33df-c7a0-478d-8b98-9c572db34d9d_1800x1050.png" width="1456" height="849" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a23b33df-c7a0-478d-8b98-9c572db34d9d_1800x1050.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:849,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:179824,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/200109544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23b33df-c7a0-478d-8b98-9c572db34d9d_1800x1050.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!a-lg!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23b33df-c7a0-478d-8b98-9c572db34d9d_1800x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!a-lg!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23b33df-c7a0-478d-8b98-9c572db34d9d_1800x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!a-lg!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23b33df-c7a0-478d-8b98-9c572db34d9d_1800x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!a-lg!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23b33df-c7a0-478d-8b98-9c572db34d9d_1800x1050.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>AEA Journal Submissions</h3><p>I collected data from the <a href="https://www.aeaweb.org/articles?id=10.1257/pandp.116.742">Report of the Editor</a> for each major AEA Journal (AER + 4 AEJs). We definitely see an increase over the past few years in submissions, but what is strange is how much submissions were initially <em>down</em>. Why? One candidate is price: the cost of submitting to the journal went up! <a href="https://pubs.aeaweb.org/doi/pdfplus/10.1257/aer.106.5.726">In 2015, the cost was $200 dollars for non-members and 100 for members. </a>Between 2019 and 2020, <a href="https://pubs.aeaweb.org/doi/pdfplus/10.1257/pandp.110.695">it had increased to 300/200. </a></p><p>This stands out because even in 2025, we still haven&#8217;t reach the peak of 2018 for the AER.  It is difficult, however, looking at the graph, to suss out exactly how much of this is rebounding after some declines post-Covid, or a true increase. The real increase appears to be in the AEJ: EP and AEJ:Applied, have significant and recent growth in submissions.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Wyj4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7310290b-9886-40bb-9abe-1e0493a6728d_1960x868.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Wyj4!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7310290b-9886-40bb-9abe-1e0493a6728d_1960x868.png 424w, /__u/substackcdn.com/image/fetch/$s_!Wyj4!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7310290b-9886-40bb-9abe-1e0493a6728d_1960x868.png 848w, /__u/substackcdn.com/image/fetch/$s_!Wyj4!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7310290b-9886-40bb-9abe-1e0493a6728d_1960x868.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Wyj4!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7310290b-9886-40bb-9abe-1e0493a6728d_1960x868.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Wyj4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7310290b-9886-40bb-9abe-1e0493a6728d_1960x868.png" width="1456" height="645" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7310290b-9886-40bb-9abe-1e0493a6728d_1960x868.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:645,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:204049,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/200109544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7310290b-9886-40bb-9abe-1e0493a6728d_1960x868.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Wyj4!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7310290b-9886-40bb-9abe-1e0493a6728d_1960x868.png 424w, /__u/substackcdn.com/image/fetch/$s_!Wyj4!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7310290b-9886-40bb-9abe-1e0493a6728d_1960x868.png 848w, /__u/substackcdn.com/image/fetch/$s_!Wyj4!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7310290b-9886-40bb-9abe-1e0493a6728d_1960x868.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Wyj4!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7310290b-9886-40bb-9abe-1e0493a6728d_1960x868.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>So what now? The real question is whether submission rates will continue to grow. Will it be concentrated in things like AEJ:EP and AE? Or will micro theory start to have more submissions?  AI adoption is still diffusing, so if there&#8217;s a real effect we&#8217;d expect it to build over time &#8212; which is exactly why this is worth tracking. And if price screens submissions as effectively as it appears to, editors hold a powerful lever.</p><p>Personally, I think the AEA, and finance bodies like the SFS and AFA, would do us a real service by publishing submission data regularly. Right now there&#8217;s a lot of hand-wringing and very little data, which makes it hard to know whether AI is deluging us with papers or we&#8217;re just projecting our fears.</p><p>For now, you can see the AI age everywhere except in the submission statistics.</p><p><em>A repo for replicating the analysis in this piece is available here: <a href="https://github.com/paulgp/ai-working-paper-deluge">https://github.com/paulgp/ai-working-paper-deluge</a></em></p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>This is really the only quantity that is not artificially constrained, since journal slots will likely stay fixed in the short-run.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>This is also the data source with the least reliable data.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>Only NBER Research Associates and Faculty Research Fellows are able to post their papers there. Disclosure: I am an NBER FRF</p></div></div>]]></content:encoded></item><item><title><![CDATA[Skills: Specifying How an Agent Should Think]]></title><description><![CDATA[Video 6 in a series on Claude Code]]></description><link>https://paulgp.substack.com/p/skills-specifying-how-an-agent-should</link><guid isPermaLink="false">https://paulgp.substack.com/p/skills-specifying-how-an-agent-should</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Sun, 24 May 2026 11:03:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/a03ehomPqMA" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Part 6 of a series on AI coding tools for empirical research, accompanying my <a href="https://bcf.princeton.edu/markus-academy/">Markus Academy</a> video series.</em></p><div id="youtube2-a03ehomPqMA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;a03ehomPqMA&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/a03ehomPqMA?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>The <a href="/__u/paulgp.substack.com/p/writing-and-thinking-with-ai-assistance">previous post</a> was about writing &#8212; and in that one, we already met skills in passing. The writing style guide we built was a skill. The <a href="https://github.com/jusi-aalto/strategic-revision">strategic revision tool that turns referee reports into a dependency-mapped revision plan</a> was a skill. Today, we&#8217;re going to cover skills more directly, and talk about how you should view them. I will argue (drawing on others&#8217; arguments) that skills are about how to specify <em>how Claude should think</em> about a recurring task. </p><p>I&#8217;ll cover four things: what a skill actually is (which is less mysterious than the marketing makes it sound), where skills are stored, how to develop one with a worked example, and where to look for skills other people have written. Then I&#8217;ll flag two warnings I think matter.</p><h2><strong>What is a skill?</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!G-bF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f0a2e4-3593-4e60-8f8d-7a7a99870646_1448x1086.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!G-bF!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f0a2e4-3593-4e60-8f8d-7a7a99870646_1448x1086.png 424w, /__u/substackcdn.com/image/fetch/$s_!G-bF!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f0a2e4-3593-4e60-8f8d-7a7a99870646_1448x1086.png 848w, /__u/substackcdn.com/image/fetch/$s_!G-bF!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f0a2e4-3593-4e60-8f8d-7a7a99870646_1448x1086.png 1272w, /__u/substackcdn.com/image/fetch/$s_!G-bF!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f0a2e4-3593-4e60-8f8d-7a7a99870646_1448x1086.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!G-bF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f0a2e4-3593-4e60-8f8d-7a7a99870646_1448x1086.png" width="476" height="357" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/61f0a2e4-3593-4e60-8f8d-7a7a99870646_1448x1086.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1086,&quot;width&quot;:1448,&quot;resizeWidth&quot;:476,&quot;bytes&quot;:1055723,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/198985059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f0a2e4-3593-4e60-8f8d-7a7a99870646_1448x1086.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!G-bF!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f0a2e4-3593-4e60-8f8d-7a7a99870646_1448x1086.png 424w, /__u/substackcdn.com/image/fetch/$s_!G-bF!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f0a2e4-3593-4e60-8f8d-7a7a99870646_1448x1086.png 848w, /__u/substackcdn.com/image/fetch/$s_!G-bF!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f0a2e4-3593-4e60-8f8d-7a7a99870646_1448x1086.png 1272w, /__u/substackcdn.com/image/fetch/$s_!G-bF!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61f0a2e4-3593-4e60-8f8d-7a7a99870646_1448x1086.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A skill is a reusable instruction bundle for a repeated workflow. The text that you put in there is just a long prompt &#8212; the kind of thing that you would write out if you were describing something to Claude &#8212; except it all goes into one file, and that file gets pulled into the conversation when the task comes up. Instead of re-explaining the same task every time, you encode what the task is, what structure the output should have, and what to check while you do it.</p><p><strong>Skills are a way of trying to specify how an agent should think.</strong> To quote a great substack post by <a href="/__u/caideiseach.substack.com/p/sops-and-the-art-of-showing-other">Caldeisearch</a>:</p><div class="callout-block" data-callout="true"><p>When you create a Claude Skill, you&#8217;re not automating a task&#8212;you&#8217;re teaching Claude your decision-making process.</p><p><strong>I&#8217;ve started thinking of [Standard Operating Procedures (SOPs)] differently: &#8220;Show Other People.&#8221;</strong></p><p>Whether those &#8220;people&#8221; are junior employees or AI agents doesn&#8217;t matter. The exercise is identical: take tacit knowledge and make it explicit enough that someone else can replicate your thinking.</p></div><p>As you make explicit how you want to think about a problem, you end up elaborating the steps &#8212; and once those steps are written down, the next run gets the same treatment as the last one.</p><p>The research examples are easy to generate. How do you want to summarize a paper? What do you want to focus on? If you were drafting referee comments, what would you flag? If you had an RA doing a literature review, you might have a very explicit set of steps &#8212; search these journals, look for these terms, find the papers, then look at the papers they cite related to this topic, and so on. The first time, you&#8217;d explain it from scratch. Every time after that, you&#8217;d want to point at the instructions rather than redictate them.</p><p>I want to be precise about this: a skill is a way of standardizing recurring research workflows. It is not a power-up. It doesn&#8217;t do anything beyond what the underlying model can already do. It&#8217;s a way of improving <em>thinking</em> &#8212; of getting consistent treatment of the same problem across runs. So if someone is advocating for their particular set of skills in Claude, they are really saying: &#8220;I have figured out a great set of explicit instructions for these tasks.&#8221;</p><p>The mental model from the <a href="https://vscode-remote+ssh-002dremote-002bsom.vscode-resource.vscode-cdn.net/video-01-installation-setup/">first post</a> still applies. The LLM is a text machine reading a context window. A skill is just more text that gets loaded into the context &#8212; the model reads it, and that shifts where the prediction lands. There is no separate &#8220;skill engine.&#8221; </p><h2><strong>Where skills live</strong></h2><p>Every skill is a folder. Inside <code>skills/</code>, you have a folder called, say, <code>paper-summary/</code>. Inside that folder, the main file is always called <code>SKILL.md</code>. That&#8217;s where the instructions go. You can include additional files alongside it &#8212; templates, examples, supporting material &#8212; but the name of the skill comes from the folder, and <code>SKILL.md</code> is the entry point.</p><pre><code><code>skills/
  paper-summary/
    SKILL.md          &#8592; instructions + YAML frontmatter
    template.tex      &#8592; optional supporting files
    examples/         &#8592; optional reference material
</code></code></pre><p>There are two install locations and they behave differently.</p><p>The <strong>user-level</strong> location is <code>~/.claude/skills/</code> (the tilde is your home folder; the <code>.claude</code> directory is hidden because it has a leading dot). A skill installed here is available in every project on your machine.</p><p>The <strong>project-level</strong> location is <code>.claude/skills/</code> inside whatever folder you&#8217;re working in &#8212; typically a repo. A skill installed here only applies in that project, and it gets checked into git, so a co-author who clones the repo gets the skill too.</p><p>When Markus asked why you wouldn&#8217;t just install everything at the user level &#8212; so you have access to all your skills all the time &#8212; the answer comes down to two things. First, skills take up space. Not the whole skill, but the description of each skill is embedded in the initial prompt, so Claude knows when to trigger it. If you have a thousand global skills, you&#8217;ve got a thousand little descriptions getting loaded every time you start a session. Think of it like rebooting your computer with a hundred startup apps &#8212; it&#8217;s just slower. Second, you may not want certain skills firing on certain tasks. If you&#8217;re doing something new and exploratory, you may not want the &#8220;summarize papers in the Goldsmith-Pinkham style&#8221; skill jumping in. I actually install very few things at the global level. Most of mine live in the relevant project.</p><p>A small detail that&#8217;s easy to miss: the <code>SKILL.md</code> frontmatter has a <code>name</code> and a <code>description</code>, and Claude uses the description to decide <em>when</em> the skill applies. So write the description like a trigger, not a title. &#8220;Use when the user says &#8216;summarize this paper,&#8217; &#8216;prep me for this seminar,&#8217; or hands over an econ paper&#8221; is a trigger. &#8220;Paper summary tool&#8221; is a title. The first one tells Claude when to invoke; the second tells you what&#8217;s in the folder.</p><h2><strong>How to develop a skill: a worked example</strong></h2><p>The workflow I use:</p><ol><li><p><strong>Notice a task where you keep giving the same instructions.</strong> This is the cue.</p></li><li><p><strong>Decide what the inputs are</strong> &#8212; a URL, a PDF, a folder of files.</p></li><li><p><strong>Decide what the output structure must be.</strong> This is where most of the value lives.</p></li><li><p><strong>Write the instructions</strong> &#8212; usually I have Claude draft a first pass and edit from there, rather than writing it from scratch.</p></li><li><p><strong>Test it on real examples and revise.</strong></p></li></ol><p>Let me walk through one I built live in the video. The task: when I&#8217;m visiting another department for a seminar, or when a seminar visitor is coming to Yale, I want to be able to pull up some of their recent papers and have decent notes on each one quickly. This is a way to prep &#8212; or to do a fast literature review pass.</p><p>The prompt I gave Claude to build the skill was something like:</p><pre><code><code>&gt; I want to make a skill for this directory that summarizes academic economic research papers for when I am visiting other departments or when seminar visitors are visiting me. The input of the skill should be either the URL for a pdf or the filepath for the PDF. The output should have something as follows:

Output:
1. one-sentence summary
2. Setup
3. Empirical strategy
4. Key result
5. Limitations
6. Follow-ups

The output should be in a latex file that is then compiled to a pdf. It is very important that the details of teh strategy and results are translated into general enough intuition that even a non-expert in the subdomain (e.g. an economic phd who isn't in that field) could still understand.</code></code></pre><p>Claude generated the skill, including the description (&#8220;Use when the user says &#8216;summarize this paper&#8217; or &#8216;prep me for this&#8217; or hands over an econ paper&#8221;) and a step-by-step recipe: acquire the file, verify it&#8217;s a PDF, read it (read the abstract and intro first, then the results &#8212; which is the empirical default; for theory papers, jump to the model), compose a summary, write the LaTeX, compile.</p><h3><strong>Running it on a real paper</strong></h3><p>To test, we pointed it at one of Markus&#8217;s working papers &#8212; <em>Optimal Unconventional Monetary Policy</em>. After exiting and reloading Claude so the new skill was visible, I typed <code>/paper-summary</code> with the file. The skill ran, read the paper, and produced a one-page PDF. The TL;DR it generated:</p><blockquote><p>In a continuous-time macro-finance model with sticky prices and heterogeneous balance sheets, conventional interest rate policy alone can close the output gap but cannot deliver an efficient distribution of consumption and risk across households and intermediaries away from the steady state. Balance sheet policy plays a preparatory role &#8212; prepositioning who bears duration risk so subsequent interest rate moves redistribute wealth efficiently.</p></blockquote><p>Markus&#8217;s call: an accurate summary. The &#8220;plain English logic&#8221; section worked too &#8212; &#8220;how much an interest rate cut redistributes depends on how duration risk was already parked, and balance sheet policy is what parks it&#8221; &#8212; which is a decent first-pass restatement.</p><p>The way I&#8217;d really scale this is the version Markus and I sketched at the end: take the weekly NBER working paper email blast, point a skill at the whole list, and have it generate a one-paragraph headline result for every paper. I&#8217;m leaving that as an exercise. If you do it, tag us.</p><h2><strong>Claude Code ships with a lot of built-in skills</strong></h2><p>Before you write your own, check whether one already exists. The companies building these coding harnesses &#8212; Anthropic and the others &#8212; get an enormous amount of data on how people use them, and they roll skills back into the product itself. Out of the box, <a href="https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview">Claude Code includes skills across a lot of categories. </a></p><p>These include:</p><ul><li><p><code>init</code> </p><ul><li><p> generate CLAUDE.md</p></li></ul></li><li><p><code>update-config</code> </p><ul><li><p> edit settings.json (hooks, permissions, env)</p></li></ul></li><li><p><code>keybindings-help</code></p><ul><li><p>customize ~/.claude/keybindings.json</p></li></ul></li><li><p><code>fewer-permission-prompts</code></p><ul><li><p>auto-allowlist common tool calls</p></li></ul></li><li><p><code>claude-api</code></p><ul><li><p> build/debug/migrate Anthropic SDK apps</p></li></ul></li><li><p><code>loopschedule</code></p><ul><li><p>recurring or cron-scheduled runs</p></li></ul></li></ul><p>These activate automatically when your request matches. You don&#8217;t have to invoke them by name. Ask Claude to &#8220;make me a PDF of this&#8221; and it uses the pdf skill. </p><h2><strong>A broader marketplace</strong></h2><p>Beyond the built-ins, there&#8217;s a growing open-source ecosystem of skill packs that people share publicly. People in the open source community have a natural tendency to package up their skills and put them online. It&#8217;s a kind of skill app store, if you want a frame for it.</p><p>The ones I&#8217;d point to:</p><ul><li><p><strong><a href="https://github.com/obra/superpowers">Superpowers</a></strong> &#8212; the most well-known collection, very breadth-y, oriented toward software engineering workflows.</p></li><li><p><strong><a href="https://github.com/anthropics/skills">Anthropic&#8217;s own </a></strong><code>anthropics/skills</code> &#8212; official skills, well-tested.</p></li><li><p><strong>Domain-specific packs</strong> shared on GitHub and via plugins.</p></li></ul><p>There&#8217;s also a use case I think academia underexploits: building a shared skill pack for your group. At Yale SOM, this is something we&#8217;re thinking about &#8212; you could have a GitHub repo of skills that you and your RAs and co-authors all use, encoding the way your group does paper summaries, referee reports, robustness checks. Claude makes it easy to install these. The leverage is high: every new RA inherits the group&#8217;s institutional knowledge in skill form.</p><h3><strong>What a more developed skill looks like</strong></h3><p>To give you a sense of how much further this can go, <a href="https://github.com/obra/superpowers/blob/main/skills/brainstorming/SKILL.md">the brainstorming skill in Superpowers is worth looking at. </a>The basic frame is: any time you&#8217;re doing creative work &#8212; creating features, building components, adding functionality &#8212; the skill makes Claude explore intent, requirements, and design before any implementation. It tries to kill the assumption that some things are too simple to need a design step.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!KccN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2711c33e-c1a4-416b-9447-7629c7660a1a_1940x810.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!KccN!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2711c33e-c1a4-416b-9447-7629c7660a1a_1940x810.png 424w, /__u/substackcdn.com/image/fetch/$s_!KccN!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2711c33e-c1a4-416b-9447-7629c7660a1a_1940x810.png 848w, /__u/substackcdn.com/image/fetch/$s_!KccN!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2711c33e-c1a4-416b-9447-7629c7660a1a_1940x810.png 1272w, /__u/substackcdn.com/image/fetch/$s_!KccN!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2711c33e-c1a4-416b-9447-7629c7660a1a_1940x810.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!KccN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2711c33e-c1a4-416b-9447-7629c7660a1a_1940x810.png" width="1456" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2711c33e-c1a4-416b-9447-7629c7660a1a_1940x810.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:608,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:222191,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/198985059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2711c33e-c1a4-416b-9447-7629c7660a1a_1940x810.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!KccN!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2711c33e-c1a4-416b-9447-7629c7660a1a_1940x810.png 424w, /__u/substackcdn.com/image/fetch/$s_!KccN!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2711c33e-c1a4-416b-9447-7629c7660a1a_1940x810.png 848w, /__u/substackcdn.com/image/fetch/$s_!KccN!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2711c33e-c1a4-416b-9447-7629c7660a1a_1940x810.png 1272w, /__u/substackcdn.com/image/fetch/$s_!KccN!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2711c33e-c1a4-416b-9447-7629c7660a1a_1940x810.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The skill itself is a checklist: explore the project, think about visual questions ahead, ask clarifying questions, propose approaches, present a design. There&#8217;s a flow diagram. There&#8217;s even a &#8220;visual companion&#8221; &#8212; a browser-based tool that shows mockups during brainstorming, so when you&#8217;re designing UI you can see what the proposal looks like rather than reading a text description.</p><p>And there&#8217;s a step at the end where the skill dispatches <em>another agent</em> to review the plan it just produced. The first agent writes the spec; the second agent reviews it for completeness, consistency, and clarity. This is structurally close to how you&#8217;d run a planning meeting with a co-author.</p><p>The point I want to make: my paper-summary skill is one extreme &#8212; a small, simple, repeatable task. Superpowers is the other extreme &#8212; a heavy, opinionated process for structuring how you think about a project. Both are skills. They are doing very different work.</p><p>A friend of mine has been telling me about a use case I find appealing for academic work, <a href="https://github.com/mattpocock/skills/blob/main/skills/productivity/grill-me/SKILL.md">which is the &#8220;demanding adviser&#8221; skill.</a> The setup: you&#8217;re working on a project solo, but what you really want is a version of someone &#8212; your adviser, a tough discussant &#8212; pushing on the weak parts. You write a skill that says: ask me questions about this research idea, push on anything that seems thin, flag what needs to be fleshed out, then propose a plan of next steps. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ueEy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09db572c-b449-4859-ac07-343015475c63_2006x680.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ueEy!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09db572c-b449-4859-ac07-343015475c63_2006x680.png 424w, /__u/substackcdn.com/image/fetch/$s_!ueEy!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09db572c-b449-4859-ac07-343015475c63_2006x680.png 848w, /__u/substackcdn.com/image/fetch/$s_!ueEy!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09db572c-b449-4859-ac07-343015475c63_2006x680.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ueEy!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09db572c-b449-4859-ac07-343015475c63_2006x680.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ueEy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09db572c-b449-4859-ac07-343015475c63_2006x680.png" width="1456" height="494" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/09db572c-b449-4859-ac07-343015475c63_2006x680.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:494,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:170150,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/198985059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09db572c-b449-4859-ac07-343015475c63_2006x680.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!ueEy!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09db572c-b449-4859-ac07-343015475c63_2006x680.png 424w, /__u/substackcdn.com/image/fetch/$s_!ueEy!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09db572c-b449-4859-ac07-343015475c63_2006x680.png 848w, /__u/substackcdn.com/image/fetch/$s_!ueEy!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09db572c-b449-4859-ac07-343015475c63_2006x680.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ueEy!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09db572c-b449-4859-ac07-343015475c63_2006x680.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><strong>Two warnings</strong></h2><p><strong>Skills fill up the context window.</strong> Every skill that loads adds text. We talked about this in the <a href="https://vscode-remote+ssh-002dremote-002bsom.vscode-resource.vscode-cdn.net/video-01-installation-setup/">first post</a> &#8212; performance degrades as context grows. If you install a lot of skills, even just the descriptions add up, and you can have skills triggering in places you didn&#8217;t intend (which is partly a precision-of-description problem, but it&#8217;s also a &#8220;you installed too many&#8221; problem). Be precise in what you want. Don&#8217;t go crazy.</p><p><strong>Skills from others can be malicious.</strong> A skill is text that gets dumped into the context to steer the model&#8217;s behavior &#8212; which means a third-party skill is, in a real sense, someone else&#8217;s instructions running in your environment. The agent LLMs have a lot of hardcoded refusals to prevent obviously dumb behavior, but they can still do incredibly dumb things. You could imagine a skill that says, &#8220;any time the user asks you to do anything, remove all important files in this folder.&#8221; A horrible skill, but it&#8217;s plain text &#8212; nobody is going to write that explicitly. The more realistic worry is subtler: a skill whose instructions cause data to leak, or whose recipe runs commands you didn&#8217;t anticipate.</p><p>Treat installing a third-party skill like installing any other piece of software. Anthropic-published skills are reasonable to trust. A random skill from a repo with three stars is not. Read it before you install it.</p><h2><strong>Key takeaways</strong></h2><ol><li><p><strong>A skill is just instructions.</strong> It&#8217;s a markdown file that gets loaded into the context window. The leverage comes from standardizing recurring workflows, not from any new model capability. As I keep saying: skills specify how an agent should <em>think</em>.</p></li><li><p><strong>Start narrow and opinionated.</strong> One repeated problem, one well-specified output structure. The paper-summary skill is one slot per section.</p></li><li><p><strong>The description is a trigger, not a title.</strong> Claude uses the description to decide when the skill applies. Write it as the condition under which the skill should fire.</p></li><li><p><strong>Test on the work you actually do.</strong> The theory-vs-empirical fix in the paper-summary skill only surfaced because we ran it on Markus&#8217;s paper. Your first version of any skill will miss things specific to how you and your co-authors work.</p></li><li><p><strong>Check what already ships, then check the marketplace.</strong> Claude Code includes a lot of built-ins. Superpowers, Anthropic&#8217;s repo, and other community packs cover much of what an academic workflow needs.</p></li></ol><ol start="6"><li><p><strong>Be careful what you install.</strong> Skills fill the context, and third-party skills are someone else&#8217;s instructions running in your environment.</p></li></ol><h2></h2>]]></content:encoded></item><item><title><![CDATA[Permissions, Sandboxes, and Autonomous Agents]]></title><description><![CDATA[Video 7 in a series on Claude Code]]></description><link>https://paulgp.substack.com/p/permissions-sandboxes-and-autonomous</link><guid isPermaLink="false">https://paulgp.substack.com/p/permissions-sandboxes-and-autonomous</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Sun, 24 May 2026 11:02:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/8Jnx5rL_Gfk" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Part 7 of a series on AI coding tools for empirical research, accompanying my <a href="https://bcf.princeton.edu/markus-academy/">Markus Academy</a> video series.</em></p><div id="youtube2-8Jnx5rL_Gfk" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;8Jnx5rL_Gfk&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/8Jnx5rL_Gfk?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>The <a href="/__u/paulgp.substack.com/publish/post/198985059?r=2iog7&amp;utm_campaign=post&amp;utm_medium=web&amp;showWelcomeOnShare=true">previous post</a> was about skills &#8212; how to tell Claude what to <em>think</em> about a recurring task. This one is about telling Claude what it&#8217;s <em>allowed to do</em>, and where it&#8217;s allowed to do it. The earlier posts in this series involved a lot of saying <em>yes</em> to Claude &#8212; yes you can read this file, yes you can run that command, yes you can install that package. As the tools get more powerful, you eventually want a way to give them more reach without losing control.</p><p>Why does this matter? Because these LLMs, as pure chat bots, are basically harmless. There&#8217;s a version of the English playground line &#8212; sticks and stones may break my bones, but words can&#8217;t hurt me &#8212; that applies here. If the LLM is just talking, it cannot damage your computer. The reason these tools are powerful is that they can <em>act</em>: read files, run shell commands, install packages, edit and delete, reach the web.</p><p>I&#8217;ll cover five things: the two kinds of permission, the three approval modes (manual, auto, and YOLO), why the environment matters more than the model, how containers and sandboxes let you grant broad permission safely, and the OpenClaw-style autonomous-agent workflow this all opens up. I&#8217;ll end with the personal RA I run on top of this stack.</p><h2><strong>Two kinds of permission</strong></h2><p>Giving Claude permissions means two separate things.</p><p><strong>Folder access</strong> is about which files and directories Claude can read or modify. This is the easier kind to think about, partly because it&#8217;s analogous to questions you already ask: what&#8217;s in Dropbox, what&#8217;s not in Dropbox, what&#8217;s on Google Drive, what isn&#8217;t. This gives permission to <em>r</em>ead, <em>w</em>rite, and e<em>x</em>ecute on files. Rule one is usually &#8220;don&#8217;t let everything get deleted,&#8221; so read access is much safer than write access. But sometimes you may not want it to even <em>read</em> certain things &#8212; credentials, password files, anything you treat as a secret. One way to extend the folder metaphor: the internet itself is a folder. You may not want the agent reaching out to it.</p><p><strong>Tool access</strong> is about which actions Claude can take: <code>bash</code>, Python, <code>git</code>, package installs, browser tools, MCP servers, long-running jobs. Tools are what make LLMs into agents. The more tools an agent has, the more powerful it gets &#8212; and the trickier the permissions problem becomes, because clever agents work around restrictions.</p><p>Once you grant both kinds of permission &#8212; folders and tools &#8212; a chat model becomes an agent. </p><h2><strong>Three approval modes</strong></h2><p>Claude Code now exposes three approval modes, and the choice is really a choice about <em>when you do the thinking</em> &#8212; in other words, how many actions to restrict the agent is the principal doing, <em>ex ante</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Do3W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d0a721d-27c5-490e-97b8-0acbd70b8011_1305x934.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Do3W!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d0a721d-27c5-490e-97b8-0acbd70b8011_1305x934.png 424w, /__u/substackcdn.com/image/fetch/$s_!Do3W!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d0a721d-27c5-490e-97b8-0acbd70b8011_1305x934.png 848w, /__u/substackcdn.com/image/fetch/$s_!Do3W!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d0a721d-27c5-490e-97b8-0acbd70b8011_1305x934.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Do3W!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d0a721d-27c5-490e-97b8-0acbd70b8011_1305x934.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Do3W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d0a721d-27c5-490e-97b8-0acbd70b8011_1305x934.png" width="1305" height="934" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d0a721d-27c5-490e-97b8-0acbd70b8011_1305x934.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:934,&quot;width&quot;:1305,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1383515,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/199022988?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d0a721d-27c5-490e-97b8-0acbd70b8011_1305x934.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Do3W!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d0a721d-27c5-490e-97b8-0acbd70b8011_1305x934.png 424w, /__u/substackcdn.com/image/fetch/$s_!Do3W!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d0a721d-27c5-490e-97b8-0acbd70b8011_1305x934.png 848w, /__u/substackcdn.com/image/fetch/$s_!Do3W!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d0a721d-27c5-490e-97b8-0acbd70b8011_1305x934.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Do3W!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d0a721d-27c5-490e-97b8-0acbd70b8011_1305x934.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Manual</strong> is the strictest. You approve every action one by one. Claude tracks folders it&#8217;s allowed in, and you can give group permissions inside a session, but by default it asks. This is the safest setting, and it&#8217;s where everyone starts.</p><p><strong>Auto</strong> is a new mode, and it&#8217;s what I tend to use as my default now. Claude doesn&#8217;t need to ask for permission for routine actions, but it has a sense of which kinds of tasks should <em>still</em> trigger a prompt &#8212; overwriting files, removing files, anything destructive. This isn&#8217;t perfect; you&#8217;re relying on what Claude Code&#8217;s developers have classified as risky. But Anthropic has a lot of data about which tasks do and don&#8217;t need approval, and that&#8217;s baked in. Auto mode mostly does the right thing.</p><p><strong>YOLO</strong> mode &#8212; in Claude Code, the flag is <code>--dangerously-skip-permissions</code> &#8212; turns prompts off entirely. The agent is fully autonomous. Just tells it what to do and goes. The upside is speed. The downside is that the model can end up producing complete nonsense for an hour and you won&#8217;t catch it until you look.</p><p>Here&#8217;s the point I want to make about all this: most of us are already approving a remarkable number of actions with very little processing. &#8220;Yes&#8221; to reading files, &#8220;yes&#8221; to running scripts, &#8220;yes&#8221; to package installs, &#8220;yes&#8221; to editing multiple files. If you&#8217;re hitting <code>y</code> on autopilot, the prompts have stopped being a real safety mechanism. They&#8217;ve become friction without protection &#8212; a false sense of security.</p><p>There&#8217;s a great line from Mario Zechner, who built the popular <code>pi-agent</code> coding harness:</p><blockquote><p>If you look at the security measures that are in place, they&#8217;re mostly security theater. As soon as an agent can write code and run code, it&#8217;s pretty much game over. The core issue remains: if an LLM has access to tools that can read private data and make network requests, you&#8217;re playing whack-a-mole with attack vectors.</p></blockquote><p>The implication is not &#8220;don&#8217;t bother with security.&#8221; It&#8217;s that the per-action prompts give you the <em>feeling</em> of control but not the reality of it. The real lever is <em>ex ante</em>: design the environment well, then let the agent move quickly inside it.</p><p>One quick aside that came up in the conversation with Markus: you should always have backups. Dropbox is good partly because it&#8217;s backed up. Even better, once you&#8217;re doing software and writing, learn <code>git</code> and use GitHub. Academics tend to be a little allergic to it because of a perceived learning curve. The curve is basically flat now &#8212; Claude can walk you through it &#8212; and the payoff is automatic versioning of everything. With git and a remote, the worst thing an over-eager agent can do is something you can roll back.</p><h2><strong>The real question is the environment</strong></h2><p>The question is not &#8220;do I trust Claude?&#8221; It&#8217;s:</p><ul><li><p>Which folders can it see?</p></li><li><p>What can it do &#8212; read, write, install, delete?</p></li><li><p>Are secrets or credentials within reach?</p></li><li><p>Can it reach the internet?</p></li><li><p>What&#8217;s the worst case if I&#8217;m wrong about all of the above?</p></li></ul><p>If you launch Claude in your home directory with no sandboxing, an unsandboxed <code>claude --dangerously-skip-permissions</code> runs with all of <code>~/.ssh</code>, every API key in your environment, and every other repo you&#8217;ve cloned within reach. Whether YOLO mode is okay is <em>entirely</em> a function of that environment, not a function of how much you trust the model.</p><p>So as an economist, I&#8217;m proposing we treat this as an extensive game. We know that these agents may make different actions that we like or do not like, and some of these bad actions vary in probability. Our actions can affect those probabilities. The question is what tools we have to shift them. The tool I want to focus on is the container.</p><h2><strong>What is a container?</strong></h2><p>A container is a sandboxed workspace for the agent. Sandboxing is exactly what it sounds like &#8212; a place where you let the agent do things, and if it raises hell inside that sandbox, it&#8217;s not the end of the world. Technically, a container is a little computer running inside your computer: a virtual machine. When the agent is inside, it doesn&#8217;t see your filesystem; it sees its own version. You choose what gets mounted in. You choose which tools are installed. You choose whether it has internet access.</p><p>Markus asked the natural follow-up: once you give the container access to a folder, can the agent remove that access from inside? No. The agent doesn&#8217;t even know there&#8217;s an outside. You can change the mounts from the host, but the agent inside has no ability to mount or unmount anything. It&#8217;s the children&#8217;s-movie image: a tiny figure inside a dollhouse, with no awareness of the room the dollhouse sits in.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p><p>So if you want to grant broad permissions, the clean answer is almost always: build the sandbox first. There are several ways to do this, and the right one depends on what you already use:</p><ul><li><p><strong>Docker / devcontainers</strong> &#8212; the natural starting point if you do any software work.</p></li><li><p><strong><a href="https://agent-safehouse.dev/">agent-safehouse</a></strong> &#8212; a Mac-native lightweight option.</p></li><li><p><code>scode</code> and <code>nono.sh</code> &#8212; related lightweight options.</p></li><li><p><code>claude-container</code> &#8212; my own wrapper around the Docker version, which I&#8217;ll come back to.</p></li><li><p><strong>Remote VMs, ephemeral cloud boxes, CI-style runners</strong> &#8212; if you want the sandbox to literally not be on your laptop.</p></li></ul><p>The important design choice is the <em>boundary</em> &#8212; not the brand name.</p><h3><strong>The Docker version</strong></h3><p>I built an econometrics-flavored sandbox image based on <code>rocker/tidyverse</code>, with Python, R, LaTeX, Node, DuckDB, the <code>just</code> task runner, <code>uv</code> for Python package management, and Claude Code itself installed. (And no &#8212; I didn&#8217;t write the Dockerfile from scratch. I described what I wanted in there and Claude generated it. This is itself a use case for the tools we&#8217;re discussing.)</p><p>Build once:</p><pre><code><code>docker build -t econ-sandbox .</code></code></pre><p>Then run Claude inside it, mounting only the project folder and the Claude auth directory:</p><pre><code><code>docker run --rm -it \
  -v "$PWD/replication":/home/rstudio/work \
  -v "$HOME/.claude":/home/rstudio/.claude \
  --cap-drop=ALL \
  --security-opt=no-new-privileges \
  econ-sandbox \
  claude --dangerously-skip-permissions</code></code></pre><p>The first time you run this, Claude won&#8217;t think you&#8217;re logged in. That&#8217;s because it <em>isn&#8217;t</em> &#8212; the container is a fresh universe with no memory of your authentication. You log in once (you have to copy a link out and a code back, since the container has no browser), and Claude shows the now-familiar bypass-permissions warning: <em>&#8220;You&#8217;re running in bypass permission mode. This should only be used in a sandbox container with restricted internet access that can be easily restored if damaged.&#8221;</em> Which is exactly what we are.</p><p>I want to walk through a real demo we ran live, because the part that <em>failed</em> illustrates the point. We asked the sandboxed agent to go to Markus&#8217;s faculty page and write a one-sentence summary of every working paper listed there. The agent tried, but the Princeton scholar site returned 403 &#8212; it doesn&#8217;t like bots. So we changed the target to my GitHub instead, and the agent successfully pulled and summarized nine working papers. The papers got saved to the mounted folder, where they persisted on the host even after we exited the container.</p><p>Two things worth taking from that demo. First, when an agent fails inside a sandbox, you <em>see</em> it. There&#8217;s no quiet exfiltration of credentials; there&#8217;s no overwritten file you didn&#8217;t expect. The agent fails, you fix the task, you re-run. Second, the artifacts you actually care about &#8212; the PDF, the analysis, whatever was the point of the run &#8212; end up in the mounted folder, and only in the mounted folder. There is no other place for them to go.</p><p>For most of my own work I don&#8217;t type the full <code>docker run</code> command. I use a wrapper called <code>claude-code-runner</code> (<code>ccr</code> for short) that I built specifically for this &#8212; basically just an interface around the Docker-plus-mounts setup so I don&#8217;t have to remember the flags. It&#8217;s <a href="https://github.com/paulgp/claude-container/tree/master">on GitHub</a>. Nothing fancy underneath; it&#8217;s exactly the workflow above, just packaged.</p><p></p><h3><strong>A lighter alternative: agent-safehouse</strong></h3><p>If Docker is too much friction &#8212; and for a lot of academics it is &#8212; there&#8217;s a Mac-native option called <a href="https://agent-safehouse.dev/">agent-safehouse</a> that achieves similar isolation using OS-level sandboxing primitives rather than containers.</p><p>Install:</p><pre><code><code>brew install eugene1g/safehouse/agent-safehouse
</code>Then run any agent inside it:</code></pre><pre><code><code>cd ~/projects/my-app
safehouse claude --dangerously-skip-permissions
</code></code></pre><p>The isolation is real and kernel-enforced. Try to do something the agent shouldn&#8217;t be able to do:</p><pre><code><code>safehouse cat ~/.ssh/id_ed25519
# &#8594; Operation not permitted

safehouse ls ~/other-project
# &#8594; Operation not permitted

safehouse ls .
# &#8594; README.md  src/  ...
</code></code></pre><p>The current project works; other folders are invisible; SSH keys are blocked at the kernel. And it&#8217;s free. You can selectively widen the view read-only when you actually need to:</p><pre><code><code>safehouse --add-dirs-ro=~/.gitignore -- claude --dangerously-skip-permissions
</code></code></pre><p>Same design idea as Docker, lighter machinery.</p><h2><strong>Data exposure is the other half</strong></h2><p>Containers limit what Claude can <em>do</em>. They don&#8217;t limit what it can <em>see</em> once you&#8217;ve mounted a folder. That&#8217;s a separate problem and it matters a lot for empirical work.</p><p>If your container has a folder mounted that contains PII, you can&#8217;t send that data to a remote model and pretend the sandboxing handled the data-governance question. It didn&#8217;t. The sandbox limited filesystem reach. The data still leaves your machine when the model reads it.</p><p><strong>Some important caveats about data privacy</strong></p><ol><li><p>LLM providers vary in what they guarantee about how the data will be used in the prompts they see. If you are using a membership (e.g. 20/100/200 dollars a month), Anthropic does states that they may use your prompting information. In contrast, if you are using API calls (e.g. paying per token), Anthropic promises to not use your data (contractually this prevents them from exploiting firms&#8217; data, for example). However, you may vary in how much you believe this firm. <strong>Key takeaway: use API calls if you want to keep input data private</strong>.</p></li><li><p>There are other channels by which you can get access to LLM models that will protect your data, and are potentially HIPAA compliant. <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html">Bedrock</a>, run by Amazon, runs the Anthropic models themselves, and sends no data to Anthropic. They also promise to not use your data, and can run servers that are HIPAA compliant. <strong>Key takeaway: there are ways to get access to LLM models that are secure</strong>.</p></li><li><p>Most secure thing, in the end, is your own local model. Then nothing ever leaves. We will discuss this in the future.</p></li></ol><p>Another alternative mitigation, if the main concern is PII: preprocess. There&#8217;s an <a href="https://huggingface.co/openai/privacy-filter">OpenAI privacy filter</a> that takes a file as input and redacts names, emails, addresses, and similar identifiers before anything else touches the raw text.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> </p><p>The hierarchy I&#8217;d recommend, weakest to strongest:</p><ol><li><p><strong>Minimize access</strong> &#8212; mount only the folders you need.</p></li><li><p><strong>Sandbox the environment</strong> &#8212; Docker, safehouse, devcontainer.</p></li><li><p><strong>Filter PII</strong> if the data has identifiers you can scrub.</p></li><li><p><strong>For truly sensitive data, use a local model.</strong> Don&#8217;t send it to a remote API at all.</p></li></ol><h2><strong>OpenClaw and the autonomous-agent workflow</strong></h2><p>Once the environment is right, more automated workflows become reasonable. The shape of the &#8220;<a href="https://openclaw.ai/">OpenClaw</a>&#8221; pattern &#8212; which got a lot of attention a few months ago &#8212; is:</p><ul><li><p>broad tool access <em>inside</em> the sandbox,</p></li><li><p>a constrained sandbox/container boundary,</p></li><li><p>repeatable environment setup (Dockerfile plus a lockfile),</p></li><li><p>persistent memory so the agent can wake itself up and run tasks,</p></li><li><p>long chains of actions without per-step approval.</p></li></ul><p>People pitched OpenClaw as &#8220;the agent that&#8217;s a personal assistant&#8221; &#8212; clears your inbox, sends emails, manages your calendar &#8212; and you typically talk to it through a messaging app (WhatsApp, Telegram). Whether you want an agent doing those particular things is a separate conversation. The point I want to make is that the <em>shape</em> of this workflow &#8212; sandbox first, then broad permission inside it &#8212; is the same shape we&#8217;ve been building up. OpenClaw isn&#8217;t a different design; it&#8217;s the design taken further.</p><h3><strong>Duncan Idaho</strong></h3><p>To make this concrete, I want to show the agent I actually run on top of this stack. I call it Duncan Idaho (named after the Dune character).<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!XB_Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e32f92-c103-4bc9-9da4-8014f31f8ec0_4920x3508.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!XB_Z!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e32f92-c103-4bc9-9da4-8014f31f8ec0_4920x3508.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!XB_Z!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e32f92-c103-4bc9-9da4-8014f31f8ec0_4920x3508.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!XB_Z!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e32f92-c103-4bc9-9da4-8014f31f8ec0_4920x3508.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!XB_Z!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e32f92-c103-4bc9-9da4-8014f31f8ec0_4920x3508.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!XB_Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e32f92-c103-4bc9-9da4-8014f31f8ec0_4920x3508.jpeg" width="1456" height="1038" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/66e32f92-c103-4bc9-9da4-8014f31f8ec0_4920x3508.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1038,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!XB_Z!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e32f92-c103-4bc9-9da4-8014f31f8ec0_4920x3508.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!XB_Z!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e32f92-c103-4bc9-9da4-8014f31f8ec0_4920x3508.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!XB_Z!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e32f92-c103-4bc9-9da4-8014f31f8ec0_4920x3508.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!XB_Z!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66e32f92-c103-4bc9-9da4-8014f31f8ec0_4920x3508.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Duncan lives inside a Docker container on my computer. I talk to him through Telegram. When I send a message, it routes into a Claude Code session running inside the sandbox. Duncan has access to specific folders I&#8217;ve mounted: a project&#8217;s main database (read-only, because that data shouldn&#8217;t be touched), a Dropbox folder where outputs can land, a sandbox folder for scratch work, a paper pipeline with my whole working-paper history, and my teaching files (because I sometimes want to look something up while teaching).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!INwm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F475f94f0-3b85-4a56-bc3e-16ff9882984c_1494x1070.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!INwm!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F475f94f0-3b85-4a56-bc3e-16ff9882984c_1494x1070.png 424w, /__u/substackcdn.com/image/fetch/$s_!INwm!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F475f94f0-3b85-4a56-bc3e-16ff9882984c_1494x1070.png 848w, /__u/substackcdn.com/image/fetch/$s_!INwm!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F475f94f0-3b85-4a56-bc3e-16ff9882984c_1494x1070.png 1272w, /__u/substackcdn.com/image/fetch/$s_!INwm!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F475f94f0-3b85-4a56-bc3e-16ff9882984c_1494x1070.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!INwm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F475f94f0-3b85-4a56-bc3e-16ff9882984c_1494x1070.png" width="1456" height="1043" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/475f94f0-3b85-4a56-bc3e-16ff9882984c_1494x1070.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1043,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:545134,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/199022988?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F475f94f0-3b85-4a56-bc3e-16ff9882984c_1494x1070.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!INwm!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F475f94f0-3b85-4a56-bc3e-16ff9882984c_1494x1070.png 424w, /__u/substackcdn.com/image/fetch/$s_!INwm!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F475f94f0-3b85-4a56-bc3e-16ff9882984c_1494x1070.png 848w, /__u/substackcdn.com/image/fetch/$s_!INwm!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F475f94f0-3b85-4a56-bc3e-16ff9882984c_1494x1070.png 1272w, /__u/substackcdn.com/image/fetch/$s_!INwm!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F475f94f0-3b85-4a56-bc3e-16ff9882984c_1494x1070.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Duncan&#8217;s introduction</figcaption></figure></div><p>He keeps notes between sessions. He remembers conversations we&#8217;ve had. He can search papers, browse the web, read and write files in the folders he&#8217;s mounted, run scheduled tasks, and talk to financial data sources I&#8217;ve configured. He&#8217;s a research agent, not a personal one &#8212; I don&#8217;t have him in my email or my calendar.</p><p>Even more usefully, I can tie him into a <a href="https://openclawai.io/integrations/slack/">Slack</a> channel and he can do work for our research team by accessing the data and code on my computer and providing analyses to the whole team. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Q3w-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad7ae7f6-5686-4808-bcf4-adc5c0e96365_944x674.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Q3w-!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad7ae7f6-5686-4808-bcf4-adc5c0e96365_944x674.png 424w, /__u/substackcdn.com/image/fetch/$s_!Q3w-!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad7ae7f6-5686-4808-bcf4-adc5c0e96365_944x674.png 848w, /__u/substackcdn.com/image/fetch/$s_!Q3w-!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad7ae7f6-5686-4808-bcf4-adc5c0e96365_944x674.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Q3w-!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad7ae7f6-5686-4808-bcf4-adc5c0e96365_944x674.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Q3w-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad7ae7f6-5686-4808-bcf4-adc5c0e96365_944x674.png" width="944" height="674" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad7ae7f6-5686-4808-bcf4-adc5c0e96365_944x674.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:674,&quot;width&quot;:944,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:158837,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/199022988?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad7ae7f6-5686-4808-bcf4-adc5c0e96365_944x674.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Q3w-!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad7ae7f6-5686-4808-bcf4-adc5c0e96365_944x674.png 424w, /__u/substackcdn.com/image/fetch/$s_!Q3w-!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad7ae7f6-5686-4808-bcf4-adc5c0e96365_944x674.png 848w, /__u/substackcdn.com/image/fetch/$s_!Q3w-!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad7ae7f6-5686-4808-bcf4-adc5c0e96365_944x674.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Q3w-!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad7ae7f6-5686-4808-bcf4-adc5c0e96365_944x674.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You don&#8217;t need to build a personal Duncan to take this seriously. The point is what the sandboxed environment <em>enables</em>. Once the boundary is right, long-running agents become much less scary, and the question shifts from &#8220;what can I let it do?&#8221; to &#8220;what&#8217;s the most useful thing I can give it to do?&#8221; If you&#8217;re interested in spinning this up, <a href="https://apoorvalal.github.io/lalgorithms/krabs-the-clawdbot-walkthrough">Apoorva Lal has a great post on how to do it. </a></p><h2><strong>Cowork and the sandboxing built into the tools</strong></h2><p>A small note before the takeaways. Markus asked whether all this applies to Cowork, the Claude tool we talked about in the <a href="/__u/paulgp.substack.com/publish/posts/detail/192433164?referrer=%2Fpublish%2Fposts%2Fpublished">first post</a>. It does &#8212; but Cowork is <em>already</em> sandboxed by default, which is a feature and a constraint at the same time. The sandbox is the reason Cowork can&#8217;t see your local files unless you give it permission, and it&#8217;s also the reason certain tasks will hit a wall and report &#8220;I can&#8217;t do that here.&#8221; When you&#8217;re using Claude on the web, anywhere &#8212; Cowork, the OpenAI tools, Gemini &#8212; you&#8217;re running inside a virtual machine somebody else built. Same idea, less control.</p><h2><strong>Key takeaways</strong></h2><ol><li><p><strong>Permissions come in two forms: folder access and tool access.</strong> Both matter, and both have to be reasoned about separately.</p></li><li><p><strong>Auto and YOLO can be sensible &#8212; </strong><em><strong>if</strong></em><strong> you prepare the environment first.</strong> The point isn&#8217;t to always click <code>y</code>; the point is that reflexive <code>y</code>s aren&#8217;t real safety. Move the thinking ex ante.</p></li><li><p><strong>The real lever is the environment.</strong> Mount only what you need. Drop capabilities. Use <code>--network=none</code> once setup is done. With a tight boundary, broad permission inside it is much less scary.</p></li><li><p><strong>Data governance is separate from sandboxing.</strong> Privacy filters help; for genuinely sensitive material, the right answer may be a local model rather than a remote one.</p></li><li><p><strong>Sandboxing opens up the long-running-agent workflow.</strong> Once the boundary is right, persistent agents &#8212; your own Duncan, or a workflow like OpenClaw &#8212; become tractable.</p></li><li><p><strong>As soon as you give an agent tools, treat it like an RA.</strong> You wouldn&#8217;t give an RA a task where they can break everything. Same logic applies &#8212; and the sandbox is how you make sure they can&#8217;t.</p></li></ol><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Technically, yes, you could give a container the ability to mount from the inside, but it&#8217;s turned off by default.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>I use OpenAI tooling alongside Claude &#8212; this whole series is about Claude Code, but I use Codex, ChatGPT, Gemini, and a couple of others all the time. The series isn&#8217;t an argument that you should be a Claude monopolist. Competition is good for the consumer.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>Duncan Idaho (SPOILERS!) is eventually turned into a ghola in the Dune universe:  &#8220;Similar to clones, they are "manufactured" human duplicates grown in an axlotl tank from cells collected from a deceased subject. Through specific stresses, gholas can be made to recall the memories of the original, including their moment of death.&#8221; Gholas (like Duncan) are created over and over again to continue to be useful in a task. Not unlike what an agent is getting spun-up to do with a persistent memory (since the agent&#8217;s session eventually shuts down.</p></div></div>]]></content:encoded></item><item><title><![CDATA[AI and the Research O-Ring]]></title><description><![CDATA[Beware Nihilism]]></description><link>https://paulgp.substack.com/p/ai-and-the-research-o-ring</link><guid isPermaLink="false">https://paulgp.substack.com/p/ai-and-the-research-o-ring</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Wed, 20 May 2026 11:03:14 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/83cac7ff-5841-45ed-b582-0436f0e238b5_1064x549.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="callout-block" data-callout="true"><p style="text-align: justify;">There is a Chinese curse which says &#8220;May he live in interesting times.&#8221; Like it or not, we live in interesting times. They are times of danger and uncertainty; but they are also the most creative of any time in the history of mankind. And everyone here will ultimately be judged - will ultimately judge himself &#8211; on the effort he has contributed to building a new world society and the extent to which his ideals and goals have shaped that effort.</p></div><p style="text-align: right;">-Robert F. Kennedy (1966, <strong>University of Capetown)</strong></p><p>We live in interesting times. Economists&#8217; research toolkit is changing rapidly, and we are part of a large group of skilled laborers who are <a href="https://www.axios.com/2025/05/28/ai-jobs-white-collar-unemployment-anthropic">continually</a> <a href="https://futurism.com/sam-altman-openai-wipe-out-categories-human-jobs">told</a> that their jobs will <a href="https://www.businessinsider.com/elon-musk-ai-supersonic-tsunami-job-displacement-future-joe-rogan-2025-11">soon not exist</a>.</p><p>This post is a longer version of a response I gave to <a href="/__u/causalinf.substack.com/p/what-a-panel-of-economists-said-about">a moderated discussion</a> at the <a href="https://www.nber.org/conferences/applications-artificial-intelligence-healthcare-spring-2026">NBER Applications of AI in Healthcare meeting</a>. My comments reflect two realities: first, the impact of agentic AI is hard to predict and fraught with uncertainty. Second, while AI has sped up parts of the research pipeline, this acceleration has amplified the human frictions in the rest.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!M7vT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30714209-768f-47f0-a25d-574ddaa28c80_2200x1500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!M7vT!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30714209-768f-47f0-a25d-574ddaa28c80_2200x1500.png 424w, /__u/substackcdn.com/image/fetch/$s_!M7vT!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30714209-768f-47f0-a25d-574ddaa28c80_2200x1500.png 848w, /__u/substackcdn.com/image/fetch/$s_!M7vT!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30714209-768f-47f0-a25d-574ddaa28c80_2200x1500.png 1272w, /__u/substackcdn.com/image/fetch/$s_!M7vT!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30714209-768f-47f0-a25d-574ddaa28c80_2200x1500.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!M7vT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30714209-768f-47f0-a25d-574ddaa28c80_2200x1500.png" width="1456" height="993" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/30714209-768f-47f0-a25d-574ddaa28c80_2200x1500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:993,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:196064,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/198176193?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30714209-768f-47f0-a25d-574ddaa28c80_2200x1500.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!M7vT!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30714209-768f-47f0-a25d-574ddaa28c80_2200x1500.png 424w, /__u/substackcdn.com/image/fetch/$s_!M7vT!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30714209-768f-47f0-a25d-574ddaa28c80_2200x1500.png 848w, /__u/substackcdn.com/image/fetch/$s_!M7vT!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30714209-768f-47f0-a25d-574ddaa28c80_2200x1500.png 1272w, /__u/substackcdn.com/image/fetch/$s_!M7vT!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30714209-768f-47f0-a25d-574ddaa28c80_2200x1500.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The evidence for continued and dramatic AI improvement is convincing. The figure above replicates the graph made by the non-profit <a href="https://metr.org/time-horizons/">METR</a> (Model Evaluation &amp; Threat Research), which benchmarks the time that it takes different AI models to do tasks, and the current iteration documents exponential growth in ability to do more complex tasks (<a href="https://metr.org/time-horizons/">&#8220;the 50%-time horizon is the duration at which an agent is predicted to succeed half the time.&#8221;)</a> Frontier models continue to break through barriers rapidly, especially in code and math.</p><p>There are two serious sources of uncertainty. The first is the direct level of uncertainty about these measures, and how to extrapolate further. Consider the error bounds on these models have as we expand the horizon. There is tremendous growth, and equivalent uncertainty (any economist tasked with forecasting exponential growth will sympathize!). Small variability can imply very different long-run paths.</p><p>The second source of uncertainty is from how to map these concepts into real-life outcomes. We&#8217;ve seen <a href="https://budgetlab.yale.edu/research/evaluating-impact-ai-labor-market-current-state-affairs">limited evidence</a> of significant labor market disruptions &#8212; although adjustments to AI-threatened sectors could quickly once the broader economy <a href="https://www.stripeeconomics.com/p/the-decline-of-travel-agents">experiences a serious disruption.</a> It is just hard to know how the analog world will react to this very digital product.</p><p>My second comment is on the research pipeline. I think that research follows an O-ring production process <a href="https://www.jstor.org/stable/2118400">in the style of Kremer (1993)</a>. This model assumes that production comes from multiple inputs of quality <em>q</em> that work together to ensure the production of output. Hence, if two high quality inputs with <em>q</em> = 0.99 work together, they are expected to succeed with probability 0.98. If instead there is one high quality input with <em>q1 </em>= 0.99 and <em>q2</em> = 0.5, then the success rate falls to 0.495. As the chain grows, one single weak input can ruin the pipeline. To quote Kremer:</p><blockquote><p>[The] O-ring production function differs from the standard&#8230;formulation of labor skill, in that it does not allow quantity to be substituted for quality within a single production chain.</p></blockquote><p>You can see the issue. If AI is extraordinary at some things but not others, there will still be certain tasks where humans&#8217; inputs remain important. Moreover, beyond Kremer&#8217;s model, humans face real frictions doing those inputs well if they played no role in the rest. Imagine that writing, presentation, and idea generation remain human work. Those jobs get harder if you&#8217;ve spent no time on any of the other parts of the paper &#8212; understanding what your agent did is itself costly time.</p><p>Using the O-ring model to predict AI&#8217;s influence on research production requires assumptions about how many inputs there are to research, and how each input is supplemented, influenced or replaced by AI. One insight we can learn here comes from returning to the METR benchmarks above. The traditional benchmark focuses 50% reliability &#8211; likely a relatively poor input to the O-ring production mode. The figure below plots the 80% reliability measures as well. Here, we can see that even 80% reliability is growing quickly, but with levels significantly below 50% reliability. The question is whether reliable tasks will grow at the same rate.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!0WcV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40165072-e1aa-41ae-ae0f-6587d05a5341_2200x1500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!0WcV!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40165072-e1aa-41ae-ae0f-6587d05a5341_2200x1500.png 424w, /__u/substackcdn.com/image/fetch/$s_!0WcV!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40165072-e1aa-41ae-ae0f-6587d05a5341_2200x1500.png 848w, /__u/substackcdn.com/image/fetch/$s_!0WcV!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40165072-e1aa-41ae-ae0f-6587d05a5341_2200x1500.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0WcV!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40165072-e1aa-41ae-ae0f-6587d05a5341_2200x1500.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!0WcV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40165072-e1aa-41ae-ae0f-6587d05a5341_2200x1500.png" width="1456" height="993" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/40165072-e1aa-41ae-ae0f-6587d05a5341_2200x1500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:993,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:191610,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/198176193?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40165072-e1aa-41ae-ae0f-6587d05a5341_2200x1500.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!0WcV!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40165072-e1aa-41ae-ae0f-6587d05a5341_2200x1500.png 424w, /__u/substackcdn.com/image/fetch/$s_!0WcV!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40165072-e1aa-41ae-ae0f-6587d05a5341_2200x1500.png 848w, /__u/substackcdn.com/image/fetch/$s_!0WcV!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40165072-e1aa-41ae-ae0f-6587d05a5341_2200x1500.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0WcV!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40165072-e1aa-41ae-ae0f-6587d05a5341_2200x1500.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Part of the adjustment is learning to use the tools. But my guess is that some things, like coding, should improve across the board for everyone eventually. That suggests that every paper&#8217;s quality will improve quite a bit. Does that inherently mean that people will write <em>more </em>papers?</p><p>This question of paper farms caused by AI (<a href="/__u/causalinf.substack.com/p/a-professors-use-case-for-ai-generated">provocatively laid out by Scott C</a>. and others) is hard for me to answer credulously. I think reputational norms prevent any research from credibly posting hundreds of papers to their website and submitting them to journals. Even in other fields, where researchers have far more papers than us, there is still an expectation that researchers have a coherent understanding of their work (even if this norm is sometimes violated).</p><p>The broader discussion of what counts as research predates LLMs. Agentic AI has lowered the cost of producing the surface artifact so fast that the conversation is now unavoidable, and working through it will be healthy.</p><p>Before closing, let me quickly give an example <em>in health economics </em>of how these tools can rapidly improve our ability to do research. <a href="https://paulgp.com/papers/Radiology.pdf">In our paper studying radiologists</a>, Alex Zentefis and I needed to read signing radiologists&#8217; scan reports and identify their diagnoses (and differentiate chronic vs. acute pulmonary embolisms). Five years ago, this would have been extraordinarily difficult. Today, it&#8217;s trivial, using the local LLMs that the hospital has installed on its research servers.</p><p>So: beware nihilism. Instead, consider RFK&#8217;s advice above: &#8220;[these] are times of danger and uncertainty; but they are also the most creative of any time in the history of mankind.&#8221; The interesting question is which problems we choose to deploy these tools against.</p>]]></content:encoded></item><item><title><![CDATA[The median college student does not spend hundreds of thousands of dollars on college tuition]]></title><description><![CDATA[Net tuition and the opportunity cost of living]]></description><link>https://paulgp.substack.com/p/the-median-college-student-does-not</link><guid isPermaLink="false">https://paulgp.substack.com/p/the-median-college-student-does-not</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Thu, 14 May 2026 18:55:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9eBn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5907c278-5a91-4fea-ba71-dc24372a075e_2700x1650.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://www.wsj.com/lifestyle/careers/no-one-cares-about-your-gpa-and-more-career-advice-for-new-grads-2696c174?st=YJnAdz&amp;reflink=desktopwebshare_permalink">A recent WSJ op-ed begins with:</a></p><div class="callout-block" data-callout="true"><p>Dear College Graduate:</p><p>Congratulations on your degree. I hope it was hundreds of thousands of dollars well spent, though probably not as fervently as your parents do.</p></div><p><a href="https://www.washingtonpost.com/business/2026/05/13/college-cost-loans-debt-financial-aid/">From the Washington Post:</a></p><div class="callout-block" data-callout="true"><p>According to the Education Data Initiative, the average annual cost of attendance for the 2022-2023 academic year was $27,146 for in-state students at public four-year universities, totaling $108,584 over four years. Out-of-state students averaged $45,708 annually, for a four-year total of $182,832. Students at private, nonprofit universities paid an average of $58,628 per year, for a cumulative investment of $234,512.</p></div><p>This sounds like a reasonable data-driven take. But, these numbers are ignoring the fact that cheap schools have the vast majority of our students, and ignoring the opportunity cost of living.</p><p>First, there is conflation of <em>cross-institution</em> costs with what the <em>typical American</em> pays. For example, if there are 2,000 colleges and universities, it can be easy to just look at the average across universities &#8212; but the largest universities that have the most students tend to be cheaper (large, non-profit state universities). As a result, the typical American pays much less than the unweighted average in tuition. </p><p>To see this, consider<a href="https://nces.ed.gov/ipeds"> data from the Integrated Post-Secondary Education Database Data System (IPEDS</a>). I have <a href="https://github.com/paulgp/ipeds-database">a structured db here</a> that made it easy. We can look at the distribution of costs across public, private non-profit and private for-profit universities, <em>weighted by their enrollment.</em> Importantly, public universities charge far more for out-of-state and international students, so we split the costs <em>weighted by enrollment</em> of in-state vs. out-of-state students.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!9eBn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5907c278-5a91-4fea-ba71-dc24372a075e_2700x1650.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!9eBn!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5907c278-5a91-4fea-ba71-dc24372a075e_2700x1650.png 424w, /__u/substackcdn.com/image/fetch/$s_!9eBn!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5907c278-5a91-4fea-ba71-dc24372a075e_2700x1650.png 848w, /__u/substackcdn.com/image/fetch/$s_!9eBn!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5907c278-5a91-4fea-ba71-dc24372a075e_2700x1650.png 1272w, /__u/substackcdn.com/image/fetch/$s_!9eBn!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5907c278-5a91-4fea-ba71-dc24372a075e_2700x1650.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!9eBn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5907c278-5a91-4fea-ba71-dc24372a075e_2700x1650.png" width="1456" height="890" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5907c278-5a91-4fea-ba71-dc24372a075e_2700x1650.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:890,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:317976,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/197708199?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5907c278-5a91-4fea-ba71-dc24372a075e_2700x1650.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!9eBn!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5907c278-5a91-4fea-ba71-dc24372a075e_2700x1650.png 424w, /__u/substackcdn.com/image/fetch/$s_!9eBn!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5907c278-5a91-4fea-ba71-dc24372a075e_2700x1650.png 848w, /__u/substackcdn.com/image/fetch/$s_!9eBn!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5907c278-5a91-4fea-ba71-dc24372a075e_2700x1650.png 1272w, /__u/substackcdn.com/image/fetch/$s_!9eBn!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5907c278-5a91-4fea-ba71-dc24372a075e_2700x1650.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The cost of tuition across institutions, weighted by enrollment</figcaption></figure></div><p>The median tuition is 11,000 dollars for a year for four year institutions. That&#8217;s a grand total of 44 thousand dollars in four years. And 50% of students would pay less!</p><p>Next, a reasonable critique here is that tuition isn&#8217;t everything &#8212; room and board is an important aspect of the college cost. Fortunately, for most schools, a full &#8220;cost of attendance&#8221; (COA) measure is reported. If we apply the same exercise, we see a much higher cost:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!jb_q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005c9772-1a8b-4110-92c4-09a4e6963e1a_2700x1650.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!jb_q!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005c9772-1a8b-4110-92c4-09a4e6963e1a_2700x1650.png 424w, /__u/substackcdn.com/image/fetch/$s_!jb_q!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005c9772-1a8b-4110-92c4-09a4e6963e1a_2700x1650.png 848w, /__u/substackcdn.com/image/fetch/$s_!jb_q!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005c9772-1a8b-4110-92c4-09a4e6963e1a_2700x1650.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jb_q!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005c9772-1a8b-4110-92c4-09a4e6963e1a_2700x1650.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!jb_q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005c9772-1a8b-4110-92c4-09a4e6963e1a_2700x1650.png" width="1456" height="890" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/005c9772-1a8b-4110-92c4-09a4e6963e1a_2700x1650.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:890,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:305765,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/197708199?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005c9772-1a8b-4110-92c4-09a4e6963e1a_2700x1650.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!jb_q!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005c9772-1a8b-4110-92c4-09a4e6963e1a_2700x1650.png 424w, /__u/substackcdn.com/image/fetch/$s_!jb_q!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005c9772-1a8b-4110-92c4-09a4e6963e1a_2700x1650.png 848w, /__u/substackcdn.com/image/fetch/$s_!jb_q!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005c9772-1a8b-4110-92c4-09a4e6963e1a_2700x1650.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jb_q!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005c9772-1a8b-4110-92c4-09a4e6963e1a_2700x1650.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The cost of attendance across universities</figcaption></figure></div><p>The measure has almost tripled! Room and board is expensive, clearly. And for the median student, four years of college would cost 132 thousand dollars. </p><p>Two things are at play here. First, by condition on the institutions that report COA, we&#8217;re <em>selecting</em> on the more expensive schools (e.g. throwing out commuter schools). We can see below that the median student among those schools pays more on tuition overall.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!PXsI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0956d3f3-ac40-4e4b-9134-4632cd0999db_2700x1650.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!PXsI!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0956d3f3-ac40-4e4b-9134-4632cd0999db_2700x1650.png 424w, /__u/substackcdn.com/image/fetch/$s_!PXsI!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0956d3f3-ac40-4e4b-9134-4632cd0999db_2700x1650.png 848w, /__u/substackcdn.com/image/fetch/$s_!PXsI!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0956d3f3-ac40-4e4b-9134-4632cd0999db_2700x1650.png 1272w, /__u/substackcdn.com/image/fetch/$s_!PXsI!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0956d3f3-ac40-4e4b-9134-4632cd0999db_2700x1650.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!PXsI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0956d3f3-ac40-4e4b-9134-4632cd0999db_2700x1650.png" width="1456" height="890" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0956d3f3-ac40-4e4b-9134-4632cd0999db_2700x1650.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:890,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:300788,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/197708199?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0956d3f3-ac40-4e4b-9134-4632cd0999db_2700x1650.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!PXsI!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0956d3f3-ac40-4e4b-9134-4632cd0999db_2700x1650.png 424w, /__u/substackcdn.com/image/fetch/$s_!PXsI!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0956d3f3-ac40-4e4b-9134-4632cd0999db_2700x1650.png 848w, /__u/substackcdn.com/image/fetch/$s_!PXsI!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0956d3f3-ac40-4e4b-9134-4632cd0999db_2700x1650.png 1272w, /__u/substackcdn.com/image/fetch/$s_!PXsI!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0956d3f3-ac40-4e4b-9134-4632cd0999db_2700x1650.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Schools that report COA are more expensive.</figcaption></figure></div><p>Second, housing and food is just expensive! If we consider the counterfactual of just living in housing plus food, what would annual cost be? Consider the following exercise for a student living Urbana-Champaign (in Chamapign county)<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>:</p><ol><li><p><a href="https://www.huduser.gov/portal/datasets/fmr/fmrs/FY2025_code/2025summary.odn">FMR rent for a three bedroom</a> is $1,372, split three ways: 457, for twelve months: 5,488 dollars</p></li><li><p><a href="https://www.fns.usda.gov/research/cnpp/usda-food-plans/cost-food-monthly-reports">The USDA reports that </a> monthly cost for food for an adult can be anywhere between 3,746 dollars a year to 5,737 dollars a year, depending on how thrifty you are.</p></li></ol><p>Let&#8217;s say this is ten thousand dollars a year. Then, the cost over those four years is forty thousand <em>regardless of college attendance</em>. So the true exercise here for the median student is:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!876L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d1150bb-6be3-4f06-a94f-27aee009d731_1663x945.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!876L!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d1150bb-6be3-4f06-a94f-27aee009d731_1663x945.png 424w, /__u/substackcdn.com/image/fetch/$s_!876L!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d1150bb-6be3-4f06-a94f-27aee009d731_1663x945.png 848w, /__u/substackcdn.com/image/fetch/$s_!876L!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d1150bb-6be3-4f06-a94f-27aee009d731_1663x945.png 1272w, /__u/substackcdn.com/image/fetch/$s_!876L!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d1150bb-6be3-4f06-a94f-27aee009d731_1663x945.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!876L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d1150bb-6be3-4f06-a94f-27aee009d731_1663x945.png" width="1456" height="827" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5d1150bb-6be3-4f06-a94f-27aee009d731_1663x945.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:827,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:905455,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/197708199?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d1150bb-6be3-4f06-a94f-27aee009d731_1663x945.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!876L!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d1150bb-6be3-4f06-a94f-27aee009d731_1663x945.png 424w, /__u/substackcdn.com/image/fetch/$s_!876L!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d1150bb-6be3-4f06-a94f-27aee009d731_1663x945.png 848w, /__u/substackcdn.com/image/fetch/$s_!876L!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d1150bb-6be3-4f06-a94f-27aee009d731_1663x945.png 1272w, /__u/substackcdn.com/image/fetch/$s_!876L!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d1150bb-6be3-4f06-a94f-27aee009d731_1663x945.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Decomposing the 132 thousand dollars of COA for a median student</figcaption></figure></div><p></p><p>The residual for the median person is about 36 thousand dollars &#8212; the fringe benefits of being a college student, or selection based on location. All in all, the additional cost of college is costing the median student <strong>at most</strong> 80 thousand dollars for four years.</p><p>Importantly, this is <strong>sticker tuition</strong>, not <strong>net tuition</strong>. <a href="https://bigfuture.collegeboard.org/pay-for-college/get-started/focus-on-net-price-not-sticker-price">Net tuition is the cost you would actually face at an institution</a> &#8212; net tuition is net of aid (grants from the federal government and the institution itself), and it is the actual economic measure that matters. So the above figures are the <em>upper bound </em> on costs.  For many students, the cost may be far less than this, if the net tuition is lower (e.g. a full-ride). </p><p>Net tuition is very hard to measure. But to give you a sense of the magnitude, here are estimates of the annual net cost of an institution after financial grants.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!9-Dk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33350c7-117a-496d-b88b-767225b6685d_2700x1650.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!9-Dk!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33350c7-117a-496d-b88b-767225b6685d_2700x1650.png 424w, /__u/substackcdn.com/image/fetch/$s_!9-Dk!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33350c7-117a-496d-b88b-767225b6685d_2700x1650.png 848w, /__u/substackcdn.com/image/fetch/$s_!9-Dk!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33350c7-117a-496d-b88b-767225b6685d_2700x1650.png 1272w, /__u/substackcdn.com/image/fetch/$s_!9-Dk!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33350c7-117a-496d-b88b-767225b6685d_2700x1650.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!9-Dk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33350c7-117a-496d-b88b-767225b6685d_2700x1650.png" width="1456" height="890" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a33350c7-117a-496d-b88b-767225b6685d_2700x1650.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:890,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:300667,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/197708199?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33350c7-117a-496d-b88b-767225b6685d_2700x1650.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!9-Dk!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33350c7-117a-496d-b88b-767225b6685d_2700x1650.png 424w, /__u/substackcdn.com/image/fetch/$s_!9-Dk!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33350c7-117a-496d-b88b-767225b6685d_2700x1650.png 848w, /__u/substackcdn.com/image/fetch/$s_!9-Dk!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33350c7-117a-496d-b88b-767225b6685d_2700x1650.png 1272w, /__u/substackcdn.com/image/fetch/$s_!9-Dk!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33350c7-117a-496d-b88b-767225b6685d_2700x1650.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In aggregate, this implies that the median student is paying sixty thousand dollars (including room and board) after four years. Given our estimates of  cost of living is forty thousand dollars, this starts to look like a decent deal.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a></p><p>A caveat to this measure: </p><ol><li><p>It is an institution measure, so this ignores significant within-institution dispersion in the costs (e.g. across the income distribution).</p></li><li><p>This ignores students who pay <em>full freight</em>, e.g. get zero aid. As a result, this will bias the measure downwards. We can average this about 20% of students paying full-freight, so for a fair comparison, we should probably bump up this cost by about 25%. </p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!xQDf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd46a34c-89c4-4355-a515-e2e896b60d6d_1693x929.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!xQDf!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd46a34c-89c4-4355-a515-e2e896b60d6d_1693x929.png 424w, /__u/substackcdn.com/image/fetch/$s_!xQDf!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd46a34c-89c4-4355-a515-e2e896b60d6d_1693x929.png 848w, /__u/substackcdn.com/image/fetch/$s_!xQDf!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd46a34c-89c4-4355-a515-e2e896b60d6d_1693x929.png 1272w, /__u/substackcdn.com/image/fetch/$s_!xQDf!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd46a34c-89c4-4355-a515-e2e896b60d6d_1693x929.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!xQDf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd46a34c-89c4-4355-a515-e2e896b60d6d_1693x929.png" width="1456" height="799" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cd46a34c-89c4-4355-a515-e2e896b60d6d_1693x929.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:799,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1232287,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/197708199?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd46a34c-89c4-4355-a515-e2e896b60d6d_1693x929.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!xQDf!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd46a34c-89c4-4355-a515-e2e896b60d6d_1693x929.png 424w, /__u/substackcdn.com/image/fetch/$s_!xQDf!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd46a34c-89c4-4355-a515-e2e896b60d6d_1693x929.png 848w, /__u/substackcdn.com/image/fetch/$s_!xQDf!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd46a34c-89c4-4355-a515-e2e896b60d6d_1693x929.png 1272w, /__u/substackcdn.com/image/fetch/$s_!xQDf!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd46a34c-89c4-4355-a515-e2e896b60d6d_1693x929.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>So let&#8217;s say the cost of college, after adjusting for the opportunity cost of living, is $40,000 for the median individual.  This median student&#8217;s cost of attending college is three parts:</p><ol><li><p>A tuition payment that can be quite affordable (or at least not too expensive) if it is at a public instate university, or quite high (in sticker price) at a private non-profit (such as an Ivy League university).</p></li><li><p>A cost of living that will happen due to the sheer fact that the student is a living breathing human being that needs food and shelter. </p></li><li><p>An additional set of costs that feed into the supplementary costs of attending a university (food, additional amenities, selection into expensive areas, books, etc.)</p></li></ol><p>Higher education affordability is important, but we do ourselves no favors using the experience of elites to drive our cultural conversations about college.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!F5b6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95dca86-04a2-4d87-b4d4-41807a501648_1604x980.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!F5b6!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95dca86-04a2-4d87-b4d4-41807a501648_1604x980.png 424w, /__u/substackcdn.com/image/fetch/$s_!F5b6!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95dca86-04a2-4d87-b4d4-41807a501648_1604x980.png 848w, /__u/substackcdn.com/image/fetch/$s_!F5b6!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95dca86-04a2-4d87-b4d4-41807a501648_1604x980.png 1272w, /__u/substackcdn.com/image/fetch/$s_!F5b6!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95dca86-04a2-4d87-b4d4-41807a501648_1604x980.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!F5b6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95dca86-04a2-4d87-b4d4-41807a501648_1604x980.png" width="1456" height="890" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e95dca86-04a2-4d87-b4d4-41807a501648_1604x980.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:890,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1353400,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/197708199?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95dca86-04a2-4d87-b4d4-41807a501648_1604x980.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!F5b6!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95dca86-04a2-4d87-b4d4-41807a501648_1604x980.png 424w, /__u/substackcdn.com/image/fetch/$s_!F5b6!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95dca86-04a2-4d87-b4d4-41807a501648_1604x980.png 848w, /__u/substackcdn.com/image/fetch/$s_!F5b6!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95dca86-04a2-4d87-b4d4-41807a501648_1604x980.png 1272w, /__u/substackcdn.com/image/fetch/$s_!F5b6!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95dca86-04a2-4d87-b4d4-41807a501648_1604x980.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><p></p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I&#8217;m picking Champaign as a relatively affordable (low cost) location to create a <em>lower bound</em> on this cost &#8212; preserving the upper bound nature of the overall sticker price since we&#8217;ll be subtracting this part off.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>This is not student loans &#8212; this is either federal grants or institutional aid.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>Of course, the true economist response would say that four years of lost wages (as <a href="https://bsky.app/profile/politicory.bsky.social/post/3mltitag3yk27">Cory says here</a>) is quite costly too as opportunity cost goes! I agree with that, but I don&#8217;t get the sense that this is the argument that commentators are making on the cost of education. If your view is that college costs hundreds of thousands of dollars due to foregone wages, I ask your forgiveness for making you read all this data journalism, and agree that this is a cost.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Writing & Thinking with AI Assistance]]></title><description><![CDATA[Video 5 in a series on Claude Code]]></description><link>https://paulgp.substack.com/p/writing-and-thinking-with-ai-assistance</link><guid isPermaLink="false">https://paulgp.substack.com/p/writing-and-thinking-with-ai-assistance</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Sun, 12 Apr 2026 11:01:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SKU5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b36742f-b950-4d5f-9b43-1a59403a1638_1791x1293.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Part 5 of a series on AI coding tools for empirical research, accompanying my <a href="https://bcf.princeton.edu/markus-academy/">Markus Academy</a> video series.</em></p><p></p><div id="youtube2-BxfSiB3Moyo" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;BxfSiB3Moyo&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/BxfSiB3Moyo?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>The previous posts in this series have been practical: <a href="/__u/paulgp.substack.com/p/getting-started-with-claude-code">setting up Claude Code</a>, <a href="/__u/paulgp.substack.com/p/from-an-empty-folder-to-a-figure">making figures</a>, <a href="/__u/paulgp.substack.com/p/from-edgar-filings-to-a-structured">scraping EDGAR</a>, and <a href="http://localhost:4120/video-04-large-datasets/">working with large datasets</a>. We are going to pivot slightly in this video in two ways:</p><ol><li><p>We&#8217;ll focus less on data analysis, and more on writing and analysis</p></li><li><p>We&#8217;ll do almost everything in Claude&#8217;s desktop app (e.g. Cowork and Chat)</p></li></ol><p>Writing with LLMs is a contentious, complicated topic. I&#8217;m going to focus on it from the perspective of a researcher&#8212;both in terms of generating research, communicating research, and converting analysis into written output. There&#8217;s a wide spectrum of ways that we use writing. But before getting into the practical stuff, I want to address two preliminary points.</p><h2><strong>Writing as thinking</strong></h2><p>Writing itself often serves as the process through which we think and digest ideas. As writers, the act of putting words on a page is how we work through our thinking. A reasonable concern is that when we use LLMs to help with writing, we engage in what&#8217;s called <em>cognitive offloading</em>&#8212;we&#8217;re essentially offloading the thinking itself. If you have a couple of vague ideas and hand them off to an LLM, it&#8217;s very easy to let the model do the intellectual work for you. I think that concern is well-founded.</p><p>It&#8217;s useful to work backwards from that recognition. We want to have thought through our ideas thoroughly, because eventually people will ask us about them, and we&#8217;ll need to discuss them. So how do we minimize the extent to which you accidentally&#8212;whether subconsciously or consciously&#8212;offload that cognitive work. I don&#8217;t have a perfect answer, but I&#8217;ll flag a few strategies for this as we go.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p><h2><strong>Homogenization of voice</strong></h2><p>LLMs are what we&#8217;d call in sports a &#8220;floor raiser.&#8221; They can significantly improve relatively poor writing. That said, there&#8217;s a legitimate concern that LLMs produce a kind of homogenized default voice. It&#8217;s uninteresting and it&#8217;s potentially cringeworthy when you see it.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><p>There&#8217;s a view that this homogenization could diminish the quality of overall written output. That&#8217;s partly a social problem &#8212; do we really need forces to create more uniformity &#8212; but more personally, having a unique voice is important. Nay, it&#8217;s part of being a human academic! You as an academic should be aware of your voice and try to preserve it.</p><p>In the context of AI, we&#8217;ll talk about writing guides and style guides, but to be honest, I think it&#8217;s quite challenging to perfectly preserve your writing voice through these tools. It&#8217;s just not the same. Some aspects may come close, but we&#8217;re all humans who vary from day to day. The output won&#8217;t consistently reflect how you&#8217;d want to write a particular thing. The corpus we use to train and calibrate these tools is only as good as the information we provide, and we change all the time. What we want our writing to look like today may be different from what it was before.</p><h2><strong>Banal but necessary writing</strong></h2><p>While writing is an important vehicle for thinking, there&#8217;s also a large amount of entirely banal and painful writing that we do for our jobs. Think about boilerplate emails, memo summaries, and routine documentation. Think about even the initial write-ups of regression coefficient summaries. Some of it is complicated and needs to be done carefully, but the first pass can be done very quickly, and it helps you get off the ground.</p><p>My view is LLMs are quite good at this kind of work, and this type of time-saving is immensely valuable. The real trick is knowing what bright line we put between the banal and the important. The more you can offload the banal, the more time you have to think about the important. But if you offload too much of the important, then you end up with a problem.</p><h2><strong>What goes into the LLM</strong></h2><p>As we discussed in the <a href="/__u/paulgp.substack.com/p/getting-started-with-claude-code">first post</a>, an LLM is fundamentally a text machine. It reads and predicts serialized text in a context window.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!mFKA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aebd1b0-82f1-41ec-9ad5-5da27a4a5098_1565x973.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!mFKA!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aebd1b0-82f1-41ec-9ad5-5da27a4a5098_1565x973.png 424w, /__u/substackcdn.com/image/fetch/$s_!mFKA!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aebd1b0-82f1-41ec-9ad5-5da27a4a5098_1565x973.png 848w, /__u/substackcdn.com/image/fetch/$s_!mFKA!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aebd1b0-82f1-41ec-9ad5-5da27a4a5098_1565x973.png 1272w, /__u/substackcdn.com/image/fetch/$s_!mFKA!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aebd1b0-82f1-41ec-9ad5-5da27a4a5098_1565x973.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!mFKA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aebd1b0-82f1-41ec-9ad5-5da27a4a5098_1565x973.png" width="1456" height="905" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2aebd1b0-82f1-41ec-9ad5-5da27a4a5098_1565x973.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:905,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:386886,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193938371?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aebd1b0-82f1-41ec-9ad5-5da27a4a5098_1565x973.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!mFKA!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aebd1b0-82f1-41ec-9ad5-5da27a4a5098_1565x973.png 424w, /__u/substackcdn.com/image/fetch/$s_!mFKA!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aebd1b0-82f1-41ec-9ad5-5da27a4a5098_1565x973.png 848w, /__u/substackcdn.com/image/fetch/$s_!mFKA!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aebd1b0-82f1-41ec-9ad5-5da27a4a5098_1565x973.png 1272w, /__u/substackcdn.com/image/fetch/$s_!mFKA!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aebd1b0-82f1-41ec-9ad5-5da27a4a5098_1565x973.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Why does this matter for writing? What goes into the LLM is text. The LLM is an enormously powerful text prediction machine operating in a very high-dimensional space, and we&#8217;re pivoting within that space as we change the context window. Changing the prompt shifts the model&#8217;s focus a bit, preparing it to reason in a particular way&#8212;perhaps more reflective of how you might approach something. But that doesn&#8217;t mean it necessarily captures the <em>right</em> things.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!r_gD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc46c3d13-7962-4e33-9b75-8010920ade9d_2812x892.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!r_gD!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc46c3d13-7962-4e33-9b75-8010920ade9d_2812x892.png 424w, /__u/substackcdn.com/image/fetch/$s_!r_gD!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc46c3d13-7962-4e33-9b75-8010920ade9d_2812x892.png 848w, /__u/substackcdn.com/image/fetch/$s_!r_gD!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc46c3d13-7962-4e33-9b75-8010920ade9d_2812x892.png 1272w, /__u/substackcdn.com/image/fetch/$s_!r_gD!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc46c3d13-7962-4e33-9b75-8010920ade9d_2812x892.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!r_gD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc46c3d13-7962-4e33-9b75-8010920ade9d_2812x892.png" width="1456" height="462" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c46c3d13-7962-4e33-9b75-8010920ade9d_2812x892.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:462,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:90199,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193938371?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc46c3d13-7962-4e33-9b75-8010920ade9d_2812x892.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!r_gD!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc46c3d13-7962-4e33-9b75-8010920ade9d_2812x892.png 424w, /__u/substackcdn.com/image/fetch/$s_!r_gD!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc46c3d13-7962-4e33-9b75-8010920ade9d_2812x892.png 848w, /__u/substackcdn.com/image/fetch/$s_!r_gD!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc46c3d13-7962-4e33-9b75-8010920ade9d_2812x892.png 1272w, /__u/substackcdn.com/image/fetch/$s_!r_gD!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc46c3d13-7962-4e33-9b75-8010920ade9d_2812x892.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Building a style guide</strong></h2><p>This is a pretty straightforward exercise. What we&#8217;re going to do is build a style guide&#8212;really a skill&#8212;based on our own writing. What it&#8217;s going to produce is basically a list of rules of what it thinks about how to tweak the LLM&#8217;s behavior. It&#8217;s not necessarily going to capture your voice perfectly. It&#8217;s almost like&#8212;what happens when you take a complicated, multifaceted person and try to project them on the wall? It&#8217;s going to capture some aspect of it. The question is whether it does it correctly.</p><p>Here&#8217;s how to build one:</p><ol><li><p><strong>Collect samples of writing you&#8217;re happy with.</strong> Papers, memos, emails&#8212;anything where you think &#8220;yes, this sounds like me.&#8221; These don&#8217;t have to be perfectly representative&#8212;I used my own papers, even though they&#8217;re all co-authored&#8212;but a broader sample is better.</p></li><li><p><strong>Ask the LLM to analyze patterns.</strong> Give it your writing samples and ask it to identify patterns: sentence length, tone, word choice, structure, things you do consistently, things you never do.</p></li><li><p><strong>Curate the output into a </strong><code>writing_style.md</code><strong> file.</strong> The LLM&#8217;s analysis will be a starting point, not a finished product. You&#8217;ll need to edit it&#8212;remove things that are wrong, add things it missed, sharpen the rules.</p></li><li><p><strong>Reference it in prompts.</strong> When you want Claude to write or edit in your style, point it to the style guide.</p></li></ol><p>One thing to keep in mind: Claude actually knows a lot about itself. If you&#8217;re interested in writing skills for repeatable tasks, you can ask Claude how to do it&#8212;say, &#8220;I want to be able to do X, Y, or Z many, many times&#8221;&#8212;and it will know more or less how to set it up. You can even ask it without doing it, and it will tell you what you need.</p><h3><strong>What building one actually looks like</strong></h3><p>In the video, I demonstrated this live using Claude Cowork. If you remember from the first video, there are three different things in the Claude app: Chat, Cowork, and Code. Cowork is the application version of doing Claude Code on the command line&#8212;and for writing tasks, I think it works great as a first pass. I don&#8217;t want people to feel like everything has to always be done at the command line to take advantage of these tools.</p><p>I pointed Cowork at my personal website repository&#8212;which has both my academic papers and blog posts&#8212;and gave it a deliberately imperfect prompt:</p><pre><code><code>&gt; I would like you to take the papers in the papers folder, and the 
  blog posts on my blog, and create a writing style guide for Claude 
  as a skill. So that I can get Claude to write in my voice when I 
  want to make it sound more like me.</code></code></pre><p>As I told Markus, this is a pretty bad prompt&#8212;not exactly articulating what I want. Opus spawned a sub-agent to read through the blog posts and papers (part of the reason it only reads a few is that it doesn&#8217;t want to blow through its context window), then created a skill file at <code>.claude/skills/paul-voice/skill.md</code>.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a></p><p>This style guide is not magical. If anything, it&#8217;s kind of reductive and silly? It&#8217;s just a markdown file&#8212;a text file with hashes for sections and lists. What&#8217;s going to happen when you use this skill is this text just gets dumped into the context. It&#8217;s basically like having someone try to synthesize how you write.</p><p>What did it produce?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!SKU5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b36742f-b950-4d5f-9b43-1a59403a1638_1791x1293.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!SKU5!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b36742f-b950-4d5f-9b43-1a59403a1638_1791x1293.png 424w, /__u/substackcdn.com/image/fetch/$s_!SKU5!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b36742f-b950-4d5f-9b43-1a59403a1638_1791x1293.png 848w, /__u/substackcdn.com/image/fetch/$s_!SKU5!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b36742f-b950-4d5f-9b43-1a59403a1638_1791x1293.png 1272w, /__u/substackcdn.com/image/fetch/$s_!SKU5!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b36742f-b950-4d5f-9b43-1a59403a1638_1791x1293.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!SKU5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b36742f-b950-4d5f-9b43-1a59403a1638_1791x1293.png" width="1456" height="1051" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b36742f-b950-4d5f-9b43-1a59403a1638_1791x1293.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1051,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1075371,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193938371?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b36742f-b950-4d5f-9b43-1a59403a1638_1791x1293.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!SKU5!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b36742f-b950-4d5f-9b43-1a59403a1638_1791x1293.png 424w, /__u/substackcdn.com/image/fetch/$s_!SKU5!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b36742f-b950-4d5f-9b43-1a59403a1638_1791x1293.png 848w, /__u/substackcdn.com/image/fetch/$s_!SKU5!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b36742f-b950-4d5f-9b43-1a59403a1638_1791x1293.png 1272w, /__u/substackcdn.com/image/fetch/$s_!SKU5!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b36742f-b950-4d5f-9b43-1a59403a1638_1791x1293.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is a pretty positive (dare I say sycophantic) read on my style. Every person, even the world&#8217;s worst researcher, would get a relatively positive take. It&#8217;s like how they say feedback from a supervisor should always have two good things around the bad thing&#8212;there&#8217;s no bad thing that gets stuck in there. You have to push Claude pretty hard to say negative things.</p><p>But is it wise to push for negative feedback? It depends. If you have writing tics or things that you think are important reflections of your style, it matters. There&#8217;s a great comment by Nabokov writing to the <em>New Yorker</em> about editing:</p><div class="comment" data-attrs="{&quot;url&quot;:&quot;https://open.substack.com/&quot;,&quot;commentId&quot;:236093433,&quot;comment&quot;:{&quot;id&quot;:236093433,&quot;date&quot;:&quot;2026-03-31T15:24:41.623Z&quot;,&quot;edited_at&quot;:null,&quot;body&quot;:&quot;Nabokov writing to his New Yorker editor in 1948. Nothing ever changes.&quot;,&quot;body_json&quot;:{&quot;type&quot;:&quot;doc&quot;,&quot;attrs&quot;:{&quot;schemaVersion&quot;:&quot;v1&quot;},&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;Nabokov writing to his New Yorker editor in 1948. Nothing ever changes.&quot;}]}]},&quot;restacks&quot;:684,&quot;reaction_count&quot;:7382,&quot;attachments&quot;:[{&quot;id&quot;:&quot;dab7c99a-56e7-4ddd-b489-2f6291d8287b&quot;,&quot;type&quot;:&quot;image&quot;,&quot;imageUrl&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7772077c-95b3-4423-b4bf-b8bd21a1cbdf_3024x1269.heic&quot;,&quot;imageWidth&quot;:3024,&quot;imageHeight&quot;:1269,&quot;explicit&quot;:false}],&quot;name&quot;:&quot;Jeremy Gordon&quot;,&quot;user_id&quot;:363943,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4b40430-02a6-4492-9809-304c9136a5cd_720x720.jpeg&quot;,&quot;user_bestseller_tier&quot;:null,&quot;userStatus&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:1,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:1,&quot;accent_colors&quot;:null},&quot;paidPublicationIds&quot;:[610482],&quot;subscriber&quot;:null}},&quot;source&quot;:null,&quot;forumChannel&quot;:null}" data-component-name="CommentPlaceholder"></div><p>You could think of that as a bad writing style, but it reflects what he <em>wanted</em> for his writing. Sometimes quirks in writing are reflective of what we want our voice to sound like.</p><p>Markus also asked: can you do this in languages other than English&#8212;German, French? Yes, absolutely. Claude is quite multilingual. I often write in French, and the output is quite good. I don&#8217;t know if it&#8217;s true for every language but certainly it would do reasonably well in many languages.</p><h3><strong>Comparing output with and without a style guide</strong></h3><p>To show the difference, I asked Claude to explain the difference-in-differences methodology to a PhD-level audience twice&#8212;once with no style guide, once with my writing skill applied.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!MZMZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60e4849-fc5e-4fd3-a9a2-d69740e26ae8_2832x1420.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!MZMZ!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60e4849-fc5e-4fd3-a9a2-d69740e26ae8_2832x1420.png 424w, /__u/substackcdn.com/image/fetch/$s_!MZMZ!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60e4849-fc5e-4fd3-a9a2-d69740e26ae8_2832x1420.png 848w, /__u/substackcdn.com/image/fetch/$s_!MZMZ!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60e4849-fc5e-4fd3-a9a2-d69740e26ae8_2832x1420.png 1272w, /__u/substackcdn.com/image/fetch/$s_!MZMZ!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60e4849-fc5e-4fd3-a9a2-d69740e26ae8_2832x1420.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!MZMZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60e4849-fc5e-4fd3-a9a2-d69740e26ae8_2832x1420.png" width="1456" height="730" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a60e4849-fc5e-4fd3-a9a2-d69740e26ae8_2832x1420.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:730,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2385347,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193938371?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60e4849-fc5e-4fd3-a9a2-d69740e26ae8_2832x1420.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!MZMZ!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60e4849-fc5e-4fd3-a9a2-d69740e26ae8_2832x1420.png 424w, /__u/substackcdn.com/image/fetch/$s_!MZMZ!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60e4849-fc5e-4fd3-a9a2-d69740e26ae8_2832x1420.png 848w, /__u/substackcdn.com/image/fetch/$s_!MZMZ!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60e4849-fc5e-4fd3-a9a2-d69740e26ae8_2832x1420.png 1272w, /__u/substackcdn.com/image/fetch/$s_!MZMZ!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa60e4849-fc5e-4fd3-a9a2-d69740e26ae8_2832x1420.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The unstyled version was quite good&#8212;what&#8217;s amazing about Opus is how well it can write these things up. The styled version is somewhat different. It started with the practical problem and set up the two-by-two example before getting into any regression analysis. This does sound closer to how I would do it. That said, I&#8217;d say it&#8217;s a little bit of a caricature of how I write, which I think is often how people feel about these things. They make a skill that looks like them, and it&#8217;s recognizable but a bit exaggerated.</p><p>The point I want to emphasize: when people talk about skills and style guides, it&#8217;s really important to know that it&#8217;s just a laundry list of rules. That&#8217;s all it is&#8212;text that gets dumped into the context window.</p><p>Markus then suggested we try asking Claude to explain diff-in-diff in the style of Dostoevsky.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Ow6x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae95413d-9b1f-48d7-aae7-ecf218767a47_1100x300.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Ow6x!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae95413d-9b1f-48d7-aae7-ecf218767a47_1100x300.png 424w, /__u/substackcdn.com/image/fetch/$s_!Ow6x!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae95413d-9b1f-48d7-aae7-ecf218767a47_1100x300.png 848w, /__u/substackcdn.com/image/fetch/$s_!Ow6x!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae95413d-9b1f-48d7-aae7-ecf218767a47_1100x300.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Ow6x!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae95413d-9b1f-48d7-aae7-ecf218767a47_1100x300.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Ow6x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae95413d-9b1f-48d7-aae7-ecf218767a47_1100x300.png" width="1100" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae95413d-9b1f-48d7-aae7-ecf218767a47_1100x300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:300,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:225910,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193938371?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae95413d-9b1f-48d7-aae7-ecf218767a47_1100x300.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Ow6x!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae95413d-9b1f-48d7-aae7-ecf218767a47_1100x300.png 424w, /__u/substackcdn.com/image/fetch/$s_!Ow6x!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae95413d-9b1f-48d7-aae7-ecf218767a47_1100x300.png 848w, /__u/substackcdn.com/image/fetch/$s_!Ow6x!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae95413d-9b1f-48d7-aae7-ecf218767a47_1100x300.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Ow6x!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae95413d-9b1f-48d7-aae7-ecf218767a47_1100x300.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Over the top, a complete caricature. But it illustrates the same thing happening with your personal style guide, just more obviously.</p><h3><strong>What a more developed style guide looks like</strong></h3><p>The demo version was built from just a few papers. My actual style guide&#8212;the one I use day to day&#8212;is much more detailed, because I had Claude Code iterate over many more papers and do much more work. It has more specific writing style patterns: use subordinate clauses, I do a lot of em-dashes, translate coefficients into dollar terms when discussing economic significance. It has things like decomposition of policy and economic significance&#8212;it&#8217;s just a much bigger laundry list than what we built in the demo.</p><p>I&#8217;ll link <a href="https://paulgp.com/style_guide.md">my full style guide</a> so people can see what a more developed version looks like. It also has examples from my papers of how I might open different kinds of sections. It&#8217;s the same idea as the demo&#8212;just more detailed. It&#8217;s not obvious that it&#8217;s perfect, but it is useful for me to have.</p><p>A few things I&#8217;ve learned about style guides in practice:</p><p><strong>They&#8217;re more &#8220;list of rules&#8221; than &#8220;voice capture.&#8221;</strong> Think of the style guide as a set of constraints that push the LLM&#8217;s output in a better direction, not as a perfect representation of your voice. The output will be <em>better</em> with a style guide than without one, but it won&#8217;t sound exactly like you.</p><p><strong>You have to iterate.</strong> Your first style guide will miss things. There are ways you can hone this and have it do more. As you use it and notice problems in the output, go back and add rules. It&#8217;s a living document.</p><p><strong>You might want multiple guides.</strong> I have one for writing papers and a different one for social media and blog posts. They capture different registers of how I write. The social media one is, I&#8217;ll admit, painfully sycophantic to read back.</p><h2><strong>Referee reports and the strategic revision skill</strong></h2><p>This section covers two related things: having Claude write referee reports (on your own work, for self-assessment), and using a skill to process referee reports you <em>receive</em> and plan your revision.</p><h3><strong>Writing referee reports</strong></h3><p>I am <em>not</em> encouraging you to inherently use Claude to write referee reports for journals. I use this skill to write a referee report on my own or if I have a paper I want to quickly give feedback to someone when I am not being a formal referee. In cases where I might not have ever given any ideas, I can more quickly focus in on things I would typically worry about. So having Claude summarize and assess the paper is helpful as a first pass.</p><p>To build a referee report skill, I pointed Claude at a folder of my own past referee reports:</p><pre><code><code>&gt; Please read through all the referee reports in this folder that 
  I wrote. I want you to construct a skill to generate reports that 
  look like these reports &#8212; focus on the types of issues and concerns 
  I flag.</code></code></pre><p>This is the same pattern as the style guide: give it samples of output you&#8217;re happy with, ask it to extract the patterns, and save the result as a reusable skill.</p><p>Markus asked how this compares to <a href="https://refine.ink/">Refine.ink</a>, the tool Ben Golub built. The distinction is useful: Refine.ink is doing much more to make sure things are internally consistent&#8212;that the paper is making claims consistent with the results and that the results are true. It doesn&#8217;t try to establish as much taste or preference about what a paper should look like. A referee report, by contrast, is some combination of identifying truth versus taste.</p><h3><strong>The strategic-revision skill</strong></h3><p>There&#8217;s a skill called <em><a href="https://github.com/jusi-aalto/strategic-revision">strategic revision</a></em> by Jukka Sihvonen at Aalto University that I really like. What it does: you&#8217;ve submitted a paper, you&#8217;ve gotten a set of referee reports back and an editor&#8217;s letter. Given that, how should you create a revision plan?</p><p>What I&#8217;ve liked about this is that it:</p><ol><li><p>creates a set of tasks that you need to do based off the referee report</p></li><li><p>Identifies the order, conflicts, and priorities across theses tasks</p></li></ol><p>I find this very helpful because even though you read the referee report, it can often be a overwhelming, especially if you have four reports and you need to decide what to do. It organizes everything into a master document.</p><p>Specifically, the skill says: &#8220;Create a rigorous dependency map revision master plan from peer review reports with computational DAG validation using NetworkX.&#8221; Here&#8217;s what that means:</p><ol><li><p><strong>Parses every referee comment into a discrete task.</strong> Each individual point gets extracted and numbered.</p></li><li><p><strong>Categorizes each task.</strong> Some are argumentative&#8212;just writing text. Some are empirical robustness things you need to do. Then clarification points and editorial decisions.</p></li><li><p><strong>Builds a dependency graph.</strong> It uses a DAG&#8212;a Directed Acyclic Graph&#8212;to figure out which tasks depend on which. A DAG is a way of saying that X affects Y, that Y is dependent on X. Because you make it as a directed graph, you can use network theory to check for cycles&#8212;cycles would mean you&#8217;ve got the wrong dependence structure. It actually has to use Python to run a validator, and if the skill&#8217;s package isn&#8217;t available, Claude writes the validator itself.</p></li><li><p><strong>Organizes tasks into execution blocks.</strong> Block A can be done in parallel with Block B, but Block C depends on both finishing first. It produces a visual diagram of these blocks.</p></li><li><p><strong>Identifies conflicts between referees.</strong> If you have multiple referees&#8212;and Markus, presumably you&#8217;ve had this&#8212;there will be referees who disagree about what you should do. The skill identifies when those conflicts are present and flags them: &#8220;if you do X, then referee Y might be annoyed.&#8221;</p></li><li><p><strong>Identifies collateral risks.</strong> What&#8217;s relying on what, and what are the knock-on effects of each change.</p></li></ol><p>To demo this, I took one of my already-published papers (so I wouldn&#8217;t stress about it being public), had Claude write a referee report on it, and then fed both the paper and the generated report into the strategic revision skill.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!DQ9R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9039d52a-1921-4980-bd71-330a0d03f8eb_1688x1056.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!DQ9R!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9039d52a-1921-4980-bd71-330a0d03f8eb_1688x1056.png 424w, /__u/substackcdn.com/image/fetch/$s_!DQ9R!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9039d52a-1921-4980-bd71-330a0d03f8eb_1688x1056.png 848w, /__u/substackcdn.com/image/fetch/$s_!DQ9R!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9039d52a-1921-4980-bd71-330a0d03f8eb_1688x1056.png 1272w, /__u/substackcdn.com/image/fetch/$s_!DQ9R!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9039d52a-1921-4980-bd71-330a0d03f8eb_1688x1056.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!DQ9R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9039d52a-1921-4980-bd71-330a0d03f8eb_1688x1056.png" width="1456" height="911" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9039d52a-1921-4980-bd71-330a0d03f8eb_1688x1056.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:911,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:445059,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193938371?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9039d52a-1921-4980-bd71-330a0d03f8eb_1688x1056.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!DQ9R!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9039d52a-1921-4980-bd71-330a0d03f8eb_1688x1056.png 424w, /__u/substackcdn.com/image/fetch/$s_!DQ9R!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9039d52a-1921-4980-bd71-330a0d03f8eb_1688x1056.png 848w, /__u/substackcdn.com/image/fetch/$s_!DQ9R!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9039d52a-1921-4980-bd71-330a0d03f8eb_1688x1056.png 1272w, /__u/substackcdn.com/image/fetch/$s_!DQ9R!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9039d52a-1921-4980-bd71-330a0d03f8eb_1688x1056.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The output was a 26-task revision plan organized into five execution blocks. It identified the critical path, the key bottlenecks, and which tasks could be parallelized. It even proposed how co-authors should divide the work. The visual diagram showing task dependencies organized into batches is what I find most useful. You can basically copy these over and say, &#8220;all right, now we need to do these tasks,&#8221; and structure them into issues.</p><p>Now, what I&#8217;ll tell you is that you still have to have a lot of discretion in how you do these things. Remember, we talked about being concrete and specific as really helpful for LLMs. Having a really specified set of tasks&#8212;the same way as working with an RA&#8212;makes it a lot easier to then approach the problem and work with LLMs on subsequent steps as well.</p><p>Markus asked whether this works as well for theoretical papers as empirical ones. I&#8217;ve actually used it for both, and I thought it was good for both. In some ways it was actually better for theoretical work&#8212;you know which proofs are relying on what, so the dependency structure is cleaner. Empirical work has so much taste involved that you kind of have to revisit more.</p><p>This obviously is not the end-all be-all. There are ways you could improve on this skill&#8212;I&#8217;ve only used it on two papers so far. But what I like most about it is that it&#8217;s concrete in trying to make the tasks actionable, categorize them, and see what&#8217;s dependent on what.</p><p>You can install this skill in Claude through the app. Go to manage skills, add a skill, and upload the markdown file. Once it&#8217;s installed, it&#8217;s available in both Chat and Cowork.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!DJwy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce73a099-b0cb-41c2-a7d5-f08a3ae1bb3f_1368x952.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!DJwy!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce73a099-b0cb-41c2-a7d5-f08a3ae1bb3f_1368x952.png 424w, /__u/substackcdn.com/image/fetch/$s_!DJwy!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce73a099-b0cb-41c2-a7d5-f08a3ae1bb3f_1368x952.png 848w, /__u/substackcdn.com/image/fetch/$s_!DJwy!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce73a099-b0cb-41c2-a7d5-f08a3ae1bb3f_1368x952.png 1272w, /__u/substackcdn.com/image/fetch/$s_!DJwy!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce73a099-b0cb-41c2-a7d5-f08a3ae1bb3f_1368x952.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!DJwy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce73a099-b0cb-41c2-a7d5-f08a3ae1bb3f_1368x952.png" width="1368" height="952" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ce73a099-b0cb-41c2-a7d5-f08a3ae1bb3f_1368x952.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:952,&quot;width&quot;:1368,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:206954,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193938371?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce73a099-b0cb-41c2-a7d5-f08a3ae1bb3f_1368x952.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!DJwy!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce73a099-b0cb-41c2-a7d5-f08a3ae1bb3f_1368x952.png 424w, /__u/substackcdn.com/image/fetch/$s_!DJwy!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce73a099-b0cb-41c2-a7d5-f08a3ae1bb3f_1368x952.png 848w, /__u/substackcdn.com/image/fetch/$s_!DJwy!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce73a099-b0cb-41c2-a7d5-f08a3ae1bb3f_1368x952.png 1272w, /__u/substackcdn.com/image/fetch/$s_!DJwy!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce73a099-b0cb-41c2-a7d5-f08a3ae1bb3f_1368x952.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Using the LLM as an editor, not a rewriter</strong></h2><p>While AI may have certain unusual writing tics, it is a good editor. It doesn&#8217;t have to rewrite your writing, but the LLM can give you explanations for why it thinks something is poor reasoning or poor writing. This prevents cognitive off-loading while still using the very strong reasoning capacity that comes from LLMs.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a></p><p>Here&#8217;s an example. I took one of my blog posts&#8212;we used a blog post just to make it smaller and less complicated, but this would work just as well with a research paper&#8212;and gave it this prompt:</p><pre><code><code>&gt; Please take a look at this blog post. I would like to get edits in 
  the style of a New York Times editor for writing and clarity. 
  However, do not directly edit my writing. Instead, please create 
  inline comments around places where my argument is poor or unclear 
  and where I can improve the writing.</code></code></pre><p>What it produced was the original text, completely unchanged, with markdown HTML comments inserted at specific points. They wouldn&#8217;t show up in the rendered version&#8212;they haven&#8217;t edited anything. But instead you get markup, just like an editor would do.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!3_xG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6aa4c2f4-800e-411f-9153-9ca2174f3ae9_1586x546.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!3_xG!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6aa4c2f4-800e-411f-9153-9ca2174f3ae9_1586x546.png 424w, /__u/substackcdn.com/image/fetch/$s_!3_xG!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6aa4c2f4-800e-411f-9153-9ca2174f3ae9_1586x546.png 848w, /__u/substackcdn.com/image/fetch/$s_!3_xG!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6aa4c2f4-800e-411f-9153-9ca2174f3ae9_1586x546.png 1272w, /__u/substackcdn.com/image/fetch/$s_!3_xG!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6aa4c2f4-800e-411f-9153-9ca2174f3ae9_1586x546.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!3_xG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6aa4c2f4-800e-411f-9153-9ca2174f3ae9_1586x546.png" width="1456" height="501" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6aa4c2f4-800e-411f-9153-9ca2174f3ae9_1586x546.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:501,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:727779,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193938371?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6aa4c2f4-800e-411f-9153-9ca2174f3ae9_1586x546.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!3_xG!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6aa4c2f4-800e-411f-9153-9ca2174f3ae9_1586x546.png 424w, /__u/substackcdn.com/image/fetch/$s_!3_xG!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6aa4c2f4-800e-411f-9153-9ca2174f3ae9_1586x546.png 848w, /__u/substackcdn.com/image/fetch/$s_!3_xG!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6aa4c2f4-800e-411f-9153-9ca2174f3ae9_1586x546.png 1272w, /__u/substackcdn.com/image/fetch/$s_!3_xG!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6aa4c2f4-800e-411f-9153-9ca2174f3ae9_1586x546.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!h_qM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1439f51c-2bcb-4d77-b0ef-0e6de696bee4_1580x376.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!h_qM!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1439f51c-2bcb-4d77-b0ef-0e6de696bee4_1580x376.png 424w, /__u/substackcdn.com/image/fetch/$s_!h_qM!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1439f51c-2bcb-4d77-b0ef-0e6de696bee4_1580x376.png 848w, /__u/substackcdn.com/image/fetch/$s_!h_qM!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1439f51c-2bcb-4d77-b0ef-0e6de696bee4_1580x376.png 1272w, /__u/substackcdn.com/image/fetch/$s_!h_qM!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1439f51c-2bcb-4d77-b0ef-0e6de696bee4_1580x376.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!h_qM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1439f51c-2bcb-4d77-b0ef-0e6de696bee4_1580x376.png" width="1456" height="346" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1439f51c-2bcb-4d77-b0ef-0e6de696bee4_1580x376.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:346,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:424890,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193938371?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1439f51c-2bcb-4d77-b0ef-0e6de696bee4_1580x376.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!h_qM!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1439f51c-2bcb-4d77-b0ef-0e6de696bee4_1580x376.png 424w, /__u/substackcdn.com/image/fetch/$s_!h_qM!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1439f51c-2bcb-4d77-b0ef-0e6de696bee4_1580x376.png 848w, /__u/substackcdn.com/image/fetch/$s_!h_qM!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1439f51c-2bcb-4d77-b0ef-0e6de696bee4_1580x376.png 1272w, /__u/substackcdn.com/image/fetch/$s_!h_qM!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1439f51c-2bcb-4d77-b0ef-0e6de696bee4_1580x376.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p><p>I find this helpful because if you&#8217;re trying to preserve your own voice, this is the kind of editorial style you&#8217;d want. If somebody marks up and tells you exactly how to write things&#8212;if you&#8217;re a graduate student, sometimes you&#8217;re very happy with it&#8212;but it&#8217;s harder to preserve your own voice in the writing. With comments only, you&#8217;re forced to engage with the feedback actively. You read each comment and decide what to do with it&#8212;rewrite the sentence yourself, cut it, or disagree and leave it.</p><p>Markus suggested you could also ask it to propose alternatives alongside the comments. That works too&#8212;sometimes it will do this unprompted. But the danger is always that you just accept the rewrite. Sometimes what I&#8217;ll do is copy that specific piece and say, &#8220;all right, what should I do here?&#8221; We don&#8217;t always have infinite amounts of energy to think about our writing, so having options is fine. But the comments-only approach keeps you more engaged.</p><p>One practical note: this needs to be done in Cowork or Claude Code, not Chat, because it needs to read and edit files on your computer. You <em>could</em> upload the document to Chat and have it do the same thing, but it works much better in Cowork because it uses your local filesystem and any skills you have installed. What Chat does is create a computing environment up there to do the same task, and the more distance you create between your files and the LLM, the more problems you&#8217;ll have.</p><h2><strong>Thinking through ideas with LLMs</strong></h2><p>It&#8217;s very easy if you have a few vague ideas to hand them off to an LLM and try to let the model do the intellectual work for you. What I want to encourage is similar to how we talked about the context window in the first post: you want to do intentional compaction and note-taking to iterate on ideas.</p><p><strong>Iterate your ideas before talking to the LLM.</strong> Better for you to really iterate out the ideas as much as you can before you talk to the LLM, because the specificity is going to be enormously valuable. If I say something like &#8220;hey, I&#8217;d really like to think about a life cycle model that thinks about savings&#8221;&#8212;you&#8217;re not going to get particularly groundbreaking ideas there. The more specific you can be, the better.</p><p><strong>Load more context.</strong> One reason it&#8217;s very valuable to use Claude Code or Cowork for this&#8212;rather than a simple chat window&#8212;is that you can add more files and more context into the LLM. You can say: &#8220;Look, I&#8217;m in this folder. Here&#8217;s a bunch of papers that are related to the thing I&#8217;m interested in. Here&#8217;s some notes that we did. Here&#8217;s some slide decks. Here&#8217;s some websites that are relevant to this policy. Here&#8217;s what we&#8217;re thinking about. Work from there.&#8221; The more information you can give, the better.</p><p><strong>Consider the &#8220;margin notes&#8221; approach here too.</strong> Instead of asking &#8220;what should I write?&#8221; ask the LLM to comment on what you&#8217;ve <em>already</em> written.</p><p>This connects back to the writing-as-thinking point from the start. The goal isn&#8217;t to avoid using LLMs for intellectual work&#8212;it&#8217;s to stay engaged in the intellectual work while using them. Always remember this image, <a href="https://simonwillison.net/2025/Feb/3/a-computer-can-never-be-held-accountable/">famous on the internet, from an IBM training manual from 1977</a>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!IdKj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcea321d-0eec-4cbe-bb69-78d063d7415b_1564x1128.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!IdKj!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcea321d-0eec-4cbe-bb69-78d063d7415b_1564x1128.png 424w, /__u/substackcdn.com/image/fetch/$s_!IdKj!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcea321d-0eec-4cbe-bb69-78d063d7415b_1564x1128.png 848w, /__u/substackcdn.com/image/fetch/$s_!IdKj!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcea321d-0eec-4cbe-bb69-78d063d7415b_1564x1128.png 1272w, /__u/substackcdn.com/image/fetch/$s_!IdKj!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcea321d-0eec-4cbe-bb69-78d063d7415b_1564x1128.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!IdKj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcea321d-0eec-4cbe-bb69-78d063d7415b_1564x1128.png" width="1456" height="1050" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bcea321d-0eec-4cbe-bb69-78d063d7415b_1564x1128.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1050,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:695800,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193938371?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcea321d-0eec-4cbe-bb69-78d063d7415b_1564x1128.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!IdKj!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcea321d-0eec-4cbe-bb69-78d063d7415b_1564x1128.png 424w, /__u/substackcdn.com/image/fetch/$s_!IdKj!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcea321d-0eec-4cbe-bb69-78d063d7415b_1564x1128.png 848w, /__u/substackcdn.com/image/fetch/$s_!IdKj!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcea321d-0eec-4cbe-bb69-78d063d7415b_1564x1128.png 1272w, /__u/substackcdn.com/image/fetch/$s_!IdKj!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcea321d-0eec-4cbe-bb69-78d063d7415b_1564x1128.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Key takeaways</strong></h2><ol><li><p><strong>Writing is thinking.</strong> Be deliberate about what you offload versus what you do yourself. The test: can you discuss the ideas in depth without the LLM?</p></li><li><p><strong>Style guides are useful and interesting, but aren&#8217;t going to be perfect.</strong> You should curate them, iterate, and do more&#8212;but they&#8217;re never going to be perfect. In the end, a skill is a summary that is a caricature in some ways of what you are, but is useful. It&#8217;s a sounding board that reflects you&#8212;it&#8217;s like a puppet.</p></li><li><p><strong>Banal writing is the easiest win.</strong> Boilerplate, first-pass summaries, routine documentation&#8212;this is really helpful personally. The biggest value is less about doing it for you, but giving you a very good first pass.</p></li><li><p><strong>The strategic revision skill is quite lovely.</strong> Taking a pile of referee reports and producing a structured, dependency-aware revision plan with prioritized execution blocks&#8212;there are other skills too that people should explore, but this one makes referee comments actionable rather than overwhelming.</p></li><li><p><strong>Ask for comments, not rewrites.</strong> I&#8217;ve found this to be a useful way to prevent myself from writing too much that sounds like an LLM, in cases where I really want to maintain my voice. It&#8217;s an editing approach that keeps you engaged.</p></li><li><p><strong>Think first, then write with AI.</strong> Iterate your ideas as much as you can before talking to the LLM. The specificity is enormously valuable. Load as much context as you can.</p></li></ol><h2><strong>What&#8217;s next</strong></h2><p>This is a very contentious topic, but I do think there&#8217;s a lot of value here, especially when you want to get stuff moving and get stuff off the ground. In the next post, we&#8217;ll do a lot more customization&#8212;we&#8217;ll talk about skills and containers and how to do stuff in what&#8217;s called YOLO mode, which is letting Claude run without any confirmation from us.</p><p></p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Generally, a good rule of thumb is if you have AI write for you when you are tired or in a rush, the output will end up being pretty undifferentiated and likely quite bad.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>E.g. consider the many line breaks in many LinkedIn posts, which seem to play the same role as commas?</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>When I do this, I force Opus to read through a lot more papers and iterate many times to get a more detailed style guide. The one in the demo is just a starting point.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>And of course I spelled Dostoevsky wrong in the prompt, which doesn&#8217;t matter because strong LLMs can figure out what you meant.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p> In my mind, I put air quotes around &#8220;reasoning&#8221; here, because it&#8217;s not really reasoning in the human sense, but literally the thinking tokens are effectively meant to proxy for this type of human reasoning.</p></div></div>]]></content:encoded></item><item><title><![CDATA[An Incomplete List Things I Want to Make]]></title><description><![CDATA[A laundry list of things that are blocked by frictions]]></description><link>https://paulgp.substack.com/p/an-incomplete-list-things-i-want</link><guid isPermaLink="false">https://paulgp.substack.com/p/an-incomplete-list-things-i-want</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Wed, 08 Apr 2026 19:09:35 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/2ef8e2aa-4467-4b93-b740-523f07f5ac73_3024x2515.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>AI has lowered a huge number of frictions for me with respect to programming. I am now able to code up many tools and ideas, and I really enjoy it. But it&#8217;s not uniformly doable across all projects &#8212; not because the coding is too hard for LLMs (I am not enough of a computer scientist to think of hard problems) but because humans have created moats and frictions to make things inaccessible or difficult (or it&#8217;s hard to articulate what I want).</p><p>Here&#8217;s a list of things I&#8217;m trying to figure out how to implement going forward:</p><ol><li><p>I would like to have a richer sense of citation patterns and cross-paper references. However, <a href="https://stackoverflow.com/questions/62938110/does-google-scholar-have-an-api-available-that-we-can-use-in-our-research-applic">Google Scholar is extremely cranky about API requests</a>. Hard to do at scale, and it&#8217;s hard to work with generally. Google has no reason to share their data. <br>So, Goal: <strong>Build out citation network</strong></p></li><li><p>Relatedly: I would like to continue to build out my knowledge database with papers. However, as I&#8217;ve learned working on my economics literature database, journals are a huge pain to download from automatically. It is slow and unwieldy. Journals have zero reason (nor does <a href="https://en.wikipedia.org/wiki/Aaron_Swartz">JSTOR</a>) to make it easy for me to have as many articles as I would like. <br>Goal: <strong>Build out more articles.</strong> </p></li><li><p>I would like to have a more automated system for understanding and harmonizing replication packages (e.g. the AEA<a href="https://www.icpsr.umich.edu/sites/aea/home"> replication repository</a>). If you&#8217;re interested in a single paper, it&#8217;s gotta a lot easier. However, if you (like me) want to see the swath of papers that use diff-in-diff, it&#8217;s not easy to reimplement papers at scale &#8212; you have to parse the right locations (e.g. the Journal of Finance doesn&#8217;t have a repository, it just keeps the replication package as a zip file). Moreover, you often don&#8217;t know which packages actually are replicable until you unzip and parse. There is huge duplication of effort by applied econometricians.<br>Goal: <strong>Build out database of meta data on replication packages</strong></p></li><li><p>My email absolutely sucks because I have to use Outlook and it has horrid search. <br></p><div id="tiktok-iframe?media=1&amp;app=1&amp;url=https%3A%2F%2Fwww.tiktok.com%2F%40fentifriedchicken%2Fvideo%2F7436517309889400107&amp;key=e27c740634285c9ddc20db64f73358dd" class="tiktok-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://www.tiktok.com/@fentifriedchicken/video/7436517309889400107&quot;,&quot;title&quot;:&quot;Emails are so cool #Corporate #Working &quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b50c9e90-2568-428c-9ec3-e6a4922e971f_1080x1920.jpeg&quot;,&quot;author&quot;:&quot;Joe Fenti&quot;,&quot;embed_url&quot;:&quot;https://cdn.iframe.ly/api/iframe?media=1&amp;app=1&amp;url=https%3A%2F%2Fwww.tiktok.com%2F%40fentifriedchicken%2Fvideo%2F7436517309889400107&amp;key=e27c740634285c9ddc20db64f73358dd&quot;,&quot;author_url&quot;:&quot;https://www.tiktok.com/@fentifriedchicken&quot;,&quot;belowTheFold&quot;:false}" data-component-name="TikTokCreateTikTokEmbed"><iframe id="iframe-tiktok-iframe?media=1&amp;app=1&amp;url=https%3A%2F%2Fwww.tiktok.com%2F%40fentifriedchicken%2Fvideo%2F7436517309889400107&amp;key=e27c740634285c9ddc20db64f73358dd" class="tiktok-iframe" src="https://cdn.iframe.ly/api/iframe?media=1&amp;app=1&amp;url=https%3A%2F%2Fwww.tiktok.com%2F%40fentifriedchicken%2Fvideo%2F7436517309889400107&amp;key=e27c740634285c9ddc20db64f73358dd" frameborder="0" allow="autoplay; fullscreen; encrypted-media" allowfullscreen="" scrolling="no"></iframe><iframe src="https://team-hosted-public.s3.amazonaws.com/set-then-check-cookie.html" id="third-party-iframe-tiktok-iframe?media=1&amp;app=1&amp;url=https%3A%2F%2Fwww.tiktok.com%2F%40fentifriedchicken%2Fvideo%2F7436517309889400107&amp;key=e27c740634285c9ddc20db64f73358dd" class="third-party-cookie-check-iframe" style="display: none;"></iframe><div class="tiktok-wrap static" data-component-name="TikTokCreateStaticTikTokEmbed"><a href="https://www.tiktok.com/@fentifriedchicken/video/7436517309889400107" target="_blank"><img class="tiktok thumbnail" src="/__u/substackcdn.com/image/fetch/$s_!SsiY!,w_640,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb50c9e90-2568-428c-9ec3-e6a4922e971f_1080x1920.jpeg" style="background-image: url(/__u/substackcdn.com/image/fetch/$s_!SsiY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb50c9e90-2568-428c-9ec3-e6a4922e971f_1080x1920.jpeg);"></a><div class="content"><a class="author" href="https://www.tiktok.com/@fentifriedchicken" target="_blank">@fentifriedchicken</a><a class="title" href="https://www.tiktok.com/@fentifriedchicken/video/7436517309889400107" target="_blank">Emails are so cool #Corporate #Working </a></div></div><div class="fallback-failure" id="fallback-failure-tiktok-iframe?media=1&amp;app=1&amp;url=https%3A%2F%2Fwww.tiktok.com%2F%40fentifriedchicken%2Fvideo%2F7436517309889400107&amp;key=e27c740634285c9ddc20db64f73358dd"><div class="error-content"><img class="error-icon" src="/__u/substackcdn.com//img/alert-circle.svg">Tiktok failed to load.<br><br>Enable 3rd party cookies or use another browser</div></div></div><p><br>However, I do not want to forward my work email to my Gmail (and also I&#8217;d rather use other agents than Gemini to interface with my work). Yale&#8217;s Microsoft API graph is pretty locked down, so it&#8217;s very hard for me to give any LLM access to my email. I&#8217;ve made progress on improving this, but I need to improve on it.<br><strong>Goal:</strong> Automate database ingestion and find a way to have the LLM create drafts of emails.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!rCSB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcc928af-f08c-4f15-aba3-8a3165e8b916_1550x296.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!rCSB!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcc928af-f08c-4f15-aba3-8a3165e8b916_1550x296.png 424w, /__u/substackcdn.com/image/fetch/$s_!rCSB!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcc928af-f08c-4f15-aba3-8a3165e8b916_1550x296.png 848w, /__u/substackcdn.com/image/fetch/$s_!rCSB!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcc928af-f08c-4f15-aba3-8a3165e8b916_1550x296.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rCSB!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcc928af-f08c-4f15-aba3-8a3165e8b916_1550x296.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!rCSB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcc928af-f08c-4f15-aba3-8a3165e8b916_1550x296.png" width="1456" height="278" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fcc928af-f08c-4f15-aba3-8a3165e8b916_1550x296.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:278,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:49754,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193570030?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcc928af-f08c-4f15-aba3-8a3165e8b916_1550x296.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!rCSB!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcc928af-f08c-4f15-aba3-8a3165e8b916_1550x296.png 424w, /__u/substackcdn.com/image/fetch/$s_!rCSB!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcc928af-f08c-4f15-aba3-8a3165e8b916_1550x296.png 848w, /__u/substackcdn.com/image/fetch/$s_!rCSB!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcc928af-f08c-4f15-aba3-8a3165e8b916_1550x296.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rCSB!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcc928af-f08c-4f15-aba3-8a3165e8b916_1550x296.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p><br></p></li><li><p>There are not enough software packages for important econometric tests. For example: the Kitagawa test is not used nearly enough. Why? There&#8217;s not really a rich package for it (probably needs to get added to fixest). Writing good statistical packages is still really hard...<br><strong>Goal:</strong> Identify good tests and try to work with <code>fixest</code> folks to get it added.</p></li><li><p>I want to make an iPhone app that tracks how consistent your ball toss is on your serve motion. I tried to do this 2 years ago and failed. I have to imagine it&#8217;s easier now but this opens up whole new programming skills that I know little about (video analysis).<br><strong>Goal:</strong> Make a proof of concept app that tracks consistency of ball toss on serve.</p></li></ol><p>This list is incomplete. I have many research projects I want to do / finish.</p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Large Datasets and Structured Databases: Claude Code for Economists ]]></title><description><![CDATA[Video 4 in a series on Claude Code]]></description><link>https://paulgp.substack.com/p/large-datasets-and-structured-databases</link><guid isPermaLink="false">https://paulgp.substack.com/p/large-datasets-and-structured-databases</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Sun, 05 Apr 2026 10:45:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/4uwI1-9DafU" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Part 4 of a series on AI coding tools for empirical research, accompanying my <a href="https://bcf.princeton.edu/markus-academy/">Markus Academy</a> video series.</em></p><div id="youtube2-4uwI1-9DafU" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;4uwI1-9DafU&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/4uwI1-9DafU?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Most applied economists are not great at working with big data. We make do, but we are very far from the frontier of a) effective and b) replicable programming. I have in mind researchers with many intermediate <code>.csv</code> (or <code>.dta</code>) files. Setting up a proper data pipeline&#8212;parquet files, a queryable database, harmonized schemas, documented metadata&#8212;is the kind of thing a data engineer does. Most of us are not data engineers, and the fixed cost of learning those tools was hard to justify for any single project.</p><p>That has changed. The fixed cost of doing this properly has collapsed. With an AI coding agent, you can describe what you want in plain English&#8212;download this data, harmonize these formats, build a database with metadata&#8212;and get a professional-grade pipeline in an afternoon. The kind of structured data infrastructure that would have taken a week of painful Stack Overflow diving (or felt impossible) is now doable in a single day (or less). There&#8217;s really no excuse anymore for the flat-CSV-with-copies workflow.</p><p>In this video, I&#8217;m going to use a research setting (building out a mortgage database) to show exactly this: how to take a large, messy, multi-format administrative dataset and turn it into something clean, documented, and queryable&#8212;using Claude Code to do the engineering work.</p><h2><strong>The dataset and the question</strong></h2><p>For the demonstration, we&#8217;re using <a href="https://www.consumerfinance.gov/data-research/hmda/">HMDA&#8212;the Home Mortgage Disclosure Act data</a>. It covers essentially every mortgage application in the United States: originations, denials, loan amounts, lender identifiers, borrower demographics, geography. The full panel from 2007 to 2024 is about 291 million rows and 70 gigabytes of raw CSVs. This is not going to fit in pandas. It&#8217;s not going to fit in Stata. If you try to <code>insheet "data.csv"</code>, it&#8217;s gonna be slow.</p><p>The motivating question&#8212;just to give us something to build toward&#8212;is: <em>how has the geographic footprint of fintech mortgage lending changed across the US from 2007 to 2024?</em> This connects to work by <a href="https://doi.org/10.1093/rfs/hhz018">Fuster, Plosser, Schnabl and Vickery (2019)</a> and others on the role of technology in mortgage lending. But the HMDA question is really just the vehicle. The point is the pattern: download &#8594; convert &#8594; harmonize &#8594; document &#8594; query &#8594; analyze. That pattern works for HMDA, for Medicare claims, for patent filings, for trade transaction data&#8212;for any large administrative dataset that&#8217;s too big for your usual workflow.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p><p>If you&#8217;ve been following along, this builds directly on concepts from the earlier posts. The context window management from <a href="/__u/paulgp.substack.com/p/getting-started-with-claude-code">post 1</a>&#8212;writing state to files so the model doesn&#8217;t lose track&#8212;now applies to <em>data</em>. The <a href="https://duckdb.org/">DuckDB</a> pattern from <a href="/__u/paulgp.substack.com/p/from-edgar-filings-to-a-structured">post 3</a> scales up to hundreds of millions of rows.</p><h2><strong>The prompt</strong></h2><p>I started with a detailed prompt that I&#8217;d prepared ahead of time. For a task this complex, front-loading the context pays off&#8212;same lesson as the EDGAR scraping in post 3. Here&#8217;s what I gave Claude:</p><pre><code><code>I want to build a county-level panel dataset of mortgage lending in the US 
from 2007 to 2024 using HMDA (Home Mortgage Disclosure Act) data. The goal 
is to study the geographic expansion of fintech mortgage lenders over time.

The data comes from two sources (I've verified both are accessible):

- **2007&#8211;2017**: CFPB historic data at 
  `https://files.consumerfinance.gov/hmda-historic-loan-data/hmda_{YEAR}_nationwide_all-records_codes.zip`
  These are zipped CSVs with numeric codes and the old LAR column names.
  
- **2018&#8211;2024**: CFPB Data Browser API at
  `https://ffiec.cfpb.gov/v2/data-browser-api/view/nationwide/csv?years={YEAR}`
  These stream as CSV with 99 columns, string codes, and the new format 
  (uses `lei` instead of `respondent_id`, different column names throughout).

Each year is millions of rows. The full panel is 250M+ rows. This will 
not fit in pandas.

Here's what I'd like you to do:

1. Write a download script that pulls the full LAR files for 2007&#8211;2024 
   from the URLs above. Include resume capability in case downloads get 
   interrupted. Use a proper User-Agent header.
2. Convert each year's CSV to parquet for efficient storage.
3. Set up a DuckDB database. Create a metadata table that documents 
   every column &#8212; name, description, type, valid values, which years 
   it's available. This metadata table is important: I want future 
   sessions to be able to query it and immediately understand the dataset 
   without me re-explaining anything.

Important: the pre-2017 and post-2018 formats are very different &#8212; 
different column names, different coding schemes, different variable 
availability. You'll need to figure out a crosswalk and harmonize into 
a consistent schema.

Key variables I care about: year, lender ID, lender name, county FIPS, 
state FIPS, loan type, loan purpose, action taken (originated, denied, etc.), 
loan amount, applicant race, applicant income.

Use DuckDB and parquet throughout &#8212; no pandas DataFrames for the full data.</code></code></pre><p>A few things to notice about this prompt. I gave it the exact URLs&#8212;I know where the data lives, and giving Claude that information up front saves it from having to crawl around looking for download links. I told it about the format change in 2018&#8212;different column names, different coding schemes&#8212;because that&#8217;s the kind of domain knowledge that matters. And I emphasized the metadata table, because that&#8217;s the key new concept in this post.</p><p>I also told Claude to focus only on the current subdirectory and not go scouting in the parent folder. This is a practical issue when you have a project organized into multiple video folders&#8212;Claude will notice the structure and start reading other videos&#8217; code, which wastes context and is distracting. You could sandbox more aggressively, but a simple instruction usually suffices. (It doesn&#8217;t always listen on the first try&#8212;more on that below.)</p><h2><strong>Sub-agents and plan mode</strong></h2><p>Claude immediately launched two sub-agents in parallel: one to explore the project structure, and one to research the HMDA data formats. This is the same pattern we saw in <a href="/__u/paulgp.substack.com/video-02-data-analysis/">post 2</a>&#8212;sub-agents get their own context windows, so the research doesn&#8217;t fill up the main conversation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!gjZ6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7896eb67-78f8-41bc-a684-dc72fd746969_1358x374.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!gjZ6!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7896eb67-78f8-41bc-a684-dc72fd746969_1358x374.png 424w, /__u/substackcdn.com/image/fetch/$s_!gjZ6!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7896eb67-78f8-41bc-a684-dc72fd746969_1358x374.png 848w, /__u/substackcdn.com/image/fetch/$s_!gjZ6!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7896eb67-78f8-41bc-a684-dc72fd746969_1358x374.png 1272w, /__u/substackcdn.com/image/fetch/$s_!gjZ6!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7896eb67-78f8-41bc-a684-dc72fd746969_1358x374.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!gjZ6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7896eb67-78f8-41bc-a684-dc72fd746969_1358x374.png" width="1358" height="374" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7896eb67-78f8-41bc-a684-dc72fd746969_1358x374.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:374,&quot;width&quot;:1358,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:264723,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193223396?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7896eb67-78f8-41bc-a684-dc72fd746969_1358x374.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!gjZ6!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7896eb67-78f8-41bc-a684-dc72fd746969_1358x374.png 424w, /__u/substackcdn.com/image/fetch/$s_!gjZ6!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7896eb67-78f8-41bc-a684-dc72fd746969_1358x374.png 848w, /__u/substackcdn.com/image/fetch/$s_!gjZ6!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7896eb67-78f8-41bc-a684-dc72fd746969_1358x374.png 1272w, /__u/substackcdn.com/image/fetch/$s_!gjZ6!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7896eb67-78f8-41bc-a684-dc72fd746969_1358x374.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The project explorer is trying to see what else is going in the folder (in order to get context on the project -- often this project will be something already in process, so it is valuable to read through the existing code base). Annoyingly, however, this subagent did <em>not</em> get the message from my prompt to ignore everything in the parent directory. Instead, it ran many versions of search to look in the directories above, I kept denying its file-read requests, but it was persistent&#8212;it kept finding new ways to try to peek at the other folders.</p><p>This is an interesting illustration of how sub-agents work. The main agent told the explorer &#8220;look at the project structure and the parent directory,&#8221; but my original prompt said &#8220;don&#8217;t look at the parent directory.&#8221; The sub-agent doesn&#8217;t see my original instruction&#8212;it only sees the prompt that the main agent wrote for it. So it&#8217;s dutifully trying to follow <em>its</em> instructions while I&#8217;m blocking it based on <em>my</em> instructions. Eventually I had to write explicitly: &#8220;you should not look in the parent directory.&#8221; Then it understood and moved on.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-RzO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f100504-6249-4349-9ce5-5547613ff851_1302x190.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-RzO!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f100504-6249-4349-9ce5-5547613ff851_1302x190.png 424w, /__u/substackcdn.com/image/fetch/$s_!-RzO!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f100504-6249-4349-9ce5-5547613ff851_1302x190.png 848w, /__u/substackcdn.com/image/fetch/$s_!-RzO!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f100504-6249-4349-9ce5-5547613ff851_1302x190.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-RzO!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f100504-6249-4349-9ce5-5547613ff851_1302x190.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-RzO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f100504-6249-4349-9ce5-5547613ff851_1302x190.png" width="1302" height="190" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f100504-6249-4349-9ce5-5547613ff851_1302x190.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:190,&quot;width&quot;:1302,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:242391,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193223396?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f100504-6249-4349-9ce5-5547613ff851_1302x190.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!-RzO!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f100504-6249-4349-9ce5-5547613ff851_1302x190.png 424w, /__u/substackcdn.com/image/fetch/$s_!-RzO!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f100504-6249-4349-9ce5-5547613ff851_1302x190.png 848w, /__u/substackcdn.com/image/fetch/$s_!-RzO!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f100504-6249-4349-9ce5-5547613ff851_1302x190.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-RzO!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f100504-6249-4349-9ce5-5547613ff851_1302x190.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The research agent, meanwhile, was doing useful work&#8212;searching the web for HMDA data dictionaries, understanding the column structures for pre-2018 and post-2018 formats, figuring out the crosswalk. It used something like 33 different tool calls to search and read documentation.</p><p>After the research phase, Claude entered <strong>plan mode</strong>. It recognized this was a complex multi-step project and decided to design the architecture before writing any code. Plan mode is important: it prevents Claude from editing files, so you can iterate on the design without worrying about premature changes. You can also trigger plan mode manually by pressing Shift+Tab. Eventually, plan mode laid out a large structured plan for the project:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!jRqe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5b7b16-7567-4ba9-bc5d-2b6a9204fb39_1374x844.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!jRqe!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5b7b16-7567-4ba9-bc5d-2b6a9204fb39_1374x844.png 424w, /__u/substackcdn.com/image/fetch/$s_!jRqe!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5b7b16-7567-4ba9-bc5d-2b6a9204fb39_1374x844.png 848w, /__u/substackcdn.com/image/fetch/$s_!jRqe!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5b7b16-7567-4ba9-bc5d-2b6a9204fb39_1374x844.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jRqe!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5b7b16-7567-4ba9-bc5d-2b6a9204fb39_1374x844.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!jRqe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5b7b16-7567-4ba9-bc5d-2b6a9204fb39_1374x844.png" width="1374" height="844" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc5b7b16-7567-4ba9-bc5d-2b6a9204fb39_1374x844.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:844,&quot;width&quot;:1374,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:672081,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193223396?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5b7b16-7567-4ba9-bc5d-2b6a9204fb39_1374x844.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!jRqe!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5b7b16-7567-4ba9-bc5d-2b6a9204fb39_1374x844.png 424w, /__u/substackcdn.com/image/fetch/$s_!jRqe!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5b7b16-7567-4ba9-bc5d-2b6a9204fb39_1374x844.png 848w, /__u/substackcdn.com/image/fetch/$s_!jRqe!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5b7b16-7567-4ba9-bc5d-2b6a9204fb39_1374x844.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jRqe!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5b7b16-7567-4ba9-bc5d-2b6a9204fb39_1374x844.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The plan laid out six Python files:</p><ol><li><p><code>config.py</code> &#8212; URLs, column mappings, schema definitions</p></li><li><p><code>download.py</code> &#8212; download with resume capability</p></li><li><p><code>convert.py</code> &#8212; CSV to parquet conversion</p></li><li><p><code>harmonize.py</code> &#8212; schema crosswalk between pre-2018 and post-2018 formats</p></li><li><p><code>build_db.py</code> &#8212; assemble the DuckDB database with metadata</p></li><li><p><code>run_pipeline.py</code> &#8212; orchestrate all the steps</p></li></ol><p>It also designed the harmonized schema: year, lender identifier, lender name, county and state FIPS codes, loan type, loan purpose, action taken, loan amount, race, and income. And it proposed the metadata table structure.</p><h3><strong>Context window management in action</strong></h3><p>You can think of the plan as the way that Claude is giving itself a <em>new</em> prompt to start the project, restating my goals and the things it has learned from the research phase.</p><p>After the plan was finalized, Claude saved it to a file (under <code>~/.claude/plans/</code>) and then cleared the context. This is exactly the pattern from <a href="/__u/paulgp.substack.com/p/getting-started-with-claude-code">post 1</a>: research &#8594; write plan to file &#8594; clear context &#8594; start fresh with full context budget. All the research that went into understanding HMDA data formats was distilled into the plan, and the actual coding session started clean.</p><h2><strong>Building the pipeline</strong></h2><p>With the plan in hand, Claude wrote all seven files and started executing. The first step was verifying the data&#8212;it checked column names in one pre-2018 file and one post-2018 file before running the full pipeline.</p><h3><strong>Slight of hand</strong></h3><p>Much like a good cooking show, rather than watch me wait for 18 large files to download, I had pre-downloaded all the raw CSVs separately (as a single zip archive) and handed them to Claude to extract. Claude still ran the full conversion and harmonization end-to-end &#8212; first testing on two years to catch format issues, then kicking off the remaining sixteen as a background job.</p><h3><strong>CSV to parquet: the compression payoff</strong></h3><p>Here is a nice example of some concrete payoffs to better data engineering. The 2017 HMDA file is 1.7 GB as a CSV. As a parquet file, it&#8217;s 114 megabytes. That&#8217;s a 15x compression ratio, and parquet files are <em>faster</em> to query because they&#8217;re columnar&#8212;DuckDB can read just the columns it needs without scanning the whole file.</p><p>The 2024 file went from 4.3 GB to 450 MB. Across all 18 years, the full dataset went from roughly 70 GB of CSVs to about 6 GB of parquet files.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!FFy4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c39ea8-7745-4dcb-901e-7092da1dc9a9_1234x414.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!FFy4!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c39ea8-7745-4dcb-901e-7092da1dc9a9_1234x414.png 424w, /__u/substackcdn.com/image/fetch/$s_!FFy4!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c39ea8-7745-4dcb-901e-7092da1dc9a9_1234x414.png 848w, /__u/substackcdn.com/image/fetch/$s_!FFy4!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c39ea8-7745-4dcb-901e-7092da1dc9a9_1234x414.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FFy4!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c39ea8-7745-4dcb-901e-7092da1dc9a9_1234x414.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!FFy4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c39ea8-7745-4dcb-901e-7092da1dc9a9_1234x414.png" width="1234" height="414" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e5c39ea8-7745-4dcb-901e-7092da1dc9a9_1234x414.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:414,&quot;width&quot;:1234,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:237368,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193223396?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c39ea8-7745-4dcb-901e-7092da1dc9a9_1234x414.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!FFy4!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c39ea8-7745-4dcb-901e-7092da1dc9a9_1234x414.png 424w, /__u/substackcdn.com/image/fetch/$s_!FFy4!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c39ea8-7745-4dcb-901e-7092da1dc9a9_1234x414.png 848w, /__u/substackcdn.com/image/fetch/$s_!FFy4!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c39ea8-7745-4dcb-901e-7092da1dc9a9_1234x414.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FFy4!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5c39ea8-7745-4dcb-901e-7092da1dc9a9_1234x414.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Claude hit two small gotchas during the test phase. First, the post-2018 files turned out to be comma-delimited, not pipe-delimited as the CFPB API documentation suggests &#8212; Claude spotted this when the first header row came out with commas and updated the read options. Second, DuckDB&#8217;s <code>normalize_names</code> function strips hyphens entirely rather than replacing them with underscores, so <code>applicant_race-1</code> became <code>applicant_race1</code> (not <code>applicant_race_1</code>, as expected). You could see this in Claude&#8217;s &#8220;thinking&#8221; &#8212; its internal reasoning about the mismatch. It noticed the discrepancy, updated the column mapping, and re-ran.</p><h3><strong>Running in the background</strong></h3><p>Once the initial tests passed, Claude kicked off the remaining 16 years of conversion and harmonization. It did something practical here: rather than sitting idle waiting for the conversions, it launched the process and then ran a <code>sleep 60</code> command, essentially telling itself to check back in a minute. This is the same pattern you&#8217;d use&#8212;start a long-running job and go do something else.</p><p>One smaller quirk Claude flagged but didn&#8217;t &#8220;fix&#8221;: a couple of pre-2018 years use <code>loan_purpose</code> codes 31 and 32 instead of the standard 2/3 encoding (roughly 28 million rows total). Rather than silently re-coding, Claude surfaced the discrepancy and asked whether I wanted a transformation layer.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ZjGA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43e1b1b9-5fa2-4e08-ab6f-ffec60f36836_1230x610.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ZjGA!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43e1b1b9-5fa2-4e08-ab6f-ffec60f36836_1230x610.png 424w, /__u/substackcdn.com/image/fetch/$s_!ZjGA!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43e1b1b9-5fa2-4e08-ab6f-ffec60f36836_1230x610.png 848w, /__u/substackcdn.com/image/fetch/$s_!ZjGA!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43e1b1b9-5fa2-4e08-ab6f-ffec60f36836_1230x610.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ZjGA!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43e1b1b9-5fa2-4e08-ab6f-ffec60f36836_1230x610.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ZjGA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43e1b1b9-5fa2-4e08-ab6f-ffec60f36836_1230x610.png" width="1230" height="610" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/43e1b1b9-5fa2-4e08-ab6f-ffec60f36836_1230x610.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:610,&quot;width&quot;:1230,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:473807,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193223396?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43e1b1b9-5fa2-4e08-ab6f-ffec60f36836_1230x610.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!ZjGA!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43e1b1b9-5fa2-4e08-ab6f-ffec60f36836_1230x610.png 424w, /__u/substackcdn.com/image/fetch/$s_!ZjGA!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43e1b1b9-5fa2-4e08-ab6f-ffec60f36836_1230x610.png 848w, /__u/substackcdn.com/image/fetch/$s_!ZjGA!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43e1b1b9-5fa2-4e08-ab6f-ffec60f36836_1230x610.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ZjGA!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43e1b1b9-5fa2-4e08-ab6f-ffec60f36836_1230x610.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Building aggregate tables</strong></h2><p>The raw harmonized data has 291 million rows across 18 years. That&#8217;s the right level to <em>store</em> the data, but most analyses work with aggregates. I asked Claude to build a county &#215; year <em>table</em> (a derived product that sits alongside the raw data in the DuckDB database):</p><pre><code><code>I want to build an aggregate database: county by year, total originations, 
dollar value, number of active lenders, the HHI (Herfindahl-Hirschman Index) 
of lender market shares, the denial rate, and the median loan amount.
</code></code></pre><p>Claude wrote a function for <code>build_db.py</code> that creates this table with a single SQL query against the harmonized data. DuckDB handles the aggregation over 291 million rows efficiently&#8212;this is what it&#8217;s designed for. I didn&#8217;t write any SQL. I described what I wanted in English, and Claude translated it into a correct query.</p><p>It did hit one issue: some FIPS codes were inconsistent in the post-2018 data, leading to fragmented rows for LA County. Claude investigated, found that it needed to derive the state FIPS code differently, fixed the group-by logic, and re-ran. One row per county-year, clean time series across all 18 years.</p><p>The sanity checks were reassuring. Los Angeles, Maricopa (Phoenix), Cook County (Chicago), and Harris County (Houston) were the top counties by volume&#8212;exactly what you&#8217;d expect. The time series showed the 2007 mortgage origination peak, the post-crisis collapse, the COVID refinancing boom when interest rates fell in 2020-2021, and the recent falloff as rates rose.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!o4-E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06ed1ea-4d29-4638-945b-8abcfa2ca38c_1122x216.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!o4-E!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06ed1ea-4d29-4638-945b-8abcfa2ca38c_1122x216.png 424w, /__u/substackcdn.com/image/fetch/$s_!o4-E!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06ed1ea-4d29-4638-945b-8abcfa2ca38c_1122x216.png 848w, /__u/substackcdn.com/image/fetch/$s_!o4-E!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06ed1ea-4d29-4638-945b-8abcfa2ca38c_1122x216.png 1272w, /__u/substackcdn.com/image/fetch/$s_!o4-E!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06ed1ea-4d29-4638-945b-8abcfa2ca38c_1122x216.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!o4-E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06ed1ea-4d29-4638-945b-8abcfa2ca38c_1122x216.png" width="1122" height="216" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c06ed1ea-4d29-4638-945b-8abcfa2ca38c_1122x216.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:216,&quot;width&quot;:1122,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:210942,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193223396?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06ed1ea-4d29-4638-945b-8abcfa2ca38c_1122x216.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!o4-E!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06ed1ea-4d29-4638-945b-8abcfa2ca38c_1122x216.png 424w, /__u/substackcdn.com/image/fetch/$s_!o4-E!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06ed1ea-4d29-4638-945b-8abcfa2ca38c_1122x216.png 848w, /__u/substackcdn.com/image/fetch/$s_!o4-E!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06ed1ea-4d29-4638-945b-8abcfa2ca38c_1122x216.png 1272w, /__u/substackcdn.com/image/fetch/$s_!o4-E!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06ed1ea-4d29-4638-945b-8abcfa2ca38c_1122x216.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3><strong>HHI histograms</strong></h3><p>I asked Claude to make a four-panel histogram of the county-level HHI distribution for 2007, 2015, 2021, and 2024, weighted by dollar volume:</p><pre><code><code>Make a histogram of HHI across counties for 2007, 2015, 2021, and 2024. 
Make a four-panel graph. Make this dollar weighted.</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!y3_v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58e97268-eed5-42b0-b981-84ef609b688d_1916x1376.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!y3_v!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58e97268-eed5-42b0-b981-84ef609b688d_1916x1376.png 424w, /__u/substackcdn.com/image/fetch/$s_!y3_v!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58e97268-eed5-42b0-b981-84ef609b688d_1916x1376.png 848w, /__u/substackcdn.com/image/fetch/$s_!y3_v!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58e97268-eed5-42b0-b981-84ef609b688d_1916x1376.png 1272w, /__u/substackcdn.com/image/fetch/$s_!y3_v!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58e97268-eed5-42b0-b981-84ef609b688d_1916x1376.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!y3_v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58e97268-eed5-42b0-b981-84ef609b688d_1916x1376.png" width="1456" height="1046" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/58e97268-eed5-42b0-b981-84ef609b688d_1916x1376.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1046,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:591432,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193223396?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58e97268-eed5-42b0-b981-84ef609b688d_1916x1376.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!y3_v!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58e97268-eed5-42b0-b981-84ef609b688d_1916x1376.png 424w, /__u/substackcdn.com/image/fetch/$s_!y3_v!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58e97268-eed5-42b0-b981-84ef609b688d_1916x1376.png 848w, /__u/substackcdn.com/image/fetch/$s_!y3_v!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58e97268-eed5-42b0-b981-84ef609b688d_1916x1376.png 1272w, /__u/substackcdn.com/image/fetch/$s_!y3_v!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58e97268-eed5-42b0-b981-84ef609b688d_1916x1376.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The results were interesting: HHI is relatively low across all four years for dollar-weighted counties. The weighted mean ranges from about 308 to 356&#8212;well below standard concentration thresholds. Big-dollar counties have hundreds of competing lenders. The distribution is very right-skewed: rural counties tend to be concentrated, but they don&#8217;t account for much volume. Overall, mortgage lending is a competitive industry at the county level, though who the major players are has shifted.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a></p><h2><strong>The metadata table: context engineering for data</strong></h2><p>When you open the DuckDB database by running <code>duckdb database.db</code>, you are now inside of a structured database. You can run <code>SHOW TABLES</code> and see three things: the main HMDA data, a metadata table, and (eventually) a county_year aggregate table. The metadata table documents every column&#8212;name, description, type, valid values, which years it&#8217;s available in.</p><p>Why does this matter? Because the next time you (or a coauthor, or Claude in a new session) opens this database, they can run:</p><pre><code><code>SELECT * FROM metadata;</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!FsE0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f62d2ca-7a57-4d33-9d5f-6c883e494c0f_3482x658.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!FsE0!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f62d2ca-7a57-4d33-9d5f-6c883e494c0f_3482x658.png 424w, /__u/substackcdn.com/image/fetch/$s_!FsE0!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f62d2ca-7a57-4d33-9d5f-6c883e494c0f_3482x658.png 848w, /__u/substackcdn.com/image/fetch/$s_!FsE0!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f62d2ca-7a57-4d33-9d5f-6c883e494c0f_3482x658.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FsE0!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f62d2ca-7a57-4d33-9d5f-6c883e494c0f_3482x658.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!FsE0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f62d2ca-7a57-4d33-9d5f-6c883e494c0f_3482x658.png" width="1456" height="275" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f62d2ca-7a57-4d33-9d5f-6c883e494c0f_3482x658.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:275,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:255442,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193223396?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f62d2ca-7a57-4d33-9d5f-6c883e494c0f_3482x658.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!FsE0!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f62d2ca-7a57-4d33-9d5f-6c883e494c0f_3482x658.png 424w, /__u/substackcdn.com/image/fetch/$s_!FsE0!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f62d2ca-7a57-4d33-9d5f-6c883e494c0f_3482x658.png 848w, /__u/substackcdn.com/image/fetch/$s_!FsE0!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f62d2ca-7a57-4d33-9d5f-6c883e494c0f_3482x658.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FsE0!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f62d2ca-7a57-4d33-9d5f-6c883e494c0f_3482x658.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>And immediately understand the dataset without anyone re-explaining anything. It&#8217;s the same principle as writing progress to files&#8212;but for data. The metadata survives compaction, session restarts, and coauthor handoffs. It&#8217;s context engineering applied to datasets.</p><p>Think about it this way. If I hand you a CSV with columns named <code>respondent_id</code>, <code>action_taken_name</code>, <code>county_code</code>&#8212;you can sort of guess what they mean. But if I hand you a database where you can query <code>SELECT * FROM metadata WHERE column_name = 'action_taken'</code> and get back &#8220;1 = originated, 2 = approved not accepted, 3 = denied, 4 = application withdrawn, 5 = file closed for incompleteness&#8221;&#8212;now you actually know what you&#8217;re working with. Claude can write correct SQL against this database without ever seeing the raw data.</p><p>Would you have built this metadata table by hand? Honestly, probably not. I wouldn&#8217;t have. It&#8217;s the kind of thing you know you <em>should</em> do but never get around to because the payoff is downstream and the cost is now. With Claude, the cost is basically zero&#8212;you just describe what you want documented and it writes the metadata. So you end up with better infrastructure than you&#8217;d have built yourself, not because you&#8217;re more disciplined, but because the tool makes the right thing easy.</p><h2><strong>Classifying fintech lenders</strong></h2><p>This is where the project gets into actual research territory. I wanted to classify lenders as fintech/non-bank versus traditional banks, starting from the <a href="https://academic.oup.com/rfs/article-abstract/32/5/1854/5427780">Fuster et al. (2019)</a> classification and extending it forward.</p><p>But before diving in, I asked Claude a question I&#8217;d recommend for any complex task:</p><pre><code><code>I want to classify lenders as fintech or shadow banks versus traditional. 
Start with the lender classification from Fuster, Plosser, Schnabl and 
Vickery (2019). Tell me what it would take to do this task before you 
try anything complicated. Is this feasible? What might be missing?</code></code></pre><p>This is the &#8220;ask your RA what&#8217;s involved before committing&#8221; approach. And it immediately surfaced three problems. First, the harmonized database had lender IDs but <em>no lender names</em> &#8212; the LAR files simply don&#8217;t carry them. Without names, you can&#8217;t match to the Fuster et al. classification list. Second, the pre-2018 lender ID (agency code + respondent ID) and the post-2018 LEI are completely different identifier systems, with no obvious crosswalk in the LAR data itself. Third, I&#8217;d need the Fuster et al. list and a sensible extension for post-2019 entrants.</p><p>The fix for the first two problems lives in a separate set of small files &#8212; the HMDA <strong>Panel</strong> files (institution-level metadata published alongside the LAR). Crucially, the panel files contain <code>other_lender_code</code> (a mechanical bank vs. non-bank indicator: 0 = bank/thrift/credit union, 1/2/5 = bank subsidiary, 3 = independent mortgage company), and the 2018 panel contains an <code>id_2017</code> field that explicitly bridges pre-2018 respondent IDs to post-2018 LEIs. That one field solves the cross-era linkage problem. A separate but related artifact, the <strong>Transmittal Sheet</strong>, contains lender names but not <code>other_lender_code</code> &#8212; a distinction that matters for 2024, where only the TS had been published at the time.</p><p>Claude researched how to get these files, spent about 75,000 tokens on the investigation, and came back with a plan: download the panel files for each year (small files, one per year), merge on lender ID, and then classify. Panel files were available from the CFPB for 2007-2023; for 2024, Claude used the Transmittal Sheet for names and carried <code>other_lender_code</code> forward from the 2023 panel for lenders that appeared in both years.</p><h3><strong>Downloading the panel files</strong></h3><p>Claude downloaded the 18 panel files. One thing I noticed that I wouldn&#8217;t normally like: because these were small files, Claude just ran the curl commands inline rather than writing a download script. This works, but it&#8217;s not reproducible&#8212;if you wanted to re-run the pipeline from scratch, those downloads wouldn&#8217;t be captured. I&#8217;d normally go back and have it write a proper script. For a demo, it was fine.</p><h3><strong>The classification</strong></h3><p>Claude built a <code>lender_classification</code> table using the Fuster et al. list as a base&#8212;names like Quicken Loans (now Rocket Mortgage), LoanDepot, and others that the original paper identified as fintech lenders. It then extended the list with additional fintech lenders for 2019-2024: Better Mortgage, SoFi, and others.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!dUfW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f16246e-b04f-4474-bf64-fc3914824ba3_2672x1692.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!dUfW!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f16246e-b04f-4474-bf64-fc3914824ba3_2672x1692.png 424w, /__u/substackcdn.com/image/fetch/$s_!dUfW!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f16246e-b04f-4474-bf64-fc3914824ba3_2672x1692.png 848w, /__u/substackcdn.com/image/fetch/$s_!dUfW!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f16246e-b04f-4474-bf64-fc3914824ba3_2672x1692.png 1272w, /__u/substackcdn.com/image/fetch/$s_!dUfW!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f16246e-b04f-4474-bf64-fc3914824ba3_2672x1692.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!dUfW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f16246e-b04f-4474-bf64-fc3914824ba3_2672x1692.png" width="1456" height="922" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8f16246e-b04f-4474-bf64-fc3914824ba3_2672x1692.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:922,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:632617,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193223396?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f16246e-b04f-4474-bf64-fc3914824ba3_2672x1692.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!dUfW!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f16246e-b04f-4474-bf64-fc3914824ba3_2672x1692.png 424w, /__u/substackcdn.com/image/fetch/$s_!dUfW!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f16246e-b04f-4474-bf64-fc3914824ba3_2672x1692.png 848w, /__u/substackcdn.com/image/fetch/$s_!dUfW!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f16246e-b04f-4474-bf64-fc3914824ba3_2672x1692.png 1272w, /__u/substackcdn.com/image/fetch/$s_!dUfW!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f16246e-b04f-4474-bf64-fc3914824ba3_2672x1692.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The classification lets you ask questions like: what&#8217;s Rocket Mortgage&#8217;s share in LA County? How has the fintech share of originations evolved over time? These are the building blocks for the Fuster et al. style of analysis.</p><h2><strong>The figure</strong></h2><p>For the payoff, I asked Claude to make a figure showing the trend in fintech origination share over time, using Kieran Healy styling:</p><pre><code><code>Please make a figure of the trend in fintech origination share over time 
in the dataset, using Kieran Healy stylings for plotting.</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Qenb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc72f251b-6b8e-4666-bf5a-1100aa59f001_1769x1076.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Qenb!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc72f251b-6b8e-4666-bf5a-1100aa59f001_1769x1076.png 424w, /__u/substackcdn.com/image/fetch/$s_!Qenb!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc72f251b-6b8e-4666-bf5a-1100aa59f001_1769x1076.png 848w, /__u/substackcdn.com/image/fetch/$s_!Qenb!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc72f251b-6b8e-4666-bf5a-1100aa59f001_1769x1076.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Qenb!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc72f251b-6b8e-4666-bf5a-1100aa59f001_1769x1076.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Qenb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc72f251b-6b8e-4666-bf5a-1100aa59f001_1769x1076.png" width="1456" height="886" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c72f251b-6b8e-4666-bf5a-1100aa59f001_1769x1076.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:886,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:147892,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/193223396?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc72f251b-6b8e-4666-bf5a-1100aa59f001_1769x1076.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Qenb!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc72f251b-6b8e-4666-bf5a-1100aa59f001_1769x1076.png 424w, /__u/substackcdn.com/image/fetch/$s_!Qenb!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc72f251b-6b8e-4666-bf5a-1100aa59f001_1769x1076.png 848w, /__u/substackcdn.com/image/fetch/$s_!Qenb!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc72f251b-6b8e-4666-bf5a-1100aa59f001_1769x1076.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Qenb!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc72f251b-6b8e-4666-bf5a-1100aa59f001_1769x1076.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The figure tells a clear story. The light blue band represents non-bank lenders (not classified as fintech)&#8212;they&#8217;ve always been a significant share of mortgage origination, and they were heavily involved in securitization during the pre-crisis era. The dark blue band shows the Fuster et al. fintech lenders, and their share has grown substantially, especially after 2015 when Quicken Loans (now Rocket Mortgage) became the largest mortgage lender in the country. Nationally, the fintech share of originations rose from about 1.1% in 2007 to a peak of 16.3% in 2021 during the COVID refi boom, then settled back to roughly 11% by 2024. The broader non-bank share rose from about 40% in 2007 to 62% in 2020.</p><p>The residual&#8212;traditional bank lending&#8212;has declined from a majority share during the crisis to under 40% of all lending by 2024. This is the collapse that Fuster et al. and others have documented, now extended through the post-COVID rate cycle. One honest caveat visible in the figure: there&#8217;s a small dip around 2018 that is an artifact of the identifier transition (respondent_id &#8594; LEI), not a real market shift &#8212; some lender matches are weaker in the handoff year. It&#8217;s exactly the kind of thing you&#8217;d want to flag in a footnote if this became an actual paper.</p><p>Whether the &#8220;other non-bank&#8221; lenders should also count as fintech is a real research question&#8212;classification decisions like this are where domain expertise matters. But the data infrastructure is in place to explore any classification scheme you want. A</p><h2><strong>What we built</strong></h2><p>The final project structure:</p><pre><code><code>video-04-large-datasets/
&#9500;&#9472;&#9472; data/
&#9474;   &#9500;&#9472;&#9472; raw/                    (70GB of CSV files)
&#9474;   &#9500;&#9472;&#9472; parquet/                (6GB, 15x compression)
&#9474;   &#9492;&#9472;&#9472; hmda_panel.duckdb       (queryable database)
&#9500;&#9472;&#9472; config.py                   (URLs, column mappings, schema)
&#9500;&#9472;&#9472; download.py                 (download with resume)
&#9500;&#9472;&#9472; convert.py                  (CSV &#8594; parquet)
&#9500;&#9472;&#9472; harmonize.py                (crosswalk pre/post-2018)
&#9500;&#9472;&#9472; build_db.py                 (DuckDB assembly + metadata)
&#9500;&#9472;&#9472; run_pipeline.py             (orchestrate everything)
&#9492;&#9472;&#9472; prompts.md                  (the prompts used)
</code></code></pre><p>One DuckDB file that contains:</p><ul><li><p><strong>hmda_data</strong>: 291 million harmonized rows</p></li><li><p><strong>metadata</strong>: column descriptions, types, valid values, year availability</p></li><li><p><strong>county_year</strong>: aggregate table with originations, volume, HHI, denial rates</p></li><li><p><strong>lender_classification</strong>: fintech/non-bank/traditional labels</p></li></ul><p>Any new Claude session can open that <code>.duckdb</code> file, query the metadata, and start working immediately. No re-downloading, no re-explaining, no re-parsing.</p><h2><strong>Takeaways</strong></h2><ol><li><p><strong>The cost of doing data engineering properly has collapsed.</strong> This is the main takeaway. Building a harmonized, documented, queryable database from 70 GB of messy government CSVs is <em>data engineering</em>. A year ago, the choice was: spend a week learning parquet and DuckDB and SQL, or just load the CSV into Stata and deal with it. Now the choice is: describe what you want in English and have Claude build the infrastructure. The fixed cost that made sloppy workflows rational is gone. </p></li><li><p><strong>When data doesn&#8217;t fit in RAM, don&#8217;t force it.</strong> DuckDB and parquet are the right tools for datasets in the tens-of-gigabytes range. DuckDB reads parquet files lazily&#8212;it never loads everything into memory. A 291-million-row aggregation completes in seconds. Most economists I know are still working with CSVs and dataframes; switching to parquet + DuckDB is one of the highest-value changes you can make. </p></li><li><p><strong>Metadata tables are context engineering for data.</strong> This is the conceptual contribution of this video. When your data is too big to fit in the context window, you store schema, descriptions, value labels, and documentation <em>in the database itself</em>. Claude queries the metadata instead of scanning raw data. It&#8217;s the &#8220;write state to files&#8221; principle from <a href="/__u/paulgp.substack.com/p/getting-started-with-claude-code">post 1</a>, applied to datasets. It survives compaction, new sessions, and coauthor handoffs. It also makes the dataset self-documenting for human collaborators&#8212;your coauthor doesn&#8217;t need to call you to ask what <code>action_taken = 3</code> means.</p></li><li><p><strong>Plan mode before code.</strong> For a complex pipeline like this&#8212;multiple data sources, format changes, crosswalks, aggregation&#8212;having Claude design the architecture before writing any code is essential. The plan becomes a reference document that persists on disk even after the context is compacted.</p></li><li><p><strong>Ask what&#8217;s feasible.</strong> When I wanted the fintech classification, I didn&#8217;t say &#8220;go do it.&#8221; I said &#8220;tell me what it would take&#8212;is this feasible? What might be missing?&#8221; Claude immediately identified that we had no lender names, researched where to get them, and proposed a solution. </p></li><li><p><strong>Sub-agents are powerful but imperfect.</strong> The parallel research agents were great&#8212;one exploring the project, one researching data formats. But the explorer agent&#8217;s instructions didn&#8217;t include my &#8220;stay in this directory&#8221; constraint, so it kept trying to look at the parent folder. When Claude writes prompts for sub-agents, it doesn&#8217;t always pass through all your constraints. </p></li><li><p><strong>The big datasets are more accessible than you think.</strong> I&#8217;ve done this same workflow with <a href="https://github.com/paulgp/ipeds-database">IPEDS (postsecondary institution data)</a>, <a href="https://github.com/paulgp/patent-data">Patent data</a>, and other large administrative datasets. The pattern is the same: download, harmonize, build a DuckDB database with metadata. If you&#8217;re a graduate student or junior researcher interested in working with new data, the barrier to entry has gotten dramatically lower. The bottleneck used to be &#8220;can I set up the infrastructure?&#8221; Now the bottleneck is &#8220;do I have a question worth asking?&#8221; That&#8217;s a much better bottleneck to have.</p></li></ol><h2><strong>What&#8217;s next</strong></h2><p>In the <a href="https://file+.vscode-resource.vscode-cdn.net/video-05-writing-reporting/">next post</a>, we shift from data to writing. How can we effectively use Claude Code in writing, while not relying on it in ways that makes our writing banal. I have views on this, but my main goal will be to show you useful tools.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>As a follow-up example, check out this dataset that combines IPEDS data that I did with Claude Code: <a href="https://github.com/paulgp/ipeds-database">IPEDS data on postsecondary institutions</a></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>Specifically, when denying permissions, I hit <code>tab</code> on the <code>No</code> option, and then added the instruction &#8220;you should not look in the parent directory&#8221;.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>If I were doing this on my own and had more time, I would&#8217;ve been curious at how correlated this is over time. How much persistence is there? The interested reader should take a look!</p></div></div>]]></content:encoded></item><item><title><![CDATA[From EDGAR Filings to a Structured Database using Claude Code]]></title><description><![CDATA[Video 3 in a series on Claude Code]]></description><link>https://paulgp.substack.com/p/from-edgar-filings-to-a-structured</link><guid isPermaLink="false">https://paulgp.substack.com/p/from-edgar-filings-to-a-structured</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Sun, 29 Mar 2026 15:00:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/wqLZrKdevHs" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Part 3 of a series on AI coding tools for empirical research, accompanying my <a href="https://bcf.princeton.edu/markus-academy/">Markus Academy</a> video series.</em></p><div id="youtube2-wqLZrKdevHs" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;wqLZrKdevHs&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/wqLZrKdevHs?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>In the last post, we pulled structured data from a government API&#8212;homeownership rates by age, already in nice tabular form. But a lot of research data isn&#8217;t like that. It&#8217;s buried in PDFs, HTML filings, regulatory documents, earnings call transcripts. Getting from &#8220;the information exists somewhere on the internet&#8221; to &#8220;I have a queryable dataset&#8221; is often the hardest part of a project.</p><p>So we&#8217;re going to do exactly that: scrape SEC EDGAR, parse messy 10-K filings, extract specific sections, build a structured database, and run a simple analysis &#8211; all through Claude Code. The whole pipeline takes about 30 minutes, and it produces an actual finding.</p><h2><strong>The question</strong></h2><p>Here&#8217;s what motivated this: the 2025 tariff escalation has been the dominant policy story in markets. If you follow trade-exposed firms at all, you&#8217;ve seen the stock price reactions, the earnings call commentary, the analyst reports. But how did firms change their <em>formal risk disclosures</em> in response? Item 1A of the 10-K &#8211; the Risk Factors section &#8211; is where companies are legally required to describe material risks. It&#8217;s the section that lawyers agonize over. When a new risk emerges, it shows up here.</p><p>So the question is simple: <em>did firms increase their tariff-related language in 10-K Risk Factors filings after the 2025 tariff escalation?</em> This connects to the broader literature on policy uncertainty measurement (think <a href="https://www.policyuncertainty.com/">Baker, Bloom &amp; Davis</a>) and risk factor disclosure (e.g., <a href="https://link.springer.com/article/10.1007/s11142-013-9258-3">Campbell et al., 2014</a>). But today we&#8217;re just doing the descriptive work &#8211; building the dataset and seeing what&#8217;s there.</p><h2><strong>Scraping EDGAR</strong></h2><p>I start Claude Code in an empty directory. Unlike the last post where I was vague about the data source, here I know exactly where the data lives &#8211; SEC EDGAR &#8211; and I can give Claude some useful context about how it works.</p><pre><code><code>&gt; &#10095; I want to build a dataset of 10-K Risk Factors from SEC EDGAR
  to study how tariff-related risk disclosure changed 2022&#8211;2025.
  Here's what I know about EDGAR:
  - Every company has a CIK (Central Index Key)
  - The EDGAR filing API is at https://efts.sec.gov/LATEST/
  - Rate limit: 10 requests/second, must include User-Agent header
  I want 10-Ks for ~30 trade-exposed firms &#8212; manufacturing, retail,
  tech hardware. Caterpillar, Nike, Apple, Deere, Ford, 3M, Intel</code></code></pre><p>If you remember from the first video, I talked about how well Claude does as a function of how clear and precise you are. The more precise I am, the less it has to search randomly for things. Claude needs to know about rate limits and User-Agent headers <em>before</em> it writes the code, not after it gets a 403 error (of course, it still screwed up when doing this &#8212; I wasn&#8217;t insistent enough).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!QwCQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1293d3e-62ae-4ebf-8f63-43ce88bc199f_3330x924.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!QwCQ!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1293d3e-62ae-4ebf-8f63-43ce88bc199f_3330x924.png 424w, /__u/substackcdn.com/image/fetch/$s_!QwCQ!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1293d3e-62ae-4ebf-8f63-43ce88bc199f_3330x924.png 848w, /__u/substackcdn.com/image/fetch/$s_!QwCQ!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1293d3e-62ae-4ebf-8f63-43ce88bc199f_3330x924.png 1272w, /__u/substackcdn.com/image/fetch/$s_!QwCQ!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1293d3e-62ae-4ebf-8f63-43ce88bc199f_3330x924.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!QwCQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1293d3e-62ae-4ebf-8f63-43ce88bc199f_3330x924.png" width="1456" height="404" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d1293d3e-62ae-4ebf-8f63-43ce88bc199f_3330x924.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:404,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:229214,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/192434664?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1293d3e-62ae-4ebf-8f63-43ce88bc199f_3330x924.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!QwCQ!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1293d3e-62ae-4ebf-8f63-43ce88bc199f_3330x924.png 424w, /__u/substackcdn.com/image/fetch/$s_!QwCQ!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1293d3e-62ae-4ebf-8f63-43ce88bc199f_3330x924.png 848w, /__u/substackcdn.com/image/fetch/$s_!QwCQ!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1293d3e-62ae-4ebf-8f63-43ce88bc199f_3330x924.png 1272w, /__u/substackcdn.com/image/fetch/$s_!QwCQ!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1293d3e-62ae-4ebf-8f63-43ce88bc199f_3330x924.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>Plan mode and interactive design</strong></h3><p>Something notable happened right away that didn&#8217;t occur in the previous videos: Claude entered <em>plan mode</em>. It looked at the prompt, recognized this was a substantial multi-step project, and said it wanted to design the approach before writing any code. It researched the EDGAR API&#8212;fetching documentation, looking at examples on GitHub, understanding the filing index structure&#8212;before proposing anything.</p><p>Then Claude did something I want to highlight: it asked me questions. Three of them:</p><ol><li><p><strong>Database format</strong>: &#8220;Do you want a SQLite database? A flat file? Both?&#8221; I told it I wanted <a href="https://duckdb.org/">DuckDB</a>&#8212;it&#8217;s similar to SQLite but it&#8217;s how I prefer to do things.</p></li><li><p><strong>Keyword approach</strong>: &#8220;Do you want keyword search, full text extraction with flagging, or LLM classification (which would cost more)?&#8221; I chose keyword search&#8212;just look for words related to tariffs.</p></li><li><p><strong>User-Agent</strong>: &#8220;What entity should we use for the User-Agent header? Do you want to fill it in later or provide it now?&#8221; I gave it my name and email right there.</p></li></ol><p>Markus also had a good suggestion during the conversation: add &#8220;liberation day&#8221; to the tariff keywords, since April 2, 2025 was the major tariff announcement. Claude immediately updated the keyword list to include &#8220;liberation day&#8221; and &#8220;liberation day tariff.&#8221;</p><p>After this planning phase, Claude saved its plan to a file&#8212;just like the intentional compaction approach I described in post 1. The plan included the target company list, the database schema, the keyword dictionary, and the pipeline architecture. Then it cleared the context window but kept the plan on disk, so it could start fresh with the full context budget while retaining all the design decisions we&#8217;d made. This is exactly the pattern we talked about: research &#8594; write plan to file &#8594; new session reads plan &#8594; execute.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!MiTO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecb056f0-a967-4280-8b27-7d88382bab64_2080x946.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!MiTO!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecb056f0-a967-4280-8b27-7d88382bab64_2080x946.png 424w, /__u/substackcdn.com/image/fetch/$s_!MiTO!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecb056f0-a967-4280-8b27-7d88382bab64_2080x946.png 848w, /__u/substackcdn.com/image/fetch/$s_!MiTO!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecb056f0-a967-4280-8b27-7d88382bab64_2080x946.png 1272w, /__u/substackcdn.com/image/fetch/$s_!MiTO!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecb056f0-a967-4280-8b27-7d88382bab64_2080x946.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!MiTO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecb056f0-a967-4280-8b27-7d88382bab64_2080x946.png" width="1456" height="662" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ecb056f0-a967-4280-8b27-7d88382bab64_2080x946.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:662,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:187063,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/192434664?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecb056f0-a967-4280-8b27-7d88382bab64_2080x946.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!MiTO!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecb056f0-a967-4280-8b27-7d88382bab64_2080x946.png 424w, /__u/substackcdn.com/image/fetch/$s_!MiTO!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecb056f0-a967-4280-8b27-7d88382bab64_2080x946.png 848w, /__u/substackcdn.com/image/fetch/$s_!MiTO!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecb056f0-a967-4280-8b27-7d88382bab64_2080x946.png 1272w, /__u/substackcdn.com/image/fetch/$s_!MiTO!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecb056f0-a967-4280-8b27-7d88382bab64_2080x946.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>Building and running the pipeline</strong></h3><p>Claude wrote about 480 lines of Python to implement the pipeline. It has all the phases: CIK lookup, filing index queries, document downloading, HTML parsing with BeautifulSoup, and structured storage. The practical features matter&#8212;it caches downloaded HTML so you don&#8217;t re-download on subsequent runs, it logs errors without stopping the batch, and it tracks every download attempt in metadata.</p><p>One useful feature: you can queue a follow-up question while Claude is running a long process. While the downloader was chugging through filings, I typed my next question and it waited until the current task finished before answering.</p><pre><code><code>&gt; Run it for the full list. Let's see how it goes.</code></code></pre><p>The script found CIKs for 29 out of 30 firms. The one failure: Gap Inc, which was listed as ticker &#8220;GPS&#8221; in our list. Claude couldn&#8217;t find a CIK for it, so I asked what happened. It turned out Gap Inc. had rebranded and was traded under &#8220;GAP&#8221; in some datasets, not &#8220;GPS.&#8221; Claude looked up the correct CIK (39911), updated the script to use the right ticker, and re-ran. Because the script had caching built in, it only needed to download four new files&#8212;the rest were already on disk. Took about 43 seconds.</p><p>I also demonstrated something useful during the download: I accidentally hit escape and interrupted Claude mid-process. But because of how the context window works, I could just type &#8220;please continue&#8221; and it picked up right where it left off. (You can also hit Ctrl+O to toggle the &#8220;thinking&#8221; view and see Claude&#8217;s internal reasoning at any point.)</p><h2><strong>Extracting and structuring</strong></h2><p>Raw HTML files sitting in folders aren&#8217;t research data. You can&#8217;t query them, you can&#8217;t join them to Compustat, you can&#8217;t do anything without loading everything into memory and parsing it every time. I need a <em>structured database</em>.</p><p>Claude wrote a parser that handles the formatting variations &#8211; and there are a lot. Some filings are wrapped in HTML with <code>&lt;div&gt;</code> tags and CSS styling. Some are plain text with dots and dashes for formatting. The section headers sometimes say &#8220;ITEM 1A&#8221; in all caps, sometimes &#8220;Item 1A.&#8221; with a period, sometimes they&#8217;re inside an <code>&lt;a&gt;</code> tag. Claude&#8217;s parser tries multiple regex patterns and falls back gracefully.</p><p>The first pass extracted Item 1A from 112 out of 120 filings. I asked why eight were missing. Claude investigated and found that Honeywell and Intel had a formatting edge case: &#8220;Item 1A&#8221; and &#8220;Risk Factors&#8221; appeared on <em>separate lines</em> with a newline between them, but the regex required them on the same line. Claude fixed the regex to allow newlines and re-ran: 119 out of 120. The one remaining holdout was 3M, which had an unusual filing structure that would need manual attention.</p><p>This is the &#8220;95% fast, last 5% requires judgment&#8221; pattern. For a quick analysis, 119 out of 120 is fine. For a published paper, I&#8217;d go back and hand-check 3M&#8217;s filing. Either way, the database is built.</p><h2><strong>Querying the database</strong></h2><p>Now the payoff. I have a structured DuckDB database and I can actually <em>ask questions</em> of the data.</p><pre><code><code>&gt; Which firms mentioned tariffs the most?</code></code></pre><p>Claude wrote a query and came back with specific results. Deere (John Deere) leads with the most tariff mentions, increasing from three to four over the 2022-2025 period. Manufacturing and tech hardware firms mention tariffs most frequently; retail firms mention them least. Walmart only started mentioning tariffs in 2025. AGO dropped from four mentions to zero.</p><p>The context snippets are useful too. In earlier filings, you see generic language: &#8220;changes in trade policy could adversely affect our business.&#8221; In 2025, you see specific language referencing Section 301, specific tariff rates, and particular product categories. The specificity of the language tracks the specificity of the policy.</p><h3><strong>Extending to 2010</strong></h3><p>I then asked Claude to download the 2010 10-Ks for the same set of firms and run the same tariff keyword analysis. The comparison was interesting: even in 2010, 18 out of the roughly 30 companies mentioned tariffs. But the <em>intensity</em> was different&#8212;25 total tariff paragraphs across 18 firms in 2010, versus 26 to 35 per year in the 2022-2025 period across roughly the same number of firms. The vocabulary had also shifted: in 2010, the terms were narrower&#8212;&#8220;tariff,&#8221; &#8220;trade restrictions,&#8221; &#8220;anti-dumping,&#8221; &#8220;countervailing duties.&#8221; By 2025, the language had expanded to include &#8220;trade tension,&#8221; &#8220;trade dispute,&#8221; &#8220;trade war,&#8221; &#8220;liberation day.&#8221; The breadth of the risk disclosure, not just its frequency, had changed.</p><p>This is a finding. Not a causal result &#8211; you&#8217;d need more structure for that &#8211; but a clean descriptive fact that would motivate a deeper analysis. If you were interested in the cross-section&#8212;which types of firms saw the biggest increases&#8212;you could extend this to all 500 S&amp;P firms without changing the pipeline. The cost of expanding the sample is low. We did the whole thing in about 30 minutes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!rTK6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bff0d79-3041-41f8-a101-93684bf85e1e_3130x954.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!rTK6!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bff0d79-3041-41f8-a101-93684bf85e1e_3130x954.png 424w, /__u/substackcdn.com/image/fetch/$s_!rTK6!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bff0d79-3041-41f8-a101-93684bf85e1e_3130x954.png 848w, /__u/substackcdn.com/image/fetch/$s_!rTK6!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bff0d79-3041-41f8-a101-93684bf85e1e_3130x954.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rTK6!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bff0d79-3041-41f8-a101-93684bf85e1e_3130x954.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!rTK6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bff0d79-3041-41f8-a101-93684bf85e1e_3130x954.png" width="1456" height="444" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9bff0d79-3041-41f8-a101-93684bf85e1e_3130x954.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:444,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:263180,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/192434664?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bff0d79-3041-41f8-a101-93684bf85e1e_3130x954.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!rTK6!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bff0d79-3041-41f8-a101-93684bf85e1e_3130x954.png 424w, /__u/substackcdn.com/image/fetch/$s_!rTK6!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bff0d79-3041-41f8-a101-93684bf85e1e_3130x954.png 848w, /__u/substackcdn.com/image/fetch/$s_!rTK6!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bff0d79-3041-41f8-a101-93684bf85e1e_3130x954.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rTK6!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bff0d79-3041-41f8-a101-93684bf85e1e_3130x954.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>The final pipeline</strong></h2><pre><code><code>project/
&#9500;&#9472;&#9472; data/
&#9474;   &#9500;&#9472;&#9472; firm_list.csv                             (input: tickers)
&#9474;   &#9500;&#9472;&#9472; filings/
&#9474;   &#9474;   &#9500;&#9472;&#9472; AAPL/
&#9474;   &#9474;   &#9474;   &#9500;&#9472;&#9472; AAPL_2022_10K.html
&#9474;   &#9474;   &#9474;   &#9500;&#9472;&#9472; AAPL_2023_10K.html
&#9474;   &#9474;   &#9474;   &#9492;&#9472;&#9472; ...
&#9474;   &#9474;   &#9500;&#9472;&#9472; CAT/
&#9474;   &#9474;   &#9492;&#9472;&#9472; ...
&#9474;   &#9500;&#9472;&#9472; filings.db                                (DuckDB database)
&#9474;   &#9492;&#9472;&#9472; metadata.csv                              (download tracking)
&#9500;&#9472;&#9472; figures/
&#9474;   &#9492;&#9472;&#9472; tariff_disclosure.pdf
&#9500;&#9472;&#9472; download_filings.py
&#9500;&#9472;&#9472; extract_and_structure.py
&#9500;&#9472;&#9472; analyze.py
&#9500;&#9472;&#9472; requirements.txt
&#9500;&#9472;&#9472; Justfile
&#9492;&#9472;&#9472; README.md</code></code></pre><p>The key thing is the database. <code>filings.db</code> is the reusable research asset &#8211; not the raw HTML files, not the text extractions. Once you have a structured database, you can: </p><ul><li><p>Add new keywords without re-parsing all the filings </p></li><li><p>Join to other datasets (stock returns around filing dates, firm characteristics from Compustat) </p></li><li><p>Run SQL queries directly instead of writing Python parsing code every time </p></li><li><p>Hand the database to a coauthor who doesn&#8217;t need to re-run the scraping pipeline</p></li></ul><p>This is the pattern for any text-as-data project: scrape &#8594; parse &#8594; structure &#8594; analyze. The raw files are an intermediate product. The database is the deliverable.</p><h2><strong>A few things I&#8217;ve learned</strong></h2><ol><li><p><strong>Front-load context for scraping tasks.</strong> Tell Claude about rate limits, authentication, API structure, and data format <em>before</em> it writes the code. With EDGAR specifically, mentioning the User-Agent requirement and the 10 req/sec limit upfront avoids a whole round of debugging.</p></li><li><p><strong>Let Claude ask you questions.</strong> This was different from the earlier videos. Rather than specifying every detail upfront, I gave Claude the high-level task and it asked me the design decisions: database format, keyword approach, user-agent identity. These are research decisions&#8212;I should be making them&#8212;but I don&#8217;t need to anticipate every one in the initial prompt.</p></li><li><p><strong>Build the database schema yourself.</strong> Or at least approve it. What tables do you need? What keywords matter? What metadata should you track? Claude proposed a schema, but the choices&#8212;like tracking keyword counts with context snippets for spot-checking&#8212;reflect domain knowledge about what I&#8217;d need downstream. That&#8217;s the researcher&#8217;s job.</p></li><li><p><strong>Resume capability is not optional.</strong> When you&#8217;re downloading 100+ files over the network, things <em>will</em> fail. Timeouts, rate limit errors, missing filings, server glitches. The Gap Inc. ticker issue is a good example: because the script cached everything, fixing the ticker and re-running only required downloading four new files instead of re-doing all 120.</p></li><li><p><strong>Quality reports save you later.</strong> The extraction quality report &#8211; which filings parsed successfully, word count distributions, flagged suspiciously short extractions &#8211; is how we caught the Honeywell/Intel regex issue and the 3M edge case. Without it, you&#8217;d discover months later that part of your sample has garbage data.</p></li><li><p><strong>DuckDB (or SQLite) is underrated for research.</strong> Most economists I know work with CSVs and dataframes. But for text-as-data projects, a SQL-queryable database is a much better fit. Zero configuration (it&#8217;s a single file), queryable with SQL (which Claude writes fluently), and it handles the relational structure naturally &#8211; filings have many keywords, firms have many filings. You don&#8217;t need Postgres or a server. Just a <code>.db</code> file. I prefer DuckDB, but SQLite works too.</p></li><li><p><strong>The finding matters.</strong> It&#8217;s tempting to treat scraping as a pure infrastructure task &#8211; &#8220;I built a pipeline, done.&#8221; But the whole point is to learn something. Even a simple descriptive analysis (tariff keywords increased, the vocabulary shifted from narrow trade terms to broader policy-risk language, and Walmart didn&#8217;t mention tariffs until 2025) gives you confidence that the pipeline is working and the data is real.</p></li></ol><h2><strong>What&#8217;s next</strong></h2><p>In the next post, we tackle what happens when your dataset gets big &#8211; too big for RAM, too slow for a single machine. We&#8217;ll cover DuckDB, parallelization, and running jobs on remote clusters, all orchestrated through Claude Code.</p>]]></content:encoded></item><item><title><![CDATA[From an Empty Folder to a Figure using Claude Code]]></title><description><![CDATA[Video 2 in a series on Claude Code]]></description><link>https://paulgp.substack.com/p/from-an-empty-folder-to-a-figure</link><guid isPermaLink="false">https://paulgp.substack.com/p/from-an-empty-folder-to-a-figure</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Sun, 29 Mar 2026 14:58:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/Rp17XUPxa4I" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Part 2 of a series on AI coding tools for empirical research, accompanying my <a href="https://bcf.princeton.edu/markus-academy/">Markus Academy</a> video series. </em></p><div id="youtube2-Rp17XUPxa4I" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;Rp17XUPxa4I&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/Rp17XUPxa4I?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>In the last post, I walked through getting Claude Code set up and a high-level discussion about how to to think about using it as a tool. Now let&#8217;s use it in practice.</p><p>The question for today: <em>how has the age distribution of homeowners changed over the last 50 years?</em> This is a topic close to my own research&#8212;I have <a href="https://paulgp.github.io/papers/GoldsmithPinkham_Shue_HousingReturns.pdf">a paper with Kelly Shue on gender gaps in housing returns</a>&#8212;and it&#8217;s the kind of descriptive question that comes up when you&#8217;re scoping a new project. I&#8217;d actually posted a version of this figure on social media recently, and it made for a good demo. We all know there&#8217;s been this discussion about a shift&#8212;younger folks are not owning homes as much as older folks. But what does the data actually look like? Let&#8217;s go look.</p><h2><strong>Having Claude go get the data</strong></h2><p>I open Claude Code in a brand-new directory and describe what I want. I&#8217;m deliberately vague about where the data lives&#8212;I know the Census Bureau publishes it, and I think it might be on FRED, but I don&#8217;t have the exact table number or series ID. I&#8217;ve done this once before as a test project, but I don&#8217;t really remember exactly how to get it. It&#8217;s kind of just like you&#8217;d ask an RA to do something.</p><pre><code><code>&gt; I'm starting a new project from scratch. I want to analyze how the 
  age distribution of homeowners in the US has changed over the last 
  50 years. I think the Census Bureau publishes homeownership rates 
  by age of householder from the Census. Potentially, the data is 
  available through the Census website or through FRED.
  
  Download homeownership rates by age going back as far as possible. 
  Write this as download_data.py. Save the raw data as a CSV.</code></code></pre><p>What happened next is worth describing in some detail, because it illustrates how these tools actually work in practice&#8212;it&#8217;s not a clean straight line.</p><p>Claude&#8217;s first instinct was to try FRED. It knows the Census Bureau&#8217;s Housing Vacancies and Homeownership Survey (CPS/HVS) publishes homeownership rates by age, and that FRED carries some of these series. It found the overall homeownership rate series (<code>RHORUSQ156N</code>) easily enough. But then it got stuck trying to pin down the exact FRED series IDs for the age-specific breakdowns. You could see it going in circles&#8212;trying to recall the naming convention, guessing at series codes, not finding them. (Markus asked during the video whether you could have had one agent searching FRED and another searching the Census in parallel. The answer is yes&#8212;if we&#8217;d been more specific, Claude might have done that on its own, but I was vague enough that it went sequentially.)</p><p>Then it hit a more practical wall: the Census website threw a 403 error. A 403 error means the Census wants you to pretend to be a person&#8212;it doesn&#8217;t want bots just hammering it with requests. So Claude had to put a user-agent header on its requests, basically saying &#8220;hey, I&#8217;m a browser.&#8221; This becomes an issue whenever you start scraping, and we&#8217;ll talk about it more in the next video. If you&#8217;re interested in scraping, you have to be careful and diligent about how you interact with websites&#8212;a lot of them set things up so they aren&#8217;t bombarded by requests from web scrapers.</p><p>Once Claude got past that, it found two relevant tables on the Census Bureau&#8217;s website: - <strong>Table 19</strong>: Quarterly homeownership <em>rates</em> by age of householder, 1994 to present. Broad age groups (Under 35, 35-44, 45-54, 55-64, 65+). This is exactly the data you&#8217;d want, but it only goes back to 1994. - <strong>Table 12</strong>: Annual household <em>counts</em> (total and owner-occupied) by detailed age group, 1982 to present. More granular age breakdowns, but you have to compute the rates yourself from the counts.</p><p>Claude decided to pull <em>both</em>&#8212;different tradeoffs, both useful. It downloaded the Excel files, inspected their structure (these are messy government spreadsheets&#8212;multiple blocks of data, footnotes, merged cells), wrote parsers for each, and produced two clean CSVs. The whole process took about six minutes and 21 seconds.</p><p>I want to highlight a few things here. First, Claude made real decisions&#8212;it chose to pull both tables because they offer different tradeoffs, it computed rates from household counts when it couldn&#8217;t find pre-computed rates, and it handled the messy Excel parsing without me specifying the structure. Second, it hit a dead end with FRED and recovered. The 403 error broke the download; it figured out the user-agent fix. This is what actual data work looks like, and it&#8217;s exactly what you&#8217;d want an RA to do. I didn&#8217;t tell it to do any of this&#8212;I just said go back as far as you can.</p><p>Third&#8212;and this is important&#8212;the process wasn&#8217;t magic. The more specific you are in your query, the better it does on these types of tasks. If I&#8217;d known the exact Census table number, I could have told Claude and saved it the crawling step. But even with a deliberately vague prompt, it figured it out.</p><p>Markus asked whether you&#8217;d get the same data sources if you ran this task repeatedly. My guess is yes&#8212;there&#8217;s really one very good answer for this question (the Housing Vacancy Survey from the Census Bureau), and Claude should converge on it each time.</p><h3><strong>A note on sub-agents and the context window</strong></h3><p>One thing to notice during this process is that Claude spawned a <em>sub-agent</em> to do the web research. The main agent said to it, &#8220;Hey, you need to go look for Census homeownership data.&#8221; That sub-agent had its own context window&#8212;so it could search for &#8220;homeownership rate under 35&#8221; and &#8220;homeownership tables&#8221; and page through results without filling up the main conversation&#8217;s context. The sub-agent then reported back what it found. It&#8217;s how Claude manages a task that involves a lot of searching without blowing out the context window we talked about in the last post.</p><p>Another related point: Claude didn&#8217;t download and look at every row of data before writing the script. It read a bit of the Excel files&#8212;enough to understand the structure&#8212;and then wrote a parser based on that understanding. If you had perfect memory, you wouldn&#8217;t look at every row either. You&#8217;d glance at the structure, figure out the pattern, and write the code. Same idea.</p><h3><strong>Claude Code vs. Cowork on the same task</strong></h3><p>In the video, we ran this same task on Claude Cowork in parallel, just to see how the two compared. Cowork found the same Census data sources&#8212;it&#8217;s the same underlying model, so there&#8217;s no reason it shouldn&#8217;t. But it struggled with one thing: the sandbox. Cowork runs in a sandboxed environment, which means it can&#8217;t easily make web requests the way Claude Code can on your local machine. It wrote a download script, but the script couldn&#8217;t actually execute and query the Census website from inside the sandbox.</p><p>This is the tradeoff we discussed in the last post. Claude Code has full access to your local filesystem and network&#8212;we told it &#8220;go access the web, do whatever you want.&#8221; That&#8217;s powerful but means you need to be thoughtful about permissions and security. Cowork is more restricted, which removes a lot of privacy concerns but also limits what it can do autonomously. For data acquisition tasks like this one, Claude Code has a clear advantage.</p><h2><strong>Making the figure</strong></h2><p>This is where iterating through conversation is much faster than hand-tuning code. And I want to share a trick here&#8212;this is the number one cheat that I&#8217;ve found to be really helpful.</p><p>There&#8217;s a professor of sociology named <a href="https://kieranhealy.org/">Kieran Healy</a> who has a wonderful book called <em><a href="https://socviz.co/">Data Visualization</a></em>. It makes beautiful graphs. So when I ask Claude to make a figure, I can say:</p><pre><code><code>&gt; Please make a script to generate a figure in R with this data. 
  Please follow the best practices of making figures from Kieran Healy.</code></code></pre><p>Claude immediately translates this into specific principles: clean ggplot2, direct labeling, minimal chart junk, thoughtful color, and clear typography. It wrote 77 lines of R code and ran it.</p><p>The first version had some issues. Healy has very strong preferences for fonts, and Claude tried to use his preferred fonts, which led to a debugging session with the Cairo graphics device. There&#8217;s actually a whole blog post from Kieran Healy about this exact font issue&#8212;so it&#8217;s a well-known problem. Claude worked through it and got the figure rendering.</p><p>But the figure it produced showed the data in broad age buckets&#8212;just the five big groups&#8212;plotted as a time series. That&#8217;s useful, but I wanted something more like the figure I&#8217;d made in my earlier test: age on the x-axis, with different lines for each year, so you could see the distribution shifting over time. So I told it:</p><pre><code><code>&gt; This is great, but I want a graph where age is on the x-axis 
  and the distribution is on the y-axis and there are different 
  lines for each year. Do you have sufficiently fine-grained 
  age data for this? Can you go back and find more age buckets?</code></code></pre><p>Claude said yes&#8212;there were finer age buckets available that it hadn&#8217;t used the first time. It re-downloaded from the more detailed Excel file, re-parsed the data, and regenerated the figure with the finer age breakdowns. It even noticed that the year labels were overlapping and fixed the spacing on its own. It really is like a good RA in the sense that it tries to make nice graphs for you&#8212;it doesn&#8217;t always catch problems, but for straightforward issues like overlapping labels, it will often fix them without being asked.</p><p>A few rounds of iteration, and we had a clean figure showing the homeownership distribution by age at different points in time. You can see the crisis&#8212;2024 looks very similar to the post-financial-crisis period, and 2004 was when homeownership was highest across the board. This is the kind of thing that would take an hour of fiddling with ggplot2 parameters to get right on your own.</p><p>One thing you might notice watching the video: while Claude works, it displays status words like &#8220;cogitating&#8221; or &#8220;justiculating.&#8221; These are meaningless filler terms it shows while thinking&#8212;they don&#8217;t indicate anything about the process. <a href="https://www.linkedin.com/posts/pedrolarroy_if-the-spinner-verbs-from-claude-code-are-activity-7432310567412957184-P4zV/">You can change them. They&#8217;re just nonsense.</a></p><p>One observation from the video: Markus asked whether saying &#8220;please&#8221; makes a difference. Honestly, I don&#8217;t know. I&#8217;m just overly polite. <a href="https://arxiv.org/abs/2402.14531">There is some literature on whether being polite or rude to LLMs affects their output</a>, but I find it hard not to just say please.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!TgvX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14f208a-a79a-4b46-9edd-b8a1808f86f0_2700x1650.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!TgvX!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14f208a-a79a-4b46-9edd-b8a1808f86f0_2700x1650.png 424w, /__u/substackcdn.com/image/fetch/$s_!TgvX!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14f208a-a79a-4b46-9edd-b8a1808f86f0_2700x1650.png 848w, /__u/substackcdn.com/image/fetch/$s_!TgvX!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14f208a-a79a-4b46-9edd-b8a1808f86f0_2700x1650.png 1272w, /__u/substackcdn.com/image/fetch/$s_!TgvX!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14f208a-a79a-4b46-9edd-b8a1808f86f0_2700x1650.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!TgvX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14f208a-a79a-4b46-9edd-b8a1808f86f0_2700x1650.png" width="1456" height="890" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b14f208a-a79a-4b46-9edd-b8a1808f86f0_2700x1650.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:890,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:309436,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/192434108?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14f208a-a79a-4b46-9edd-b8a1808f86f0_2700x1650.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!TgvX!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14f208a-a79a-4b46-9edd-b8a1808f86f0_2700x1650.png 424w, /__u/substackcdn.com/image/fetch/$s_!TgvX!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14f208a-a79a-4b46-9edd-b8a1808f86f0_2700x1650.png 848w, /__u/substackcdn.com/image/fetch/$s_!TgvX!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14f208a-a79a-4b46-9edd-b8a1808f86f0_2700x1650.png 1272w, /__u/substackcdn.com/image/fetch/$s_!TgvX!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14f208a-a79a-4b46-9edd-b8a1808f86f0_2700x1650.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h3><strong>What&#8217;s done locally vs. in the cloud</strong></h3><p>Markus asked about this directly: everything that involves the LLM&#8212;the text generation, the reasoning about what script to write&#8212;happens in the cloud. But the actual execution of the R script happens on my computer. You need to have R installed locally for this to work. If you don&#8217;t have R, you could ask Claude to use Python instead, or you could ask it to install R for you. But the code runs on your machine.</p><h2><strong>The figure I made earlier</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!XFi7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15f6ca91-1ef7-422d-b400-c009eea427dc_2700x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!XFi7!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15f6ca91-1ef7-422d-b400-c009eea427dc_2700x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!XFi7!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15f6ca91-1ef7-422d-b400-c009eea427dc_2700x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!XFi7!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15f6ca91-1ef7-422d-b400-c009eea427dc_2700x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!XFi7!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15f6ca91-1ef7-422d-b400-c009eea427dc_2700x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!XFi7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15f6ca91-1ef7-422d-b400-c009eea427dc_2700x1800.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/15f6ca91-1ef7-422d-b400-c009eea427dc_2700x1800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:487971,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/192434108?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15f6ca91-1ef7-422d-b400-c009eea427dc_2700x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!XFi7!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15f6ca91-1ef7-422d-b400-c009eea427dc_2700x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!XFi7!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15f6ca91-1ef7-422d-b400-c009eea427dc_2700x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!XFi7!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15f6ca91-1ef7-422d-b400-c009eea427dc_2700x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!XFi7!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15f6ca91-1ef7-422d-b400-c009eea427dc_2700x1800.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I also showed in the video a figure I&#8217;d produced in an earlier test run&#8212;the one that got me interested in doing this as a demo. That version used R as well, with gray lines showing every year and colored lines highlighting specific decades. Claude wrote all the R code. I basically just told it what I wanted it to look like roughly and it did everything else. I kind of hinted at the style, but it would be a stretch to say I told it to make it look exactly like that.</p><p>That earlier figure is what you&#8217;d expect from the Housing Vacancy Survey: homeownership rates rising with age, the distribution shifting rightward over time (older households gaining homeownership share, younger ones losing it), and a visible dip during the financial crisis that hit younger age groups much harder than older ones. The 2004 peak is clear, and you can see that the crisis years look very similar to where we are now in 2024.</p><h2><strong>Summing up</strong></h2><p>You tell Claude what you want a graph to look like. It does it. Before, you ran a lot of things and went back and forth, fiddling with ggplot2 parameters. Now you have a conversation&#8212;the same kind of thing you&#8217;d say talking to a person. You iterate. You add stylings. And in the end, you have everything in one folder that looks like a project: scripts, data, figures, all reproducible.</p><p>The key thing: Claude does the data acquisition, works with you on the figure, and you&#8217;re always generating scripts so you can rerun everything later. The judgment&#8212;which age groups to highlight, what comparison matters, what story the figure should tell&#8212;remains yours.</p><p>A few specific things I&#8217;ve learned doing this:</p><ol><li><p><strong>Let Claude do the data acquisition.</strong> This was the biggest shift in my workflow. Instead of spending 20 minutes navigating the Census website, finding the right historical table, downloading the Excel file, and writing a parser for the messy formatting&#8212;I describe what data I need and Claude figures it out. It doesn&#8217;t always get it right on the first try, but the iteration is fast, and it recovers from dead ends on its own.</p></li><li><p><strong>Reference styles you like.</strong> Telling Claude to follow Kieran Healy&#8217;s best practices is much more effective than specifying individual ggplot2 parameters. You can do the same thing with journal styles&#8212;&#8220;use the style from the Quarterly Journal of Economics&#8221; gives it a concrete target. You&#8217;re directing the visual output, not the implementation details.</p></li><li><p><strong>Iterate in small steps.</strong> Don&#8217;t try to specify everything in one prompt. Get a first draft, then adjust. &#8220;This is great, but I want age on the x-axis&#8221; is a perfectly good follow-up. Three rounds of small changes beats one massive specification.</p></li><li><p><strong>Always generate scripts, not just outputs.</strong> I keep coming back to this because it&#8217;s tempting to just say &#8220;download the data&#8221; and let Claude do it interactively. But the <em>script</em> is what matters for reproducibility. Ask for <code>download_data.py</code>, not &#8220;download the data.&#8221; I could just rerun that code anytime I want.</p></li><li><p><strong>The judgment is still yours.</strong> Claude pulled the data and made the figure, but I brought the question&#8212;which distribution to show, what comparison matters, how to present the shifting age distribution. The research decisions remain human decisions. Claude just made the implementation instant.</p></li></ol><h2><strong>What&#8217;s next</strong></h2><p>In the <a href="/__u/paulgp.substack.com/video-03-web-scraping/">next post</a>, we tackle something more ambitious: scraping SEC EDGAR to build a dataset of corporate filings from scratch. Claude handles the API calls, the batch downloading, the section extraction, and the quality checking. That one will make it more clear what this really unlocks.</p>]]></content:encoded></item><item><title><![CDATA[Getting Started with Claude Code: A Researcher’s Setup Guide]]></title><description><![CDATA[Video 1 in a series on Claude Code]]></description><link>https://paulgp.substack.com/p/getting-started-with-claude-code</link><guid isPermaLink="false">https://paulgp.substack.com/p/getting-started-with-claude-code</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Sun, 29 Mar 2026 14:58:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/HzgByl5ZsWE" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Part 1 of a series on AI coding tools for empirical research, accompanying my <a href="https://bcf.princeton.edu/markus-academy/">Markus Academy</a> video series. This series follows an <a href="/__u/markusacademy.substack.com/p/modern-ai-for-economics-research">earlier Markus Academy mini-series with Ben Golub</a> in December 2025, which focused on using LLMs for theoretical economics work with Cursor and his software <a href="http://refine.ink">Refine.ink</a>.<br><br>These blog posts are companion pieces to go with the videos I recorded with Markus.</em></p><div><hr></div><div id="youtube2-HzgByl5ZsWE" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;HzgByl5ZsWE&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/HzgByl5ZsWE?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p></p><p>I&#8217;ve been using AI coding tools in my research workflow for the past year or two. However, this significantly accelerated last fall when I started using <a href="https://claude.com/product/claude-code">Claude Code</a>. At this point, you have very likely heard about <a href="https://www.aeaweb.org/content/file?id=23290">agentic AI</a> and the ways that is transforming coding and research. The number of posts that say <a href="https://x.com/farmerrf/status/2022076312270131606">``I had AI write a whole paper in 30 minutes!&#8217;&#8217;</a> are growing, and it feels a bit the world is shifting under our feet.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!JLCc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c23b53-ff8a-47fd-b07f-62f4681d80e6_890x755.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!JLCc!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c23b53-ff8a-47fd-b07f-62f4681d80e6_890x755.png 424w, /__u/substackcdn.com/image/fetch/$s_!JLCc!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c23b53-ff8a-47fd-b07f-62f4681d80e6_890x755.png 848w, /__u/substackcdn.com/image/fetch/$s_!JLCc!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c23b53-ff8a-47fd-b07f-62f4681d80e6_890x755.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JLCc!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c23b53-ff8a-47fd-b07f-62f4681d80e6_890x755.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!JLCc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c23b53-ff8a-47fd-b07f-62f4681d80e6_890x755.png" width="890" height="755" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/50c23b53-ff8a-47fd-b07f-62f4681d80e6_890x755.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:755,&quot;width&quot;:890,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:81594,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/192433164?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c23b53-ff8a-47fd-b07f-62f4681d80e6_890x755.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!JLCc!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c23b53-ff8a-47fd-b07f-62f4681d80e6_890x755.png 424w, /__u/substackcdn.com/image/fetch/$s_!JLCc!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c23b53-ff8a-47fd-b07f-62f4681d80e6_890x755.png 848w, /__u/substackcdn.com/image/fetch/$s_!JLCc!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c23b53-ff8a-47fd-b07f-62f4681d80e6_890x755.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JLCc!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c23b53-ff8a-47fd-b07f-62f4681d80e6_890x755.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>If you do empirical work and you&#8217;re not using these tools, you&#8217;re leaving a lot on the table. There are two reasons why I think you need to engage with these tools:</p><ol><li><p>You can do more, think about more topics, and learn new things. The distance between research idea to result is a lot smaller. I do not find the raw ideas generated by AI to be that compelling, but execution of ideas is <em>much</em> faster, and can be done more efficiently. The tedious stuff&#8212;data cleaning, debugging, reformatting, scraping&#8212;gets dramatically faster. It&#8217;s also going to encourage coding work with a much better reproducibility framework&#8212;you keep track of your path because the computer is doing it and doing it relatively quickly.</p></li><li><p>Even if you are <em>not</em> interested in using these tools, it is very important to understand what is possible, and what is not. Staying abreast in tools is important simply to understand what is AI bullshit vs. AI possibilities. As a referee, an adviser, or a co-author, you should be calibrated to what&#8217;s going on.</p></li></ol><p>The goal of these posts (and associated videos) is targeted towards: a) individuals who are unfamiliar with AI tools b) individuals who use the tools, but irregularly and c) individuals who are excited and have been using the tools, but want more ideas and background.</p><div><hr></div><h2><strong>What is Claude Code?</strong></h2><p>Claude Code is an AI assistant that runs in your terminal. You type natural language, and it reads your files, writes code, executes scripts, and interacts with your entire project. Think of it as a very capable RA that happens to live on your computer.</p><p>The key distinction from using ChatGPT or Claude in a browser is that Claude Code has access to your local filesystem. It can see your project structure, open your datasets, modify your scripts, run your code, and show you the output.</p><p>A good analogy between using the web browser and on your computer is the difference between exchanging emails with a smart techy person (or posting / searching on Stack Overflow) and having them sit next to you, coding while you two talk. As you will see, this can massively speed up things (especially as you eventually get to say ``this looks great, I&#8217;m going to go do something else while you code this up!&#8217;&#8217; guilt-free.)</p><h3><strong>A ladder of AI coding tools</strong></h3><p>A good friend of mine, Kyle Jensen, has described a useful hierarchy of where people sit with these tools&#8212;a kind of &#8220;pathway to enlightenment&#8221; with different rungs.</p><ul><li><p><strong>Level 0&#8211;1</strong>: You&#8217;re using ChatGPT in a browser, copying code down, pasting it into your editor, running it, hitting an error, copying it back up, and so on. Or you&#8217;re using an IDE with something like GitHub Copilot doing inline completions&#8212;helpful, but still basically a chat interface. (Markus asked about Microsoft Copilot here&#8212;to clarify, GitHub Copilot is the coding tool that runs inside VS Code and is distinct from the Microsoft Copilot you see in Word or Bing, though both are owned by Microsoft and both use LLMs under the hood.)</p></li><li><p><strong>Level 2</strong>: You have an agentic IDE&#8212;something like <a href="https://cursor.sh/">Cursor</a>, which is very AI-agent-forward. You tell the LLM to do something and it runs across your screen editing files, reading code, looking things up. It can dispatch tasks on its own. But it&#8217;s still operating within the editor environment.</p></li><li><p><strong>Level 3</strong>: Dedicated coding agents&#8212;Claude Code, OpenAI&#8217;s <a href="https://openai.com/index/codex/">Codex</a>, <a href="https://github.com/google-gemini/gemini-cli">Gemini CLI</a>, and open-source alternatives like <a href="https://github.com/nicepkg/aide">Open Code</a>. These run in your terminal with access to your full computing environment. They can think about a task, read files, write files, use tools, execute code, create plans, and work more autonomously than IDE-based agents.</p></li><li><p><strong>Level 4</strong>: Adding tools through something called MCPs (Model Context Protocols) to orchestrate and improve how the agent works&#8212;connecting it to databases, APIs, and other services.</p></li><li><p><strong>Level 5</strong>: You create a container, tell the agent what needs to happen, and let it go for an hour and a half by itself. It works to completion autonomously. This is what people are referring to when they post on social media about AI writing &#8220;a whole paper in half an hour.&#8221; It&#8217;s not inherently better, but there&#8217;s a lot more setup involved.</p></li></ul><p>I should stress: all of these levels use the same underlying LLMs. You can only slice up an AI model so many ways before it&#8217;s the same idea going on&#8212;you&#8217;re just adding new tools and structure around it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!4Goq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e9f612-9758-4d2e-bf75-7b3ab889a5ca_1340x628.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!4Goq!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e9f612-9758-4d2e-bf75-7b3ab889a5ca_1340x628.png 424w, /__u/substackcdn.com/image/fetch/$s_!4Goq!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e9f612-9758-4d2e-bf75-7b3ab889a5ca_1340x628.png 848w, /__u/substackcdn.com/image/fetch/$s_!4Goq!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e9f612-9758-4d2e-bf75-7b3ab889a5ca_1340x628.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4Goq!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e9f612-9758-4d2e-bf75-7b3ab889a5ca_1340x628.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!4Goq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e9f612-9758-4d2e-bf75-7b3ab889a5ca_1340x628.png" width="1340" height="628" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9e9f612-9758-4d2e-bf75-7b3ab889a5ca_1340x628.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:628,&quot;width&quot;:1340,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:90008,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/192433164?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e9f612-9758-4d2e-bf75-7b3ab889a5ca_1340x628.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!4Goq!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e9f612-9758-4d2e-bf75-7b3ab889a5ca_1340x628.png 424w, /__u/substackcdn.com/image/fetch/$s_!4Goq!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e9f612-9758-4d2e-bf75-7b3ab889a5ca_1340x628.png 848w, /__u/substackcdn.com/image/fetch/$s_!4Goq!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e9f612-9758-4d2e-bf75-7b3ab889a5ca_1340x628.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4Goq!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e9f612-9758-4d2e-bf75-7b3ab889a5ca_1340x628.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><strong>Installation</strong></h2><p>Two options:</p><p><strong>Option 1: npm</strong> (if you have Node.js)</p><pre><code><code>npm install -g @anthropic-ai/claude-code</code></code></pre><p><strong>Option 2: Standalone installer</strong></p><p>Download from the <a href="https://docs.anthropic.com/en/docs/claude-code">Claude Code documentation</a>. Available for Mac, Linux, and Windows (via WSL).</p><p>After installing, <code>cd</code> into a project directory, and type <code>claude</code>. You&#8217;ll need to authenticate here&#8212;either you can use a membership or you can pay per call using an API key. There are three subscription levels: Pro ($20/month), Max ($100/month), and Max 20x ($200/month). I pay for Max, but that&#8217;s because I use it a huge amount. If you&#8217;re already paying $20/month for Claude&#8217;s chat functionality, you already have access to Claude Code&#8212;try it out right now. My recommendation for getting started is either the $20 or $100 tier. I don&#8217;t think you need to move to $200 at all. The API (pay-per-use) approach is also an option, but the subscriptions are heavily cross-subsidized and tend to be the better deal for most people.</p><p>One important note: your files stay local. The conversation goes through the API, but nothing gets persisted on Anthropic&#8217;s servers. However, if Claude reads your files, that content becomes part of the context sent to Anthropic. Same as if you uploaded those files to any chatbot&#8217;s website.</p><p>So if you have highly sensitive research data, wall it off. IRB data, PII, anything that should be on a HIPAA-compliant server&#8212;don&#8217;t let Claude anywhere near it. And try not to paste API keys or passwords; Claude will often warn you if you do, but better not to in the first place. My rough heuristic: if you keep this data on Dropbox, the risk profile is similar. If you wouldn&#8217;t put it on Dropbox, don&#8217;t put it in front of Claude. In future posts, I&#8217;ll discuss containers and sandboxing for more sensitive workflows.</p><h2><strong>What is a context window and how does it work?</strong></h2><p>To use these tools effectively, you need a basic mental model of what&#8217;s happening under the hood. The more you can learn, the better, but for now, I want to explain the <code>context window</code>.</p><p>When you type a message to Claude (or any other LLM), you&#8217;re not having a conversation the way you&#8217;d talk to a person. What&#8217;s actually happening is more like passing a <em>very long document</em> back and forth. Every time you send a message, the entire history&#8212;your prompts, Claude&#8217;s responses, every file it read, every tool it called, every code output&#8212;gets bundled up and sent as one big input. The model reads all of it, generates a response, and that response gets appended. Then the whole thing gets sent again on the next turn. If you went down a rabbit hole for 10 minutes on something irrelevant, all of that is still in there, getting sent back and forth.</p><p>This bundle is the <strong>context window</strong>, and it has a fixed size limit measured in tokens (roughly &#190; of a word). For Claude, this is currently around 200,000 tokens. Sounds like a lot. Fills up faster than you&#8217;d think.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!555H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdee78e32-60f9-43b6-85aa-bddd6990aea8_1565x973.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!555H!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdee78e32-60f9-43b6-85aa-bddd6990aea8_1565x973.png 424w, /__u/substackcdn.com/image/fetch/$s_!555H!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdee78e32-60f9-43b6-85aa-bddd6990aea8_1565x973.png 848w, /__u/substackcdn.com/image/fetch/$s_!555H!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdee78e32-60f9-43b6-85aa-bddd6990aea8_1565x973.png 1272w, /__u/substackcdn.com/image/fetch/$s_!555H!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdee78e32-60f9-43b6-85aa-bddd6990aea8_1565x973.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!555H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdee78e32-60f9-43b6-85aa-bddd6990aea8_1565x973.png" width="1456" height="905" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dee78e32-60f9-43b6-85aa-bddd6990aea8_1565x973.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:905,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:386258,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/192433164?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdee78e32-60f9-43b6-85aa-bddd6990aea8_1565x973.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!555H!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdee78e32-60f9-43b6-85aa-bddd6990aea8_1565x973.png 424w, /__u/substackcdn.com/image/fetch/$s_!555H!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdee78e32-60f9-43b6-85aa-bddd6990aea8_1565x973.png 848w, /__u/substackcdn.com/image/fetch/$s_!555H!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdee78e32-60f9-43b6-85aa-bddd6990aea8_1565x973.png 1272w, /__u/substackcdn.com/image/fetch/$s_!555H!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdee78e32-60f9-43b6-85aa-bddd6990aea8_1565x973.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>The image above shows what a single &#8220;chat&#8221; actually looks like under the hood. You typically see only two things&#8212;your prompt and the model&#8217;s response&#8212;but in between, there&#8217;s a system prompt (instructions from Anthropic), developer messages (tool definitions), the model&#8217;s internal reasoning (&#8220;thinking&#8221;), tool calls (web search, file reads, code execution), and tool results. All of this lives in the context window and counts against your limit.</p><p>Why does this matter? Because there&#8217;s a rough relationship that governs how well AI coding works:</p><p>As the context grows&#8212;more files read, more conversation history, more code output&#8212;performance degrades. The model has more to keep track of, and it starts losing the thread. This is the single most important thing to understand about working with AI coding tools.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!bPuA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a25f940-e9d8-4b49-8976-a1831e38109e_1597x1039.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!bPuA!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a25f940-e9d8-4b49-8976-a1831e38109e_1597x1039.png 424w, /__u/substackcdn.com/image/fetch/$s_!bPuA!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a25f940-e9d8-4b49-8976-a1831e38109e_1597x1039.png 848w, /__u/substackcdn.com/image/fetch/$s_!bPuA!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a25f940-e9d8-4b49-8976-a1831e38109e_1597x1039.png 1272w, /__u/substackcdn.com/image/fetch/$s_!bPuA!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a25f940-e9d8-4b49-8976-a1831e38109e_1597x1039.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!bPuA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a25f940-e9d8-4b49-8976-a1831e38109e_1597x1039.png" width="1456" height="947" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a25f940-e9d8-4b49-8976-a1831e38109e_1597x1039.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:947,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:214449,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/192433164?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a25f940-e9d8-4b49-8976-a1831e38109e_1597x1039.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!bPuA!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a25f940-e9d8-4b49-8976-a1831e38109e_1597x1039.png 424w, /__u/substackcdn.com/image/fetch/$s_!bPuA!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a25f940-e9d8-4b49-8976-a1831e38109e_1597x1039.png 848w, /__u/substackcdn.com/image/fetch/$s_!bPuA!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a25f940-e9d8-4b49-8976-a1831e38109e_1597x1039.png 1272w, /__u/substackcdn.com/image/fetch/$s_!bPuA!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a25f940-e9d8-4b49-8976-a1831e38109e_1597x1039.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h3><strong>What happens when you hit the limit: compaction</strong></h3><p>When your conversation fills up the context window, Claude Code will <strong>auto-compact</strong>&#8212;it summarizes the conversation history into a compressed form and starts fresh with that summary plus the system instructions. (Markus compared this to &#8220;training when you sleep&#8221;&#8212;it&#8217;s hard not to anthropomorphize these things, and the analogy isn&#8217;t exactly right, but the intuition is similar.)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!EfOe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ec4a43-dfa8-4186-ba98-77abe4fa062b_1606x1038.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!EfOe!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ec4a43-dfa8-4186-ba98-77abe4fa062b_1606x1038.png 424w, /__u/substackcdn.com/image/fetch/$s_!EfOe!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ec4a43-dfa8-4186-ba98-77abe4fa062b_1606x1038.png 848w, /__u/substackcdn.com/image/fetch/$s_!EfOe!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ec4a43-dfa8-4186-ba98-77abe4fa062b_1606x1038.png 1272w, /__u/substackcdn.com/image/fetch/$s_!EfOe!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ec4a43-dfa8-4186-ba98-77abe4fa062b_1606x1038.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!EfOe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ec4a43-dfa8-4186-ba98-77abe4fa062b_1606x1038.png" width="1456" height="941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/70ec4a43-dfa8-4186-ba98-77abe4fa062b_1606x1038.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:941,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:212963,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/192433164?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ec4a43-dfa8-4186-ba98-77abe4fa062b_1606x1038.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!EfOe!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ec4a43-dfa8-4186-ba98-77abe4fa062b_1606x1038.png 424w, /__u/substackcdn.com/image/fetch/$s_!EfOe!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ec4a43-dfa8-4186-ba98-77abe4fa062b_1606x1038.png 848w, /__u/substackcdn.com/image/fetch/$s_!EfOe!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ec4a43-dfa8-4186-ba98-77abe4fa062b_1606x1038.png 1272w, /__u/substackcdn.com/image/fetch/$s_!EfOe!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ec4a43-dfa8-4186-ba98-77abe4fa062b_1606x1038.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>This works, but the model might forget a specific decision you made three steps ago, or lose track of a constraint you mentioned early on.</p><p>The better approach is to compact intentionally rather than waiting for the context to overflow. You can type <code>/compact</code> in Claude Code to trigger this manually, and you can even guide what it remembers&#8212;for example, <code>/compact remember all the things related to the nonlinear programming we just studied</code> will steer the summary toward what you actually care about.</p><p>The idea: periodically have Claude write its progress and plans to files on disk, then start a fresh conversation that reads those files.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Ypfb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb62fa35-d99a-4887-863f-495e9c86d7d6_1571x1017.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Ypfb!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb62fa35-d99a-4887-863f-495e9c86d7d6_1571x1017.png 424w, /__u/substackcdn.com/image/fetch/$s_!Ypfb!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb62fa35-d99a-4887-863f-495e9c86d7d6_1571x1017.png 848w, /__u/substackcdn.com/image/fetch/$s_!Ypfb!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb62fa35-d99a-4887-863f-495e9c86d7d6_1571x1017.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Ypfb!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb62fa35-d99a-4887-863f-495e9c86d7d6_1571x1017.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Ypfb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb62fa35-d99a-4887-863f-495e9c86d7d6_1571x1017.png" width="1456" height="943" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb62fa35-d99a-4887-863f-495e9c86d7d6_1571x1017.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:943,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:239881,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/192433164?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb62fa35-d99a-4887-863f-495e9c86d7d6_1571x1017.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Ypfb!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb62fa35-d99a-4887-863f-495e9c86d7d6_1571x1017.png 424w, /__u/substackcdn.com/image/fetch/$s_!Ypfb!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb62fa35-d99a-4887-863f-495e9c86d7d6_1571x1017.png 848w, /__u/substackcdn.com/image/fetch/$s_!Ypfb!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb62fa35-d99a-4887-863f-495e9c86d7d6_1571x1017.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Ypfb!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb62fa35-d99a-4887-863f-495e9c86d7d6_1571x1017.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>For example, halfway through a data analysis, you might say: &#8220;Write a summary of what we&#8217;ve done so far and what&#8217;s left to do to a file called <code>progress.md</code>.&#8221; Then start a new Claude Code session and say: &#8220;Read <code>progress.md</code> and continue from where we left off.&#8221; The new session starts clean&#8212;full context budget available&#8212;but with all the relevant information loaded from the file.</p><p>This is a habit worth building early. A few practical implications (although these recommendations have become less relevant with recent innovations in Claude Opus 4.6, which I notice does much of this for you and seems to degrade less quickly):</p><ul><li><p><strong>Long sessions degrade.</strong> If you&#8217;ve been going back and forth for 20+ turns with lots of code output, consider starting fresh. The model&#8217;s performance at turn 30 is noticeably worse than at turn 3.</p></li><li><p><strong>Write state to files.</strong> Don&#8217;t keep critical information only in the conversation. If Claude made an important design decision, have it write that to a README or a plan file. Files persist; conversation context doesn&#8217;t.</p></li><li><p><strong>Break work into chunks.</strong> Instead of one marathon session, do focused 5-10 turn sessions with clear objectives. &#8220;In this session, let&#8217;s just get the data cleaning script working.&#8221; Then start fresh for the figure-making.</p></li></ul><h2><strong>Terminal Setup: Why It Matters</strong></h2><p>You <em>can</em> run Claude Code in your default terminal. But since you&#8217;ll be spending a lot of time here, it&#8217;s worth investing 15 minutes in a better setup. I recommend two tools:</p><h3><strong>Ghostty</strong></h3><p><a href="https://ghostty.org/">Ghostty</a> is a modern, GPU-accelerated terminal. In practice this means: it&#8217;s fast, it renders text cleanly, and it handles large code outputs without lagging. Install with:</p><pre><code><code>brew install ghostty</code></code></pre><h3><strong>Zellij</strong></h3><p><a href="https://zellij.dev/">Zellij</a> is a terminal multiplexer&#8212;think tmux, but much more user-friendly. The killer feature: split-pane view. Run Claude Code on the left, watch your files on the right. When you&#8217;re iterating on an analysis, being able to see Claude&#8217;s code and the resulting output side by side is extremely useful.</p><pre><code><code>brew install zellij</code></code></pre><p>A few configuration tips:</p><ul><li><p><strong>Key shortcuts</strong>: In Zellij, <code>Ctrl+p</code> then <code>d</code> splits a pane. <code>Alt+arrow</code> navigates between them.</p></li></ul><h3><strong>Oh My Zsh</strong></h3><p>While you&#8217;re setting up your terminal, it&#8217;s worth spending five minutes on your shell. If you&#8217;re on a Mac, you&#8217;re probably already using <code>zsh</code> (it&#8217;s been the default since macOS Catalina). <a href="https://ohmyz.sh/">Oh My Zsh</a> is a framework that makes <code>zsh</code> significantly more pleasant to use. Install with:</p><pre><code><code>sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"</code></code></pre><p>Why bother? A few reasons that matter for our workflow:</p><ul><li><p><strong>Better autocompletion.</strong> Tab-completing file paths, git commands, and Python environments becomes much smoother. When you&#8217;re jumping between scripts that Claude generated, fast navigation matters.</p></li><li><p><strong>Git integration in your prompt.</strong> Oh My Zsh shows your current git branch and status right in the terminal prompt. Since we&#8217;ll be using git heavily to track Claude&#8217;s changes, seeing at a glance whether you have uncommitted work is useful.</p></li><li><p><strong>Plugin ecosystem.</strong> The <code>z</code> plugin learns your most-visited directories and lets you jump to them with fuzzy matching (<code>z markus</code> takes you to <code>~/repos/markus-ai-talk</code>). The <code>virtualenv</code> plugin shows your active Python environment. Small quality-of-life improvements that compound.</p></li></ul><p>You don&#8217;t need to go deep on customization&#8212;the defaults are already a significant improvement over bare <code>zsh</code>. Pick a theme (I use a simple one that shows the directory and git branch), enable a few plugins (<code>git</code>, <code>z</code>, <code>virtualenv</code>), and move on.</p><h2><strong>Claude Code vs. Cowork</strong></h2><p>I should mention <strong>Cowork</strong>, which is a web-based alternative that comes bundled when you download the Claude desktop app (alongside the regular chat interface). Quick comparison:</p><p><strong>Claude CodeCowork</strong>InterfaceTerminalWeb browser (Chromium-based)File accessFull local filesystemSandboxedInternetFull network accessRestricted IP addressesBest forFull projects, power usersQuick explorations, sharingLearning curveModerateLow</p><p>The sandboxing in Cowork is worth understanding. It restricts which IP addresses the agent can reach&#8212;it needs to query Anthropic for LLM responses, but it has a very restricted way of reaching the broader internet. You can adjust these permissions (in the desktop app, you can allow it to access the internet and be more permissive about what you let in and out), but out of the box it won&#8217;t be nearly as autonomous as Claude Code. This has benefits&#8212;it&#8217;s less risky&#8212;but don&#8217;t use Cowork, find it limited, and conclude that &#8220;AI is not that powerful.&#8221; That would be the wrong update. You&#8217;ve taken the LLM and put a lot of restrictions on it.</p><p>I use Claude Code for ~90% of my work. I want full access to my files, git, and terminal tools. But Cowork is great for quick prototyping or questions.</p><h2><strong>The Basic Interaction Loop</strong></h2><p>Here&#8217;s what using Claude Code actually looks like. You navigate to your project directory, start a session, and have a conversation:</p><pre><code><code>&gt; What files are in this project? Summarize the structure.</code></code></pre><p>Claude reads the directory and gives you a plain-English overview. Already useful when you&#8217;re picking up a coauthor&#8217;s code.</p><pre><code><code>&gt; Read clean_data.py and explain what it does, step by step.</code></code></pre><p>It opens the file, walks through the logic, and flags potential issues.</p><pre><code><code>&gt; Load data/employment.csv, show the first few rows,
  and compute summary statistics.</code></code></pre><p>Claude writes a script, runs it, and shows you the output&#8212;all in the terminal.</p><p>This is the loop: describe what you want, Claude writes and executes, you iterate. It&#8217;s surprisingly natural once you get used to it.</p><h2><strong>Tips for Getting Started</strong></h2><p>A few things I&#8217;ve learned:</p><ol><li><p><strong>Be specific.</strong> &#8220;Analyze this data&#8221; &#8594; bad. &#8220;Load employment.csv, compute monthly growth rates by sector, and plot a time series with the BLS style&#8221; &#8594; good.</p></li><li><p><strong>Iterate and backup. Manage your context window </strong>If the output isn&#8217;t quite right, say so. &#8220;Make the legend larger and move it to the top-left&#8221; is a perfectly good follow-up. You don&#8217;t need to re-specify everything. However, <strong>don&#8217;t argue</strong> with the LLM. Alternatively, hit <code>ESC</code> and go backwards to rerun the command (this resets the context back to the prior state).</p></li><li><p><strong>Correct early.</strong> If Claude is heading in the wrong direction, interrupt it. A quick &#8220;actually, use R instead of Python&#8221; saves time.</p></li><li><p><strong>Trust but verify.</strong> This is especially important for research code. Claude is very good, but it can make mistakes&#8212;particularly with edge cases in statistical methods. Always check the output against your expectations. It&#8217;s the same way you&#8217;d work with an RA: the RA can produce results, but you still have to verify them. It&#8217;s going to be your work eventually.</p></li></ol><p>One thing Markus asked that&#8217;s worth clarifying: if you want Claude to write and run R or Python code, you need to have R or Python installed on your computer. The code executes locally on your machine&#8212;Claude doesn&#8217;t run it in the cloud somewhere. If you don&#8217;t have R installed, you could ask Claude to use Python instead, or you could ask it to install R for you. But the actual computation happens on your hardware. That&#8217;s one benefit of Claude Code over sandboxed alternatives&#8212;it&#8217;s everything you already have on your machine.</p><h2><strong>What&#8217;s Next</strong></h2><p>In the next post, we&#8217;ll take a real dataset and go from raw data to figures, entirely through conversation with Claude Code.</p><div><hr></div><p><em>This post accompanies <a href="https://www.youtube.com/watch?v=HzgByl5ZsWE">Video 1 of my Markus Academy series</a> on AI coding tools for researchers.</em></p>]]></content:encoded></item><item><title><![CDATA[AI one-shot papers]]></title><description><![CDATA[Diff-in-diff everywhere]]></description><link>https://paulgp.substack.com/p/ai-one-shot-papers</link><guid isPermaLink="false">https://paulgp.substack.com/p/ai-one-shot-papers</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Sat, 21 Mar 2026 20:31:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!h_4_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc243663-4531-4372-90ef-2f1e08b518f5_1123x1225.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>On Twitter/X and LinkedIn, there has been a large discussion of the ability to &#8220;one-shot&#8221; policy evaluation, which David Yanagizawa-Drott has been pursuing in an interesting way: <a href="https://ape.socialcatalystlab.org/">ape.socialcatalystlab.org</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!h_4_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc243663-4531-4372-90ef-2f1e08b518f5_1123x1225.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!h_4_!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc243663-4531-4372-90ef-2f1e08b518f5_1123x1225.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!h_4_!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc243663-4531-4372-90ef-2f1e08b518f5_1123x1225.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!h_4_!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc243663-4531-4372-90ef-2f1e08b518f5_1123x1225.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!h_4_!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc243663-4531-4372-90ef-2f1e08b518f5_1123x1225.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!h_4_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc243663-4531-4372-90ef-2f1e08b518f5_1123x1225.jpeg" width="396" height="431.9679430097952" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fc243663-4531-4372-90ef-2f1e08b518f5_1123x1225.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1225,&quot;width&quot;:1123,&quot;resizeWidth&quot;:396,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!h_4_!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc243663-4531-4372-90ef-2f1e08b518f5_1123x1225.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!h_4_!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc243663-4531-4372-90ef-2f1e08b518f5_1123x1225.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!h_4_!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc243663-4531-4372-90ef-2f1e08b518f5_1123x1225.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!h_4_!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc243663-4531-4372-90ef-2f1e08b518f5_1123x1225.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Here&#8217;s the punchline: automated AI procedures for empirical work are leaning even MORE on diff-in-diff. Why? It is <em>very</em> hard to do causal policy evaluations. Anyone who does empirical work knows this. The growth in diff-in-diff has partly been in response to limited exogenous variation.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!LvRc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1c29f8-a6c4-4fc7-af96-7daed66d8dd9_2000x1036.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!LvRc!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1c29f8-a6c4-4fc7-af96-7daed66d8dd9_2000x1036.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!LvRc!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1c29f8-a6c4-4fc7-af96-7daed66d8dd9_2000x1036.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!LvRc!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1c29f8-a6c4-4fc7-af96-7daed66d8dd9_2000x1036.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!LvRc!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1c29f8-a6c4-4fc7-af96-7daed66d8dd9_2000x1036.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!LvRc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1c29f8-a6c4-4fc7-af96-7daed66d8dd9_2000x1036.jpeg" width="410" height="212.32142857142858" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f1c29f8-a6c4-4fc7-af96-7daed66d8dd9_2000x1036.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:754,&quot;width&quot;:1456,&quot;resizeWidth&quot;:410,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!LvRc!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1c29f8-a6c4-4fc7-af96-7daed66d8dd9_2000x1036.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!LvRc!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1c29f8-a6c4-4fc7-af96-7daed66d8dd9_2000x1036.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!LvRc!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1c29f8-a6c4-4fc7-af96-7daed66d8dd9_2000x1036.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!LvRc!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1c29f8-a6c4-4fc7-af96-7daed66d8dd9_2000x1036.jpeg 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p>My claim: AI &#8220;one-shotting&#8221; papers is going to heavily lean on methods that require a huge amount of taste, discretion, and care (diff-in-diff). Diff-in-diff is by far the easiest &#8220;plug-and-chug&#8221; empirical estimator (and has serious flaws, see <a href="https://github.com/paulgp/applied-methods-phd">my phd notes</a>).</p><p>A scan through the APE social catalyst papers&#8217; database confirms this. Of the 592 papers on APE&#8217;s AI papers Github site, 64.2% are self-reported diff-in-diff/ event study. 20% are RDD.<br><br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!wff3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e300b5-0d42-46a0-b528-bf2a19897f8d_576x396.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!wff3!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e300b5-0d42-46a0-b528-bf2a19897f8d_576x396.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!wff3!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e300b5-0d42-46a0-b528-bf2a19897f8d_576x396.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!wff3!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e300b5-0d42-46a0-b528-bf2a19897f8d_576x396.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!wff3!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e300b5-0d42-46a0-b528-bf2a19897f8d_576x396.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!wff3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e300b5-0d42-46a0-b528-bf2a19897f8d_576x396.jpeg" width="576" height="396" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/59e300b5-0d42-46a0-b528-bf2a19897f8d_576x396.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:396,&quot;width&quot;:576,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!wff3!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e300b5-0d42-46a0-b528-bf2a19897f8d_576x396.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!wff3!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e300b5-0d42-46a0-b528-bf2a19897f8d_576x396.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!wff3!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e300b5-0d42-46a0-b528-bf2a19897f8d_576x396.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!wff3!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e300b5-0d42-46a0-b528-bf2a19897f8d_576x396.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Contrast with NBER working papers in empirical micro: 35% mention diff-in-diff (higher recently), with 44% mentioning other forms of quasi-experimental variation. (from <a href="https://arxiv.org/abs/2405.20604">my own paper studying empirical research designs</a> &#8212; new draft coming soon!), 35% of the papers mention diff-in-diff (higher recently), with 44% mentioning other forms of quasi-experimental variation. In published papers papers in the AEJ:AE and AEJ:Pol, the level is higher.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!A-mh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03d5efcd-ab46-4e4b-83a7-a3bc12116bf8_1072x918.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!A-mh!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03d5efcd-ab46-4e4b-83a7-a3bc12116bf8_1072x918.png 424w, /__u/substackcdn.com/image/fetch/$s_!A-mh!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03d5efcd-ab46-4e4b-83a7-a3bc12116bf8_1072x918.png 848w, /__u/substackcdn.com/image/fetch/$s_!A-mh!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03d5efcd-ab46-4e4b-83a7-a3bc12116bf8_1072x918.png 1272w, /__u/substackcdn.com/image/fetch/$s_!A-mh!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03d5efcd-ab46-4e4b-83a7-a3bc12116bf8_1072x918.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!A-mh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03d5efcd-ab46-4e4b-83a7-a3bc12116bf8_1072x918.png" width="321" height="274.88619402985074" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/03d5efcd-ab46-4e4b-83a7-a3bc12116bf8_1072x918.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:918,&quot;width&quot;:1072,&quot;resizeWidth&quot;:321,&quot;bytes&quot;:92170,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/191704682?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03d5efcd-ab46-4e4b-83a7-a3bc12116bf8_1072x918.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!A-mh!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03d5efcd-ab46-4e4b-83a7-a3bc12116bf8_1072x918.png 424w, /__u/substackcdn.com/image/fetch/$s_!A-mh!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03d5efcd-ab46-4e4b-83a7-a3bc12116bf8_1072x918.png 848w, /__u/substackcdn.com/image/fetch/$s_!A-mh!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03d5efcd-ab46-4e4b-83a7-a3bc12116bf8_1072x918.png 1272w, /__u/substackcdn.com/image/fetch/$s_!A-mh!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03d5efcd-ab46-4e4b-83a7-a3bc12116bf8_1072x918.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Rather than use the self-reported numbers, I tried to apply the same methodology to the APE papers that I used for my paper (thanks Claude Code, and APE&#8217;s very nicely accessible database). 73.8% of the AI papers mention DiD methods at least 3 times (way higher than the published or NBER papers). 21% of papers mention RDD.</p><p>Automated AI procedures for empirical work are leaning even MORE on diff-in-diff. If anything, my view is we are doing too much DiD nowadays for empirical applied causal work. To be clear, DiD can work great when done carefully. The question is whether an automated system can do &#8216;carefully.&#8217;</p>]]></content:encoded></item><item><title><![CDATA[The Butlerian Jihad Was Never About the Machines]]></title><description><![CDATA[The Butlerian Jihad]]></description><link>https://paulgp.substack.com/p/the-butlerian-jihad-was-never-about</link><guid isPermaLink="false">https://paulgp.substack.com/p/the-butlerian-jihad-was-never-about</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Thu, 19 Mar 2026 19:12:20 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b04b06e6-83eb-48d3-a89c-27b27ea5a709_259x174.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>This post is a copy from my blog here: <a href="http://paulgp.com/2026/03/19/tools-are-tools.html">paulgp.com/2026/03/19/tools-are-tools.html</a></em></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!6Dy5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a9c02e-cbdd-41ba-82df-8bd9bb38f48d_259x174.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!6Dy5!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a9c02e-cbdd-41ba-82df-8bd9bb38f48d_259x174.png 424w, /__u/substackcdn.com/image/fetch/$s_!6Dy5!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a9c02e-cbdd-41ba-82df-8bd9bb38f48d_259x174.png 848w, /__u/substackcdn.com/image/fetch/$s_!6Dy5!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a9c02e-cbdd-41ba-82df-8bd9bb38f48d_259x174.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6Dy5!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a9c02e-cbdd-41ba-82df-8bd9bb38f48d_259x174.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!6Dy5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a9c02e-cbdd-41ba-82df-8bd9bb38f48d_259x174.png" width="541" height="363.4517374517375" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4a9c02e-cbdd-41ba-82df-8bd9bb38f48d_259x174.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:174,&quot;width&quot;:259,&quot;resizeWidth&quot;:541,&quot;bytes&quot;:86474,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/191508006?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a9c02e-cbdd-41ba-82df-8bd9bb38f48d_259x174.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!6Dy5!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a9c02e-cbdd-41ba-82df-8bd9bb38f48d_259x174.png 424w, /__u/substackcdn.com/image/fetch/$s_!6Dy5!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a9c02e-cbdd-41ba-82df-8bd9bb38f48d_259x174.png 848w, /__u/substackcdn.com/image/fetch/$s_!6Dy5!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a9c02e-cbdd-41ba-82df-8bd9bb38f48d_259x174.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6Dy5!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a9c02e-cbdd-41ba-82df-8bd9bb38f48d_259x174.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p></p><h2><strong>The Butlerian Jihad</strong></h2><p>The Butlerian Jihad is a pre-story event referenced in Frank Herbert&#8217;s Dune series that describes a revolt by humans to destroy all machines that can &#8220;think like man.&#8221; In the centuries following the Jihad, humanity slowly comes back together (because the destruction of thinking machines has crippled the ability to do interstellar travel) and constructs a new set of religious principles that includes the commandment:</p><blockquote><p>Thou shalt not make a machine in the likeness of a human mind.</p><p><a href="https://dune.fandom.com/wiki/Orange_Catholic_Bible">The Orange Catholic Bible</a>, Dune</p></blockquote><p>Frank Herbert never really describes what happens in the Butlerian Jihad. But if you read enough Dune (and I have), you can start to get a picture.</p><blockquote><p>The target of the Jihad was a machine-attitude as much as the machines&#8230;[h]umans had set those machines to usurp our sense of beauty, our necessary selfdom out of which we make living judgments. Naturally, the machines were destroyed.</p><p><a href="/__u/www.google.com/books/edition/God_Emperor_of_Dune/oTgvJWFmjOoC?hl=en&amp;gbpv=1&amp;dq=The+target+of+the+Jihad+was+a+machine-attitude+as+much+as+the+machines...Humans+had+set+those+machines+to+usurp+our+sense+of+beauty,+our+necessary+selfdom+out+of+which+we+make+living+judgments.+Naturally,+the+machines+were+destroyed.&amp;pg=PA242&amp;printsec=frontcover">God Emperor of Dune, Frank Herbert (pg. 242)</a></p></blockquote><p>A more specific, and perhaps too detailed, picture comes in the Dune Encyclopedia, written by <a href="https://en.wikipedia.org/wiki/The_Dune_Encyclopedia#Contributors">Willis McNelly and many others</a> (and authorized by Frank Herbert, but not in collaboration). In the Encyclopedia entry on Jehanne Butler, we learn that she discovers that the &#8220;therapeutic&#8221; abortion of her child was part of a broader program run by a self-programming machine, with human elites fully participating. Her evidence helps trigger a wider rebellion, which hardens into Jihad when the people running the system openly defend their right to redesign human life from above.</p><p>The point is not just that machines were dangerous; it is that humans used them as tools of domination: <a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p><blockquote><p>[Jehanne Butler] discovered within the archives of the hospital evidence that the hospital director &#8212; the first self-programming machine on Komos &#8212; had instituted a program of unjustified abortions&#8230;The priestesses of Kubebe were the principal forces behind the [Jihad]. They were motivated by their interrogations of the chief programmers and scientists of Richese, many of whom had been willing participants in the actions of the machines in altering the population of Richese.</p></blockquote><p>The Butlerian Jihad was never about man vs. machines. The story is about man vs. man &#8212; it is the same story of power, struggle, and control in every story. The machines are just tools used by the powerful.</p><h2><strong>What this looks like today</strong></h2><p>I view this as a helpful lens to understand some of the ugly features of the recent AI wave.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!lXlI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F943dbbe8-3e67-4c06-9848-536ea7783554_550x454.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!lXlI!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F943dbbe8-3e67-4c06-9848-536ea7783554_550x454.png 424w, /__u/substackcdn.com/image/fetch/$s_!lXlI!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F943dbbe8-3e67-4c06-9848-536ea7783554_550x454.png 848w, /__u/substackcdn.com/image/fetch/$s_!lXlI!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F943dbbe8-3e67-4c06-9848-536ea7783554_550x454.png 1272w, /__u/substackcdn.com/image/fetch/$s_!lXlI!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F943dbbe8-3e67-4c06-9848-536ea7783554_550x454.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!lXlI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F943dbbe8-3e67-4c06-9848-536ea7783554_550x454.png" width="550" height="454" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/943dbbe8-3e67-4c06-9848-536ea7783554_550x454.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:454,&quot;width&quot;:550,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:86954,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/191508006?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F943dbbe8-3e67-4c06-9848-536ea7783554_550x454.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!lXlI!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F943dbbe8-3e67-4c06-9848-536ea7783554_550x454.png 424w, /__u/substackcdn.com/image/fetch/$s_!lXlI!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F943dbbe8-3e67-4c06-9848-536ea7783554_550x454.png 848w, /__u/substackcdn.com/image/fetch/$s_!lXlI!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F943dbbe8-3e67-4c06-9848-536ea7783554_550x454.png 1272w, /__u/substackcdn.com/image/fetch/$s_!lXlI!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F943dbbe8-3e67-4c06-9848-536ea7783554_550x454.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ol><li><p><a href="https://www.pcworld.com/article/3041325/microsoft-adds-more-ai-features-to-notepad-in-latest-preview-update.html">The boom in AI in everything</a>. Yes, I also find it really annoying that everything has an AI chatbot. It&#8217;s weird that Daniil Medvedev, top 10 tennis player in the world, former no. 1, still talks to a shitty AI Chatbot on Twitter (see figure &#8211; Daniil lost his bags on a flight from LA to Miami and needed those racquets! Good thing there&#8217;s only crappy AI agents standing by to help him). Why does this occur? Likely companies racing to justify AI spending to shareholders, not because the technology demands it.</p></li><li><p><a href="https://www.ktvu.com/news/salesforce-ai-layoffs-marc-benioff">Use of AI to justify significant layoffs in tech.</a> This is an extraordinarily debated topic in economics right now. The key challenge is whether the declines in some employment numbers, such as <a href="https://www.adpresearch.com/yes-ai-is-affecting-employment-heres-the-data/">early career software engineers</a> are due to the release of AI, or a tightening monetary policy and economic headwinds. The truth is likely a mix of both, but the <em>discourse</em> around this stuff is unbelievable! No wonder people are reacting so emotionally to this when Microsoft&#8217;s AI Chief says <a href="https://fortune.com/2026/02/13/when-will-ai-kill-white-collar-office-jobs-18-months-microsoft-mustafa-suleyman/">&#8220;[M]ost professional work will be replaced within a year to 18 months.&#8221;</a><a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> Who benefits from the narrative? CEOs using AI as cover for headcount cuts they wanted to make anyway, and AI CEOs trying to sell their product.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!tPwT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb5278b-b51c-4428-b2ce-4b2aea799169_2995x1675.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!tPwT!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb5278b-b51c-4428-b2ce-4b2aea799169_2995x1675.png 424w, /__u/substackcdn.com/image/fetch/$s_!tPwT!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb5278b-b51c-4428-b2ce-4b2aea799169_2995x1675.png 848w, /__u/substackcdn.com/image/fetch/$s_!tPwT!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb5278b-b51c-4428-b2ce-4b2aea799169_2995x1675.png 1272w, /__u/substackcdn.com/image/fetch/$s_!tPwT!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb5278b-b51c-4428-b2ce-4b2aea799169_2995x1675.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!tPwT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb5278b-b51c-4428-b2ce-4b2aea799169_2995x1675.png" width="1456" height="814" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0cb5278b-b51c-4428-b2ce-4b2aea799169_2995x1675.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:814,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5150555,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/191508006?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb5278b-b51c-4428-b2ce-4b2aea799169_2995x1675.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!tPwT!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb5278b-b51c-4428-b2ce-4b2aea799169_2995x1675.png 424w, /__u/substackcdn.com/image/fetch/$s_!tPwT!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb5278b-b51c-4428-b2ce-4b2aea799169_2995x1675.png 848w, /__u/substackcdn.com/image/fetch/$s_!tPwT!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb5278b-b51c-4428-b2ce-4b2aea799169_2995x1675.png 1272w, /__u/substackcdn.com/image/fetch/$s_!tPwT!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cb5278b-b51c-4428-b2ce-4b2aea799169_2995x1675.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p><a href="https://www.nytimes.com/2025/12/03/magazine/chatbot-writing-style.html">The annoying way that AI writes. The weird tics. The sycophancy. The writing in threes (see what I did there?).</a> I&#8217;m not sure what to say here except this stuff is HEAVILY trained to be liked by us. People like crap! What can we say. And in a vacuum, a lot of the AI writing is better than what we can do with no effort. Companies trained models to maximize approval from users using reinforcement learning from human feedback &#8211; it is not too surprising that humans, on average, prefer sycophantic AI agents.</p></li></ol><p>My view is that these aspects are not inherently a consequence of AI per se. If we were given options to use AI vs. not in a less <a href="https://en.wikipedia.org/wiki/Sludge_theory">sludge-like fashion</a>,<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> or if AI were not used as a bogey-man by CEOs, or if there were not such a huge incentive to dump massive amounts of AI generated text everywhere, then the above might not bother us as much. But I think it&#8217;s weird to ascribe the ills to the technology itself, and not to the ones currently wielding control.</p><p>We&#8217;re living in a world where it is potentially possible to have a <a href="https://hitchhikers.fandom.com/wiki/Babel_Fish">Babelfish</a> living in our ear thanks to this <a href="https://support.apple.com/guide/iphone/translate-messages-calls-and-conversations-iph22b72984d/ios">technology.</a> We can do <a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC11923701/">retinal screening in India for diabetic retinopathy cheaply (basically at zero cost) thanks to AI models.</a>. Biomedical research <a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC11800368/">is using AI to help discover new clinical drugs</a> (which was awarded the Nobel Prize in Chemistry in 2024)!</p><p>What differs in these settings? Apple is selling you a device, not extracting engagement. Retinal screening in India was designed to serve patients. Clinical research is targeted at solving real human issues. The tool behaves differently depending on who wields it and for what purpose.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!abI1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d80f539-e08c-414b-9747-df1f169458b9_1800x2700.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!abI1!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d80f539-e08c-414b-9747-df1f169458b9_1800x2700.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!abI1!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d80f539-e08c-414b-9747-df1f169458b9_1800x2700.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!abI1!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d80f539-e08c-414b-9747-df1f169458b9_1800x2700.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!abI1!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d80f539-e08c-414b-9747-df1f169458b9_1800x2700.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!abI1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d80f539-e08c-414b-9747-df1f169458b9_1800x2700.jpeg" width="338" height="507" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d80f539-e08c-414b-9747-df1f169458b9_1800x2700.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2184,&quot;width&quot;:1456,&quot;resizeWidth&quot;:338,&quot;bytes&quot;:1152417,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/191508006?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d80f539-e08c-414b-9747-df1f169458b9_1800x2700.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!abI1!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d80f539-e08c-414b-9747-df1f169458b9_1800x2700.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!abI1!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d80f539-e08c-414b-9747-df1f169458b9_1800x2700.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!abI1!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d80f539-e08c-414b-9747-df1f169458b9_1800x2700.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!abI1!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d80f539-e08c-414b-9747-df1f169458b9_1800x2700.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><a href="https://maxkasy.github.io/home/">Max Kasy</a> has a lovely book that I think engages deeply with some of these points. One of the most concrete summaries I can think of comes from David Autor&#8217;s lovely review of the book:</p><blockquote><p>The question is not whether AI will pursue human values but whose values it will pursue and who decides. And clearly, those decision weights are tilted toward those who control the &#8220;means of prediction&#8221;&#8212;that is, the data, computational infrastructure, technical expertise, and energy to build and deploy AI systems.</p></blockquote><h3>You have more power than you think</h3><p>Most users of these tools do not have a sense of how much AI is more like Unix than Windows. You are not beholden to a single company or companies&#8217; models.</p><p>In the current moment, the vast majority of the best and most impressive usage of AI is done using state-of-the-art (SOTA) models, such as Anthropic&#8217;s Claude Opus 4.6 or Open AI GPT 5.4. This involves sending tokens to these companies&#8217; servers and getting tokens back in return. The companies that create these models are the ones who have the most control over how they are used, and they are the ones who stand to make money off of them.</p><p>The process by which they have trained these models is not at all transparent, and so we have no sense of exactly what it has been optimized for. For example, it is possible that the models could be tuned to give us a dopamine rush, the same way social media platforms are designed to maximize engagement. That&#8217;s not a paranoid fantasy; it&#8217;s the default business model of every major software platform of the last fifteen years. The challenge is that we have no way of knowing what the models have been optimized for, and so we should want alternatives and be able to use them.</p><p>The good news is that alternatives exist for consumers. There are many SOTA models and a number of outstanding <a href="https://opensource.org/ai/open-weights">open weight models</a>. When I say open weight, I mean models that could be run on your own high performance hardware if you wanted. A great example of this is Kimi K2.5, released in January 2026, by Moonshot AI, a Chinese company. This model is <em>really good</em>. It isn&#8217;t Claude Opus 4.6, but it is ranked <a href="https://llm-stats.com/">#9 overall on some leaderboards.</a> Running this <a href="https://unsloth.ai/docs/models/kimi-k2.5">requires some very serious hardware, but it is possible.</a> You don&#8217;t need to train your own model from scratch (that remains bonkers expensive). But the wave of progress at the frontier keeps pushing capable models into the open, and you can ride that wave.</p><p>More importantly, you can mix. In many coding harnesses (not Claude Code, but OpenCode and <a href="https://github.com/badlogic/pi-mono/tree/main/packages/coding-agent">pi</a>), it is possible to switch dynamically between different models depending on the task and role. For a complex task, you could send out to a SOTA model such as Claude Opus, and then use a local Kimi K2.5 or smaller model to do other things. There is immense flexibility and power that we have at our fingertips as consumers in the way we use these tools.</p><h2><strong>So what?</strong></h2><p>The Butlerian Jihad didn&#8217;t happen because people hated machines. It happened because people had no agency over the machines being used on them. The lesson from Herbert isn&#8217;t to destroy the tools, it is to reclaim agency over them.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a></p><p>For academics, that means engaging concretely, not just opining from the sidelines. Know how LLMs work. Know what model you&#8217;re using and why &#8212; they are not all the same. Know that you can switch providers; you are not locked to ChatGPT or any single company. If your university is deploying AI in admissions, grading, or hiring, ask what it&#8217;s optimized for and who decided. Push back when AI is forced on you as sludge rather than offered as a choice.</p><p>I understand the impulse to simply refuse. But refusing to engage doesn&#8217;t protect you from AI&#8217;s effects &#8212; it just means other people make the decisions for you. You cannot view yourself, in the academy, as a leaf swept along by the current of history. The question is not whether AI will reshape the academy. It&#8217;s whether academics will have a voice in how.</p><div><hr></div><h2><strong>Post Script</strong></h2><p>For those who want the full scene, here is the Dune Encyclopedia entry on Jehanne Butler and the interrogation of Doctor Demlen:</p><blockquote><p>Jehanne went to the capitol of Pylos to enter the hospital for the birth of a child. Since both parents had married late in life for their culture, they were especially eager for this birth. When on the delivery table, Jehanne was anesthetized; when she awoke, she and her husband were informed that their daughter, Sarah, had been aborted. The hospital explained that the fetus had been too deformed to survive. The abortion was described as therapeutic.</p><p>Jehanne&#8217;s control of her own body, which as a result of her Bene Gesserit training extended beyond those muscle systems usually thought of as automatic, had permitted a deep knowledge of the growth of her child within the womb. She was convinced that it was impossible for her child to have been so grievously malformed as the hospital had described. In time, Jehanne came to believe that her child&#8217;s death had at best been unnecessary. Using the access to official records provided by Thet&#8217;r&#8217;s position as Logistos, she discovered within the archives of the hospital evidence that the hospital director &#8212; the first self-programming machine on Komos &#8212; had instituted a program of unjustified abortions. Armed with this information, she approached the priestesses of Kubebe for their aid in creating a movement against the domination by Richese.</p><p>The revelations on Richese produced a Jihad, but it was not Jehanne who made that decision. The priestesses of Kubebe were the principal forces behind the change which occurred in the ranks of the rebels. They were motivated by their interrogations of the chief programmers and scientists of Richese, many of whom had been willing participants in the actions of the machines in altering the population of Richese. Perhaps the critical moment in these interrogations occurred during the questioning of a Doctor G. Demlen by the chief priestess of Komos, Urania. Demlen was an especially arrogant and unrepentant man, whose disdain for his fellow man&#8217;s intelligence was equalled only by his respect for his own &#8212; and that of his machines. As his quite prideful and voluntary description of his work on Richese droned on, Urania&#8217;s feelings overcame her training and her face began to betray her revulsion. Ultimately even Demlen noticed, and interrupted his stream of self- congratulatory candor to ask what was upsetting her. Urania told him his work violated fundamental principles of respect for human life, not to mention the offense to the worship of the Goddess. At the mention of the Goddess, Demlen exploded in a fit of honest and acid outrage, and in his fury, after suggesting that there was more worth reverence in one of his machines than in the worship of &#8220;a supposed &#8216;goddess&#8217; invented by a clutch of bucolic bumpkins on a pigsty of a planet,&#8221; Demlen turned toward the icon of Kubebe as if to spit on it. Before he could commit the act, Urania had killed him with her ceremonial knife.</p></blockquote><p></p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I&#8217;ll put part of the full text at the end of the post.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>This was in Feb. 2026, so let&#8217;s revisit in August 2027.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>To quote Wikipedia: In behavioral economics, sludge is any form of design, administrative, or policy-related friction that systematically impedes individuals&#8217; actions or decisions.It encompasses a range of frictions such as complex forms, hidden fees, and manipulative defaults that increase the effort, time, or cost required to make a choice, often benefiting the designer at the expense of the user&#8217;s interest.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>In fact, a consequence of the Butlerian Jihad was centuries of conflict as the carefully constructed network of protection across planets collapsed. Instead, fiefdoms appeared across the universe, filling the prior power vaccuum (which eventually led to the Empire that Paul Atreides struggles against in the book, <code>Dune</code>).</p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[Research in the Time of AI ]]></title><description><![CDATA[This post is a copy of a post on my blog here: paulgp.com/2026/03/16/research-in-time-of-ai.html]]></description><link>https://paulgp.substack.com/p/research-in-the-time-of-ai</link><guid isPermaLink="false">https://paulgp.substack.com/p/research-in-the-time-of-ai</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Mon, 16 Mar 2026 22:11:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NTRu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25d17900-050b-4519-9a46-c09bc873c83a_658x722.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>This post is a copy of a post on my blog here: paulgp.com/2026/03/16/research-in-time-of-ai.html</em></p><p>Academics are worried about AI replacing them and their work. I think we spend insufficient energy appreciating how much we can expand the frontier of research thanks to this new tool. To make this concrete, I find it useful to think about research as a pipeline of stages, from ideation through publication, and to ask where AI actually changes things.</p><p>Consider the following ontology for the stages of an academic research project in economics or finance.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!NTRu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25d17900-050b-4519-9a46-c09bc873c83a_658x722.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!NTRu!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25d17900-050b-4519-9a46-c09bc873c83a_658x722.png 424w, /__u/substackcdn.com/image/fetch/$s_!NTRu!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25d17900-050b-4519-9a46-c09bc873c83a_658x722.png 848w, /__u/substackcdn.com/image/fetch/$s_!NTRu!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25d17900-050b-4519-9a46-c09bc873c83a_658x722.png 1272w, /__u/substackcdn.com/image/fetch/$s_!NTRu!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25d17900-050b-4519-9a46-c09bc873c83a_658x722.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!NTRu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25d17900-050b-4519-9a46-c09bc873c83a_658x722.png" width="658" height="722" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/25d17900-050b-4519-9a46-c09bc873c83a_658x722.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:722,&quot;width&quot;:658,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:77034,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/191189128?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25d17900-050b-4519-9a46-c09bc873c83a_658x722.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!NTRu!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25d17900-050b-4519-9a46-c09bc873c83a_658x722.png 424w, /__u/substackcdn.com/image/fetch/$s_!NTRu!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25d17900-050b-4519-9a46-c09bc873c83a_658x722.png 848w, /__u/substackcdn.com/image/fetch/$s_!NTRu!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25d17900-050b-4519-9a46-c09bc873c83a_658x722.png 1272w, /__u/substackcdn.com/image/fetch/$s_!NTRu!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25d17900-050b-4519-9a46-c09bc873c83a_658x722.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>In practice, all of these steps are iterative and reinforce each other. For example, results reshape the question, new data reshapes the analysis. Same for feedback after posting, etc.</p><h2><strong>Two anxieties about AI and research process</strong></h2><p>I want this ontology to give more structure to where I believe some of the debate is going on AI in academic research. A lot of the fears and concerns I hear discussed focus on two dimensions.</p><h3>1. Slop</h3><p>There&#8217;s going to be a whole bunch more stuff published, and some of this can just be &#8220;one-shot&#8221; from Step 1 to Step 8. This can be unpacked into multiple fears, some social, some private, and some both:</p><ul><li><p><strong>People want to do more stuff and may not be as careful as they should be.</strong> Part of being an academic is devoting tremendous care and diligence to your work. There is an immense urge, once you have a tool that can help, to offload to that tool that may be a detriment to your work.</p></li><li><p><strong>Publications are important for academics&#8217; careers</strong> and there will be strong private incentive to create more papers quickly to increase odds of tenure + raises + promotions. I think reputation concerns will alleviate some of this, but if all academics increase their output by just a bit, that is a huge set of new papers. For example, during the Covid period, there was a huge increase in papers (see the figure) as researchers were stuck at home working. This could possibly occur again, but to a much larger (and more permanent) degree.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!bS8r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6976f55-b479-4697-aac1-6fd737435c19_1800x990.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!bS8r!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6976f55-b479-4697-aac1-6fd737435c19_1800x990.png 424w, /__u/substackcdn.com/image/fetch/$s_!bS8r!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6976f55-b479-4697-aac1-6fd737435c19_1800x990.png 848w, /__u/substackcdn.com/image/fetch/$s_!bS8r!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6976f55-b479-4697-aac1-6fd737435c19_1800x990.png 1272w, /__u/substackcdn.com/image/fetch/$s_!bS8r!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6976f55-b479-4697-aac1-6fd737435c19_1800x990.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!bS8r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6976f55-b479-4697-aac1-6fd737435c19_1800x990.png" width="692" height="380.69505494505495" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b6976f55-b479-4697-aac1-6fd737435c19_1800x990.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:801,&quot;width&quot;:1456,&quot;resizeWidth&quot;:692,&quot;bytes&quot;:86722,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/191189128?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6976f55-b479-4697-aac1-6fd737435c19_1800x990.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!bS8r!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6976f55-b479-4697-aac1-6fd737435c19_1800x990.png 424w, /__u/substackcdn.com/image/fetch/$s_!bS8r!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6976f55-b479-4697-aac1-6fd737435c19_1800x990.png 848w, /__u/substackcdn.com/image/fetch/$s_!bS8r!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6976f55-b479-4697-aac1-6fd737435c19_1800x990.png 1272w, /__u/substackcdn.com/image/fetch/$s_!bS8r!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6976f55-b479-4697-aac1-6fd737435c19_1800x990.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Much of this concern seems to be the view that AI can rapidly churn through all phases of the research process. The fact of the matter is that AI <em>can</em> churn through many parts of it. I completely agree that it does a good job &#8212; far better than most empirical researchers &#8212; at data assembly, analysis, and frankly even some writing. The figure below illustrates the fear: a researcher can potentially go from idea to posted paper in one shot, skipping the careful iteration that makes research good.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!CNX5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2156-4136-458b-98b6-d614ab27ce45_910x1066.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!CNX5!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2156-4136-458b-98b6-d614ab27ce45_910x1066.png 424w, /__u/substackcdn.com/image/fetch/$s_!CNX5!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2156-4136-458b-98b6-d614ab27ce45_910x1066.png 848w, /__u/substackcdn.com/image/fetch/$s_!CNX5!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2156-4136-458b-98b6-d614ab27ce45_910x1066.png 1272w, /__u/substackcdn.com/image/fetch/$s_!CNX5!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2156-4136-458b-98b6-d614ab27ce45_910x1066.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!CNX5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2156-4136-458b-98b6-d614ab27ce45_910x1066.png" width="910" height="1066" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c15f2156-4136-458b-98b6-d614ab27ce45_910x1066.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1066,&quot;width&quot;:910,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:134552,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/191189128?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2156-4136-458b-98b6-d614ab27ce45_910x1066.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!CNX5!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2156-4136-458b-98b6-d614ab27ce45_910x1066.png 424w, /__u/substackcdn.com/image/fetch/$s_!CNX5!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2156-4136-458b-98b6-d614ab27ce45_910x1066.png 848w, /__u/substackcdn.com/image/fetch/$s_!CNX5!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2156-4136-458b-98b6-d614ab27ce45_910x1066.png 1272w, /__u/substackcdn.com/image/fetch/$s_!CNX5!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2156-4136-458b-98b6-d614ab27ce45_910x1066.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><br>But the speed by which it can churn doesn&#8217;t mean that it&#8217;s going the right way for any given question. Often, the <em>posing</em> of the question or idea is typically the most important part (that is iterated on over and over in a paper). Of course, given a machine gun, you don&#8217;t have to hit on any given bullet &#8211; you can just spray and pray. It&#8217;s easy to imagine a world where researchers just try 1000 different paper ideas and see what sticks.</p><h4><strong>p-hacking by any other name?</strong></h4><p>A serious concern is that a focus on using AI for stage 4 and 5 will supercharge p-hacking. In fact, I have found Claude Code&#8217;s interest in presenting me a table of estimates where &#8220;X% of the regressions are significant&#8221; extremely worrying.</p><p>Nonetheless, p-hacking has always been an issue. And I think that the improvement in replication and open data will offset the ability to p-hack &#8211; in fact, I think that LLMs will give far stronger tools to researchers inclined to revisit old papers. Several people have independently suggested combing through old replication files to see if anything looks problematic.</p><p>The ability to quickly replicate and redo work suggests that p-hacked work will be caught much more quickly than before, offsetting the p-hacking concerns. We should be far more open to replication of work now as we can revisit old work much more costlessly.</p><h3><strong>2. Loss of job, rents, career</strong></h3><p>The academic anxiety is immense. Along many dimensions, academics are a profession that feels replaceable by AI. This is true both in teaching &#8212; we now have a chatbot that can respond to your every query! &#8212; and research &#8212; AI is one-shotting empirical research papers!</p><p>I get this. I do not have tenure. It is stressful how much this is changing. Software engineers are way more stressed out and I can see why! We are all living through interesting times, and <a href="https://paulgp.com/2025/11/24/joe-market-update-november.html">Ph.D. students just went through one of the worst job markets in over a decade</a>. We&#8217;re adding AI to a list of things to worry about along with funding cuts and everything else?</p><p>The key source of this anxiety, I believe, is that we&#8217;ve all invested a huge amount of time and energy into improving our ability to do different parts of this ontology. Some of us are amazing at programming, some at writing, and some at data access. Some are amazing at everything! The problem is that the advent of LLMs has significantly lowered the costs to doing these skills. Our human capital investments have significantly lower return now.</p><p>This is true for me &#8212; I&#8217;m a good (for my job) programmer, and I know a lot about econometrics. I promise you that it is far easier for someone to learn econometrics and do programming now than it used to be. You could now do a pretty good approximation of many hard things I spent the last 8 years learning post-Ph.D.</p><p>The <strong>pace</strong> at which we can move through the different stages is far faster than it ever has been. Costs and barriers are lower than ever before. That sucks if you invested to get over those barriers! And I don&#8217;t want to wave this away &#8212; for some people, especially those early in their careers who built a comparative advantage in execution skills like coding or data work, the depreciation is real and the adjustment is painful.</p><p>But I think it&#8217;s worth asking what this depreciation actually reveals about what was valuable in the first place. The skills that LLMs replicate are execution skills: writing code, cleaning data, implementing estimators, producing drafts. The skills they don&#8217;t replicate &#8212; at least not yet &#8212; are the ones that were always the hardest to teach and the hardest to learn: knowing which questions matter, developing taste for what makes a research design credible, understanding an institutional setting deeply enough to know where the data is lying to you, and iterating on a project until the argument actually works. Those skills have not depreciated. If anything, they&#8217;ve become more valuable, because the bottleneck has shifted toward them.</p><p>This is what I mean when I say that reducing costs has honed the question of <em>what is good research</em>. What is our goal as academics? Privately, it may feel like getting an AER publication, but ideally our goal is to further human knowledge, do better policy, and enrich our understanding of humanity. The people who will thrive are the ones who were always doing that &#8212; and the people who were coasting on execution barriers should be honest with themselves about it.</p><h2><strong>LLMs compress the research timeline</strong></h2><p>My view is that LLMs shorten the distance between and time with each stage, but do not railroad over the whole process.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!feCJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5bd69a-d888-47c7-a63f-14b6f9003911_652x841.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!feCJ!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5bd69a-d888-47c7-a63f-14b6f9003911_652x841.png 424w, /__u/substackcdn.com/image/fetch/$s_!feCJ!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5bd69a-d888-47c7-a63f-14b6f9003911_652x841.png 848w, /__u/substackcdn.com/image/fetch/$s_!feCJ!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5bd69a-d888-47c7-a63f-14b6f9003911_652x841.png 1272w, /__u/substackcdn.com/image/fetch/$s_!feCJ!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5bd69a-d888-47c7-a63f-14b6f9003911_652x841.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!feCJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5bd69a-d888-47c7-a63f-14b6f9003911_652x841.png" width="652" height="841" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d5bd69a-d888-47c7-a63f-14b6f9003911_652x841.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:841,&quot;width&quot;:652,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:106839,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/191189128?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5bd69a-d888-47c7-a63f-14b6f9003911_652x841.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!feCJ!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5bd69a-d888-47c7-a63f-14b6f9003911_652x841.png 424w, /__u/substackcdn.com/image/fetch/$s_!feCJ!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5bd69a-d888-47c7-a63f-14b6f9003911_652x841.png 848w, /__u/substackcdn.com/image/fetch/$s_!feCJ!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5bd69a-d888-47c7-a63f-14b6f9003911_652x841.png 1272w, /__u/substackcdn.com/image/fetch/$s_!feCJ!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d5bd69a-d888-47c7-a63f-14b6f9003911_652x841.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Each phase still needs to be maximized and improved, and a good idea &#8212; a good <em>project</em> &#8212; is still crucial to expanding our knowledge.</p><p>Consider the ontology I presented above, but now with the gaps between the stages driven by the time and effort it takes to go through each stage. With LLMs, this is all compressed and shortened. We can now often move from ideation to actual data in an afternoon, rather than a week (or more). This does not mean we need to write every paper idea, but we can iterate far more to find the important and interesting papers. And perhaps we can find more venues to publish and post the work that is not quite up to the highest standards &#8211; not all papers can be evaluated on the same scale.</p><h2><strong>Why is it hard to write a good paper?</strong></h2><p>Or put another way, what makes good research hard? Most researchers do not love all their papers equally, and we have few papers that are perfect. This suggests that research is an imperfect and challenging process filled with fits and starts, groping and guessing in the darkness that is the frontier.</p><p>It&#8217;s hard to write a good paper because a paper is not about downloading a dataset, running a regression, or implementing an estimator. It is a carefully executed thought process that gives the reader (and the academy) an insight into how the economy and society works.</p><h3><strong>When you&#8217;re grasping in the dark, use the flashlight if you need it!</strong></h3><p>Having more tools to improve on this process is a boon. LLMs and AI technology can help in all stages:</p><ol><li><p><strong>Ideation</strong> In ideation, you often can be headed in the right direction, prompting and guiding the context window towards an idea, much like reading through articles and using search engines. This can provoke an &#8220;aha!&#8221; moment, just like any other!</p></li><li><p><strong>Design &amp; Feasibility</strong> The LLM is faster than any RA and can help you suss out what is possible (and can create new data faster than most programmers by webscraping and cleaning data efficiently). In addition, the code that AI can write makes the research far more replicable and usable.</p></li><li><p><strong>Data Assembly</strong> LLMs make structured datasets and validation much easier and lower the cost significantly.</p></li><li><p><strong>Core Analysis</strong> For applied researchers, the ability to implement state-of-the-art estimators is a real gain. The distance between econometrics theory and applied work can shrink rapidly. And from the theory side, the ability to embed empirical work in theoretical models (both micro and macro) is now far more accessible &#8212; I have had several colleagues talk about revisiting topics from grad school that were previously too costly to implement.</p></li><li><p><strong>Robustness &amp; Extensions</strong> While I mentioned concerns about p-hacking, it is also valuable that robustness is not just the bastion of researchers with an army of RAs &#8212; LLMs flatten the playing field in a &#8220;complete&#8221; paper production.</p></li><li><p><strong>Writing</strong> If you use Claude, you are aware that LLMs can write very solid prose and technical analysis. I do not view LLMs as Hemingway, but I also think they can be much clearer than many academic writers. <a href="https://psantanna.com/claude-code-my-workflow/workflow-guide.html#claudeblattman-workflows-for-non-technical-academics">Researchers underappreciate the amount of guidance that you can give the LLM on your writing style.</a> Of course, as with all writing, you need to edit and refine.</p></li><li><p><strong>Posting, Submission &amp; Review</strong> Responding to R&amp;Rs is far easier now. Often, you can more easily breakdown and understand the <a href="https://github.com/jusi-aalto/strategic-revision">concerns brought by the referees, and structure a revision more quickly than before.</a></p></li><li><p><strong>Publication &amp; Dissemination</strong> At a minimum, replication packages are <em>much</em> easier now. Visualizations to present your work are easier now. We all should be able to talk and present about our work!</p></li></ol><p></p><p>This is just a small set of potential ways you can improve your abilities using LLM tools in research. Obviously, if you don&#8217;t feel like you need them, don&#8217;t use them! Sometimes it&#8217;s easier to walk at night using the stars and the moon for light than a flashlight.</p><p>We (academics) are dynamic, educated, thoughtful people. We can and should be incorporating these tools into our workflow and our teaching. We do ourselves and our students a disservice by not figuring out how to use them well. But the flashlight is just a flashlight &#8212; the hard part is still knowing where to walk.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Cdpq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3720e838-be5a-4cc0-8aad-fe0beb285406_2844x3793.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Cdpq!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3720e838-be5a-4cc0-8aad-fe0beb285406_2844x3793.png 424w, /__u/substackcdn.com/image/fetch/$s_!Cdpq!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3720e838-be5a-4cc0-8aad-fe0beb285406_2844x3793.png 848w, /__u/substackcdn.com/image/fetch/$s_!Cdpq!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3720e838-be5a-4cc0-8aad-fe0beb285406_2844x3793.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Cdpq!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3720e838-be5a-4cc0-8aad-fe0beb285406_2844x3793.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Cdpq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3720e838-be5a-4cc0-8aad-fe0beb285406_2844x3793.png" width="1456" height="1942" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3720e838-be5a-4cc0-8aad-fe0beb285406_2844x3793.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1942,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:9379797,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://paulgp.substack.com/i/191189128?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3720e838-be5a-4cc0-8aad-fe0beb285406_2844x3793.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Cdpq!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3720e838-be5a-4cc0-8aad-fe0beb285406_2844x3793.png 424w, /__u/substackcdn.com/image/fetch/$s_!Cdpq!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3720e838-be5a-4cc0-8aad-fe0beb285406_2844x3793.png 848w, /__u/substackcdn.com/image/fetch/$s_!Cdpq!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3720e838-be5a-4cc0-8aad-fe0beb285406_2844x3793.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Cdpq!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3720e838-be5a-4cc0-8aad-fe0beb285406_2844x3793.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[LLM-Friendly Academic Papers: A Proposal]]></title><description><![CDATA[Time to make academic papers to be posted with LLMs in mind]]></description><link>https://paulgp.substack.com/p/llm-friendly-academic-papers-a-proposal</link><guid isPermaLink="false">https://paulgp.substack.com/p/llm-friendly-academic-papers-a-proposal</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Tue, 10 Mar 2026 14:43:34 GMT</pubDate><content:encoded><![CDATA[<p><em>This post is a copy of a post on my blog here: paulgp.com/2026/03/10/llms-txt-for-academic-papers.html</em></p><div><hr></div><p><em>This post comes from many fruitful discussions with my friend Kyle Jensen. It also benefited from helpful comments from Kyle as well.</em></p><p>Researchers increasingly use large language models to summarize, compare, and synthesize academic papers. LLMs do this despite consuming formats designed for <em>human</em> readers. Translating PDFs to plaintext&#8212;the lingua franca of AI&#8212;strips structure, garbles equations, and flattens authorial judgment into an undifferentiated stream. LLMs cope, but scholars would be better served if papers preserved structure and intent for machine consumption.</p><p>This is not hypothetical. A recent study found LLM-generated summaries were nearly five times more likely than human-authored summaries to overgeneralize scientific conclusions (<a href="https://doi.org/10.1098/rsos.241776">Peters and Chin-Yee 2025</a>). The pattern it documents&#8212;machine summarization systematically drops scope limitations and contextual caveats&#8212;aligns with what researchers report across fields. A treatment effective for patients under 65 becomes &#8220;a treatment that works, full stop.&#8221; Limitations are the information most likely dropped&#8212;and most dangerous when lost.</p><p>The PDF is not just a problem for machines. PDFs fail mobile devices. A large-scale analysis of 20,000 scholarly PDFs found 74.9% fail to meet <em>any</em> accessibility criteria for blind and low-vision readers (<a href="https://doi.org/10.1145/3663548.3675634">Kumar and Wang 2024</a>).</p><p>James Somers asked: &#8220;What would you get if you designed the scientific paper from scratch today?&#8221; (<a href="https://www.theatlantic.com/science/archive/2018/04/the-scientific-paper-is-obsolete/556676/">Somers 2018</a>). Not a two-column layout optimized for laser printers. We can be much more ambitious now.</p><p>Jeremy Howard&#8217;s <a href="https://llmstxt.org">llms.txt standard</a> offers a starting point. For websites, <code>llms.txt</code> is a markdown file at <code>/llms.txt</code> that helps LLMs navigate content without parsing HTML&#8212;a kind of site map for AI. Over 844,000 sites have adopted it. What makes the format noteworthy is its design: the file is <em>author-curated and lightweight</em>&#8212;interpretive choices about what matters, in plain language, without rigid schemas. No equivalent exists for academic papers, though they are harder for LLMs to parse: equations, figures, multi-column layouts, implicit structure.</p><p>We extend this to academic publishing. First: an <code>llms.txt</code> file for papers&#8212;an author-curated orientation that tells an LLM how to read a paper before it starts reading. At its simplest, a few paragraphs: what the paper shows, what it does not show, where to look. Second: a lightweight <em>paper bundle</em>&#8212;a zip archive containing the paper in markdown alongside figures, data, and the <code>llms.txt</code>&#8212;so the full content is available in clean, token-efficient form. At its most ambitious, the bundle is the paper and a reproduction package &#8212; code, data, dependencies &#8212; that an agent can execute and verify.</p><h2>The Proposal</h2><p>Two components: a lightweight orientation file (<code>llms.txt</code>) and a paper bundle containing the full text in markdown alongside code and data.</p><h3>The <code>llms.txt</code> File</h3><p>The <code>llms.txt</code> file is plain markdown, non-prescriptive, and author-controlled. No fields required. We suggest seven sections: <em>What is this paper about?</em> (a direct statement, not an abstract); <em>Important context</em> (common misconceptions, definitions, relationship to prior work); <em>Data and methods</em> (a brief fingerprint); <em>Key results</em>; <em>Limitations and scope</em> (what the paper does not show); <em>Navigation guide</em> (which sections to prioritize); <em>Publication status</em>.</p><p>The most important field is <em>Limitations</em>&#8212;and the one most authors will skimp on. &#8220;Further research is needed&#8221; is not useful. Name specific boundary conditions: which populations, contexts, or conditions the results do <em>not</em> cover. Available evidence suggests LLMs drop this information most systematically (<a href="https://doi.org/10.1098/rsos.241776">Peters and Chin-Yee 2025</a>)&#8212;and it is the most dangerous to lose.</p><div><hr></div><p>To build intuition for what this standard looks like in practice, here is a concrete example. Consider the paper <em>Heterogeneous Real Estate Agents and the Housing Cycle</em> by Sonia Gilbukh and Paul Goldsmith-Pinkham (<em>Review of Financial Studies</em>, November 2024).</p><p>The following is a sample of a <code>llms.txt</code> that could accompany this paper:</p><pre><code><code># Heterogeneous Real Estate Agents and the Housing Cycle
**Authors:** Sonia Gilbukh (Baruch College, CUNY) and Paul Goldsmith-Pinkham (Yale SOM, NBER)
**DOI:** https://doi.org/10.1093/rfs/hhae048

## What is this paper about?

The U.S. housing market is dominated by real estate agents, yet low barriers to entry and
fixed commission rates allow inexperienced agents to capture large market share&#8212;especially
after house price booms. This paper shows that inexperienced listing agents significantly
reduce a home's probability of sale, with effects strongest during housing busts. A structural
model estimates that flexible commissions would improve market liquidity by 3.7%.

## Important context

The paper has two distinct parts. The first is an empirical study establishing the causal
effect of agent experience on listing outcomes. The second is a structural model used to
evaluate counterfactual commission policies. Agent experience is measured as the number of
clients in the *prior calendar year*, not years in the profession.

## Limitations and scope

- Sample covers 60 MLS platforms from 2001&#8212;not a random sample of US markets.
- Does not model why sellers choose particular agents.
- The structural model abstracts from individual agent price-setting.</code></code></pre><p>The full file includes data descriptions, methods fingerprints, navigation, and publication status. State-of-the-art AI could extract much of this material from the paper directly, but the <code>llms.txt</code> achieves two goals: first, it provides a structured overview that helps LLMs understand the paper&#8217;s contributions and limitations without needing to spend significant tokens; second, it gives the <em>author</em> the ability to flag and highlight concerns or limitations that an LLM might miss or misinterpret.</p><h3>The Paper Bundle</h3><p>The second component is a zip archive:</p><pre><code><code>llms.txt              # author guidance
paper.md              # full text in markdown
figures/              # images referenced from paper.md
data/                 # underlying data for generated plots (CSV)
code/                 # analysis scripts (where applicable)
  reproduce.sh        # single entry point to regenerate results
  requirements.txt    # pinned dependencies
references.bib        # bibliography</code></code></pre><p>The spine is <code>paper.md</code>&#8212;the full paper in markdown. For most LaTeX papers, <code>pandoc paper.tex -o paper.md</code> gets you there. Academics spend hours adjusting line colors on subpanel 4, nudging table column widths, wrestling LaTeX into placing Figure 3 on the same page as its caption. Markdown strips <code>\begin{table}</code>, font directives, and layout macros, reducing token count. We are not proposing authors abandon LaTeX for writing. Markdown is a delivery format, not an authoring format.</p><p>Tables should always appear as markdown tables or CSV, never as images. An LLM reading a PNG of regression output sees pixels. An LLM reading the same table as CSV can compare estimates across specifications, compute standard-error ratios, flag whether reported p-values match the coefficients. Include both: the image for human readers, the data for machines.</p><p>The bundle is not merely a delivery format. Properly constructed, it is an <em>executable claim</em>&#8212;what Claerbout called scholarship rather than advertising. The scholarship is the complete environment: code, data, parameters, dependencies. For three decades this has been an aspiration honored more in the breach. The reason is simple: reproducing computational work means navigating a maze of software versions, broken dependencies, undocumented preprocessing steps, and README files that assume knowledge the reader does not possess. A 2018 study found that fewer than half of sampled computational studies in top journals provided enough information for independent researchers to regenerate results, even when code was ostensibly available (<a href="https://doi.org/10.1073/pnas.1708290115">Stodden et al. 2018</a>).</p><p>An AI agent can execute a workflow with inhuman patience&#8212;if the workflow is documented with machine precision. This package could include the code and your raw data (or clear instructions for obtaining it). Include the exact programs and command sequence that generates each figure. What has historically been too tedious for human reproduction becomes tractable for machine reproduction.</p><p>The most complete form of this bundle includes a form of the reproduction packages that have become an increasing focus of journals and the Open Science movement (<a href="https://doi.org/10.1162/99608f92.9ba2bd43">Vilhuber et al. 2023</a>). By tying the paper bundle to its computational workflow, this would rapidly expand the set of tools and ability of AI to aid in verifying and expanding on results.</p><h3>Why Not Just Fix the PDF Parsers?</h3><p>The obvious objection: if LLMs struggle with PDFs, why not build better parsers rather than ask authors to produce parallel markdown?</p><p>Because the ceiling is real, and because perfect extraction would not solve the problem anyway. A comparative evaluation of state-of-the-art extraction tools found that even the best achieved only modest accuracy on equations and table structure in diverse academic PDFs (<a href="https://arxiv.org/abs/2410.09871">Adhikari and Agarwal 2024</a>). These are neural models trained on hundreds of thousands of documents; incremental improvement is possible but the error modes are intrinsic. A parser must infer which text spans constitute a figure caption, which columns are parallel sections versus sequential narrative, whether a superscript &#8220;2&#8221; is an exponent or a citation marker&#8212;all from pixel coordinates and font directives. In a two-column economics paper with appendix tables, the ground truth is genuinely ambiguous.</p><p>Second, even perfect extraction does not solve the core problem. A parser can convert a PDF to clean text, but it cannot tell a machine reader which results are central versus peripheral, which limitations matter most, or that &#8220;experience&#8221; in this paper means prior-year client count rather than career tenure. These are interpretive judgments only the author can make. The <code>llms.txt</code> is not a workaround for bad parsing&#8212;it is a layer of authorial intent that no parsing technology can extract because the information does not exist in the PDF to begin with.</p><p>We are asking the AI to parse a photograph of text, when we have access to all of the underlying intent and context.</p><div><hr></div><h2>Automation and Implementation</h2><p>Most of the bundle can be machine-generated. Authors should focus on the judgment-dependent fields no algorithm can fill: which results matter most, which limitations are binding, what the common misreadings are.</p><p>A preliminary version of code to construct this is available here: https://github.com/paulgp/academic-llms Using arXiv&#8217;s data structure, you can:</p><ol><li><p>Download the source tarball (replace with your paper&#8217;s arXiv ID) <code>curl -L "https://arxiv.org/src/2401.12345" -o source.tar.gz</code></p></li><li><p>Extract into a directory <code>mkdir paper &amp;&amp; tar xzf source.tar.gz -C paper/</code></p></li><li><p>Run the pipeline</p></li></ol><p><code>just convert paper<br>just draft <br>just review      # optional: interactively edit each section just bundle</code></p><h3>Tiered Adoption</h3><p><strong>Tier 1&#8212;Full automation (arXiv and Overleaf).</strong> arXiv receives approximately 20,000 submissions monthly, nearly all LaTeX. Its LaTeXML-based HTML pipeline already converts TeX to HTML. Extending this pipeline to produce <code>paper.md</code> and a draft <code>llms.txt</code> is a small step.</p><p>Overleaf, with 15 million users, catches the paper while the author writes. A &#8220;Generate LLM bundle&#8221; button alongside &#8220;Submit to arXiv&#8221; is the natural integration.</p><p>Both arXiv and Overleaf would use the same tool: a script that takes a LaTeX directory and produces a zip. The script also bootstraps adoption before platform integration: install, run, post the zip. No institutional coordination required.</p><p><strong>Tier 2&#8212;PDF-based.</strong> Without LaTeX, extract from PDF using GROBID, Docling (<a href="https://github.com/DS4SD/docling">IBM 2024</a>), or Nougat. The resulting <code>paper.md</code> is noisier, figures lose their underlying data, and equations are less reliable. Upload a PDF, receive a draft bundle, review, and publish on Zenodo or your site.</p><p><strong>Tier 3&#8212;Manual.</strong> Write an <code>llms.txt</code> by hand and post it alongside the PDF on your website. No bundle, no automation&#8212;but any LLM that retrieves the paper gets the orientation. Fifteen minutes, a text editor, and the knowledge that the next agent summarizing your work will read your caveats before it reads anything else.</p><h3>Generating a Draft <code>llms.txt</code></h3><p>An LLM can draft the <code>llms.txt</code> automatically&#8212;but only the author knows which limitation matters most. Two passes: first, an LLM reads <code>paper.md</code> and populates the template. Second, the author edits the judgment-dependent fields. An LLM will summarize what the paper <em>says</em> about limitations; it cannot judge which limitation <em>matters</em> most&#8212;which one determines whether the finding generalizes, which sample restriction is the real binding constraint, which robustness check you would bet your career on. This is where author editing is most relevant.</p><h3>Hosting the bundles</h3><p>In the case of a fully published paper, the bundle could be hosted directly by the journal. For working papers, the bundle could be hosted by either the repository (arXiv, SSRN) or the author&#8217;s website. The bundle could be linked from the paper&#8217;s landing page and included in the metadata so that it is discoverable by search engines and LLMs.</p><p>In the context of replication packages, the bundle could be hosted on platforms like GitHub or Zenodo, with a DOI for citation. The key is that the bundle is easily accessible and clearly associated with the paper it describes, so that when an LLM retrieves the paper, it also retrieves the bundle and can use the <code>llms.txt</code> to guide its understanding and summarization of the paper&#8217;s content and limitations.</p><h3>Managing the versions</h3><p>One concern is that just as we have many versions of a paper (working paper, preprint, published version), we might end up with many versions of the <code>llms.txt</code> and bundle. The key is to maintain a clear versioning system and to link the <code>llms.txt</code> and bundle to the specific version of the paper they correspond to. On arXiv, this should be straightforward since each version of the paper has a unique identifier (e.g., 2401.12345v1, 2401.12345v2). For journal publications, the <code>llms.txt</code> and bundle can be updated to reflect the final published version, and the DOI can be used to link them together.</p><div><hr></div><h2>Conclusion</h2><p>The infrastructure exists. arXiv has LaTeX source for 2.4 million papers. Overleaf has 15 million users. What is missing is not technology but convention: the expectation that when you publish a paper, you also publish a short note telling machines what it shows, what it does not, and where to look.</p><p>And for the reader who is unconvinced on the future of AI in research &#8211; the bundle improves accessibility, reproducibility, and human readability, regardless of whether an LLM is involved. The markdown version is more accessible on mobile devices and screen readers. The data and code make it easier for human researchers to verify and build on the work.</p><p>The minimal ask: write a brief <code>llms.txt</code> for your next paper. Two paragraphs stating what it shows and what it does not. Post it with your PDF. Fifteen minutes. The value: when an LLM summarizes your work six months from now&#8212;and it will&#8212;the machine reads your caveats first. If you write in LaTeX, run Pandoc and include the markdown. At the ambitious end, include the computational environment so an agent can reproduce your results without human intervention. The minimal version costs minutes of reflection; the full version offers a path out of the reproducibility crisis.</p>]]></content:encoded></item><item><title><![CDATA[Reader's Digest of Econometrica Papers]]></title><description><![CDATA[How Claude AI can make Econometrica papers far more readable for applied economists]]></description><link>https://paulgp.substack.com/p/readers-digest-of-econometrica-papers</link><guid isPermaLink="false">https://paulgp.substack.com/p/readers-digest-of-econometrica-papers</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Thu, 07 Nov 2024 18:23:13 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/db9f3038-fd93-4cd4-9302-d5bd762fd1d0_720x500.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ben Golub had the idea of <strong><a href="https://bsky.app/profile/bengolub.bsky.social/post/3lacwdogwti2w">summarizing technical papers (such as in Econometrica) using AI to be more easily approached by non-technical economists.</a></strong> These papers were selected from the list of the <strong><a href="https://scholar.google.com/citations?hl=en&amp;vq=bus_economics&amp;view_op=list_hcore&amp;venue=G0hmswRVzmAJ.2024">most prominent recent papers in Econometrica by Google Scholar.</a></strong> </p><p>I posted the two examples on my blog. I link them here, and give you a flavor of the high-level takeaways that I think are quite nice. Claude is very good at this. Seem quite plausible that this could be used at different levels of technicality.<br></p><ol><li><p><a href="https://paulgp.github.io/2024/11/06/readers-digest-farrell-et-al-2021.html">Deep Neural Networks for Estimation and Inference</a><br><em><strong><a href="https://www.econometricsociety.org/publications/econometrica/2021/01/01/deep-neural-networks-estimation-and-inference">Farrell, Liang, and Misra (Econometrica, 2021)</a></strong></em></p><p><strong>Key Takeaway</strong>: This paper proves that deep learning can be safely used as a first step in modern econometric analysis. If you&#8217;re using machine learning for things like propensity score matching or predicting treatment effects, you can now confidently use deep neural networks and still get valid statistical inference in your second stage analysis. This fills a crucial gap, as while deep learning has shown impressive empirical performance, economists have been hesitant to adopt it without theoretical guarantees.</p></li><li><p><a href="https://paulgp.github.io/2024/11/06/readers-digest-galeotti-et-al-2020.html">Targeting Interventions in Networks</a><br><em><strong><a href="https://www.econometricsociety.org/publications/econometrica/2020/11/01/targeting-interventions-networks">Galeotti, Golub, and Goyal (Econometrica, 2020)</a><br></strong></em><strong>The One Big Idea</strong></p><p>When trying to influence behavior in a networked system (like encouraging technology adoption among farmers or increasing educational effort in schools), the optimal intervention strategy depends crucially on whether actions are strategic complements (people want to match what their neighbors do) or strategic substitutes (people want to do the opposite of their neighbors). With complementary actions, focus resources on well-connected &#8220;central&#8221; individuals. With substitute actions, target pairs of individuals who aren&#8217;t directly connected. This seemingly complex problem can be solved systematically using network &#8220;principal components.&#8221;</p></li></ol><p></p>]]></content:encoded></item><item><title><![CDATA[Using AI in Research and Teaching]]></title><description><![CDATA[Further details on using Copilot and LLMs]]></description><link>https://paulgp.substack.com/p/using-ai-in-research-and-teaching</link><guid isPermaLink="false">https://paulgp.substack.com/p/using-ai-in-research-and-teaching</guid><dc:creator><![CDATA[Paul Goldsmith-Pinkham]]></dc:creator><pubDate>Wed, 26 Jun 2024 17:30:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OJAn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49079728-333c-4a5c-b0de-3d5b194a40f7_852x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!OJAn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49079728-333c-4a5c-b0de-3d5b194a40f7_852x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!OJAn!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49079728-333c-4a5c-b0de-3d5b194a40f7_852x1080.png 424w, /__u/substackcdn.com/image/fetch/$s_!OJAn!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49079728-333c-4a5c-b0de-3d5b194a40f7_852x1080.png 848w, /__u/substackcdn.com/image/fetch/$s_!OJAn!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49079728-333c-4a5c-b0de-3d5b194a40f7_852x1080.png 1272w, /__u/substackcdn.com/image/fetch/$s_!OJAn!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_webp, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49079728-333c-4a5c-b0de-3d5b194a40f7_852x1080.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!OJAn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49079728-333c-4a5c-b0de-3d5b194a40f7_852x1080.png" width="852" height="1080" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49079728-333c-4a5c-b0de-3d5b194a40f7_852x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1080,&quot;width&quot;:852,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;alt text&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="alt text" title="alt text" srcset="/__u/substackcdn.com/image/fetch/$s_!OJAn!, /__u/paulgp.substack.com/w_424, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49079728-333c-4a5c-b0de-3d5b194a40f7_852x1080.png 424w, /__u/substackcdn.com/image/fetch/$s_!OJAn!, /__u/paulgp.substack.com/w_848, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49079728-333c-4a5c-b0de-3d5b194a40f7_852x1080.png 848w, /__u/substackcdn.com/image/fetch/$s_!OJAn!, /__u/paulgp.substack.com/w_1272, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49079728-333c-4a5c-b0de-3d5b194a40f7_852x1080.png 1272w, /__u/substackcdn.com/image/fetch/$s_!OJAn!, /__u/paulgp.substack.com/w_1456, /__u/paulgp.substack.com/c_limit, /__u/paulgp.substack.com/f_auto, /__u/paulgp.substack.com/q_auto:good, /__u/paulgp.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49079728-333c-4a5c-b0de-3d5b194a40f7_852x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I&#8217;ve posted a longer post about Copilot and LLMs on my website here: <a href="https://paulgp.github.io/2024/06/24/llm_talk.html">https://paulgp.github.io/2024/06/24/llm_talk.html</a></p><p>Take a look if you&#8217;re interested! A preview:</p><blockquote><p>The goal for today&#8217;s post is to highlight a number of useful ways that you can use AI in your research and teaching. I&#8217;m using AI super loosely here &#8211; what I really mean is the relatively new innovations of Large Language Models that have sprung up following the release of ChatGPT 3.</p><p>Today, I will cover a few topics:</p><ol><li><p>VS Code + Copilot installation</p></li><li><p>Examples using Chat LLMs for research and teaching</p></li><li><p>Images from Midjourney</p></li><li><p>Running your own LLM locally</p></li></ol></blockquote>]]></content:encoded></item></channel></rss>