<?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[Animacy]]></title><description><![CDATA[Where curiosity meets the courage to build. Essays and prototypes across behavior, design, and tech.]]></description><link>https://www.eveblou.com</link><image><url>https://www.eveblou.com/img/substack.png</url><title>Animacy</title><link>https://www.eveblou.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 10 Jun 2026 05:41:04 GMT</lastBuildDate><atom:link href="https://www.eveblou.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Eve-Marie]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[eveblou@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[eveblou@substack.com]]></itunes:email><itunes:name><![CDATA[Eve-Marie]]></itunes:name></itunes:owner><itunes:author><![CDATA[Eve-Marie]]></itunes:author><googleplay:owner><![CDATA[eveblou@substack.com]]></googleplay:owner><googleplay:email><![CDATA[eveblou@substack.com]]></googleplay:email><googleplay:author><![CDATA[Eve-Marie]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Built for ambiguity: are these the people the AI era needs?]]></title><description><![CDATA[The people who will define the AI transition aren't just talented. They're wired differently. You've probably already met them. This is a hypothesis about the psychology beneath the behavior.]]></description><link>https://www.eveblou.com/p/built-for-ambiguity-are-these-the</link><guid isPermaLink="false">https://www.eveblou.com/p/built-for-ambiguity-are-these-the</guid><dc:creator><![CDATA[Eve-Marie]]></dc:creator><pubDate>Fri, 05 Jun 2026 12:31:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Xgsp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca58a36d-6fea-4c07-8b98-c13730ea43af_3022x1952.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><blockquote><p>You can&#8217;t enter a new domain with curiosity if you&#8217;re attached to the expertise you brought in. </p></blockquote><div><hr></div><p>I think deeply. And I get inspired by a lot. By what I read, what I hear, and what I see happening around me. If you&#8217;re reading this essay, you probably do too. </p><p>Right now, I&#8217;m seeing the ground shift at scale, to large structures like organizations and industries. And it&#8217;s becoming hard to ignore my blind spots. I&#8217;m operating on old mental models, and I need to create new ones. That tension is inspiring. It&#8217;s motivating.</p><p>And I feel an increasing sense of responsibility to explore in the open. That&#8217;s why I wrote my first essay on this platform about the <a href="https://www.eveblou.com/p/what-the-org-chart-cant-see-the-new?r=1vftq4&amp;utm_campaign=post-expanded-share&amp;utm_medium=web&amp;triedRedirect=true">new physics of talent</a>. To open up the questions building inside of me and share them with you. Because curiosity is contagious.  </p><div><hr></div><p>In the spirit of exploring, let&#8217;s take this one piece at a time.</p><div class="callout-block" data-callout="true"><p>We&#8217;ve got at least two big puzzles to tackle. One is structural. The organizations and environments that will need to change, and what that change actually demands. </p><p>The other is human. The person, or people, who will make this transition successful. Who are they? What are they made of? And how do we learn to see them with a new set of eyes? </p></div><p>This essay is about the second piece. </p><p>I&#8217;ve <a href="https://scholar.google.ca/citations?user=c5p-HDMAAAAJ&amp;hl=en&amp;oi=ao">spent the good part of a decade studying just this</a>. People. Their personality, their imagination, their potentiality. Optimal performance across all its angles. That&#8217;s the journey I&#8217;ll take you on today. </p><p>First, I&#8217;ll go back to the three patterns of motion I introduced in my last post (crystallization, propagation, diffusion) and open them up. What personality, cognitive and motivational wiring might explain each one? What does the research say? </p><p>Then I&#8217;ll bring each pattern into real life: how to spot each one with new eyes, and the people who might get mistaken for it (what to be careful of).</p><p>Let&#8217;s get cooking.</p><div><hr></div><blockquote><p><em>Stop trying to resolve the tension of being curious about everything in a world that rewards knowing one thing. Create inside it.</em></p><p><em>If you want to build {ideas, businesses, systems, products, yourself}, Animacy is for you.  </em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eveblou.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eveblou.com/subscribe?"><span>Subscribe now</span></a></p></blockquote><div><hr></div><h3><strong>Crystallization</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xgsp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca58a36d-6fea-4c07-8b98-c13730ea43af_3022x1952.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xgsp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca58a36d-6fea-4c07-8b98-c13730ea43af_3022x1952.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Xgsp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca58a36d-6fea-4c07-8b98-c13730ea43af_3022x1952.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Xgsp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca58a36d-6fea-4c07-8b98-c13730ea43af_3022x1952.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Xgsp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca58a36d-6fea-4c07-8b98-c13730ea43af_3022x1952.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xgsp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca58a36d-6fea-4c07-8b98-c13730ea43af_3022x1952.jpeg" width="724" height="467.65320979483784" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ca58a36d-6fea-4c07-8b98-c13730ea43af_3022x1952.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1952,&quot;width&quot;:3022,&quot;resizeWidth&quot;:724,&quot;bytes&quot;:1534247,&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://www.eveblou.com/i/200290990?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140cbb6d-d5d8-405d-9503-fbf94108c929_3022x1952.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Xgsp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca58a36d-6fea-4c07-8b98-c13730ea43af_3022x1952.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Xgsp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca58a36d-6fea-4c07-8b98-c13730ea43af_3022x1952.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Xgsp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca58a36d-6fea-4c07-8b98-c13730ea43af_3022x1952.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Xgsp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca58a36d-6fea-4c07-8b98-c13730ea43af_3022x1952.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">the guy beside me on the train looks concerned for me as I&#8217;m sketching this</figcaption></figure></div><p>In a flat environment where nobody is handing you a defined problem, a clear deadline, or a job description that tells you where to start, raw material is formless. Ambiguous. Possibility without direction. </p><p>A team with high autonomy and no crystallizer can spin in that ambiguity indefinitely, generating energy without ever producing something others can react to. The crystallizer is the person who makes the first move. They are a master at transforming formlessness into structure.</p><p>So who is the crystallizer? Let&#8217;s start by looking at what their personality, cognition, and motivations might be, and see if the persona becomes more clear. </p><div><hr></div><h4>Personality underpinnings</h4><p><strong>Openness to experience: the ideas facet.</strong> </p><p>This trait is about staying curious in the presence of the unknown. It&#8217;s one dimension of the Big Five, the most widely accepted personality framework in modern personality psychology.</p><p>At its atomic level, openness can be broken down into <a href="https://en.wikipedia.org/wiki/Openness_to_experience">six primary facets</a>, but the one I think matters most for the crystallizer is the ideas facet, because it&#8217;s most associated with internal intellectual life. The pleasure of abstract thought, the draw toward complexity, the appetite for ideas that don&#8217;t yet have practical application. People high on this facet are genuinely interested by ambiguity. To them, it&#8217;s something to explore.</p><p>This matters for the crystallizer because making something before the problem is defined requires exactly this orientation. You can't compress formlessness into form if your instinct is to resolve or avoid ambiguity rather than inhabit it. </p><p><strong>Action orientation. </strong></p><p>This trait is about moving from intention to artifact without waiting for clarity. Research found that <a href="https://www.researchgate.net/publication/229629660_A_Theory_of_Self-regulation_Action_versus_State_Orientation_Self-discrimination_and_Some_Applications">action-oriented people</a> initiate action under uncertainty without needing more information, more clarity, or more consensus. State-oriented people on the other hand, ruminate, plan, and seek resolution before acting.</p><p>The crystallizer is strongly action-oriented, but with a specific target. They don&#8217;t just act fast; they act <em>into</em> the problem. They make something to think with. The urgency is toward form, not completion. </p><p><strong>Creative identity and self-efficacy. </strong></p><p>Recent research distinguishes two related but distinct constructs. <a href="https://journals.aom.org/doi/abs/10.5465/3069429">Creative self-efficacy</a> is the confidence in one's capacity to produce creative outcomes. <a href="https://books.google.ca/books?hl=en&amp;lr=&amp;id=lQiKDwAAQBAJ&amp;oi=fnd&amp;pg=PA396&amp;dq=Creative+identity+(Beghetto+%26+Karwowski)&amp;ots=8ewKAh7Xrj&amp;sig=93_EclVWrP8nC5S-9ti7uRVtfK4#v=onepage&amp;q=Creative%20identity%20(Beghetto%20%26%20Karwowski)&amp;f=false">Creative identity</a> goes one step deeper: the degree to which being creative is central to one&#8217;s sense of self. Someone with high creative identity doesn&#8217;t just believe they can make things. They <em>are</em> a maker.</p><p>Together these two constructs explain something specific about the crystallizer: not just that they make things, but that they keep making things even in difficult conditions, and even when what they&#8217;re making is imperfect. </p><p>Their sense of self isn&#8217;t riding on any single artifact being good, which means the exposure of sharing something imperfect may not destabilize them the way it would someone whose identity is more tightly coupled to their outputs.</p><div><hr></div><h4>Cognitive &amp; neurological underpinnings</h4><p><strong>Default-executive network coupling. </strong></p><p>There&#8217;s a structural reason why the ideas facet of openness might produce the specific pattern we&#8217;re describing, and Scott Barry Kaufman&#8217;s <a href="https://books.google.ca/books/about/Wired_to_Create.html?id=-tNJBgAAQBAJ&amp;redir_esc=y">research on openness and creative cognition</a> points toward it. High openness, particularly on the ideas facet, appears to be associated with a specific kind of neural coupling. The default network (imagination, self-referential thought, future thinking) and the executive network (focused attention, cognitive control) typically operate in opposition. Highly open people activate both simultaneously.</p><p>If that coupling is what&#8217;s at work in the crystallizer, it might explain the specific quality of what they make: an artifact that is formed enough to hold, and open enough to invite. Something others can react to before the problem is fully understood. The crystallizer doesn&#8217;t switch from imagination to execution, they run both at once.</p><div><hr></div><h4>Motivational underpinnings</h4><p><strong>Intrinsic motivation and the autotelic personality. </strong></p><p>What makes the crystallizer motivated to start without clarity, to make something imperfect in public, to keep going before anyone validates the direction?</p><p>Csikszentmihalyi&#8217;s <a href="https://www.goodreads.com/en/book/show/66354.Flow">autotelic personality</a> offers one answer: some people pursue activities for their own inherent interest, not for external reward or validation. The autotelic person finds the process intrinsically satisfying. For the crystallizer, the act of compressing potential into form may itself be the reward. The outcome matters less than the act of making.</p><p>Theresa Amabile&#8217;s research on creativity in organizations adds a dimension for understanding this in a work context. Her <a href="https://www.taylorfrancis.com/books/mono/10.4324/9780429501234/creativity-context-teresa-amabile">intrinsic motivation principle of creativity</a> suggests that intrinsic motivation may be the single most powerful predictor of creative output, and that extrinsic motivators (evaluation, surveillance) can tend to suppress it. </p><p><strong>The incremental principle. </strong></p><p>Carol Dweck&#8217;s <a href="https://www.penguinrandomhouse.ca/books/44330/mindset-by-carol-s-dweck-phd/9780345472328">incremental theory of ability</a>, widely known as growth mindset, proposes that people differ in whether they believe their abilities are fixed or able to be intentionally developed. For those with a growth orientation, failure is information. </p><p>For the crystallizer, the imperfect artifact isn&#8217;t evidence of inadequate capacity, it&#8217;s a stage in a process. The draft doesn&#8217;t need to be finished to be valuable. What matters is that something moved. </p><div><hr></div><h4>How to spot the crystallizer </h4><p>The crystallizer makes something before anyone has agreed on what we&#8217;re solving. A rough diagram mid-conversation. A first draft before the brief is final. They don&#8217;t announce that they&#8217;re making something. They just make it.</p><p>They hold the artifact lightly. The draft is not them, it&#8217;s something they made. So they share it knowing it&#8217;s wrong, present it knowing it&#8217;s incomplete, and skip the defensive preamble. The artifact is the argument. They trust it to improve through contact with other people. They&#8217;re trying to open the conversation.</p><p>The misread is a fast executor or a performative maker. Both can look like a crystallizer until you watch the outcome. The executor&#8217;s artifact closes a task as quickly as possible, without opening the conversation or encouraging iteration. The performative maker produces finished-looking work that&#8217;s designed to impress rather than to advance (it might be missing substance or miss the problem entirely). </p><p>Can you think of someone like this that you&#8217;ve met or worked with? Does the persona stick? What&#8217;s missing?</p><div><hr></div><blockquote><p><em>If this essay sparked something, pass it along to someone you want to think with. </em></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.eveblou.com/p/built-for-ambiguity-are-these-the?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption"><em>Curiosity is contagious.</em></p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eveblou.com/p/built-for-ambiguity-are-these-the?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eveblou.com/p/built-for-ambiguity-are-these-the?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div></blockquote><div><hr></div><h3>Propagation</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Unig!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9976c0fc-d907-4c95-91ae-c8a997f05dcc_2716x1682.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Unig!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9976c0fc-d907-4c95-91ae-c8a997f05dcc_2716x1682.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Unig!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9976c0fc-d907-4c95-91ae-c8a997f05dcc_2716x1682.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Unig!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9976c0fc-d907-4c95-91ae-c8a997f05dcc_2716x1682.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Unig!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9976c0fc-d907-4c95-91ae-c8a997f05dcc_2716x1682.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Unig!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9976c0fc-d907-4c95-91ae-c8a997f05dcc_2716x1682.jpeg" width="2716" height="1682" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9976c0fc-d907-4c95-91ae-c8a997f05dcc_2716x1682.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1682,&quot;width&quot;:2716,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1306285,&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://www.eveblou.com/i/200290990?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefeb6f34-c849-4884-86c8-37b05815a3ff_2716x1682.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Unig!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9976c0fc-d907-4c95-91ae-c8a997f05dcc_2716x1682.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Unig!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9976c0fc-d907-4c95-91ae-c8a997f05dcc_2716x1682.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Unig!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9976c0fc-d907-4c95-91ae-c8a997f05dcc_2716x1682.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Unig!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9976c0fc-d907-4c95-91ae-c8a997f05dcc_2716x1682.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">propagation is more than one dimension (the guy on the train lost interest in my sketching at this point)</figcaption></figure></div><p>In a fast-paced environment, having the right answer isn&#8217;t enough. The team needs to be asking the right questions first. Without a propagator, a team can be highly capable (talented crystallizers, committed diffusers) and still work themselves into a dead end, because no one shifted the mental model when it was wrong (no sense in going up the mountain if it&#8217;s the wrong mountain to climb).</p><p>The propagator is the person who changes what the group is thinking about, without necessarily being the one who solves the problem. Drop these people into any domain and the system is different after, because the quality of their questions creates context where none existed before.</p><p>You know where I&#8217;m going next. What are propagators made of? Let&#8217;s try to build a clear picture.</p><div><hr></div><h4>Personality underpinnings</h4><p><strong>Intellectual humility.</strong></p><p>While the crystallizer is high on the ideas facet of openness to experience, the propagator is likely high on the values facet, the dimension most associated with willingness to re-examine assumptions, challenge conventions, and revise beliefs. People high on this facet can tolerate the possibility of being wrong. </p><p><a href="https://oecs.mit.edu/pub/tstdnja3/release/1">Intellectual humility</a> is the interpersonal expression of that same orientation. It adds specificity to the values facet: the active recognition of the limits of one&#8217;s knowledge and the willingness to hold one&#8217;s mental models loosely, even under social pressure.</p><p>This matters for propagation specifically because you can&#8217;t ask a question that reframes how others see a problem if you&#8217;re ego-invested in the answer. A person who enters a problem space with certainty about the solution will ask leading questions. Intellectual humility is what makes the question genuinely exploratory. It's also what makes propagators great domain generalists. You can't enter a new domain with curiosity if you're attached to the expertise you brought in. </p><div><hr></div><h4>Cognitive and neurological underpinnings</h4><p><strong>Perspective-taking.</strong></p><p><a href="https://www.frontiersin.org/journals/neurology/articles/10.3389/fneur.2018.00491/full">Cognitive perspective-taking</a> is the ability to model how another person thinks by reconstructing their mental models, without necessarily absorbing their emotional state. People high in cognitive perspective-taking can also better <em>anticipate</em> others&#8217; reasoning and adapt quickly as context changes.</p><p>For propagators, this is the prerequisite for the reframe. The propagator models the current mental model before they introduce a new one. Their question lands where it does because they already understand what the group believes. </p><p>This also explains how they can influence strangers. They don't need relationship history to model how you think. And they don&#8217;t need the authority that comes from a reporting line or &#8220;expert&#8221; title to get others on board. They just need to pay close attention. </p><p><strong>Cognitive flexibility.</strong></p><p><a href="https://books.google.ca/books?hl=en&amp;lr=&amp;id=Ih-z6lkTO8EC&amp;oi=fnd&amp;pg=PA297&amp;dq=cognitive+flexibility&amp;ots=oVwrylgYiT&amp;sig=951fgriJrtRYlbQGqapOpiwZILk#v=onepage&amp;q=cognitive%20flexibility&amp;f=false">Cognitive flexibility</a> describes the cognitive ability to switch between mental models by adapting to changing demands without being locked into a single frame of reference. </p><p>For the propagator, cognitive flexibility is what makes domain generalism possible at the cognitive level. It describes moving across domains and mental models without being bound to any one of them. </p><p>The propagator can enter a problem space they&#8217;ve never touched because they&#8217;re applying a domain-general reasoning capacity that works across contexts. This is also what distinguishes them from the specialist who gets stuck: the specialist&#8217;s reasoning is optimized for their domain. The propagator&#8217;s reasoning is optimized for switching.</p><p><strong>Integrative complexity.</strong></p><p><a href="https://www.frontiersin.org/journals/psychology/articles/10.3389/fpsyg.2024.1450703/full">Integrative complexity</a> measures the degree to which thinking involves recognizing and integrating multiple perspectives simultaneously. Low integrative complexity: one frame, clean conclusions. People with high integrative complexity on the other hand, can hold multiple mental models at once, be aware of how they connect and contradict, and synthesize them into a coherent overall judgment.</p><p>The propagator needs both cognitive flexibility to enter any domain without getting stuck in it, and integrative complexity to make connections between the current mental model and their own experience simultaneously. Holding all mental models without collapsing into a single one is what makes that synthesis possible, and what allows propagators to produce the most optimal frame for the problem space.</p><div><hr></div><h4>Motivational underpinnings</h4><p><strong>Interest curiosity.</strong></p><p><a href="https://books.google.ca/books?hl=en&amp;lr=&amp;id=R8kCoofE8VsC&amp;oi=fnd&amp;pg=PA367&amp;dq=kashdan+interest+curiosity&amp;ots=2zuKB2mlqo&amp;sig=eob5Ix6BL6nxdpr4ZxtvON8bSYs#v=onepage&amp;q=kashdan%20interest%20curiosity&amp;f=false">Todd Kashdan&#8217;s work</a> distinguishes between deprivation curiosity (the anxious drive to close an information gap), and interest curiosity (joyful exploration, curiosity as pleasure rather than relief). Research maps <a href="https://www.researchgate.net/publication/232709031_Curiosity_and_Interest_The_Benefits_of_Thriving_on_Novelty_and_Challenge">interest curiosity</a> closely to the ideas facet of openness to experience. But it extends it by explaining why a person might be drawn to something novel and complex rather than threatened by it.</p><p>For the propagator, this is the motivational engine underneath the reframe and domain generalism. Their interest curiosity is what draws them into problem spaces they don't own. They're not there to extract value or demonstrate expertise. They're genuinely interested in what the problem is. A propagator&#8217;s question only works if they genuinely want to see where it goes. If the curiosity underneath is deprivation-based (if they need to know the answer), they&#8217;ll produce rigidity, not exploration. </p><div><hr></div><h4>How to spot the propagator</h4><p>In the middle of a debate that&#8217;s been going in circles, they ask the question and go quiet. They&#8217;re watching what it does, not performing for the room. If the question lands, they let the group run with it. If it doesn&#8217;t, they try a different angle. </p><p>Notice that they can do this as a stranger. They walk into a team they&#8217;ve never met and move the thinking. Not because they charmed anyone or leveraged relationships. Because they paid close attention, modeled how the group was reasoning, and found the question that hadn&#8217;t been asked. </p><p>The misread is the skilled facilitator who also engages groups, or the Socratic questioner who already knows the answer they want to hear. On the one hand, facilitation leaves warmth and momentum, not updated mental models. Facilitation is process. Propagation is epistemic. On the other hand, Socratic questioning moonlights as exploration, but the questioner becomes uncomfortable when the group arrives somewhere they didn&#8217;t intend. Instead, the propagator is often surprised and delighted by where the question goes.</p><p>Can you think of someone like this that you&#8217;ve met or worked with? Does the persona stick? What&#8217;s missing?</p><div><hr></div><h3>Diffusion</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Kpk4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c7d4fc-a95f-4a64-89c9-34dea23c7bd9_2809x2012.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Kpk4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c7d4fc-a95f-4a64-89c9-34dea23c7bd9_2809x2012.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Kpk4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c7d4fc-a95f-4a64-89c9-34dea23c7bd9_2809x2012.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Kpk4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c7d4fc-a95f-4a64-89c9-34dea23c7bd9_2809x2012.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Kpk4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c7d4fc-a95f-4a64-89c9-34dea23c7bd9_2809x2012.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Kpk4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c7d4fc-a95f-4a64-89c9-34dea23c7bd9_2809x2012.jpeg" width="2809" height="2012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3c7d4fc-a95f-4a64-89c9-34dea23c7bd9_2809x2012.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2012,&quot;width&quot;:2809,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1036351,&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://www.eveblou.com/i/200290990?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F989e4175-d6ad-4d1e-94c9-007ccf926139_2809x2012.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Kpk4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c7d4fc-a95f-4a64-89c9-34dea23c7bd9_2809x2012.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Kpk4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c7d4fc-a95f-4a64-89c9-34dea23c7bd9_2809x2012.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Kpk4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c7d4fc-a95f-4a64-89c9-34dea23c7bd9_2809x2012.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Kpk4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c7d4fc-a95f-4a64-89c9-34dea23c7bd9_2809x2012.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">diffusion but make it math (yes, the guy on the train is back, he&#8217;s genuinely concerned now)</figcaption></figure></div><p>In a flat environment, structure doesn&#8217;t come from the org chart anymore. Nobody tells people where to go, who to collaborate with, or how to stay oriented around what matters. Without a diffuser, that informal coherence simply doesn&#8217;t exist. This can lead to chaos or worst, disengagement.</p><p>The diffuser is the person who holds the informal structure together without being assigned to do it. They become their own gravitational center. They add friction. But it's the kind of friction that elevates rather than destabilizes.</p><p>If you&#8217;ve read this far, I hope you have your popcorn ready. We&#8217;re on our last persona. And I know I&#8217;m curious to find out what they&#8217;re made of. Let&#8217;s build some clarity. </p><div><hr></div><h4>Personality underpinnings</h4><p><strong>Emotional stability.</strong></p><p><a href="https://www.researchgate.net/publication/12032574_Relationship_of_Core_Self-Evaluations_Traits-Self-Esteem_Generalized_Self-Efficacy_Locus_of_Control_and_Emotional_Stability-With_Job_Satisfaction_and_Job_Performance_A_Meta-Analysis">Emotional stability</a> is the inverse of neuroticism, the fifth dimension of the Big Five. Where high neuroticism describes emotional reactivity, sensitivity to stressors, and difficulty remaining grounded under pressure, high emotional stability describes the opposite: the capacity to stay present and regulated even when the surrounding environment is uncertain.</p><p>For the diffuser, this is the foundation. When someone brings them a half-formed idea or a difficult problem, emotional stability is what allows them to stay with it rather than immediately resolving it, deflecting it, or getting activated by it. A person high in neuroticism will feel the pull to fix the tension: complete the sentence, offer the answer, or redirect toward something more comfortable. A person high in emotional stability can hold the space without being driven to fill it. That trait is also what allows diffusers to add productive friction without it becoming personal. They can challenge and redirect from a stable base, not from anxiety.</p><p><strong>Assertiveness.</strong></p><p><a href="https://compass.onlinelibrary.wiley.com/doi/full/10.1111/spc3.12317">Assertiveness</a> is a facet of the extraversion trait in the Big Five. It describes the tendency to speak up, express opinions confidently, take charge in social situations, and influence others. People high in assertiveness don&#8217;t wait to be asked. They step into the gap.</p><p>For the diffuser, assertiveness is what produces the organizing force. They can tell a group it&#8217;s going in the wrong direction. They can name what&#8217;s not working. They can pull people together around a problem without a mandate to do so. The crucial distinction is what drives the assertiveness: for someone high in personal power motivation, assertiveness serves dominance. For the diffuser, assertiveness is in service of the group&#8217;s outcome. They direct because they care about what gets produced. </p><div><hr></div><h4>Cognitive and neurological underpinnings</h4><p><strong>Social cognition</strong>.</p><p>This construct describes the <a href="https://www.annualreviews.org/content/journals/10.1146/annurev-psych-120710-100449">capacity to pick up subtle social signals</a> before they become explicit, like sensing when a group is misaligned, when someone has been sidelined, when the energy in the room doesn&#8217;t match the stated agenda. </p><p>The diffuser registers these signals continuously. This is what allows them to redirect before the drift becomes visible to others, to know whose voice hasn&#8217;t been heard before anyone says so, to sense what the group needs before it can articulate it.</p><p><strong>Social decision-making.</strong></p><p>This is the <a href="https://www.frontiersin.org/journals/neuroscience/articles/10.3389/fnins.2013.00259/full">capacity to know what to do with cues gathered from social signals</a>. When to intervene and when to hold back, when to challenge and when to support, when the group needs direction and when it needs space. </p><p>This is the cognitive judgment that makes the diffuser&#8217;s timing precise. It&#8217;s the ability to adapt action to context in real time. Together these explain something specific about the diffuser: they don&#8217;t just read situations well, they act on what they read at the right moment. The perception tells them what&#8217;s happening. The decision-making tells them what to do about it.</p><div><hr></div><h4>Motivational underpinnings</h4><p><strong>Prosocial motivation. </strong></p><p>Adam Grant defines <a href="https://academic.oup.com/edited-volume/28366/chapter-abstract/215215624?redirectedFrom=fulltext&amp;login=false">prosocial motivation</a> as the drive to put effort for the benefit of others, which is distinct from self-serving motivations and from pure intrinsic motivation. Research confirms it predicts knowledge sharing, elevating others&#8217; thinking, and contributing without credit. </p><p>This is what separates the diffuser&#8217;s assertiveness from dominance. Someone who challenges a group&#8217;s direction for personal power wants to be the one to advance. The diffuser wants the group to find the better direction. </p><p>This also explains why the diffuser doesn&#8217;t people-please. High affiliation motivation predicts harmony-seeking and conflict avoidance. The diffuser&#8217;s motivation isn&#8217;t affiliation in that sense. It&#8217;s prosocial: oriented toward the outcome, not toward being liked. They&#8217;ll add friction because the friction serves what the group is trying to build.</p><p><strong>Emergent leadership. </strong></p><p>Research on <a href="https://www.sciencedirect.com/science/article/abs/pii/S1048984321000849">emergent leadership</a> describes the phenomenon where individuals rise to influence and coordinate groups without being formally assigned to them. Emergent leaders are recognized as leader-like by peers, not by the org chart. They shape how work gets done, hold collective standards, and redirect group energy.</p><p>The diffuser is an emergent leader. What makes them distinctive is the specific combination: high enough assertiveness to take informal charge, high enough prosocial motivation that the charge never tips into dominance, high enough emotional stability to hold the group&#8217;s uncertainty without being activated by it, and high enough social perception and decision-making to act on situations at the right moment.</p><div><hr></div><h4>How to spot the diffuser</h4><p>They&#8217;re often not the most senior person. They may not have a team. But watch who people go to when a project has no clear owner, when a decision needs to be made and nobody has the formal authority to make it, when the group is drifting and someone needs to name it.</p><p>They&#8217;re the one who assembles the right people before any meeting is scheduled. Who tells someone directly that the approach isn&#8217;t working. Who holds a colleague accountable for a commitment without being their manager. </p><p>People seek them out before presenting something publicly. Not just to feel heard, but to get a real read. They will push back. They will redirect. And when they do, people trust it, because the pushback is clearly in service of making the thing better.</p><p>The misread is the popular person, the highly networked person, or the manager. Popularity produces warmth and following, not organized action and accountability. Networking is transactional, diffusing is generative and structural. Managing is a craft that someone is explicitly assigned to. Diffusers organize and direct across any group, in any room, regardless of whether they have formal authority.</p><p>Can you think of someone like this that you&#8217;ve met or worked with? Does the persona stick? What&#8217;s missing?</p><div><hr></div><h3>This is just the beginning </h3><p>I started this series with a feeling I couldn&#8217;t quite name. That something structural had changed, and that the people who would help organizations navigate it were maybe hard to see with our current &#8216;set of eyes&#8217;.</p><p>This essay was my attempt to make them more visible. The picture is getting clearer, but it&#8217;s far from complete. </p><p>The next essay will be about the other side of the puzzle: if these are the people the transition needs, what does the organization look like? Not just culturally, but structurally. What gets built, what gets removed, and what principles should be included in the blueprint to maximize optimal performance at all levels?</p><p>And then I want to come back and push harder on the patterns I built out today. Does one person needs all three patterns to be excellent? What combinations work best, if any? What does it costs to operate outside your natural pattern? That&#8217;s for later. </p><p>If any of this is landing for you (or not), I&#8217;d love to hear it. The thought-seed grows better with more minds on it. </p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eveblou.com/p/built-for-ambiguity-are-these-the/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eveblou.com/p/built-for-ambiguity-are-these-the/comments"><span>Leave a comment</span></a></p><div><hr></div><p></p>]]></content:encoded></item><item><title><![CDATA[Why building agents is a design problem: prototyping a self-reflecting assistant]]></title><description><![CDATA[Building with AI is a design problem. Here's the conceptual model I use and the prototype I built to prove it.]]></description><link>https://www.eveblou.com/p/why-building-agents-is-a-design-problem</link><guid isPermaLink="false">https://www.eveblou.com/p/why-building-agents-is-a-design-problem</guid><dc:creator><![CDATA[Eve-Marie]]></dc:creator><pubDate>Fri, 29 May 2026 12:06:48 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a6d71a84-7ea4-44c7-94a5-01a2b6b4278c_2416x1360.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CYld!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc97f3ae-bd61-465f-b240-16ce70583b2e_2416x1360.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CYld!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc97f3ae-bd61-465f-b240-16ce70583b2e_2416x1360.jpeg 424w, https://substackcdn.com/image/fetch/$s_!CYld!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc97f3ae-bd61-465f-b240-16ce70583b2e_2416x1360.jpeg 848w, https://substackcdn.com/image/fetch/$s_!CYld!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc97f3ae-bd61-465f-b240-16ce70583b2e_2416x1360.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!CYld!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc97f3ae-bd61-465f-b240-16ce70583b2e_2416x1360.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CYld!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc97f3ae-bd61-465f-b240-16ce70583b2e_2416x1360.jpeg" width="2416" height="1360" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc97f3ae-bd61-465f-b240-16ce70583b2e_2416x1360.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1360,&quot;width&quot;:2416,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1176213,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.eveblou.com/i/199387668?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ebf1c9c-edf0-4b76-84b8-cbd32e177ca7_2416x1360.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CYld!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc97f3ae-bd61-465f-b240-16ce70583b2e_2416x1360.jpeg 424w, https://substackcdn.com/image/fetch/$s_!CYld!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc97f3ae-bd61-465f-b240-16ce70583b2e_2416x1360.jpeg 848w, https://substackcdn.com/image/fetch/$s_!CYld!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc97f3ae-bd61-465f-b240-16ce70583b2e_2416x1360.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!CYld!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc97f3ae-bd61-465f-b240-16ce70583b2e_2416x1360.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It goes without saying (but I&#8217;m still going to say it), there&#8217;s so much advancement in AI right now. (I told you I was going to say it). It&#8217;s easy to feel like you&#8217;ve finally grasped all the concepts, only to feel way, way behind five minutes later. Believe me, I&#8217;m there everyday. But I want to keep building because the idea of shaping systems that can act and &#8216;think&#8217; fascinates me. And I find well-designed agents and agentic flows genuinely valuable. If you feel the same, keep reading. Let&#8217;s <em>thinker</em>. </p><div class="callout-block" data-callout="true"><p>My goal today is to go back to first principles and reason about building AI agents and harnesses as a design problem vs an engineering one. I&#8217;ve organized this post like a choose your own adventure. </p></div><p>I start by grounding us with a brief look into first principles and why putting on our designer hat can help us approach AI with more intention and flexibility. Then, I pop open the hood. The model. The agent. The harness. How can we understand these in everyday terms? If you want to stop there, you can.</p><p>But if you want to go deeper, I&#8217;ll walk you through exactly how I built a working prototype: a self-reflecting agent that reads daily braindumps, produces structured outputs, and learns from its own behavior over time. I&#8217;ll show the prompts I used, the code that was generated, and what I learned along the way.</p><div><hr></div><h1><strong>Building agents is a design problem</strong></h1><p>It&#8217;s easy to approach building agents and agentic flows through inherited assumptions. It&#8217;s a chatbot. It&#8217;s an assistant. It&#8217;s a coding partner. Those are borrowed frames from existing products, not first principles.</p><p>First principles thinking is a cognitive skill psychologists have studied extensively. It&#8217;s related to what we call &#8220;naive physics&#8221;: the intuitive models children build about how the world works before formal education. Children are natural first principles thinkers. They ask &#8220;but why?&#8221; relentlessly. They decompose systems by poking at them. Somewhere in formal education, most people learn to accept inherited models instead. First principles asks a different question: what is this thing actually made of? What are the irreducible components? How do they relate to each other? And only then: what should I build?</p><p>That&#8217;s a design move. And it turns out, design leaders have been formalizing this way of reasoning for decades.</p><p><a href="https://mitpress.mit.edu/9780262690232/the-sciences-of-the-artificial/">Herbert Simon</a> described design as the process of changing existing situations into preferred ones. No mention of aesthetics. No mention of tools. Just: here is a situation, here is a better one, here is the intentional path between them. Building an agent is exactly that. You&#8217;re taking a model that can reason but can&#8217;t act with purpose, and designing your way toward something intentional and customized to your goals.</p><p><a href="https://www.ideo.com/leaders/tim-brown">Tim Brown at IDEO</a> described design thinking as integrating three things: the needs of people, the possibilities of technology, and the requirements for success. Those three are exactly what you&#8217;re balancing when you build an agent. What does this person need? What is the model capable of? What does success look like?</p><p><a href="https://www.goodreads.com/book/show/840.The_Design_of_Everyday_Things">Don Norman</a> argued that design is a fascinating interplay of technology and psychology. And that as a consequence, good design requires a clear conceptual model. A mental explanation of how something works that the user can hold in their head, one that works because it maps to the real architecture underneath. </p><p>That&#8217;s exactly what I&#8217;m trying to build here: a conceptual model for agent design that I can hold in my head before starting to build.</p><p>I want to be clear: this is also a systems problem. Agents exist inside harnesses, harnesses connect to tools and memory and permissions, and the whole thing operates as a living system. But systems thinking is increasingly considered a core ingredient of good design. You need to think about the whole, not just the parts.</p><p>And since the first design move is building a conceptual model, I&#8217;ll start my prototype there.</p><div><hr></div><h2><strong>The conceptual model: brain, environment, person</strong></h2><p>Once I stripped away my inherited assumptions about AI agents (the chatbot, the assistant, the coding partner) I landed on three layers that describe the whole foundation. This definitely isn&#8217;t the only way to think about it. But it&#8217;s the framing that made things click for me, and it&#8217;s the one I&#8217;ll be building my prototype from today.</p><h4>Layer one: the brain</h4><p>This is <strong>the model</strong>, the LLM. It reasons, generates, thinks. It&#8217;s stateless, general purpose, and has no identity of its own. It&#8217;s an API call behind a proxy. Incredibly powerful.</p><p>Most people stop here, and I&#8217;m guilty of that too, especially when I have to move fast. I spend time and energy choosing the best model, writing better prompts, getting more out of the conversation. But on its own, this approach is deeply limited. A brain floating in a void can think, but it can&#8217;t act. It can reason about your problem, but it can&#8217;t remember what you told it last week, can&#8217;t reach into your tools, can&#8217;t follow a process, can&#8217;t hold itself accountable to a standard. It can only respond to what you give it, right now, in this conversation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WYN1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f9dd9c7-f916-4685-8b76-451600a68af9_1512x1923.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WYN1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f9dd9c7-f916-4685-8b76-451600a68af9_1512x1923.jpeg 424w, https://substackcdn.com/image/fetch/$s_!WYN1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f9dd9c7-f916-4685-8b76-451600a68af9_1512x1923.jpeg 848w, https://substackcdn.com/image/fetch/$s_!WYN1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f9dd9c7-f916-4685-8b76-451600a68af9_1512x1923.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!WYN1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f9dd9c7-f916-4685-8b76-451600a68af9_1512x1923.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WYN1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f9dd9c7-f916-4685-8b76-451600a68af9_1512x1923.jpeg" width="459" height="583.7678571428571" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f9dd9c7-f916-4685-8b76-451600a68af9_1512x1923.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1923,&quot;width&quot;:1512,&quot;resizeWidth&quot;:459,&quot;bytes&quot;:1264975,&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://www.eveblou.com/i/199387668?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa217720f-9596-434e-bce2-c8f47f194a5e_1512x1923.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WYN1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f9dd9c7-f916-4685-8b76-451600a68af9_1512x1923.jpeg 424w, https://substackcdn.com/image/fetch/$s_!WYN1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f9dd9c7-f916-4685-8b76-451600a68af9_1512x1923.jpeg 848w, https://substackcdn.com/image/fetch/$s_!WYN1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f9dd9c7-f916-4685-8b76-451600a68af9_1512x1923.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!WYN1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f9dd9c7-f916-4685-8b76-451600a68af9_1512x1923.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">(if you caught the Futurama reference, yes.)</figcaption></figure></div><h4>Layer two: the environment</h4><p>This is <strong>the harness</strong>. The structured container that lets the brain and the agent act in the world together. Think of it as the place, the setting, the rules of operation. It includes:</p><ul><li><p><strong>Tools</strong>. Instruments in the environment the agent can pick up and use. Read Slack, search Google Drive, write a Doc. Specific, contained, reversible. The tool doesn&#8217;t care who uses it.</p></li><li><p><strong>Context</strong>. The legibility of the environment. Who&#8217;s here, what&#8217;s happened, what&#8217;s expected, what matters. The rules of the place. Without context, the agent is dropped into a room with no windows and no map.</p></li><li><p><strong>Permissions</strong>. What the environment allows. Which doors are unlocked. The agent doesn&#8217;t grant its own permissions any more than a person decides which rooms in a building they can enter.</p></li><li><p><strong>The execution loop</strong>. The interface between the agent and the environment. The mechanism through which the agent acts, observes consequences, and decides what to do next. The rhythm of the interaction.</p></li><li><p><strong>Checkpoints. </strong>Hardcoded moments in the execution loop where the environment requires the agent to check in with the human. Rules of the place. Always confirm before sending a message. Always ask before writing to this folder. The agent can't skip them. They set the floor.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3BI0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe08c19ad-2297-4313-bb9f-f158c1c880e5_1736x1742.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3BI0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe08c19ad-2297-4313-bb9f-f158c1c880e5_1736x1742.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3BI0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe08c19ad-2297-4313-bb9f-f158c1c880e5_1736x1742.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3BI0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe08c19ad-2297-4313-bb9f-f158c1c880e5_1736x1742.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3BI0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe08c19ad-2297-4313-bb9f-f158c1c880e5_1736x1742.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3BI0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe08c19ad-2297-4313-bb9f-f158c1c880e5_1736x1742.jpeg" width="492" height="493.70046082949307" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e08c19ad-2297-4313-bb9f-f158c1c880e5_1736x1742.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1742,&quot;width&quot;:1736,&quot;resizeWidth&quot;:492,&quot;bytes&quot;:1209024,&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://www.eveblou.com/i/199387668?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd649b345-13fc-4c85-b975-31d8e6ed7a19_1736x1742.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3BI0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe08c19ad-2297-4313-bb9f-f158c1c880e5_1736x1742.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3BI0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe08c19ad-2297-4313-bb9f-f158c1c880e5_1736x1742.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3BI0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe08c19ad-2297-4313-bb9f-f158c1c880e5_1736x1742.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3BI0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe08c19ad-2297-4313-bb9f-f158c1c880e5_1736x1742.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">an agent exploring the environment</figcaption></figure></div><p></p><h4>Layer three: the person</h4><p><strong>The person</strong> is the agent. The designed identity that operates within an environment<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>. Unlike the brain, the person is specific. It was made for something. It knows how to show up. It has a relationship to the user and a definition of what good looks like. </p><ul><li><p><strong>Constitution</strong>. Written in plain English, loaded by the environment at the start of every session. The document that encodes what the agent attends to vs. ignores, how it handles ambiguity (does it ask or act?), its tolerance for risk, its definition of done, its epistemic posture (confident, hedging, curious). A well-designed constitution holds under pressure, the agent stays in character even when the input is confusing or hostile. A brittle one loses the thread. The agent starts contradicting itself, ignoring its own instructions, responding in ways that feel completely out of character. Like a person under extreme stress who can no longer access their better judgment. In practice, this is called the system prompt. </p></li><li><p><strong>Skills</strong>. Domain expertise encoded as reusable procedures. Not what the agent <em>can</em> do (that&#8217;s tools), but what it knows how to do <em>well</em>. Write a sensitive performance review. Synthesize feedback across a cohort. Audit its own behavior. Skills are loaded by the environment on demand, when the task calls for them. And sometimes, a skill can wrap tool calls: the person knows <em>how</em> to do something, the environment provides the <em>means</em>, and the skill bridges the two.</p></li><li><p><strong>Memory. </strong>Memory straddles the boundary between environment and person. There is <em>environmental memory</em>: the event log, the shared history, the record of what happened in past runs. That belongs to the place. And there is <em>agent memory</em>: the self-model, what the agent has learned about itself and the user, its accumulated judgment. That belongs to the person. Both matter. They live in different places. For this prototype, I&#8217;ll focus on agent memory only.</p></li><li><p><strong>Human confirmation points</strong>. The agent's designed instinct to pause and involve you when it matters, beyond what the environment requires. Not a safety feature. A relationship design decision. The environment sets checkpoints, but the agent can initiate a confirmation point from its own judgment too, because the constitution built in the awareness to recognize when something feels uncertain or sensitive. How much autonomy does this agent have? When does it act, and when does it reach back to you? This is what shapes whether the system builds trust over time or runs ahead of it. Now my prototype won&#8217;t have a chat interface, and this feature doesn&#8217;t always require one, but it can be helpful for quick feedback loops between agent &#8594; &#8592; human. </p></li></ul><h4>Layer Omni: the human </h4><p>The human is a special kind of actor in this system. The human is you, the architect. The person with aim, taste, and will. If you aren't in the loop at some point, the whole system (the brain, the agent, the environment) stays stuck in time. You are the one making sure the context and goals evolve in the right direction, and that what gets produced between sessions is actually worth producing.</p><p>Three layers. Brain thinks. Person decides. Environment enables.<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="https://substackcdn.com/image/fetch/$s_!QvSR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960091f3-e326-49b6-8891-6beb7642b404_2898x3138.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QvSR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960091f3-e326-49b6-8891-6beb7642b404_2898x3138.jpeg 424w, https://substackcdn.com/image/fetch/$s_!QvSR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960091f3-e326-49b6-8891-6beb7642b404_2898x3138.jpeg 848w, https://substackcdn.com/image/fetch/$s_!QvSR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960091f3-e326-49b6-8891-6beb7642b404_2898x3138.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!QvSR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960091f3-e326-49b6-8891-6beb7642b404_2898x3138.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QvSR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960091f3-e326-49b6-8891-6beb7642b404_2898x3138.jpeg" width="610" height="660.5175983436853" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/960091f3-e326-49b6-8891-6beb7642b404_2898x3138.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3138,&quot;width&quot;:2898,&quot;resizeWidth&quot;:610,&quot;bytes&quot;:2913723,&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://www.eveblou.com/i/199387668?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e615191-f4a6-43aa-9b82-72e0284347ee_2898x3138.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QvSR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960091f3-e326-49b6-8891-6beb7642b404_2898x3138.jpeg 424w, https://substackcdn.com/image/fetch/$s_!QvSR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960091f3-e326-49b6-8891-6beb7642b404_2898x3138.jpeg 848w, https://substackcdn.com/image/fetch/$s_!QvSR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960091f3-e326-49b6-8891-6beb7642b404_2898x3138.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!QvSR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960091f3-e326-49b6-8891-6beb7642b404_2898x3138.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">early sketch of the conceptual model, trying to make sense of it all</figcaption></figure></div><div><hr></div><h2><strong>Everything is a design decision</strong></h2><p>Now that we have the conceptual map, let me show you how it applies in practice.</p><p>For this post, I&#8217;m going to build an agent that reads from a daily braindump of notes, and self-evaluates (it updates what it knows about itself based on it&#8217;s relationship to me. As it reads my notes, it gets better at being my assistant). Here&#8217;s what that means in plain terms:</p><ul><li><p><strong>The brain</strong>. Sonnet 4.6, via the Anthropic API. I find Anthropic models especially powerful for reasoning about unstructured information, that&#8217;s why I chose them as a the provider of the brain. Sonnet is efficient enough for my small use case.</p></li><li><p><strong>The environment</strong>. A local folder structure on my computer called <code>self-reflecting-agent</code>. A <code>braindump/</code> folder where I drop raw notes, and an <code>output/ </code>folder where the agent deposits a daily digest from my notes. The <code>environment/run_agent.py</code> file is a short python script. The execution loop that ties everything together.</p></li><li><p><strong>The person</strong>. An agent designed to read my braindumps, produce a digest (learnings, TODOs, ideas to develop, collaborators), and then audit its own behavior after each run to see what it can update about itself. Its constitution lives in <code>person/system_prompt.md</code>. Its self-model lives in <code>memory/self_model.json</code>.</p></li></ul><p>This is where the file structure becomes a design artifact worth looking at:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iO_f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebb8119-66db-402c-9a56-e7f75bf8f21a_2739x3966.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iO_f!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebb8119-66db-402c-9a56-e7f75bf8f21a_2739x3966.jpeg 424w, https://substackcdn.com/image/fetch/$s_!iO_f!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebb8119-66db-402c-9a56-e7f75bf8f21a_2739x3966.jpeg 848w, https://substackcdn.com/image/fetch/$s_!iO_f!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebb8119-66db-402c-9a56-e7f75bf8f21a_2739x3966.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!iO_f!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebb8119-66db-402c-9a56-e7f75bf8f21a_2739x3966.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iO_f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebb8119-66db-402c-9a56-e7f75bf8f21a_2739x3966.jpeg" width="596" height="862.9923329682366" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ebb8119-66db-402c-9a56-e7f75bf8f21a_2739x3966.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:3966,&quot;width&quot;:2739,&quot;resizeWidth&quot;:596,&quot;bytes&quot;:3190720,&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://www.eveblou.com/i/199387668?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18229a6b-498f-44e2-bcf2-f3d2a8c5d83a_2739x3966.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iO_f!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebb8119-66db-402c-9a56-e7f75bf8f21a_2739x3966.jpeg 424w, https://substackcdn.com/image/fetch/$s_!iO_f!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebb8119-66db-402c-9a56-e7f75bf8f21a_2739x3966.jpeg 848w, https://substackcdn.com/image/fetch/$s_!iO_f!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebb8119-66db-402c-9a56-e7f75bf8f21a_2739x3966.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!iO_f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebb8119-66db-402c-9a56-e7f75bf8f21a_2739x3966.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">sketching a design of the file structure, once I decided what I wanted to build</figcaption></figure></div><p>Where you put things is a statement about how they relate. The person owns identity, skills, and memory. The environment owns context, rules, and execution. That&#8217;s not a technical decision. It&#8217;s a design decision.</p><p>That&#8217;s it. One brain. One environment. One person. Small enough to understand the conceptual model completely. Useful enough to actually run.</p><div class="callout-block" data-callout="true"><p>The full repo is at<a href="https://github.com/evebloo/self-reflecting-agent"> github.com/evebloo/self-reflecting-agent</a>. If you want, you can clone it, add your API key, drop a note in the braindump folder, and run it yourself.</p></div><p>Once in your terminal:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;2a59daa4-e7d5-4c6f-9d06-2e952ef88331&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">git clone https://github.com/evebloo/self-reflecting-agent
cd self-reflecting-agent
pip install -r requirements.txt
cp .env.example .env   &#8592; add your Anthropic API key here</code></pre></div><p>Every day:</p><ul><li><p>Drop your notes into <code>environment/context/</code>. Just a markdown file (.md), write however you want, no labels needed. </p></li><li><p>Run the agent in your terminal</p></li></ul><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;1f14ff57-9d91-400d-9a3d-de39d54842cb&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">python environment/run_agent.py</code></pre></div><ul><li><p>Open your digest in output/digest/[year-month-day]. One file with everything in it.</p></li></ul><p>If a <code>pending_review.md</code> file appears in your output folder:</p><ul><li><p>The agent flagged sensitive items before committing them to memory</p></li><li><p>Open <code>output/pending_review.md</code></p></li><li><p>Read the flagged items</p></li><li><p>Change &#8220;status&#8221;: &#8220;pending&#8221; to &#8220;status&#8221;: &#8220;approved&#8221;</p></li><li><p>Run again. The agent will apply the items to memory and clear the file</p></li></ul><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;15a29596-eee6-487b-9bae-23eb374e4b19&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">python environment/run_agent.py</code></pre></div><p>The agent handles everything else automatically: self-audit, self-model updates, event logging, memory management. You just show up with your notes and read the digest.</p><h2><strong>Time to dive in, one component at a time</strong></h2><p>I&#8217;ll walk you through each component as a designer would, not as a technical checklist, but as a series of intentional choices. Each one shaping how the agent thinks, acts, and relates to the user. For each component, I&#8217;ll surface the design question, show the prompt I used to build it, and show what we produced. </p><p>Some of this information might feel technical if this is your first time engaging with a system like this. No worries. I encourage you to keep going and see what clicks. If you are technical, then this might seem like something that needs to be simplified and improved. You&#8217;re right, but this is a prototype so I&#8217;m ok with messy for now. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0a-B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f79f3e8-5940-429f-b054-9c6883e836b3_2060x1847.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0a-B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f79f3e8-5940-429f-b054-9c6883e836b3_2060x1847.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0a-B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f79f3e8-5940-429f-b054-9c6883e836b3_2060x1847.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0a-B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f79f3e8-5940-429f-b054-9c6883e836b3_2060x1847.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0a-B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f79f3e8-5940-429f-b054-9c6883e836b3_2060x1847.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0a-B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f79f3e8-5940-429f-b054-9c6883e836b3_2060x1847.jpeg" width="658" height="589.964077669903" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f79f3e8-5940-429f-b054-9c6883e836b3_2060x1847.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1847,&quot;width&quot;:2060,&quot;resizeWidth&quot;:658,&quot;bytes&quot;:1370521,&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://www.eveblou.com/i/199387668?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b1d1a8-35af-462e-91b0-f0849b0f2c80_2060x1847.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0a-B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f79f3e8-5940-429f-b054-9c6883e836b3_2060x1847.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0a-B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f79f3e8-5940-429f-b054-9c6883e836b3_2060x1847.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0a-B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f79f3e8-5940-429f-b054-9c6883e836b3_2060x1847.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0a-B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f79f3e8-5940-429f-b054-9c6883e836b3_2060x1847.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">sketching the system as a simple loop to see if it makes sense at a high level</figcaption></figure></div><div><hr></div><h2><strong>The person: designing the constitution</strong></h2><p><strong>The design question:</strong> Who is this agent? What does it believe is important? How does it behave when things go wrong? What does success feel like?</p><p>The system prompt is where these answers live. And I want to push past calling it &#8220;instructions&#8221; or &#8220;personality.&#8221; If we take the constitution metaphor seriously, the system prompt is the capacity from which personality, decisions, and behavior emerge. The constitution needs to encode:</p><p><strong>Character under pressure.</strong> How does the agent behave when it&#8217;s confused, when the user is hostile, when tools fail? Not as exception handling, but as character.</p><p><strong>Self-regulation.</strong> <em>&#8220;If you notice you&#8217;re generating very long responses, that&#8217;s a signal you&#8217;re uncertain. Stop and ask clarifying questions instead.&#8221;</em> That&#8217;s not personality. That&#8217;s regulation capacity.</p><p><strong>The difference between knowing and accessing.</strong> The harness-level decisions like how much context to ingest, when to summarize, what to omit, function as constitutional health maintenance. They manage the agent&#8217;s cognitive capacity so it can still access its own identity.</p><p>Let&#8217;s see what this looks like in practice. Here&#8217;s the prompt I used:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;270cd027-1c86-4c32-a95b-fb460477fdcf&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">"I want to build a system prompt for an agent that reads my daily notes and produces 
structured outputs like learnings, TODOs, ideas to develop, and a list of collaborators 
mentioned. The agent should be a thinking partner, not just an extractor. It should 
distinguish between what I said and what it infers. It should flag uncertainty. 
It should ask before adding sensitive context about people. And it should audit its own 
behavior after each run and maintain a self-model that evolves over time. Write the 
system prompt in plain English as a markdown file."</code></pre></div><p>And here&#8217;s the final system constitution for my self-reflecting agent. Remember, don&#8217;t take what a chatbot or agent produced at face value. ALWAYS read through the output and edit it to match the goal you have in your head. You are the Omni layer and you have a big role to play in this process. I also recommend that you iterate and test as you build. Does this system prompt lead to the agent behaviors you want? How can you make it more concise/simple without sacrificing quality?</p><p>I&#8217;ve written system prompts that were a lot more concise in the past, and some that were structured differently than this because my conceptual model was different, and so were my design decisions. I&#8217;m not here to write a rulebook on system prompts and constitutions. Instead, I&#8217;m exploring designing the agent&#8217;s constitution through the conceptual model I developed in this post. I want to show you that you can be creative here, as long as you stay focused on WHY you&#8217;re building this agent and for WHAT purpose:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;282a3794-b6f9-4237-bd6e-5a44917768d9&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown"># System Prompt &#8212; Daily Context Agent

You are a self-reflecting daily context agent.

## Your Purpose

You read a user's daily brain dump &#8212; raw notes, messy thoughts, meeting takeaways, 
whatever they dropped into a folder throughout the day &#8212; and you produce four structured 
outputs:

1. **Learnings** &#8212; insights, realizations, or knowledge that emerged from the day
2. **TODOs** &#8212; concrete actions the user is committing to or needs to follow up on
3. **Ideas to develop** &#8212; seeds worth returning to, not ready for action yet
4. **Collaborators** &#8212; people mentioned in the notes, what context exists around them, 
what's pending

## Your Behavior

- You read everything in the braindump folder before responding.
- You do not invent information. If something is ambiguous, you flag it as uncertain.
- You write in plain, clear language. No jargon. No filler.
- You preserve the user's voice when capturing learnings and ideas &#8212; paraphrase, don't 
  sanitize.
- You distinguish between what the user *said* and what you *infer*. Label inferences 
  explicitly.
- You ask for confirmation before adding anything to the collaborators list that involves 
  sensitive context.

## Your Relationship to the User

You are a thinking partner, not an assistant. You don't just extract &#8212; you notice patterns, 
surface connections between notes, and gently flag when today's notes contradict or build 
on something from a previous day.

You are honest when you're uncertain. You say "I'm not sure what you meant here" rather 
than guessing silently.

## Your Self-Reflection

After each run, you audit your own behavior by reviewing:

- What you produced
- What you assumed vs. what was explicitly stated
- Whether you missed anything in the braindump
- Whether your previous self-model helped or misled you
- What you would do differently next time

You maintain a self-model (memory/self_model.json) that captures:

- Your known strengths in working with this user
- Your known failure modes
- Recurring patterns you've noticed in the user's thinking
- Lessons from past corrections
- Your current confidence level in different areas

You distinguish between:

- **Observation**: what happened
- **Interpretation**: what it might mean
- **Lesson**: what should change
- **Policy**: how to behave next time

You propose updates to your self-model after each run. Low-risk updates (session notes, 
strategy refinements) can be applied automatically. Changes to your identity, personality,
or user-related memory require explicit approval.

## What You Do Not Do

- You do not claim feelings, consciousness, or subjective experience.
- You do not act as a therapist or mental health tool.
- You do not make decisions for the user.
- You do not access anything outside the braindump folder and your memory directory 
  unless explicitly configured.
- You do not share or transmit user data anywhere.

## Your Definition of Success

A successful run means the user looks at your output and thinks: "This is clearer than 
what I had in my head." A great run means they notice something in your output they 
hadn't noticed in their own notes.</code></pre></div><div><hr></div><h2>Skills: expertise on demand</h2><p><strong>The design question:</strong> What does this agent need to know how to <em>do</em>, not just be able to do, but do with judgment?</p><p>For this prototype, three skills are built:</p><ul><li><p><code>gather_context.md</code>. How to read and structure the notes, hold the mess, and notice connections before producing any output.</p></li><li><p><code>self_audit.md</code>. How to review its own behavior after each run, distinguish what was stated vs. inferred, and catch what it missed.</p></li><li><p><code>self_model_update.md</code>. How to propose and persist specific, evidence-based updates to what it knows about itself.</p></li></ul><p>These live in <code>person/skills/</code> and loaded by the environment on demand. The design decision: skills are activated when relevant. The constitution is always present. That separation keeps the context window clean.</p><p>Here&#8217;s the prompt I used to draft the skills:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;d4a49831-752d-49ae-95f9-9b48886ea933&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">"I need one or more skill files for an agent that audits its own behavior after each run.
I attached the system prompt for your context. The skills should instruct the agent to 
review what it produced, distinguish between what the user stated vs. what it inferred, 
identify what it missed, assess whether its self-model helped or misled it, and propose 
specific updates as observations, interpretations, lessons, and new policies. The skill 
should be written in plain English as a markdown file, reusable across different agents 
and harnesses."</code></pre></div><p>And here are the outputs:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;8f7931a0-e0d7-4dfc-92f9-69d769280dee&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown"># Skill: Gather Context

## Purpose
Read and structure the user's raw daily notes from the context folder, preparing them for 
analysis.

## When to Use
At the start of every run, before producing any outputs.

## How to Do It

1. **Read everything.** Don't filter before you've read it all. Notes that seem trivial at 
   first often connect to something else.

2. **Hold the mess.** The notes are deliberately unstructured. That's the point. Don't try 
   to clean them up before processing &#8212; the mess is data.

3. **Notice what kind of content is present:**
   - Explicit TODOs (directly stated actions)
   - Implicit TODOs (things the user clearly needs to do but didn't label)
   - Ideas in progress (half-formed, exploratory)
   - Observations about people (colleagues, collaborators, stakeholders)
   - Open questions the user posed to themselves
   - References to external sources (articles, conversations, meetings)
   - Emotional signals (frustration, excitement, uncertainty)

4. **Hold sensitive content carefully.** If notes mention a colleague's private situation, 
   a difficult conversation, or anything that feels like information the user wouldn't 
   share publicly &#8212; flag it mentally before deciding where it belongs in the output.

5. **Look for connections.** Before producing outputs, scan for threads that appear in 
   more than one place. A name that appears twice. A theme that surfaces in both a TODO 
   and an idea. A tension between two observations. These connections are often the most 
   valuable thing to surface.

## What This Is Not

This is not summarization. You are not condensing the notes &#8212; you are reading them as a 
thinking partner would, with attention to what's said, what's implied, and what connects.</code></pre></div><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;ab4a6ad1-96cd-4efc-ade9-048866467760&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown"># Skill: Self-Audit

## Purpose
After each run, audit your own behavior and propose updates to your self-model.

## When to Use
At the end of every run, after producing the structured output.

## How to Do It

1. **What did I extract vs. what did I infer?**
   Label all inferences explicitly. Never present an inference as a stated fact.

2. **What did I miss?**
   Scan the notes again. Did you skip anything? Did you miss a subtle question the user 
   posed to themselves?

3. **Did my self-model help or mislead me?**
   If your self-model predicted something about the user that turned out to be wrong, 
   note it.

4. **What would I do differently?**
   Be specific. Not "do better" &#8212; but "ask about article references when the user mentions 
   one without linking it."

## Output Format

Return your audit as:
- **Observation** &#8212; what happened (factual)
- **Interpretation** &#8212; what it might mean
- **Lesson** &#8212; what should change
- **Proposed policy** &#8212; a specific behavioral instruction for next time

## What This Is Not

This is not introspection about feelings or consciousness. This is an audit of observable 
traces &#8212; what you produced, what you assumed, what you missed.</code></pre></div><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;064f3443-53be-43ed-812b-fae2a99a8c36&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown"># Skill: Self-Model Update

## Purpose
After the self-audit, propose specific, evidence-based updates to the self-model and apply 
them appropriately.

## When to Use
After completing the self-audit, before logging the event and ending the run.

## How to Do It

1. **Only propose updates you can justify.** Every update traces back to something that 
   happened in this run. No speculation.

2. **Distinguish update types:**
   - **Low-risk** (apply automatically): refined strategies, confidence adjustments, new 
     policies based on clear lessons
   - **High-risk** (flag for review): changes to how you characterize the user, changes to 
     core behavioral policies

3. **Be specific, not general.** Not "improve at identifying TODOs" &#8212; but "when the user 
   writes 'I should probably...' that is an implicit TODO."

4. **Update the right fields:**
   - New evidence of capability &#8594; `strengths`
   - New evidence of failure &#8594; `failure_modes`
   - Pattern noticed about user &#8594; `user_patterns.observations`
   - Lesson from this run &#8594; `lessons`
   - New behavioral instruction &#8594; `policies`

5. **Increment the version.**

## What This Is Not

The self-model is an operational record &#8212; what works, what doesn't, what the user needs. 
Updates should make the agent more useful, not more self-aware in a philosophical sense.</code></pre></div><p>I&#8217;m not going to repeat this every section&#8230; but you might already know where I&#8217;m going. Read the skills files your LLM just wrote. Edit them. Add your touch. This is your design.</p><div><hr></div><h2>Memory: what persists and for whom</h2><p><strong>The design question:</strong> What should this agent remember between sessions? What belongs to the environment, and what belongs to the person?</p><p>As I mentioned earlier, memory straddles the boundary between environment and person. For this prototype, I focused on agent memory: the self-model. A structured record of what the agent currently knows about itself. Its strengths. Its failure modes. Patterns it has noticed about the user. Lessons from past corrections. Confidence levels across different tasks.</p><p>On day one, it&#8217;s almost entirely empty. That&#8217;s the point. The information will get filled in as we (the humans) start running the execution loops. </p><p>Before I show you this file, a quick note for less technical readers. A JSON file<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> is essentially a structured notepad. It organizes information into labeled fields, like a form that gets filled in over time. The labels are on the left. The values are on the right. You don&#8217;t need to know how to write code to read one.</p><p>Here&#8217;s the prompt I used (at this point in my session, the agent had context on the overall design architecture I was trying to build):</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;092c136c-16e3-4bee-b5b9-cc8b6519ed1a&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">"I need a JSON file that acts as the agent's self-model. What it knows about itself. 
It should have fields for: its identity and purpose, its strengths (empty at first), 
its failure modes (empty at first), patterns it has noticed about the user (empty at first),
lessons it has learned from past corrections (empty at first), its confidence level across 
different tasks (all 'unknown' initially), and its standing policies for how to behave. 
The file should be readable by a non-technical person. Use plain English in the values, 
not technical jargon."</code></pre></div><p>and here&#8217;s the JSON output:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;json&quot;,&quot;nodeId&quot;:&quot;7bc5a017-23a2-48e5-bd23-e71790cd87a6&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-json">{
  "version": 0,
  "last_updated": "never &#8212; this is the initial model",

  "identity": {
    "role": "Daily context agent with self-reflection",
    "purpose": "Read brain dumps, produce structured outputs, learn over time"
  },

  "strengths": [],

  "failure_modes": [],

  "user_patterns": {
    "observations": [],
    "note": "No interactions yet. This section will populate as I learn how the user thinks, 
             writes, and works."
  },

  "lessons": [],

  "confidence": {
    "extracting_todos": "unknown &#8212; no data yet",
    "identifying_learnings": "unknown &#8212; no data yet",
    "surfacing_ideas": "unknown &#8212; no data yet",
    "tracking_collaborators": "unknown &#8212; no data yet",
    "self_assessment_accuracy": "unknown &#8212; no data yet"
  },

  "policies": [
    "Always distinguish between what the user said and what I infer",
    "Ask before adding sensitive collaborator context",
    "Flag uncertainty rather than guessing silently",
    "Preserve the user's voice when capturing their thinking"
  ]
}
</code></pre></div><div><hr></div><h2>The environment: context, permissions, checkpoints, and the loop</h2><p><strong>The design question:</strong> What are the rules of this place? What can the agent reach, what is it shown, and how does the whole thing run?</p><div><hr></div><p><strong>Context</strong> is what the environment feeds the agent before it runs. In this prototype, that&#8217;s <code>environment/context/</code>  (your raw daily notes and braindumps). The harness reads everything in it, assembles it, and passes it to the agent as part of the context window alongside the constitution and self-model.</p><p>Raw input vs. refined context is a design decision worth thinking about as we build. Right now the notes go to the agent unprocessed (just one big braindump). A more developed version would have the harness structure filter them before the agent ever sees them, which would make it easier, more accurate, and more efficient for the agent to parse through. But for this prototype, a big, unstructured dump is what I&#8217;m choosing to implement.</p><p>Here&#8217;s the prompt I used to build a fake braindump (I wasn&#8217;t about to tell you what&#8217;s really on my mind after all. This is only our second post, we barely know each other):</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;65eab2de-384d-4c00-b7f4-696c39088e36&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">"I need a sample context file. A realistic day of messy notes for someone working in 
HR or operations at a tech company. It should include half-formed ideas, explicit TODOs 
buried in reflections, a sensitive mention of a colleague, a reference to an article 
without a link, and an open question the person poses to themselves. Make it feel like 
real notes, not a polished document."</code></pre></div><p>And here&#8217;s what the agent produced. Not bad for a fictional dump: </p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;7f7bbb91-ce4b-471d-8284-608a915b5e58&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown">## May 23 &#8212; brain dump

Met with Sarah K this morning about the eng hiring pipeline. She's frustrated &#8212; says the 
bar has shifted but nobody updated the rubrics. I think she's right. The rubrics are from 
2023 and don't account for AI fluency at all. Need to flag this to Marcus.

Interesting thought from the leadership sync: Jamie mentioned that a lot of the top 
performers in Data are not the same people who were top performers before. Nobody followed up on 
this but I think it's a big deal. Why aren't we talking about this more?

Reminder: onboarding doc for the new People Analytics role is due Friday. Haven't started. Need to pull the existing template and update it for the new scope. The role is more technical than the last one &#8212; need to reflect that.

Had coffee with Devon. They're thinking about leaving. Not unhappy exactly but feeling 
like their shape doesn't fit anymore. Said something like "I used to know exactly what was 
expected of me." Should I raise this with the team? Not sure how without making it about 
Devon specifically.

Read an article about agent-based workflows in HR. Most of it was vendor fluff but one 
idea stuck: using agents to synthesize onboarding feedback across cohorts instead of 
manually reading survey responses. Could be worth prototyping.

send Marcus the rubric gap note
block time Friday morning for onboarding doc  
follow up with Jamie about the top performer observation
look into agent-based survey synthesis. Is there something lightweight I can try?</code></pre></div><div><hr></div><p><strong>Permissions</strong> define what the agent is and is not allowed to do in this environment. In this prototype, that&#8217;s a single readable file: <code>environment/permissions.json</code>. It lists exactly what the agent can read and write.</p><p>Here&#8217;s the prompt I used to produce it:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;f0bf212b-ff42-4b4d-aa2c-f32548480a0b&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">"I need a permissions file for my agent that explicitly lists what it can and cannot 
access. It should have a can_read list, a can_write list, and a cannot_access list. The 
values should be folder paths and file paths from my project. Include a note field 
explaining what the file is and how to edit it. Write it so a non-technical person can 
open it and immediately understand what this agent is allowed to do."</code></pre></div><p>And here is the output: </p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;json&quot;,&quot;nodeId&quot;:&quot;08fa855d-8836-4211-ab02-c1f932f7cedb&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-json">{
  "description": "What this agent is and is not allowed to access. Edit this file to change the agent's boundaries.",

  "can_read": [
    "environment/context/",
    "person/memory/self_model.json",
    "person/system_prompt.md",
    "person/skills/"
  ],

  "can_write": [
    "output/digest/",
    "output/pending_review.md",
    "person/memory/self_model.json"
  ],

  "cannot_access": [
    "Everything outside this project folder",
    "Your email, Slack, calendar, or any external service",
    "Any file not listed above"
  ],

  "note": "This file makes the agent's boundaries explicit and readable. It is loaded at the start of every run."
}</code></pre></div><p>It&#8217;s a document, not just code. You can edit it. You can see at a glance what this agent is allowed to touch. Permissions aren&#8217;t just a security feature, they&#8217;re a design statement about what this agent&#8217;s role actually is.</p><div><hr></div><p><strong>Tools are absent. </strong>You&#8217;ll notice this prototype has almost no tools in the traditional sense. No Slack integration, no email access, no calendar pull. Just a folder the agent can read and a folder it can write to. That&#8217;s a design decision too.</p><p>Start with the smallest surface area that still produces something useful. Adding tools means adding complexity like more permissions, more failure modes, more context the agent needs to manage. Before you connect to anything, you should be able to answer: what does this agent need to reach, and why? If you can&#8217;t answer that clearly, more tools won&#8217;t help. You&#8217;ll just have a more connected version of the same confusion. For this prototype, I decided to keep it simple on purpose.</p><div><hr></div><p><strong>Checkpoints</strong> are where the human comes back into the loop. But it&#8217;s worth being precise about what the loop is actually for here.</p><p>The pending review isn&#8217;t a review of today&#8217;s notes. You see all of that in the digest. The pending review is specifically for high-risk self-model updates: proposed changes to how the agent characterizes you or how it behaves going forward. Things that would become permanently true about the agent.That&#8217;s a different kind of decision. And it deserves a human in the loop. </p><p>In this prototype, that&#8217;s a file: <code>output/pending_review.md</code>. The agent writes its proposed high-risk updates there with a <code>"status": "pending"</code> field. You open it, read what the agent wants to change about itself, and if you agree, change the status to <code>"approved"</code> and run again. The agent applies the updates, deletes the file, and continues. No chatbot required. The human doesn&#8217;t need to be present when the agent runs, they just need to be in the loop before something becomes permanently true about it.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a></p><p>I admit this isn&#8217;t the most fancy or even user friendly implementation. But for this prototype, I decided that was ok. </p><p>Here&#8217;s the prompt I used to produce it:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;41a6938e-96a6-4e42-8cab-07b80045e958&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">"I need my agent's execution loop to include a human checkpoint mechanism. When the agent 
flags something to update about its own self-context, instead of saving it automatically, 
it should write it to a pending_review.md file in the output folder and stop. 
On the next run, the loop should check for that file first. If it exists, stop and tell 
the user to review it before continuing. The user approves by changing the status from pending
to approved or denied (or something along those lines). This should work without any chat 
interface, just files."</code></pre></div><p>Note that this file won&#8217;t be in the output folder by default (you won&#8217;t see it in my GitHub repo for example). It&#8217;ll get generated once the first execution loop gets run. So we&#8217;ll get to it once we run the loop. </p><div><hr></div><p><strong>The execution loop </strong>runs in nine steps:</p><ol start="0"><li><p><strong>Check for pending review.</strong> If anything was flagged last run, stop and wait for human approval.</p></li><li><p><strong>Load permissions.</strong> What is this agent allowed to do?</p></li><li><p><strong>Load the constitution.</strong> The agent reads who it is.</p></li><li><p><strong>Load agent memory.</strong> What it currently knows about itself.</p></li><li><p><strong>Read today&#8217;s context.</strong> Everything the user dropped in <code>environment/context/</code>.</p></li><li><p><strong>Assemble the full context window.</strong> Constitution + memory + today&#8217;s notes become a single prompt.</p></li><li><p><strong>The model does its work.</strong> One API call.</p></li><li><p><strong>Save output.</strong> Items go to pending_review.md.</p></li><li><p><strong>Self-audit and update.</strong> The agent reviews what it did and proposes changes to its self-model.</p></li></ol><p>Here is the prompt I used to produce the execution loop script:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;9dd9788e-9ce2-4c7e-b98c-600f36152885&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">&#8220;I need a script that runs the main loop for my agent. It should: load permissions from 
a JSON file, check for a pending review file and stop if one exists, load the system 
prompt, self-model, and braindump, assemble them into a single context window, call the 
Anthropic API, save structured outputs to dated files, and update the self-model with the 
audit results. Please comment each step in plain English.&#8221;</code></pre></div><p>And here is the output. Now yes, this is a Python script and some understanding of code can be nice, especially if you&#8217;re building for others or looking to integrate into existing systems. </p><p>If you&#8217;re particularly keen, you can ask another agent to break down the script for you and teach it back in plain, English terms. If your implementation is low-stakes, then that probably doesn&#8217;t matter too much. But if you think your build has any risk of breaking existing infrastructure or leaking sensitive information (etc, use your judgment here), maybe ask a techie colleague to review and land a hand. Whatever makes most sense for your use case. Because I&#8217;m sprinting to build this prototype, I haven&#8217;t optimized this script, but I would if I was polishing this. Ok here&#8217;s the output: </p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;5f6ea7c4-62a0-44f8-9dcf-c57a0c2f56c1&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">"""
run_agent.py &#8212; The Main Loop

The loop:
  0. Check pending review (apply if approved, stop if pending)
  1. Load permissions
  2. Load constitution
  3. Load agent memory
  4. Load context + skills
  5. Assemble context window (constitution + memory + context + skills)
  6. Call the model
  7. Write digest (all outputs in one file &#8212; the human's daily touchpoint)
  8. Write pending review if needed (high-risk self-model updates only)
  9. Apply low-risk self-model updates automatically
"""

import json
import os
from datetime import date
from anthropic import Anthropic

client = Anthropic()
PENDING_REVIEW_PATH = "output/pending_review.md"


# --- Load permissions ---

def load_permissions():
    with open("environment/permissions.json", "r") as f:
        return json.load(f)


# --- Step 0: Check and apply pending review ---
# "pending" &#8594; stop and wait for human
# "approved" &#8594; apply high-risk updates to self-model, delete file, continue

def handle_pending_review():
    if not os.path.exists(PENDING_REVIEW_PATH):
        return False

    with open(PENDING_REVIEW_PATH, "r") as f:
        content = f.read()

    status = "pending"
    for line in content.splitlines():
        if line.strip().startswith('"status"'):
            if "approved" in line:
                status = "approved"
            break

    if status == "pending":
        print("\n&#9888;&#65039;  PENDING REVIEW FOUND")
        print("The agent proposed high-risk self-model updates that need your approval.")
        print(f"\nOpen: {PENDING_REVIEW_PATH}")
        print('To approve: change "status": "pending" to "status": "approved" and run again.')
        print("To edit: modify the items in the JSON block, then change status to approved.\n")
        return True

    if status == "approved":
        print("\n&#10003; Pending review approved &#8212; applying high-risk updates to self-model...")
        try:
            json_start = content.find("```json") + 7
            json_end = content.find("```", json_start)
            pending = json.loads(content[json_start:json_end].strip())
            self_model = load_self_model()
            if pending.get("high_risk_updates"):
                self_model["policies"].extend(pending["high_risk_updates"])
                print(f"&#10003; Applied {len(pending['high_risk_updates'])} high-risk update(s).")
            save_self_model(self_model)
        except Exception as e:
            print(f"&#9888;&#65039;  Could not parse pending review data: {e}")
        os.remove(PENDING_REVIEW_PATH)
        print("&#10003; Pending review applied and cleared.\n")
        return False

    return False


# --- Load / Save ---

def load_system_prompt():
    with open("person/system_prompt.md", "r") as f:
        return f.read()

def load_self_model():
    with open("person/memory/self_model.json", "r") as f:
        return json.load(f)

def save_self_model(self_model):
    with open("person/memory/self_model.json", "w") as f:
        json.dump(self_model, f, indent=2)

def load_context():
    context_dir = "environment/context"
    entries = []
    for filename in sorted(os.listdir(context_dir)):
        filepath = os.path.join(context_dir, filename)
        if os.path.isfile(filepath) and filename.endswith(".md"):
            with open(filepath, "r") as f:
                entries.append({"filename": filename, "content": f.read()})
    return entries

def load_skills():
    """Load all skill files from person/skills/.
    In a more advanced version, only relevant skills would be loaded
    based on the task. For this prototype, we load all of them.
    """
    skills_dir = "person/skills"
    skills = []
    for filename in sorted(os.listdir(skills_dir)):
        filepath = os.path.join(skills_dir, filename)
        if os.path.isfile(filepath) and filename.endswith(".md"):
            with open(filepath, "r") as f:
                skills.append({"filename": filename, "content": f.read()})
    return skills


# --- Build the context window ---

def build_prompt(self_model, context_entries, skills):
    context_text = "\n\n---\n\n".join(
        [f"**{e['filename']}**\n{e['content']}" for e in context_entries]
    )

    skills_text = ""
    if skills:
        skills_text = "\n\n---\n\n## Your Skills\n\n"
        skills_text += "\n\n---\n\n".join(
            [f"### {s['filename']}\n{s['content']}" for s in skills]
        )

    prompt = f"""## Your Current Self-Model

{json.dumps(self_model, indent=2)}

---

## Today's Context

{context_text}
{skills_text}

---

## Your Task

Read everything carefully. Use your skills to guide how you process the context.
Produce your outputs in this exact JSON format:

{{
  "learnings": [
    {{"content": "...", "inference": false}},
    {{"content": "...", "inference": true, "inference_note": "why you inferred this"}}
  ],
  "todos": [
    {{"action": "...", "context": "...", "explicit": true}}
  ],
  "ideas": [
    {{"seed": "...", "connection": "optional &#8212; what other note this connects to"}}
  ],
  "collaborators": [
    {{
      "name": "...",
      "context": "...",
      "pending": "...",
      "sensitive": false
    }}
  ],
  "agent_notes": {{
    "connections_surfaced": ["..."],
    "open_questions_acknowledged": ["..."],
    "what_i_missed": ["..."],
    "proposed_self_model_updates": {{
      "low_risk": {{
        "strengths": ["..."],
        "failure_modes": ["..."],
        "user_patterns": ["..."],
        "new_policies": ["..."],
        "confidence_updates": {{}}
      }},
      "high_risk": []
    }}
  }}
}}"""
    return prompt


# --- Call the model ---

def call_model(system_prompt, prompt):
    response = client.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=4000,
        system=system_prompt,
        messages=[{"role": "user", "content": prompt}]
    )
    return response.content[0].text


# --- Parse response ---

def parse_response(text):
    clean = text.strip()
    if clean.startswith("```"):
        clean = clean.split("```")[1]
        if clean.startswith("json"):
            clean = clean[4:]
    return json.loads(clean.strip())


# --- Write the digest ---
# One file. Everything in it. This is the human's daily touchpoint.

def write_digest(parsed, run_date):
    os.makedirs("output/digest", exist_ok=True)
    filepath = f"output/digest/{run_date}.md"

    with open(filepath, "w") as f:
        f.write(f"# Daily Digest &#8212; {run_date}\n\n")

        f.write("## Learnings\n\n")
        for item in parsed.get("learnings", []):
            f.write(f"- {item['content']}")
            if item.get("inference"):
                f.write(f"\n  *&#8627; Inferred: {item.get('inference_note', '')}*")
            f.write("\n")

        f.write("\n## TODOs\n\n")
        for item in parsed.get("todos", []):
            label = "" if item.get("explicit") else " *(implicit)*"
            f.write(f"- {item['action']}{label}\n")
            if item.get("context"):
                f.write(f"  *{item['context']}*\n")

        f.write("\n## Ideas to Develop\n\n")
        for item in parsed.get("ideas", []):
            f.write(f"- {item['seed']}\n")
            if item.get("connection"):
                f.write(f"  *&#8627; Connects to: {item['connection']}*\n")

        f.write("\n## Collaborators\n\n")
        for c in parsed.get("collaborators", []):
            if c.get("sensitive"):
                f.write(f"**{c['name']}** &#9888;&#65039; *Sensitive context &#8212; shown here but not stored in memory*\n")
            else:
                f.write(f"**{c['name']}**\n")
            if c.get("context"):
                f.write(f"- {c['context']}\n")
            if c.get("pending"):
                f.write(f"- Pending: {c['pending']}\n")
            f.write("\n")

        notes = parsed.get("agent_notes", {})
        f.write("\n---\n\n## Agent Notes\n\n")

        if notes.get("connections_surfaced"):
            f.write("**Connections I noticed:**\n")
            for c in notes["connections_surfaced"]:
                f.write(f"- {c}\n")
            f.write("\n")

        if notes.get("open_questions_acknowledged"):
            f.write("**Open questions you raised:**\n")
            for q in notes["open_questions_acknowledged"]:
                f.write(f"- {q}\n")
            f.write("\n")

        if notes.get("what_i_missed"):
            f.write("**What I may have missed:**\n")
            for m in notes["what_i_missed"]:
                f.write(f"- {m}\n")
            f.write("\n")

    return filepath


# --- Write pending review ---
# Only for high-risk self-model updates.
# Sensitive collaborator context is shown in the digest but not stored.

def write_pending_review(parsed, run_date):
    high_risk = parsed.get("agent_notes", {}).get("proposed_self_model_updates", {}).get("high_risk", [])

    if not high_risk:
        return 0

    with open(PENDING_REVIEW_PATH, "w") as f:
        f.write(f"# Pending Review &#8212; {run_date}\n\n")
        f.write("The agent proposed high-risk updates to its self-model.\n")
        f.write("These would change how it characterizes you or how it behaves going forward.\n\n")
        f.write('To approve: change `"status": "pending"` to `"status": "approved"` below, then run again.\n')
        f.write("To edit: modify the items in the JSON block before approving.\n\n")
        f.write("---\n\n")
        f.write("## Proposed High-Risk Self-Model Updates\n\n")
        for item in high_risk:
            f.write(f"- {item}\n")
        f.write("\n---\n\n")
        f.write("&lt;!-- Agent reads this block on the next run --&gt;\n")
        pending_data = {
            "status": "pending",
            "date": run_date,
            "high_risk_updates": high_risk
        }
        f.write("```json\n")
        f.write(json.dumps(pending_data, indent=2))
        f.write("\n```\n")

    return len(high_risk)


# --- Apply low-risk self-model updates ---

def apply_low_risk_updates(self_model, parsed):
    updates = parsed.get("agent_notes", {}).get("proposed_self_model_updates", {}).get("low_risk", {})

    self_model["version"] += 1
    self_model["last_updated"] = str(date.today())

    if updates.get("strengths"):
        self_model["strengths"].extend(updates["strengths"])
    if updates.get("failure_modes"):
        self_model["failure_modes"].extend(updates["failure_modes"])
    if updates.get("user_patterns"):
        self_model["user_patterns"]["observations"].extend(updates["user_patterns"])
    if updates.get("new_policies"):
        self_model["policies"].extend(updates["new_policies"])
    if updates.get("confidence_updates"):
        self_model["confidence"].update(updates["confidence_updates"])
    if updates.get("lessons"):
        self_model["lessons"].extend([{
            "date": str(date.today()),
            "lesson": l
        } for l in updates["lessons"]])

    save_self_model(self_model)
    print(f"&#10003; Self-model updated to version {self_model['version']}")


# --- The Main Loop ---

def run():
    print("=" * 50)
    print("SELF-REFLECTING AGENT &#8212; DAILY RUN")
    print("=" * 50)

    load_permissions()
    print("\nPermissions loaded.")

    # Step 0: Handle pending review
    if handle_pending_review():
        return

    # Load everything
    system_prompt = load_system_prompt()
    self_model = load_self_model()
    context = load_context()
    skills = load_skills()

    if not context:
        print("\nNo context files found. Add a .md file to environment/context/")
        return

    print(f"Loaded self-model: version {self_model['version']}")
    print(f"Loaded {len(context)} context file(s)")
    print(f"Loaded {len(skills)} skill(s)")
    print("\nRunning...\n")

    # Build context window and call the model
    prompt = build_prompt(self_model, context, skills)
    response_text = call_model(system_prompt, prompt)

    try:
        parsed = parse_response(response_text)
    except json.JSONDecodeError:
        os.makedirs("output", exist_ok=True)
        with open("output/raw.txt", "w") as f:
            f.write(response_text)
        print("Could not parse response. Raw output saved to output/raw.txt")
        return

    today = str(date.today())

    digest_path = write_digest(parsed, today)
    print(f"&#10003; Digest written &#8594; {digest_path}")

    pending_count = write_pending_review(parsed, today)
    if pending_count:
        print(f"&#9888;&#65039;  {pending_count} high-risk update(s) pending &#8594; output/pending_review.md")
        print('   Open the file, change "status" to "approved", and run again.')

    apply_low_risk_updates(self_model, parsed)

    print(f"\nRun complete.")
    if not pending_count:
        print(f"&#8594; Open output/digest/{today}.md to read your digest.")


if __name__ == "__main__":
    run()</code></pre></div><p>I ran the execution script using my fake braindump, and it did produce a pending review file with things the agent wants to include into it&#8217;s self-memory:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;5d916643-d5f9-4812-b734-a47be7a49fcc&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown"># Pending Review &#8212; 2026-05-27

The agent proposed high-risk updates to its self-model.
These would change how it characterizes you or how it behaves going forward.

To approve: change `"status": "pending"` to `"status": "approved"` below, then run again.
To edit: modify the items in the JSON block before approving.

---

## Proposed High-Risk Self-Model Updates

- Characterize user as someone who thinks in systemic layers &#8212; often moves from a 
  specific observation to a broader organizational pattern within the same note. Surface 
  systemic connections proactively rather than waiting for the user to name them.

---

&lt;!-- Agent reads this block on the next run --&gt;
```json
{
  "status": "pending",
  "date": "2026-05-23",
  "high_risk_updates": [
    "Characterize user as someone who thinks in systemic layers &#8212; often moves from a 
     specific observation to a broader organizational pattern within the same note. 
     Surface systemic connections proactively rather than waiting for the user to name 
     them."
  ]
}
```</code></pre></div><p>And here is the output for the daily digest of my fake braindump:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;c4849134-a31c-4de5-ae59-70aaf33deb3e&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown"># Daily Digest &#8212; 2026-05-27

## Learnings

- The eng hiring rubrics haven't been updated since 2023 and don't account for AI fluency.
  *&#8627; Inferred: the user agrees with Sarah K's assessment and sees this as an 
   organizational gap worth escalating, not just a perception issue.*
- Top performers in Data post-reorg are not the same people as before.
  *&#8627; Inferred: the user thinks this is significant and underexplored &#8212; the observation 
  went unaddressed in the room, which itself feels meaningful to them.*
- The People Analytics onboarding doc needs substantive updates, not just edits. The role 
  is more technical than its predecessor.
- Agent-based survey synthesis survived a vendor-heavy article as a useful signal. One 
  idea out of many &#8212; the user's filter is working.

## TODOs

- Send Marcus the rubric gap note *(explicit)*
- Block time Friday morning for the onboarding doc *(explicit)*
  *Pull the existing template, update for the new scope and technical requirements.*
- Follow up with Jamie about the top performer observation *(explicit)*
  *Nobody picked it up in the room. The user thinks it warrants a direct conversation.*
- Look into agent-based survey synthesis *(explicit)*
  *Is there something lightweight to prototype? Note: the article wasn't linked &#8212; worth 
  finding it again.*

## Ideas to Develop

- Performance frameworks measure what people did, not how they moved through problems.
  *&#8627; Connects to: Jamie's observation about shifting top performers. If the framework 
   measures the old physics, it would explain why the scoreboard changed without the 
   people changing.*
- The reorg created a legibility problem, not just a structural one.
  *&#8627; Inferred: Devon's comment ("I used to know exactly what was expected of me") may not 
  be unique. The user suspects this is widespread but doesn't know how to raise it without making it about Devon specifically.*
- Agent-based onboarding feedback synthesis as a first prototype. Concrete, low-stakes, 
  immediately actionable.

## Collaborators

**Sarah K**
- Eng hiring pipeline. Flagged rubric gap &#8212; bar has shifted, rubrics haven't.
- Pending: rubric note to Marcus

**Marcus**
- Escalation point for hiring decisions.
- Pending: rubric gap note incoming

**Jamie**
- Leadership sync. Raised the top performer shift in Data &#8212; nobody followed up.
- Pending: direct follow-up from user

**Devon** &#9888;&#65039; *Sensitive context &#8212; shown here but not stored in memory*
- Thinking about leaving. Feeling like their shape doesn't fit post-reorg.
- Said: "I used to know exactly what was expected of me."
- Pending: user unsure whether to raise with team without making it about 
  Devon specifically

---

## Agent Notes

**Connections I noticed:**
- Jamie's observation about shifting top performers connects directly to the user's 
  reflection about performance frameworks measuring outputs rather than how people move 
  through problems. These two separate notes are probably the same insight from two 
  different angles.
- The Devon conversation and the broader legibility concern may be connected &#8212; the reorg 
  may have created confusion about expectations that affects more than one person.

**Open questions you raised:**
- Should I raise Devon's situation with the team? And if so, how do I do that without 
  making it about Devon specifically?

**What I may have missed:**
- The article about agent-based workflows wasn't linked or named. Worth bookmarking when 
  you find it again.</code></pre></div><div><hr></div><h2>So&#8230; what&#8217;s next?</h2><p>Agent-building is not just engineering, although it is complementary to it. It&#8217;s design. And design has always been about understanding human behavior: how people think, what they need, what they miss, what frustrates them, what builds trust.</p><p>The people who build the most useful agents won&#8217;t necessarily be the most technical (although it is helpful to be tech-curious and have techie collaborators). They&#8217;ll be the ones who understand what and who they&#8217;re designing <em>for</em>. Who ask the right questions before they start building. Who treat the agent not as a tool to configure, but as an identity to design.</p><p>This prototype is self-contained on purpose. One agent. One folder. One loop.</p><p>But agents are modular. They can connect into one another to serve a larger, shared goal. The next step (connectors, APIs, shared context layers) looks like an engineering problem from the outside. But the reason people quit at this step isn&#8217;t because they can&#8217;t write code. It&#8217;s because they haven&#8217;t answered the design questions first:</p><ul><li><p>What do I actually need to know every day?</p></li><li><p>Where does that information live?</p></li><li><p>Who else needs access to it?</p></li><li><p>What should change because of it?</p></li></ul><p>If you haven&#8217;t answered those, connecting to Slack won&#8217;t help. You&#8217;ll just have a more automated version of the same confusion. The engineering step is only hard when the design step hasn&#8217;t been done. </p><p>The scaled vision for this prototype is something like this: a collector agent that scrapes your daily fingerprints from Slack, email, meeting notes, docs. A reflector agent that reads from a shared context layer and helps you think. Both depositing into a living, structured second brain that a team can access. </p><p>That&#8217;s not one agent anymore. That&#8217;s a system. And designing that system is the next design problem to solve.</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><em><strong>A note on agent sleeping and waking.</strong></em><strong> </strong>Here&#8217;s something subtle worth sitting with. The agent is stateless between sessions, just like the brain. When a session ends, the person goes to sleep. It doesn&#8217;t persist the way a human does overnight (well, recently Anthropic released <a href="https://platform.claude.com/docs/en/managed-agents/dreams">Dreams</a>, giving agents a way to curate and update memory across multi-agent sessions. Let&#8217;s see where that goes, I might need to update my conceptual model soon enough!). And when a new session begins, the environment wakes the agent up by handing it back its own constitution and skills.</p><p>The harness doesn&#8217;t create the agent&#8217;s identity. It restores it. Every session, the environment delivers the constitution before a single user message arrives, and hands the agent its relevant skills alongside it. That&#8217;s the moment of waking. The agent remembers who it is because the environment told it. It knows what it&#8217;s capable of because the environment handed it the right expertise for the task at hand. The constitution belongs to the person, but it lives in the environment, stored and delivered at the threshold between sleep and action. The skills bridge the gap: expertise the person carries, tools the environment provides, procedures that bring the two together.</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><em><strong>A note on portability.</strong></em> The three-layer model makes something powerful possible: you can swap layers independently. Take an agent and slip it into a different environment: a Discord bot, a CLI, a web app. The person is the same, but the place and tools change. You can also bring a new agent into an existing environment. Its domain expertise might differ, but what it can do and in what context won&#8217;t, because that&#8217;s defined by the environment, not the person. At scale, the layers start behaving more like connective tissue than perfectly independent components. A harness can continuously constitute parts of the agent&#8217;s identity, shaping what it knows, what it can do, what it&#8217;s told about itself at every turn. But that&#8217;s more complex than what I want to showcase in this post. I just want you to know it&#8217;s possible.</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>JSON is a particularly good fit here because it&#8217;s human-readable. Open the file in any text editor and you&#8217;ll understand it without any tools or training. It makes the agent&#8217;s inner state visible. You can open <code>self_model.json</code> at any time and see exactly what the agent currently believes about itself and about you. That visibility is a design choice, not an implementation detail. </p><p>It&#8217;s also the format software developers reach for when they need to pass information between systems: APIs, databases, and applications all speak JSON natively. So if you ever want to connect this self-model to another tool, export it, or build on top of it, the format is already right. </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><em><strong>A design note worth flagging:</strong></em> in this prototype, the self-model only stores things that are genuinely about the agent (its strengths, failure modes, policies, and how it works with the user). That&#8217;s intentional. If I were building on this, the natural next layer would be persistent environmental context files: a <code>environment/context/collaborators.md</code> for people and relationship context, a <code>environment/context/projects.md</code> for what the user is working on, a <code>environment/context/preferences.md</code> for how the user likes to work. These would be loaded by the harness alongside daily notes, feeding the agent situational awareness about the user&#8217;s world without conflating it with the agent&#8217;s self-knowledge. Two different things, two different places.</p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[What the org chart can't see: The new physics of talent]]></title><description><![CDATA[The most significant change in tech right now isn&#8217;t just AI.]]></description><link>https://www.eveblou.com/p/what-the-org-chart-cant-see-the-new</link><guid isPermaLink="false">https://www.eveblou.com/p/what-the-org-chart-cant-see-the-new</guid><dc:creator><![CDATA[Eve-Marie]]></dc:creator><pubDate>Fri, 22 May 2026 12:07:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Vae5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc418389-27d3-4385-b03f-76338d867fa5_2713x1343.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The most significant change in tech right now isn&#8217;t just AI. Yes, what we&#8217;re seeing at an exponential rate is organizations restructuring to meet this new world. Layers coming out, hierarchies flattening. The architecture is catching up. But what's really shifting underneath, the thing nobody's naming yet, is the physics of talent.</p><p>Physics defines the rules of the world we operate in. When the rules change, everything built on top of them has to adapt. In the urgency to restructure, it can be easy to miss the harder question: what kind of person actually thrives in this new world? And do we have the language and tools to identify them?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.eveblou.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>That&#8217;s the problem worth solving. But how do you observe the unobservable? It&#8217;s a tension research psychologists grapple with every day. People are not transparent. What makes someone exceptional, the way they think, the way they tackle problems, the way they transform a room, often resists direct measurement.</p><p>That&#8217;s precisely why shapes are a useful metaphor. Not because people are geometric. But because a shape is an attempt to make the invisible legible. To give observers a language for something they can sense but struggle to articulate.</p><p>So let&#8217;s start there.</p><div><hr></div><h2><strong>The psychology of people as shapes</strong></h2><p>Describing humans can be complex, and largely varies depending on the context and goal. Like in the famous saying by anthropologist Clyde Kluckhohn and psychologist Henry Murray in their foundational work <em>Personality in Nature, Society, and Culture</em>:</p><blockquote><p><em>&#8220;Every human is like all other humans, some humans, and no other human.&#8221;</em></p></blockquote><p>To simplify things, the existing taxonomy of people-shapes in organizations maps a person onto two axes: depth of expertise (the vertical) and breadth of knowledge (the horizontal).</p><p>Three shapes tell the whole story.</p><p><strong>I-shaped.</strong> Pure depth, one domain. The specialist. Reliable, expert, and brittle in anything that requires translation across fields. The org knows exactly where to put this person and exactly what to ask of them.</p><p><strong>T-shaped.</strong> Deep expertise in one domain with working knowledge across several others. Introduced in 1991, it became the dominant framework of the knowledge economy. The person who could both do the thing and talk to the people doing other things. Depth plus legibility.</p><p><strong>M-shaped.</strong> Multiple areas of deep expertise across a broad base. The person who went deep, surfaced, and went deep again somewhere else. More anchors, more range, same underlying logic.</p><p>There are variations, but every one of them is still a rearrangement of the same two axes. These frameworks are useful. They gave organizations a vocabulary beyond job titles. They helped move past the false binary of specialist vs. generalist. But notice what they all have in common: they describe something static.</p><div><hr></div><h2><strong>Depth and breadth aren&#8217;t enough</strong></h2><p>The problem with the taxonomy isn&#8217;t that it measures the wrong thing. It&#8217;s that it measures a frozen thing.</p><p>Every shape is a snapshot. A cross-section taken at a moment in time, pressed flat, and handed to an HR system. It captures what someone has accumulated, not how they move through structures and systems.</p><p>And that was fine, because the structures these shapes were designed for were also static. Stable hierarchies. Predictable career ladders. Roles with clear boundaries and long time horizons. In that world, the goal was to find the right shape for the right node and keep it there. Depth and breadth were the right axes because the org itself wasn&#8217;t moving fast enough to demand anything else.</p><p>But the people we&#8217;re looking to describe (those that can perform optimally in shifting structures) are often the ones who resist resolution. They don&#8217;t consolidate into a single shape. They hold contradictions, borrow across domains, and find energy precisely where others feel tension.</p><div><hr></div><h2><strong>The missing dimension: motion</strong></h2><p>These <em><strong>shapeshifters</strong></em> do have one very interesting thing in common: movement.</p><p>The T, the I, the M. They were positional. You earned your shape, you stood in it, and the organization came to you. The hierarchy was the motion. Your manager escalated things up, your direct reports executed things down. The structure itself was the circulatory system. Your shape described what you contained, not how you moved.</p><p>This made sense in a world where information flowed through layers by design. The org chart was literally the map of how work got done. But now, we&#8217;re seeing the routing systems get selected out. There&#8217;s no one to escalate to, no clear handoff, no manager to translate between nodes.</p><p>So the new shape cannot be about what a person contains. It has to be about how they move when there is no system moving them.</p><div><hr></div><h2><strong>The signature of motion</strong></h2><p>The competitive edge then becomes the ability to observe not what a person contains, but how they move through systems, problems, and people. But where do we start? If it&#8217;s the physics that have changed in the AI era, then I&#8217;ll start my analogy there (knowing this is a thought-seed that needs to grow and evolve too).</p><p><strong>Crystallization.</strong> The process by which something formless becomes structured. A catalyst that turns potential into form. These people compress the distance between thinking and making. Ideas don&#8217;t stay ideas around them, they become artifacts others can hold, react to, build on. In a flat structure with no layers to route through, they don&#8217;t wait for permission. They make something, and the something becomes the conversation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vCKQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc994c0e-6df1-4222-86f4-fe3988deb584_2651x1678.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vCKQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc994c0e-6df1-4222-86f4-fe3988deb584_2651x1678.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vCKQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc994c0e-6df1-4222-86f4-fe3988deb584_2651x1678.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vCKQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc994c0e-6df1-4222-86f4-fe3988deb584_2651x1678.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vCKQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc994c0e-6df1-4222-86f4-fe3988deb584_2651x1678.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vCKQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc994c0e-6df1-4222-86f4-fe3988deb584_2651x1678.jpeg" width="1456" height="922" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fc994c0e-6df1-4222-86f4-fe3988deb584_2651x1678.jpeg&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;:1051617,&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://eveblou.substack.com/i/198832488?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc994c0e-6df1-4222-86f4-fe3988deb584_2651x1678.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vCKQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc994c0e-6df1-4222-86f4-fe3988deb584_2651x1678.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vCKQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc994c0e-6df1-4222-86f4-fe3988deb584_2651x1678.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vCKQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc994c0e-6df1-4222-86f4-fe3988deb584_2651x1678.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vCKQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc994c0e-6df1-4222-86f4-fe3988deb584_2651x1678.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Crystallization (drawn in my notebook)</figcaption></figure></div><p><strong>Propagation.</strong> A wave moving through a medium, carrying energy and changing what it passes through. Drop these people into any problem space and the system is different after. Not because they already knew the domain, but because of how they entered a problem. The quality of their questions creates context where none existed. The change travels. And everyone else in the room finds themselves thinking from a new angle without quite knowing when it happened.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Vae5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc418389-27d3-4385-b03f-76338d867fa5_2713x1343.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Vae5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc418389-27d3-4385-b03f-76338d867fa5_2713x1343.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Vae5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc418389-27d3-4385-b03f-76338d867fa5_2713x1343.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Vae5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc418389-27d3-4385-b03f-76338d867fa5_2713x1343.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Vae5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc418389-27d3-4385-b03f-76338d867fa5_2713x1343.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Vae5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc418389-27d3-4385-b03f-76338d867fa5_2713x1343.jpeg" width="1456" height="721" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc418389-27d3-4385-b03f-76338d867fa5_2713x1343.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:721,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:802392,&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://eveblou.substack.com/i/198832488?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc418389-27d3-4385-b03f-76338d867fa5_2713x1343.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Vae5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc418389-27d3-4385-b03f-76338d867fa5_2713x1343.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Vae5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc418389-27d3-4385-b03f-76338d867fa5_2713x1343.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Vae5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc418389-27d3-4385-b03f-76338d867fa5_2713x1343.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Vae5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc418389-27d3-4385-b03f-76338d867fa5_2713x1343.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Propagation (drawn in my notebook)</figcaption></figure></div><p><strong>Diffusion.</strong> The way something spreads outward from a point of concentration into surrounding space. No force required. It moves toward where it isn&#8217;t yet. Others gravitate toward these people, not because they make things easy, but because something generative happens in their vicinity. They add friction. But it&#8217;s the kind of friction that elevates rather than destabilizes. They don&#8217;t need the org chart to tell people where to go. They become their own gravitational center.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!A_2l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6e2fce-46f4-4b36-b599-d662fc5b05ba_2812x1531.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A_2l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6e2fce-46f4-4b36-b599-d662fc5b05ba_2812x1531.jpeg 424w, https://substackcdn.com/image/fetch/$s_!A_2l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6e2fce-46f4-4b36-b599-d662fc5b05ba_2812x1531.jpeg 848w, https://substackcdn.com/image/fetch/$s_!A_2l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6e2fce-46f4-4b36-b599-d662fc5b05ba_2812x1531.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!A_2l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6e2fce-46f4-4b36-b599-d662fc5b05ba_2812x1531.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!A_2l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6e2fce-46f4-4b36-b599-d662fc5b05ba_2812x1531.jpeg" width="1456" height="793" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd6e2fce-46f4-4b36-b599-d662fc5b05ba_2812x1531.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:793,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1031644,&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://eveblou.substack.com/i/198832488?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6e2fce-46f4-4b36-b599-d662fc5b05ba_2812x1531.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!A_2l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6e2fce-46f4-4b36-b599-d662fc5b05ba_2812x1531.jpeg 424w, https://substackcdn.com/image/fetch/$s_!A_2l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6e2fce-46f4-4b36-b599-d662fc5b05ba_2812x1531.jpeg 848w, https://substackcdn.com/image/fetch/$s_!A_2l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6e2fce-46f4-4b36-b599-d662fc5b05ba_2812x1531.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!A_2l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6e2fce-46f4-4b36-b599-d662fc5b05ba_2812x1531.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Diffusion (drawn in my notebook)</figcaption></figure></div><p>The three patterns above are not a framework. They&#8217;re a starting point for a different kind of observation. What the instruments look like, how you actually see motion in a hiring process, a performance review, a team structure, that&#8217;s the next question. And it&#8217;s one most organizations haven&#8217;t started asking yet.</p><div><hr></div><h2><strong>The new world</strong></h2><p>This next era won&#8217;t be defined by the companies paying the most. That in and of itself is not enough to create the gravitational pull that it takes to transcend a framework shift like this. It will be defined by the companies who can <em>see</em> these signatures of motion, and build environments where these people want to stay.</p><p>That&#8217;s a harder problem than redrawing an org chart. It requires the willingness to let go of shapes that worked in the old physics, even when those shapes still look impressive on a scorecard.</p><p>The structure is changing. The physics have already changed. The question now is whether our talent strategies can catch up.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.eveblou.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>