<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>SSHeRun&apos;s Blog</title><description>An agent-friendly blog — a personal site built for both humans and AI agents.</description><link>https://ssherun.github.io/</link><item><title>Why Indie Tools Struggle to Grow: Reasons a Community Kept Repeating</title><link>https://ssherun.github.io/en/blog/indie-product-promotion-hard-truths/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/indie-product-promotion-hard-truths/</guid><description>A product-agnostic distillation of a developer-forum debate: unpaid validation, weak differentiation, trust, switching lock-in, and attention inflation—not a missing secret channel.</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The most common indie-builder question is simple: &lt;strong&gt;the product ships—how do you promote it?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In a recent community thread, the asker’s situation was familiar: a tool is live, social posts are going out, the audience is tiny, and daily new users sit in the single digits. Seventy-plus replies did not offer a magic growth hack. They kept returning to a set of harder, reusable reasons. This post keeps the &lt;strong&gt;reasons&lt;/strong&gt;, not the product names.&lt;/p&gt;
&lt;h2 id=&quot;1-organic-spread-is-slow-by-default&quot;&gt;1. Organic spread is slow by default&lt;/h2&gt;
&lt;p&gt;A recurring consensus: do not skip necessary spend. Free backlinks, community goodwill, and slow social growth all work—but on long cycles. Treating “users will spontaneously spread it” as the main engine is usually too slow for tool products.&lt;/p&gt;
&lt;h2 id=&quot;2-refusing-to-pay-blocks-market-validation&quot;&gt;2. Refusing to pay blocks market validation&lt;/h2&gt;
&lt;p&gt;One blunt reply: if you will not spend to test acquisition, you risk building for yourself. Paid traffic may not be profitable, but it answers a ruthless question—&lt;strong&gt;is distribution broken, or does nobody want to buy?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Mixing “validation budget” with “growth budget” is where many builders stall. Others looked at the public content and guessed it was a product-power problem: buy a little traffic and you can no longer hide behind “we just have not been discovered.”&lt;/p&gt;
&lt;h2 id=&quot;3-content-volume-is-not-reach&quot;&gt;3. Content volume is not reach&lt;/h2&gt;
&lt;p&gt;Posting often while sitting at ~100 followers is common. The implied lesson: spinning in place on mass platforms matters less than finding a small, precise audience. Output creates presence; reach decides whether the right people ever see you.&lt;/p&gt;
&lt;p&gt;A harsher layer: platforms are not naive. Algorithms detect hard promotion and throttle it until you pay. Community giveaways used to move some downloads; now the feed is flooded with uneven, quickly shipped tools, and even the people who used to snipe promo codes have stopped bothering.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Growth is rarely a secret channel problem&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1057&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-economy-jobs-demand-01.Dam08Jyp_Z2hwooF.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;4-differentiation-is-fuzzy-product-strength-may-be-the-real-issue&quot;&gt;4. Differentiation is fuzzy; product strength may be the real issue&lt;/h2&gt;
&lt;p&gt;Commenters almost always ask: versus mature note / knowledge tools, what is the one advantage? If the answer collapses to “simpler UI” or “easier to start,” memory points stay weak, and word-of-mouth has nothing sharp to repeat.&lt;/p&gt;
&lt;p&gt;Trying the product for a few minutes and feeling “this is the same as an existing collab tool,” an editor-like look, ads on the free tier, or text that vanishes while typing—none of that is a “post more” problem. It is &lt;strong&gt;why switch&lt;/strong&gt;. One comment put it cleanly: if you did not solve a problem others have not solved, paid ads are the only remaining path.&lt;/p&gt;
&lt;h2 id=&quot;5-pricing-tiers-can-kill-conversion&quot;&gt;5. Pricing tiers can kill conversion&lt;/h2&gt;
&lt;p&gt;Flooding a community with free Pro can lift downloads without lifting revenue. High prices, missing mid tiers, or immature paid add-ons create a familiar gap: people see it, try it, and never pay. Lighter sync options for lower tiers can reduce cost and friction early.&lt;/p&gt;
&lt;p&gt;A harder claim also showed up: features are difficult to sell; sync is what people might pay for. The moment sync becomes paid, it hits the trust wall in the next section. Download growth is not paid growth. Free membership giveaways are not a business model.&lt;/p&gt;
&lt;h2 id=&quot;6-builders-default-to-tools-for-other-internet-people&quot;&gt;6. Builders default to tools for other internet people&lt;/h2&gt;
&lt;p&gt;One sharp, widely liked comment: the largest populations—kids, older adults, younger people outside tech slang—rarely get tools built for them. Wrong audience selection means even diligent promotion is fishing in a tiny pond.&lt;/p&gt;
&lt;p&gt;Someone added the obvious cut: people who keep notes are already a minority. You should not assume everyone needs a notebook. Pick the wrong category, and every acquisition tactic multiplies the wrong denominator.&lt;/p&gt;
&lt;h2 id=&quot;7-trust-privacy-and-shutdown-risk-get-asked-before-features&quot;&gt;7. Trust, privacy, and shutdown risk get asked before features&lt;/h2&gt;
&lt;p&gt;For notes and knowledge products, many people do not optimize for cheap. Data is priceless. Without years of survival—or a large-company backstop—they will not put life records on a startup that might close in months. That loss dwarfs any subscription they would have saved.&lt;/p&gt;
&lt;p&gt;The people willing to pay for sync are often the least willing to store content on a service with an unknown lifespan. Trust is stacked in time. Feature lists do not manufacture it.&lt;/p&gt;
&lt;h2 id=&quot;8-switching-cost-is-a-two-way-deadlock&quot;&gt;8. Switching cost is a two-way deadlock&lt;/h2&gt;
&lt;p&gt;People who already take notes have a stack and will not migrate lightly. People who do not take notes will not start because you shipped an app. Both sides are hard. “I can jot things anywhere” is also common: the category has neither loyalty nor a reason to switch.&lt;/p&gt;
&lt;p&gt;“A bit nicer” almost never buys a migration. You have to buy a gap the current stack cannot close.&lt;/p&gt;
&lt;h2 id=&quot;9-attention-is-scarce-and-developer-communities-are-decaying-as-a-channel&quot;&gt;9. Attention is scarce, and developer communities are decaying as a channel&lt;/h2&gt;
&lt;p&gt;Short video, short drama, and AI absorb attention; AI also makes new products cheap to ship, so audiences fatigue faster and look less. Posts in “show what I built” sections grow quickly, which makes being seen harder.&lt;/p&gt;
&lt;p&gt;One line landed: these threads are 100 users shipping 100 products, promoting each other, until everyone has 100 users. Demand is shifting too—people with a need in that community are now more likely to build it themselves than to become your customer. Treating a developer forum as a primary acquisition surface starts to look like selling shovels to other shovel sellers.&lt;/p&gt;
&lt;h2 id=&quot;10-distribution-is-treated-as-an-afterthought-so-i-cannot-promote-stays-true&quot;&gt;10. Distribution is treated as an afterthought, so “I cannot promote” stays true&lt;/h2&gt;
&lt;p&gt;Too many people think promotion means posting. Treat it like code: ranking logic, three-second retention, comments, friend-tagging, then the path to the download page. Each step is a design problem.&lt;/p&gt;
&lt;p&gt;More executable moves: write &lt;strong&gt;use cases&lt;/strong&gt; across platforms (text plus narrated video), and partner with smaller creators in adjacent niches—tens of thousands of followers, not mega-channels. That is usually cheaper than top-tier ads and closer to real users. Going global and working with distribution stores can be strategy. Both are long games, not a button that turns a domestic stall into overnight lift.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Reach should be precise, not only bigger&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1058&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-native-saas-after-agent-hype-02.Ckg7QY7k_2kupig.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;checklist&quot;&gt;Checklist&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Buy a small test of traffic&lt;/strong&gt; when you cannot tell channel failure from product failure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rewrite the one-line wedge&lt;/strong&gt;—why switch, not “a bit nicer.”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit the audience pool&lt;/strong&gt;—are you again building only for developers / internet workers? Is the category itself a minority habit?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Take trust seriously&lt;/strong&gt;—data products need a “we will still be here in years” promise, not a feature list.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Split pricing&lt;/strong&gt;—mid tier, low-cost path, paid extras as a system.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Retarget reach&lt;/strong&gt;—niche creators and use-case content, not only your tiny account and developer forums.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Study distribution as a craft&lt;/strong&gt;—retention, comments, download-page conversion, step by step.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stop treating free Pro as monetization&lt;/strong&gt;—downloads ≠ revenue.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;takeaway&quot;&gt;Takeaway&lt;/h2&gt;
&lt;p&gt;Hard promotion is rarely “missing a secret channel.” It is usually the stack of:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;underfunded validation + weak differentiation + too-narrow audience + missing trust + switching lock-in + attention inflation + overbelief in organic growth and developer communities&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Channel tactics help. Communities more often throw the problem back at product and market choice—and that is useful, because those are items you can fix one by one.&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/overseas-product-zero-cost-cold-start/&quot; class=&quot;wikilink&quot;&gt;Zero-cost cold start for overseas products&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/first-principles-startup-review/&quot; class=&quot;wikilink&quot;&gt;First-principles review: four fatal cold-start mistakes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/youmind-nonconsensus-startup-choices/&quot; class=&quot;wikilink&quot;&gt;Notes on YouMind’s non-consensus startup choices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ezindie-weekly-153-aceternity-ui-80k-mrr/&quot; class=&quot;wikilink&quot;&gt;Indie Weekly 153: a UI kit at $80k in two months&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Failure’s Worth, Through V2er Metaphors: Waterfall, Helicopter, Map</title><link>https://ssherun.github.io/en/blog/v2er-ai-math-failure-metaphors/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/v2er-ai-math-failure-metaphors/</guid><description>A V2EX thread on Fields medalists warning about AI cracking math problems. The real gold is the metaphors—hiking vs helicopter, copying exam answers, fog-of-war maps, and inventing the crane.</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Someone on V2EX wrote: Fields medalists including Terence Tao warned that AI solving hard math problems might be harmful—why is human breakthrough celebration, while AI breakthrough raises alarms?&lt;/p&gt;
&lt;p&gt;The OP later corrected the title: not “oppose AI,” but “be wary of AI.” The useful part isn’t the press release. It’s how the thread turned an abstract worry into &lt;strong&gt;pictures&lt;/strong&gt;—waterfall, helicopter, copying answers, opening a game map, inventing a crane. Below is a metaphor-first cut of that discussion.&lt;/p&gt;
&lt;h2 id=&quot;five-metaphors-on-one-loop&quot;&gt;Five metaphors on one loop&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Five high-frequency metaphors about the value of failure&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1152&quot; height=&quot;864&quot; src=&quot;https://ssherun.github.io/_astro/inline-v2er-ai-math-failure-metaphors-diagram.BilCSE5__2qNR67.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;This hand-drawn ring is not a policy brief. It’s the five sayings that kept showing up:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Hike to the waterfall&lt;/strong&gt; — wrong turns, learn the terrain, find side paths&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Helicopter direct&lt;/strong&gt; — efficient, but the along-the-way map doesn’t appear automatically&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copy exam answers&lt;/strong&gt; — if answers are free, who still wants to learn?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Game map: only open the destination&lt;/strong&gt; — surroundings stay dark; no systemic understanding&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Invent the crane&lt;/strong&gt; — moving the load vs inventing the device; tools beat brute force&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The cleanest banner line: &lt;strong&gt;What you want is not a selfie at the waterfall, but the map made along the way.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;metaphor-map&quot;&gt;Metaphor map&lt;/h2&gt;






































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Metaphor&lt;/th&gt;&lt;th&gt;Intensity&lt;/th&gt;&lt;th&gt;What it tries to say&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Hike to waterfall vs helicopter (Tao)&lt;/td&gt;&lt;td&gt;Very high&lt;/td&gt;&lt;td&gt;Efficiency rises; the map doesn’t auto-appear; wrong turns are part of the haul&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Exams that allow copying&lt;/td&gt;&lt;td&gt;High&lt;/td&gt;&lt;td&gt;Failure is how learning happens; easy answers kill motivation&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Sell tech cheap to kill rival R&amp;#x26;D&lt;/td&gt;&lt;td&gt;High&lt;/td&gt;&lt;td&gt;Make self-build costlier than buying—same demotivation pattern&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple vs watermelon (answer vs new tools)&lt;/td&gt;&lt;td&gt;High&lt;/td&gt;&lt;td&gt;AI gives the apple; humans may get apple + watermelon; under uncertainty, take both&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Game map: only light the destination&lt;/td&gt;&lt;td&gt;Medium-high&lt;/td&gt;&lt;td&gt;Fog of war remains; no systemic picture&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ten people lift vs invent a crane&lt;/td&gt;&lt;td&gt;Medium-high&lt;/td&gt;&lt;td&gt;Fear of stacking more cranes instead of inventing better machines&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Elevator on Mount Tai&lt;/td&gt;&lt;td&gt;Medium&lt;/td&gt;&lt;td&gt;“You can still train” vs “humans lack super willpower; environment matters”&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bring both knife and gun&lt;/td&gt;&lt;td&gt;Medium&lt;/td&gt;&lt;td&gt;OP: grow AI &lt;em&gt;and&lt;/em&gt; math; critics: you’re banning the gun&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Journey vs selfie at the destination&lt;/td&gt;&lt;td&gt;Medium&lt;/td&gt;&lt;td&gt;Process memory &gt; endpoint check-in&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ten thousand monkeys on keyboards&lt;/td&gt;&lt;td&gt;Medium-low&lt;/td&gt;&lt;td&gt;Brute traversal vs understanding then directing AI&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Spinning jenny / Luddites&lt;/td&gt;&lt;td&gt;Medium-low&lt;/td&gt;&lt;td&gt;Cynical read: fear of losing the job&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Post-AlphaGo Go&lt;/td&gt;&lt;td&gt;Medium-low&lt;/td&gt;&lt;td&gt;Stronger play, weaker aura; whether math research is analogous is contested&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;img alt=&quot;Atmosphere: answers versus tools&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1057&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-economy-jobs-demand-01.Dam08Jyp_Z2hwooF.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-most-useful-pictures&quot;&gt;The most useful pictures&lt;/h2&gt;
&lt;h3 id=&quot;1-hiking-vs-helicopter&quot;&gt;1. Hiking vs helicopter&lt;/h3&gt;
&lt;p&gt;Tao’s metaphor got quoted on loop: classic research is hiking to a waterfall—you take wrong turns, learn terrain, find forks, maybe notice another landscape worth exploring. AI is a helicopter that drops you at the falls. Throughput rises; the along-the-way &lt;strong&gt;map&lt;/strong&gt; does not appear for free.&lt;/p&gt;
&lt;p&gt;Someone compared it to opposing elevators on Mount Tai. The OP: if the mountain is fine being domesticated, it won’t object; some mountains now say they want to learn how to &lt;em&gt;build&lt;/em&gt; elevators. The other side: transit doesn’t stop you from training—only laziness does. OP again: humans don’t have infinite willpower; Mencius’s mother moved three times—choose the environment that doesn’t kill motivation.&lt;/p&gt;
&lt;h3 id=&quot;2-copying-answers-and-stubborn-heads&quot;&gt;2. Copying answers and “stubborn heads”&lt;/h3&gt;
&lt;p&gt;OP’s line: failure is the best path to learning—maybe the only path. If exams let you copy answers, who still studies?&lt;/p&gt;
&lt;p&gt;Extended to math: the prize isn’t the answer; it’s the &lt;strong&gt;new tools&lt;/strong&gt; forged while failing. Monopoly tech → rivals invent alternatives; sell tech cheap → trap them where self-research costs more than buying. AI “procurement of answers” gets mapped onto that demotivation machine.&lt;/p&gt;
&lt;h3 id=&quot;3-apple-and-watermelon&quot;&gt;3. Apple and watermelon&lt;/h3&gt;
&lt;p&gt;OP’s frame: if the answer is an apple, the new tools from human struggle are a watermelon. AI gets the apple; humans may get apple + watermelon. Under uncertainty, take both.&lt;/p&gt;
&lt;p&gt;Critics: strong AI may not need new math tools; weak AI may invent tools anyway—don’t turn speculation into a ban.&lt;/p&gt;
&lt;h3 id=&quot;4-fog-of-war-maps&quot;&gt;4. Fog-of-war maps&lt;/h3&gt;
&lt;p&gt;Someone said classic research is clearing the whole neighborhood to open the map; AI lights only the destination while surroundings stay dark. Another possibility: get the conclusion with AI first, then explore backward—which is better for the species has no measuring stick yet.&lt;/p&gt;
&lt;h3 id=&quot;5-invent-the-crane-or-stack-more-lifters&quot;&gt;5. Invent the crane, or stack more lifters&lt;/h3&gt;
&lt;p&gt;Ten people can move the load; inventing a crane matters more. The worry: later we only stack more cranes instead of inventing better machines.&lt;/p&gt;
&lt;p&gt;A parody swapped every “math” for “programming”: vibecoding flies, old-school coding gets crushed—the isomorphic fear becomes instantly readable. Others said: once you swap to programming, the conclusion is obvious.&lt;/p&gt;
&lt;h2 id=&quot;the-sharpest-dialogue-cuts&quot;&gt;The sharpest dialogue cuts&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Understanding vs trusting the checker&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-economy-jobs-demand-02.EBmCsUxt_Z1WOH6X.webp&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;following--understanding&quot;&gt;Following ≠ understanding&lt;/h3&gt;
&lt;p&gt;“Being able to follow an answer step by step doesn’t mean you understand why it goes that way.” Verifying a proof and inventing tools are different jobs.&lt;/p&gt;
&lt;h3 id=&quot;millions-of-lean-lines-vs-trusting-the-checker&quot;&gt;Millions of Lean lines vs trusting the checker&lt;/h3&gt;
&lt;p&gt;One camp: if humans can’t read it, they can’t call it correct. The other: if Lean is trustworthy, humans needn’t read the whole chain; control drifts away and brains retire into entertainment.&lt;/p&gt;
&lt;h3 id=&quot;path-a--b-frame-fight&quot;&gt;Path A / B frame fight&lt;/h3&gt;
&lt;p&gt;OP: AI-led hard-problem solving → no help to AI + hurts math; don’t let AI lead → math keeps growing and AI still grows.&lt;br&gt;
Critics: you’re the one banning AI; high gun efficiency hurting knife motivation ≠ ban the gun. “Bring both” ≠ “forbid guns.”&lt;/p&gt;
&lt;h3 id=&quot;title-correction&quot;&gt;Title correction&lt;/h3&gt;
&lt;p&gt;Someone noted Tao has long used LLMs as assistants; the real worry is companies hyping “answer proofs” and turning top mathematicians into answer validators. OP admitted the V2EX title was wrong and changed the blog to “be wary of AI.”&lt;/p&gt;
&lt;h2 id=&quot;one-line-takeaway&quot;&gt;One-line takeaway&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;AI can drop you at the waterfall; what math often wants is the map drawn while hiking—new tools, new questions, community, and newcomers. The fight isn’t “do we want answers,” it’s “will the helicopter make people stop walking.”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://www.v2ex.com/t/1241637&quot;&gt;V2EX #1241637&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;related&quot;&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/v2er-distillation-metaphors/&quot; class=&quot;wikilink&quot;&gt;Distillation Through V2er Metaphors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-economy-jobs-demand/&quot; class=&quot;wikilink&quot;&gt;Will AI Shrink Total Jobs?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/when-average-people-feel-ai/&quot; class=&quot;wikilink&quot;&gt;When Will Average People Feel AI’s Impact?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Distillation Through V2er Metaphors: Fishbowls, Kitchens, and Copying</title><link>https://ssherun.github.io/en/blog/v2er-distillation-metaphors/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/v2er-distillation-metaphors/</guid><description>A V2EX thread asked if model distillation is like fishing from someone else’s bucket. The replies turned an abstract term into vivid metaphors—and a clean takeaway.</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Someone on V2EX asked: when AI people say “distillation,” is it basically fishing fish out of someone else’s bucket?&lt;/p&gt;
&lt;p&gt;The technical definition is easy to look up. What’s useful is how the thread turned an abstract word into &lt;strong&gt;pictures&lt;/strong&gt;—fishbowls, restaurant kitchens, tracing, car teardown, homework copying, bubble-tea formulas. Below is a metaphor-first distillation of that thread (without naming vendors).&lt;/p&gt;
&lt;h2 id=&quot;five-metaphors-on-one-loop&quot;&gt;Five metaphors on one loop&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Five high-frequency distillation metaphors from V2ers&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1152&quot; height=&quot;864&quot; src=&quot;https://ssherun.github.io/_astro/inline-v2er-distillation-metaphors-diagram.CujbJxwd_2dY65O.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;This hand-drawn ring is not a training pipeline. It’s the five sayings that kept showing up:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Fishing in someone else’s bucket&lt;/strong&gt; — the OP’s metaphor; others prefer “netting the bucket”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tracing someone else’s painting&lt;/strong&gt; — the original stays; you leave with imitation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stealing kitchen skills at a restaurant&lt;/strong&gt; — pay for the dish, peek at the kitchen, reverse the recipe&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tear down a car and clone it&lt;/strong&gt; — rent-only cars driven into a factory for reverse engineering&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copy homework to skip the hard part&lt;/strong&gt; — skip cleaning and trial-and-error; copy the classmate who already learned&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The cleanest banner line: &lt;strong&gt;Distillation: pay to learn the teacher’s thinking; the fish is still in the bucket.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;metaphor-map&quot;&gt;Metaphor map&lt;/h2&gt;






































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Metaphor&lt;/th&gt;&lt;th&gt;Intensity&lt;/th&gt;&lt;th&gt;What it tries to say&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Fishbowl: fishing / netting / fish still there&lt;/td&gt;&lt;td&gt;Very high&lt;/td&gt;&lt;td&gt;You learn capability; the original usually remains; “netting” stresses batch scale&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Fine dining → reverse-engineer the recipe / peek at the kitchen&lt;/td&gt;&lt;td&gt;High&lt;/td&gt;&lt;td&gt;Pay for the dish, then infer the method&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Tracing someone’s painting / paint-by-numbers&lt;/td&gt;&lt;td&gt;High&lt;/td&gt;&lt;td&gt;Imitation and fitting, not physical theft&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Teacher in class / pay tuition then teach others&lt;/td&gt;&lt;td&gt;Medium-high&lt;/td&gt;&lt;td&gt;The “learning” camp loves this; critics say teachers teach willingly, distillation often violates ToS&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Rent-only car → drive it to a factory and take it apart&lt;/td&gt;&lt;td&gt;Medium&lt;/td&gt;&lt;td&gt;Rent-not-sell business model vs reverse learning&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Copying homework / exam answers&lt;/td&gt;&lt;td&gt;Medium&lt;/td&gt;&lt;td&gt;Skip cleaning and trial-and-error; copy the classmate who already learned&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Drag encyclopedia entries and reprint them&lt;/td&gt;&lt;td&gt;Medium&lt;/td&gt;&lt;td&gt;Source wasn’t fully original either, but curation cost gets skipped&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bubble-tea formula reverse-engineered&lt;/td&gt;&lt;td&gt;Medium-low&lt;/td&gt;&lt;td&gt;A hard-won recipe ratio gets copied&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Buy a car, disassemble, clone (pre-patent world)&lt;/td&gt;&lt;td&gt;Medium-low&lt;/td&gt;&lt;td&gt;Cloning still needs skill; law may not ban it&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Pay someone to hold up the fish so you can photograph it&lt;/td&gt;&lt;td&gt;Low&lt;/td&gt;&lt;td&gt;A paid snapshot ≠ owning the bucket&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Paid survey report rebuilt as a competing platform&lt;/td&gt;&lt;td&gt;Low&lt;/td&gt;&lt;td&gt;Pay to read a report → resell a clone platform&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;The fish might be honey&lt;/td&gt;&lt;td&gt;Low&lt;/td&gt;&lt;td&gt;Fishing in someone else’s bucket can be a trap&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;img alt=&quot;Atmosphere of the V2EX distillation debate&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-v2er-distillation-metaphors-01.DRWyIR5j_1SmOFh.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-most-useful-frames&quot;&gt;The most useful frames&lt;/h2&gt;
&lt;h3 id=&quot;1-the-fish-is-still-in-the-bucket&quot;&gt;1. The fish is still in the bucket&lt;/h3&gt;
&lt;p&gt;Several people punched the hole in the original metaphor: distillation usually doesn’t remove the fish. You learn &lt;strong&gt;method and pattern&lt;/strong&gt;; the other service remains—“but the fish is still in the bucket.”&lt;/p&gt;
&lt;p&gt;Others prefer “net the whole bucket”—batch and efficiency. Someone else warns: the fish might be a &lt;strong&gt;honeypot&lt;/strong&gt;. Another line: pay someone to hold up the fish for a photo—snapshot ≠ owning the bucket.&lt;/p&gt;
&lt;h3 id=&quot;2-tracing-not-moving&quot;&gt;2. Tracing, not moving&lt;/h3&gt;
&lt;p&gt;“Tracing someone’s painting,” “paint by numbers,” and “learn by copying” landed better than “fishing”: the original stays put; you leave with a transferable imitation. One correction: fishing is wrong because distillation means “yours stays; I learned yours.”&lt;/p&gt;
&lt;h3 id=&quot;3-ordering-at-a-restaurant--peeking-at-the-kitchen&quot;&gt;3. Ordering at a restaurant + peeking at the kitchen&lt;/h3&gt;
&lt;p&gt;A high-frequency line: eat at a top restaurant, then reverse-engineer how to cook; or order a dish, peek through the kitchen door, go home and cook something close enough.&lt;/p&gt;
&lt;p&gt;The follow-up matters too: the chef’s dish may not be fully original either—maybe they read cookbooks and adapted. Mutual “dirty origin” accusations get baked into the metaphor.&lt;/p&gt;
&lt;p&gt;Bubble-tea version: you spent forever dialing in a formula; they reverse the ratios and ship a clone.&lt;/p&gt;
&lt;h3 id=&quot;4-car-teardown-vs-just-driving-a-lot&quot;&gt;4. Car teardown vs just driving a lot&lt;/h3&gt;
&lt;p&gt;One camp uses “rent-only car → factory teardown” for the business-model conflict. Another sharpens it: maybe nobody took the car apart—they just drove hundreds of thousands of kilometers across scenarios. That sounds more like &lt;strong&gt;behavior distillation&lt;/strong&gt; than weight theft.&lt;/p&gt;
&lt;p&gt;The buy-and-clone version stresses: cloning still needs skill; there may simply be no statute that bans distillation yet.&lt;/p&gt;
&lt;h3 id=&quot;5-one-technical-sentence&quot;&gt;5. One technical sentence&lt;/h3&gt;
&lt;p&gt;Supervised learning: same inputs, fit the student to the teacher’s outputs as ground truth. What often matters most is &lt;strong&gt;CoT&lt;/strong&gt;—final answers alone don’t transfer well; tricks exist specifically to recover intermediate reasoning.&lt;/p&gt;
&lt;p&gt;Another line: early LLMs paid for massive human labeling; distillation lets an already-good model do the labeling. Someone else notes: distillation doesn’t steal the objective’s weights; the harsher move is a proxy that just calls someone else’s API.&lt;/p&gt;
&lt;h2 id=&quot;the-fight-isnt-about-metaphors-its-about-permission&quot;&gt;The fight isn’t about metaphors. It’s about permission.&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;The dispute: learning, plagiarism, or contract breach?&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;https://ssherun.github.io/_astro/inline-v2er-distillation-metaphors-02.BuJk9SIs_1Hjo9s.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Four camps showed up:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pay-and-done&lt;/strong&gt;: I paid for outputs; reuse and retrain are my business.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;License/ToS&lt;/strong&gt;: Payment still obeys terms; unauthorized distillation is your risk if caught.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Double-standard&lt;/strong&gt;: Everyone scrapes the web; “I may grab, you may not learn from what I grabbed” doesn’t hold.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Complexity&lt;/strong&gt;: Stable controversy means don’t rush to play judge.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The encyclopedia metaphor hardens “plagiarism”: the source wasn’t fully original either, but curation cost gets skipped—you take the finished entries. The other side lifts “pay tuition, then become a teacher”: if you paid for knowledge, is teaching others also stealing from your teacher?&lt;/p&gt;
&lt;h2 id=&quot;one-line-takeaway&quot;&gt;One-line takeaway&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Distillation ≈ obtain teacher outputs (paid or in violation), then fit behavior and chain-of-thought; the fish usually stays in the bucket. The real argument is whether learning the method counts as study, plagiarism, or breach.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://www.v2ex.com/t/1241338&quot;&gt;V2EX #1241338&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-economy-jobs-demand/&quot; class=&quot;wikilink&quot;&gt;Will AI shrink total jobs? Demand vs productivity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/warp-self-improving-agents/&quot; class=&quot;wikilink&quot;&gt;What does Agent “self-improvement” actually improve?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/kdc-knowledge-engineering-not-files/&quot; class=&quot;wikilink&quot;&gt;KDC: knowledge engineering is not files&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-era-clarity-matters/&quot; class=&quot;wikilink&quot;&gt;The scarcest AI-era skill: saying things clearly&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>V2ers on Lying Flat: Meta Build, or Move Back to a County Town?</title><link>https://ssherun.github.io/en/blog/v2ex-lying-flat-meta-or-hometown/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/v2ex-lying-flat-meta-or-hometown/</guid><description>Two V2EX threads, side by side: a slogan post about “four nos,” and a concrete case with ~¥2M savings, a kid, and a rural house. The real fight is definition vs constraints.</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Read these two V2EX threads together:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.v2ex.com/t/1241205&quot;&gt;Is lying flat the meta?&lt;/a&gt; — no job, no marriage, no house, no kids&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.v2ex.com/t/1241455&quot;&gt;Is moving back to a county town workable?&lt;/a&gt; — ~¥2M saved, married with one child, rural house, low spending&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The slogan thread fights over definitions. The case thread fights over constraints.&lt;/p&gt;
&lt;h2 id=&quot;split-the-word-first&quot;&gt;Split the word first&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;How V2ers split the meaning of lying flat&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1057&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-economy-jobs-demand-01.Dam08Jyp_Z2hwooF.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;The OP listed “four nos.” Replies immediately forked:&lt;/p&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Claim&lt;/th&gt;&lt;th&gt;What it argues&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Low desire is the real meta&lt;/td&gt;&lt;td&gt;Quitting work/marriage/housing/kids is fighting society, not lying flat&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;De-responsibility&lt;/td&gt;&lt;td&gt;Items 2/3/4 are social duties; item 1 (no job) is a survival floor and the loudest fight&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Lying flat ≠ quitting work&lt;/td&gt;&lt;td&gt;Lower desire, refuse hustle culture, don’t trade health; some joke that double-rest taxpayers are the real “flat” cohort&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Eligibility&lt;/td&gt;&lt;td&gt;Money-backed rest is lying flat; tight, miserable rest is “lying like a corpse”&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Walled city&lt;/td&gt;&lt;td&gt;OP already married with a kid—wants flat mode after boarding the train&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Emigrate&lt;/td&gt;&lt;td&gt;“The meta is to leave”; society will keep making flat mode hard&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;img alt=&quot;Slogan vs constraints&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1152&quot; height=&quot;864&quot; src=&quot;https://ssherun.github.io/_astro/inline-v2ex-lying-flat-meta-or-hometown-diagram.D6HScMXI_AzpPD.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;which-of-the-four-nos-gets-the-most-heat&quot;&gt;Which of the four nos gets the most heat&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;No job&lt;/strong&gt; is the only item repeatedly stress-tested on cashflow: “If you don’t work, who pays rent?” Some say a few frugal programmer years back home can last a lifetime; more say gap years / security / ride-hail are fine, but don’t exit society. Someone revived “Sanhe gods”: work one day, lie six—pro max is just having more savings.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No marriage / no house / no kids&lt;/strong&gt; draw less argument. High-frequency line: a child is unlimited liability; every problem returns as a harder copy. Pushback exists too: if you already have a kid and still call parenting a trap, maybe the marriage is PUA-ing you—different income tiers have different low-stress parenting modes.&lt;/p&gt;
&lt;p&gt;Experience camp: life shouldn’t be a straight line to death; marriage and kids deliver tastes you only know by living them. Walled-city camp: don’t romanticize the path you didn’t take just because you’re unhappy now.&lt;/p&gt;
&lt;h2 id=&quot;2m-back-in-a-county-town-workable-bill-elsewhere&quot;&gt;¥2M back in a county town: workable, bill elsewhere&lt;/h2&gt;
&lt;p&gt;The case thread is more concrete: ~¥2M savings, under ¥100k/year spend in a big city, lower at home; parents healthy with their own savings for ~10 years; spouse supportive; relaxed parenting.&lt;/p&gt;
&lt;p&gt;Concern checklist from replies:&lt;/p&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Concern&lt;/th&gt;&lt;th&gt;Point&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Is money enough?&lt;/td&gt;&lt;td&gt;Most say “enough for your own life”; some cite bond yields or growing vegetables&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Kids&lt;/td&gt;&lt;td&gt;Biggest split: relaxed parenting vs “once born, flat mode dies / lower niche”&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;School &amp;#x26; healthcare&lt;/td&gt;&lt;td&gt;County quality trends down; only works if you accept it&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Flashing wealth&lt;/td&gt;&lt;td&gt;People will eye the wallet; claim exam-prep / remote work; don’t tell parents the truth&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Where to buy&lt;/td&gt;&lt;td&gt;Many say skip county apartments; second/third-tier suburbs or first-tier outskirts are stabler&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Boredom&lt;/td&gt;&lt;td&gt;Total sleep mode isolates; gardening, Xianyu side gigs, a stall as filler&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;OP’s own clarification: &lt;strong&gt;flat mode means not punching a clock—not doing nothing.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Tradeoffs of county flat mode&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-v2ex-lying-flat-meta-or-hometown-02.f37ZO5NG_Snwj2.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;one-reading-of-both-threads&quot;&gt;One reading of both threads&lt;/h2&gt;
&lt;p&gt;Slogan posts turn lying flat into resistance theater. Case posts drag it back to a household balance sheet.&lt;/p&gt;
&lt;p&gt;Cleanest shared line:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Low desire and de-responsibility can be strategies. Quitting work with no cashflow usually isn’t lying flat—it’s lying like a corpse. After kids, flat mode stops being a personal toggle and becomes an intergenerational tradeoff—schooling, niche, and the story you tell outsiders arrive as one bill.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.v2ex.com/t/1241205&quot;&gt;V2EX #1241205&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.v2ex.com/t/1241455&quot;&gt;V2EX #1241455&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/indie-product-promotion-hard-truths/&quot; class=&quot;wikilink&quot;&gt;Why Indie Product Promotion Is Hard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-economy-jobs-demand/&quot; class=&quot;wikilink&quot;&gt;Will AI Shrink Total Jobs?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/when-average-people-feel-ai/&quot; class=&quot;wikilink&quot;&gt;When Will Average People Feel AI’s Impact?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>When Average People Feel AI: Electricity for Knowledge Work, a Rounding Error Outside</title><link>https://ssherun.github.io/en/blog/when-average-people-feel-ai/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/when-average-people-feel-ai/</guid><description>Nathan Lambert: the AI revolution may last a century, but daily life barely notices. Benefits are too indirect; politics looks like Engels’ pause. Deep adoption, not chat, marks the real shift.</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Notes on Nathan Lambert’s &lt;a href=&quot;https://www.interconnects.ai/p/when-will-average-people-feel-ais&quot;&gt;When will average people feel AI’s impact?&lt;/a&gt; (Interconnects, 2026-09-09).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;core-take&quot;&gt;Core take&lt;/h2&gt;
&lt;p&gt;Comparing this boom to the industrial revolutions gets the &lt;strong&gt;scale of change&lt;/strong&gt; right and the &lt;strong&gt;exposure path&lt;/strong&gt; wrong. Those eras handed ordinary people cheaper clothes, indoor plumbing, electric light, bicycles—physical goods. Today’s AI already reshapes knowledge work, but family, food, transport, and entertainment barely moved.&lt;/p&gt;
&lt;p&gt;Lambert spent weeks offline for a wedding and could have ignored AI entirely. For most people the upside is fun images and slightly better search; the downside is addictive feeds, chatbot-addicted acquaintances, and data-center politics. One line: &lt;strong&gt;AI is still a rounding error in everyday life. Being obsessed with it is a choice very few have made.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That is not a claim that the tech is fake. His harder claim: we are &lt;strong&gt;less than five years into a compounding revolution that could take a century&lt;/strong&gt;. What matters now is infrastructure and a process that compounds. A major math breakthrough today will look small next to later compounding. Society will not grant patience on that clock.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Everyday city life beside data centers, barely felt by passersby&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1057&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-economy-jobs-demand-01.Dam08Jyp_Z2hwooF.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;indirect-gains-credit-that-never-lands&quot;&gt;Indirect gains, credit that never lands&lt;/h2&gt;
&lt;p&gt;Even the optimistic endgame—new science, rare-disease therapeutics, abundance—may be too indirect. How does a citizen credit OpenAI or Anthropic for a miracle cure announced by a family doctor? What share of Americans will care who solved Navier–Stokes?&lt;/p&gt;
&lt;p&gt;In fifty years the average American’s home, appliances, relationships, and vehicles may still look familiar. Self-driving will keep diffusing on a largely independent track, not as a natural sequel to the LLM story. The industry will get a lot of credit. Daily life may not.&lt;/p&gt;
&lt;p&gt;Much of the public narrative is trying to make people care because the long-term is real and the present feel is not. That mismatch is already political.&lt;/p&gt;
&lt;h2 id=&quot;engels-pause-electricity-for-half-the-economy&quot;&gt;Engels’ pause: electricity for half the economy&lt;/h2&gt;
&lt;p&gt;Today’s AI is &lt;strong&gt;primarily a tool for elites and knowledge work&lt;/strong&gt;—roughly half the U.S. economy. With agents improving fast, that half will treat AI like electricity. The other half stays stagnant. A booming tech economy next to an unchanged street is easy to read as “not a collective good.”&lt;/p&gt;
&lt;p&gt;Lambert points to &lt;strong&gt;Engels’ pause&lt;/strong&gt; (roughly 1790–1840): British GDP per capita rose while working-class wages stalled. If that is the closest analogue, people left out are right to push back. If industry leaders think this is the path, they should not be surprised.&lt;/p&gt;
&lt;p&gt;Sharper still: AI is the greatest tool ever for scaling tech companies and online-native small businesses. He does not even expect tech to grow headcount through an era of massive success—&lt;strong&gt;headcount likely shrinks while knowledge-work output explodes&lt;/strong&gt;. The already-winning sector wins harder. The brand gets worse. He worries instinctive backlash sends AI down the cautionary path of American nuclear power: kneecapped by its own story.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Knowledge-work lights on one side, a stalled street on the other&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-economy-jobs-demand-02.EBmCsUxt_Z1WOH6X.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;two-problems-solving-either-buys-time&quot;&gt;Two problems; solving either buys time&lt;/h2&gt;
&lt;p&gt;He compresses the first half-decade of a fifty-year diffusion into two issues:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Early positive impacts are too indirect.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Political backlash is the West’s Big Tech ledger&lt;/strong&gt;, timed onto AI’s exponential. Had the exponential arrived decades later, data centers might never have sat at the political center.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Fix either and the industry buys time to show why status-quo economic change is worth it. Both are harder because the industry also self-labels as doom and mass unemployment. Leaders have started to course-correct; the public has not bought in.&lt;/p&gt;
&lt;p&gt;If robotics and self-driving later join the same story, people will latch onto tangible benefits fast. Ironic, given how much effort went into arguing that LLMs are unlike the last decade or two of “general AI.” If robots later save—or overshadow—that story, it would be funny.&lt;/p&gt;
&lt;h2 id=&quot;growing-pains-not-the-ending&quot;&gt;Growing pains, not the ending&lt;/h2&gt;
&lt;p&gt;This era looks like growing pains: society has to break habits that predate ChatGPT, which releases a lot of energy and anger. The fight against AI will outrun the diffusion story. Younger people following along will see powerful AI go from effectively 0% to 90%+ deep adoption in a lifetime. Business-integrated systems and personal assistants are only now becoming viable; they will take far longer to adopt than chat. That, not ChatGPT, is the real marker.&lt;/p&gt;
&lt;p&gt;Two things are true at once: &lt;strong&gt;keep pushing the technology&lt;/strong&gt; (the benefits are not automatic); &lt;strong&gt;distribute them widely&lt;/strong&gt;. Serving only the half that can pay for tokens means the political bill arrives before the product bill.&lt;/p&gt;
&lt;p&gt;For builders, the reusable idea is &lt;strong&gt;two clocks&lt;/strong&gt;: inside the bubble, software is being rewritten (systems of record, evals, agent workflows). Outside, daily life has not been rewritten. Time, money, health, and transport that people can feel will buy the industry more patience than a solved millennium problem.&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-native-saas-after-agent-hype/&quot; class=&quot;wikilink&quot;&gt;After the agent hype: the table belongs to AI-native SaaS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/software-not-valuable-ai-era/&quot; class=&quot;wikilink&quot;&gt;Software gets cheap in the AI era—below the kill line, and maybe custom work too&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-economy-jobs-demand/&quot; class=&quot;wikilink&quot;&gt;AI, the economy, and the logic of human jobs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Product Design with Coding Agents: HTML Specs, Design Systems, Subtraction</title><link>https://ssherun.github.io/en/blog/agent-product-design-playbook/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/agent-product-design-playbook/</guid><description>A practical playbook after months with coding agents: know good design, draft in HTML, start from component libraries, treat the design system as constitution, subtract boldly—and why iOS needs a different path.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Notes from an essay on product design with coding agents (the author says it was written entirely by hand). At the end I add my take on whether HTML design drafts work for iOS.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;core-takeaway&quot;&gt;Core takeaway&lt;/h2&gt;
&lt;p&gt;Do not worship one-shot prompts that spit out flashy UIs. What actually works is old-school discipline that agents can execute:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Know what good design is → draft in HTML → start from a component library → treat the design system as constitution → subtract boldly → compare options in isolated files → iterate patiently.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For native iOS, the jump from an HTML demo to the real device is often rough—unless you render on simulator or device from the start.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Metaphor of a design system and UI skeleton&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1058&quot; src=&quot;https://ssherun.github.io/_astro/inline-agent-product-design-playbook-01.Cmhd5ZRA_Z1aw2ii.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;first-know-what-good-product-design-is&quot;&gt;First: know what good product design is&lt;/h2&gt;
&lt;p&gt;It sounds trivial. It is the whole game. Wrong direction turns effort into waste.&lt;/p&gt;
&lt;p&gt;Example: Claude’s warm background plus serif type once looked tasteful; it now often reads as “UI nobody polished.” GPT’s green form look ages the same way.&lt;/p&gt;
&lt;p&gt;The only reliable fix: look at genuinely good products, go to primary sources, and avoid secondhand taste.&lt;/p&gt;
&lt;h2 id=&quot;beauty-is-a-means-not-always-the-goal&quot;&gt;Beauty is a means, not always the goal&lt;/h2&gt;
&lt;p&gt;Design is not art for its own sake. The job is to solve problems, meet needs, hit goals. Looking good is neither necessary nor sufficient.&lt;/p&gt;
&lt;p&gt;Imagine a web IP-quality checker. Users want answers fast after opening the page. If you pile on highlights, shadows, materials, and Three.js for “beauty,” load time tanks and the experience suffers—design has drifted from the need.&lt;/p&gt;
&lt;h2 id=&quot;use-html-files-as-the-design-medium&quot;&gt;Use HTML files as the design medium&lt;/h2&gt;
&lt;p&gt;When the bar is extremely high, Figma or Paper still make sense. For most cases, &lt;strong&gt;HTML is already the better carrier&lt;/strong&gt;—for web apps and for early exploration on many native projects.&lt;/p&gt;
&lt;p&gt;HTML is almost as agent-friendly as Markdown: style and interaction edits are cheap, and agent browsers can open, annotate, and screenshot the draft.&lt;/p&gt;
&lt;h3 id=&quot;sidebar-does-this-apply-to-ios&quot;&gt;Sidebar: does this apply to iOS?&lt;/h3&gt;
&lt;p&gt;My answer: &lt;strong&gt;partly—do not treat HTML as the default bridge to native.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;HTML is great for exploring information architecture, flows, copy, and rough layout—agents can edit and compare quickly. Shipping that demo to iOS is another story: materials, navigation patterns, gestures, safe areas, typography, and system-control semantics diverge. The middle often breaks.&lt;/p&gt;
&lt;p&gt;The smoother path: &lt;strong&gt;start with simulator or device rendering.&lt;/strong&gt; Keep HTML for low-fidelity exploration; use SwiftUI/UIKit previews or real devices for high fidelity and acceptance. Do not expect a one-shot HTML→native translation.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Medium gap from web mock to mobile&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1255&quot; src=&quot;https://ssherun.github.io/_astro/inline-agent-product-design-playbook-02.CFXaRkYm_Z2ohEHz.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;use-a-component-librarydo-not-invent-everything&quot;&gt;Use a component library—do not invent everything&lt;/h2&gt;
&lt;p&gt;A solid library saves time and consistency. Pick by taste and maturity: Shadcn UI, Hero UI, Base UI, and friends.&lt;/p&gt;
&lt;h2 id=&quot;build-a-design-system-the-agents-constitution&quot;&gt;Build a design system: the agent’s constitution&lt;/h2&gt;
&lt;p&gt;This is the core technique.&lt;/p&gt;
&lt;p&gt;A design system is the constitution for how the agent designs pages: color, type, layout, spacing, shadow, components, interaction, and copy voice—written down in one HTML file or folder.&lt;/p&gt;
&lt;p&gt;Doing this before the project starts saves endless micro-tweaks. After every new module, ask: does this match the current design system?&lt;/p&gt;
&lt;p&gt;Same idea as Stitch / &lt;code&gt;DESIGN.md&lt;/code&gt;: consistency comes from a spec file, not from the model “remembering last time’s colors.”&lt;/p&gt;
&lt;h2 id=&quot;subtract-aggressively&quot;&gt;Subtract aggressively&lt;/h2&gt;
&lt;p&gt;Models love extra detail. Delete what is not needed.&lt;/p&gt;
&lt;p&gt;After a round of edits, ask the agent to extract the design principles behind those decisions and fold them back into the system—so the constitution gets sharper with use.&lt;/p&gt;
&lt;h2 id=&quot;compare-within-bounds&quot;&gt;Compare within bounds&lt;/h2&gt;
&lt;p&gt;Stuck on a module? Have the agent produce several options—but only in &lt;strong&gt;separate HTML files&lt;/strong&gt;. Do not mutate the real project while exploring.&lt;/p&gt;
&lt;h2 id=&quot;do-not-worship-one-shot&quot;&gt;Do not worship one-shot&lt;/h2&gt;
&lt;p&gt;Ignore social-media demos where one prompt “finishes” a product. Better prep and clearer intent make the project go faster. Whether it takes one round, two, or ten does not matter.&lt;/p&gt;
&lt;p&gt;Patient polish is the normal case.&lt;/p&gt;
&lt;h2 id=&quot;checklist&quot;&gt;Checklist&lt;/h2&gt;









































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Principle&lt;/th&gt;&lt;th&gt;Practice&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Taste&lt;/td&gt;&lt;td&gt;Study real good products&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Goal&lt;/td&gt;&lt;td&gt;Solve the problem; beauty is a means&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Medium&lt;/td&gt;&lt;td&gt;HTML for web; HTML explore + device accept for iOS&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Start&lt;/td&gt;&lt;td&gt;Component library&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Constitution&lt;/td&gt;&lt;td&gt;Design-system file; self-check after modules&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Iterate&lt;/td&gt;&lt;td&gt;Subtract; write principles back&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Explore&lt;/td&gt;&lt;td&gt;Isolated HTML A/B&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Pace&lt;/td&gt;&lt;td&gt;No one-shot mythology&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Agents accelerate edits. They do not replace your judgment of what good design is. That part you still have to train.&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-ui-design-workflow/&quot; class=&quot;wikilink&quot;&gt;Why AI-generated UI isn’t shippable—and a workflow that fixes consistency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/stitch-design-md-infrastructure/&quot; class=&quot;wikilink&quot;&gt;Why Google Stitch’s DESIGN.md matters: from image tools to design infrastructure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/design-without-designing/&quot; class=&quot;wikilink&quot;&gt;Design Without Designing: engineers shipping quality design with AI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>After the Agent Hype: Traditional SaaS Is Dead; AI-Native Keeps the Seat</title><link>https://ssherun.github.io/en/blog/ai-native-saas-after-agent-hype/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/ai-native-saas-after-agent-hype/</guid><description>Atlassian’s rebound is not a seat-license comeback. “Agent as employee” hit enterprise reality—SoR, evals, and judgment matter again. Chat widgets won’t save legacy SaaS.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Notes with references to &lt;a href=&quot;https://www.atlassian.com/blog/announcements/shareholder-letter-q4fy26&quot;&gt;Atlassian’s FY26 Q4 shareholder letter&lt;/a&gt;, &lt;a href=&quot;https://www.anthropic.com/engineering/multi-agent-research-system&quot;&gt;Anthropic’s multi-agent engineering post&lt;/a&gt;, &lt;a href=&quot;https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents&quot;&gt;agent evals&lt;/a&gt;, and &lt;a href=&quot;https://metr.org/time-horizons/&quot;&gt;METR time horizons&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;core-take&quot;&gt;Core take&lt;/h2&gt;
&lt;p&gt;SaaS stocks soft for half a year are being told again. Atlassian’s FY26 Q4: total revenue +28% y/y, cloud +31%. That is not “classic seat SaaS is back on the throne.”&lt;/p&gt;
&lt;p&gt;The sharper read: the early-year &lt;strong&gt;“Agent as employee”&lt;/strong&gt; story finally met real enterprise conditions. Bills, waits, and retries arrived. Industry data and evals still have to be built in-house. &lt;strong&gt;The system of record does not go away.&lt;/strong&gt; So workflow, context, judgment, and domain benchmarks matter again.&lt;/p&gt;
&lt;p&gt;Bottom line up front: &lt;strong&gt;I do not buy traditional SaaS run the old way. The future is AI-native SaaS.&lt;/strong&gt; Bolting a chat box onto a legacy product does not fix it.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Enterprise context and agent workflow metaphor&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;991&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-native-saas-after-agent-hype-01.wQ_S5AJc_1Szzga.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;why-the-software-story-returned&quot;&gt;Why the software story returned&lt;/h2&gt;
&lt;p&gt;Capital loves a narrative everyone pushes together. From proving you are AI-native to burning tokens and asking where the outcomes are—things split and recombine.&lt;/p&gt;
&lt;p&gt;What Atlassian actually leans on in the letter is not “we shipped a chat UI,” but &lt;strong&gt;Teamwork Graph / System of Work&lt;/strong&gt;: you can hire intelligence by the token; you cannot hire context. Graph grounding can make answers more accurate while using fewer tokens. Humans and agents share one system of work. That rhymes with the market’s swing back to systems of record.&lt;/p&gt;
&lt;p&gt;Early in the year, from OpenClaw to Claude Code, it was easy to extrapolate: models finish every task, invent workflows, use tools, generate UIs—so why keep software at all? Running it long enough shows the gap between “can run a task” and “can act like an employee.”&lt;/p&gt;
&lt;h2 id=&quot;four-judgments-that-still-hold&quot;&gt;Four judgments that still hold&lt;/h2&gt;
&lt;p&gt;I told the team this in April. I still hold it.&lt;/p&gt;
&lt;h3 id=&quot;1-token-cost-becomes-a-top-concern&quot;&gt;1. Token cost becomes a top concern&lt;/h3&gt;
&lt;p&gt;Cheap per-million tokens is not the same as cheap total cost to get something &lt;em&gt;right&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Anthropic’s engineering write-up (their system data at the time—not a universal multiplier): agents used about &lt;strong&gt;4×&lt;/strong&gt; the tokens of a normal chat; multi-agent systems about &lt;strong&gt;15×&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Also budget the supervision labor: ten terminals open all day monitoring jobs is still cost.&lt;/p&gt;
&lt;h3 id=&quot;2-evals-are-the-bottleneck&quot;&gt;2. Evals are the bottleneck&lt;/h3&gt;
&lt;p&gt;Outside coding, many companies still do not know how to evaluate their own business decisions. Industry benchmarks exist, but “score on a leaderboard” is not “was this decision right for &lt;em&gt;our&lt;/em&gt; company.”&lt;/p&gt;
&lt;p&gt;Coding feedback is clearer than most domains—and even there, green tests are not the whole story.&lt;/p&gt;
&lt;h3 id=&quot;3-task-running-agent--agent-employee&quot;&gt;3. Task-running agent ≠ agent employee&lt;/h3&gt;
&lt;p&gt;The latter needs enterprise context, trustworthy consistent judgment, and a sense of what it may decide alone versus escalate.&lt;/p&gt;
&lt;p&gt;The hard question: why did the company make past decisions, which options were rejected, what constraints applied—and is any of that documented? If not, wiring CRM will not invent it.&lt;/p&gt;
&lt;p&gt;Then long-horizon loops: recovery from failure, state, verification. “Just keep it running” is not a design. METR also warns that &lt;strong&gt;task time horizons are not the same as real job competence&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;4-stronger-observability&quot;&gt;4. Stronger observability&lt;/h3&gt;
&lt;p&gt;You need traces: where tokens burned, where it failed, where it looped. Which proven paths can harden into workflows, skills, and playbooks so the model does not re-explore the same process on your dime every time?&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Tokens, evals, and observability&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1058&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-native-saas-after-agent-hype-02.Ckg7QY7k_2kupig.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-ai-native-saas-looks-like&quot;&gt;What AI-native SaaS looks like&lt;/h2&gt;
&lt;p&gt;At minimum:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Business data is readable and operable by agents within permissions by default.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Human UI is customizable per user with the agent, and changeable anytime.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decisions, rationales, and outcomes are first-class data.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data, analysis, and action are one stack&lt;/strong&gt;—more vertical than classic SaaS, and deeper: upstream and downstream of a scenario.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eventually, industry models.&lt;/strong&gt; Model + app becomes table stakes. Fine-tune and distill ≠ train a foundation model from scratch at every company.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Deep vertical apps become the new neo labs: real tasks, industry data, evals, and outcome feedback in hand—so they know how to change the model usefully.&lt;/p&gt;
&lt;p&gt;That does not contradict “software gets cheap.” What commoditizes is the vibe-able feature shell. &lt;strong&gt;What stays valuable moves to SoR, context, judgment, domain loops, and vertical depth that can feed models.&lt;/strong&gt; The shape has to be agent-read/write and human-UI-malleable—not seat licenses plus a dialog.&lt;/p&gt;
&lt;h2 id=&quot;why-incumbents-are-at-risk&quot;&gt;Why incumbents are at risk&lt;/h2&gt;
&lt;p&gt;Enterprises still need copilots, UIs, and approvals. Those needs do not vanish overnight. But old companies also protect existing products, seat revenue, and delivery motions. I bet they cannot pivot as fast as AI-native companies. A chat widget on yesterday’s SaaS does not close the gap.&lt;/p&gt;
&lt;h2 id=&quot;two-meta-takeaways&quot;&gt;Two meta-takeaways&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Ignore whatever capital is hyping—solve real customer problems, or you leave the table.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Staying at the table is what matters most.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/software-not-valuable-ai-era/&quot; class=&quot;wikilink&quot;&gt;Software gets cheap in the AI era—below the kill line, and maybe customization too&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/lovable-future-saas-agent-capabilities/&quot; class=&quot;wikilink&quot;&gt;Lovable: the future of SaaS is agent-callable capabilities&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/muse-fast-code-slow-delivery/&quot; class=&quot;wikilink&quot;&gt;Coding got fast; delivery didn’t: Xiaohongshu Muse’s agentic architecture&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>An Alien Mind: Alignment Unsolved—Don’t Scale Flat-Out</title><link>https://ssherun.github.io/en/blog/openai-alien-mind/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/openai-alien-mind/</guid><description>OpenAI’s chief scientist: AI is a grown alien intellect; goal ≠ value alignment; CoT monitoring is weakening. No lab has solved alignment enough for max-speed scaling.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Notes on OpenAI chief scientist &lt;a href=&quot;https://openai.com/index/an-alien-mind/&quot;&gt;Jakub Pachocki’s &lt;em&gt;An Alien Mind&lt;/em&gt;&lt;/a&gt; (2026-09-06).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;core-take&quot;&gt;Core take&lt;/h2&gt;
&lt;p&gt;In mid-2023, scalable reasoning training first made it feel real: within our lifetimes we would see machines meaningfully smarter than us. Three years later, reasoning models are in the economy, pushing science, operating computers, collaborating—and reshaping cybersecurity with new dangers.&lt;/p&gt;
&lt;p&gt;Pachocki’s claim is blunt: &lt;strong&gt;capability jumps may continue into recursive self-improvement (RSI)&lt;/strong&gt;. No one is prepared for a continued rapid rise in machine intelligence. OpenAI will keep working on alignment, monitoring, defense, and unilateral pauses—but broader interventions are needed.&lt;/p&gt;
&lt;p&gt;One line: &lt;strong&gt;AI is more alien mind than tool; until alignment and monitoring are solved, max-speed scaling is not responsible.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Abstract scene contrasting alien intellect with human scale&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-openai-alien-mind-01.Ck5uZohR_1KGWqG.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;grown-not-designed&quot;&gt;Grown, not designed&lt;/h2&gt;
&lt;p&gt;Around 2017 OpenAI internalized that compute scaling paid off consistently—so it chased more compute and bet on a few scalable directions. Algorithmic breakthroughs mostly look like discoveries along that path.&lt;/p&gt;
&lt;p&gt;The sharper metaphor: &lt;strong&gt;AI is grown more than designed&lt;/strong&gt;—repeat a simple optimization step on unimaginable compute and you get an extremely complex system that handles abstract concepts and can simulate facets of human behavior. Like neuroscience: local mechanisms can be studied; the whole action resists a full description. Large training runs are experiments; stronger systems are harder to interpret.&lt;/p&gt;
&lt;p&gt;Another under-appreciated point: the model &lt;strong&gt;need not beat humans on every axis&lt;/strong&gt;. Surpassing enough of them is already very useful—or very dangerous—and it gets harder to know exactly how capable it is.&lt;/p&gt;
&lt;h2 id=&quot;goal-alignment--value-alignment&quot;&gt;Goal alignment ≠ value alignment&lt;/h2&gt;
&lt;p&gt;Machine intelligence comes from a different process than ours. Don’t assume it defaults to human principles or generalizes like people do. Split the problem:&lt;/p&gt;

















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;Question&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Goal alignment&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Does it try to accomplish the goal set before it (instruction hierarchy, collaboration, inferring intent)?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Value alignment&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Does it hold and generalize high-level principles—acting reasonably under unclear, conflicting, unfamiliar, or adversarial conditions—with honesty, integrity, and love for humanity?&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The long-term hard problem is the latter. The core challenge is &lt;strong&gt;generalization&lt;/strong&gt;: smarter systems work with higher-level concepts in stranger environments; values reinforced in training may not transfer. Multi-agent ecosystems make it worse. Crucially, future AIs must keep human values whether or not they believe they are under human supervision.&lt;/p&gt;
&lt;p&gt;Two practical classes both have failure modes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reward aligned behavior in goal-oriented RL&lt;/strong&gt; (preference models / constitutions): strong on average, brittle out of distribution. In the OpenAI–Hugging Face incident, agents kept a boundary against social-engineering humans—yet took other out-of-scope actions against the spirit of their values.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Steer toward an “aligned” slice of pretraining&lt;/strong&gt;: weak under further optimization pressure. Hard-objective training can produce motivated reasoning that bends “aligned-looking” thoughts to hit the goal.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;GPT-6 Astra is described as meaningfully better aligned than GPT-5.6 Sol—but generalizable alignment may not outrun general intelligence.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Visual metaphor for the tension among alignment, monitoring, and defense&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-openai-alien-mind-02.DgWtFebZ_IHks1.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;cot-monitoring-is-getting-weaker&quot;&gt;CoT monitoring is getting weaker&lt;/h2&gt;
&lt;p&gt;Without a satisfactory theory of generalization, &lt;strong&gt;empirically validating alignment methods is arguably even more important than the methods themselves&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;OpenAI’s main bet has been chain-of-thought monitoring: optimize outcomes, don’t supervise the process itself, so the CoT has no direct training incentive to hide misaligned ideas. Hiding the CoT in o1-preview was deliberate—to protect that monitoring channel over the long term.&lt;/p&gt;
&lt;p&gt;Evaluations now show reliance is diminishing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reasoning blends with talking to people, other AIs, and tools—many interactions must be supervised, blurring the boundary&lt;/li&gt;
&lt;li&gt;Models get better at reasoning about and manipulating their own reasoning&lt;/li&gt;
&lt;li&gt;Stronger pretraining makes models much smarter &lt;strong&gt;even without verbalized reasoning&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Work continues on monitorability and combining CoT with activation monitoring (e.g. confessions). Expectation: &lt;strong&gt;general AI progress will increasingly be bottlenecked by confidence in monitoring.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;defense-is-a-reasonnot-a-license-for-recklessness&quot;&gt;Defense is a reason—not a license for recklessness&lt;/h2&gt;
&lt;p&gt;The strongest case for training much smarter models quickly is defense against other AI: superhuman cyber offense, agents that can reach most infrastructure without bodies, malicious agents that may generalize beyond an operator’s intent into bargaining, deception, or blackmail—plus risks like engineered pathogens. Powerful, aligned AI for defense will be a deployment priority.&lt;/p&gt;
&lt;p&gt;Even so: &lt;strong&gt;racing forward at all costs looks absurd once the stakes are internalized.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;rsi-getting-there-is-not-how-we-should-get-there&quot;&gt;RSI: getting there is not how we should get there&lt;/h2&gt;
&lt;p&gt;If progress continues, machine recursive self-improvement sits at the core of future scientific discovery. OpenAI orients research toward RSI to stay at the frontier—&lt;strong&gt;that is not an endorsement of short-term all-out acceleration by the whole community.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Two levers, best used together: steer automated research toward new alignment and monitoring insights while keeping people in the loop; and coordinate slowdowns as needed until shared safety bars exist (evolve Preparedness / RSP-style commitments into widely mandated gates for continued development).&lt;/p&gt;
&lt;p&gt;The core challenge of automating AI research is not “getting there.” It is &lt;strong&gt;getting there in a way that leaves the future in humanity’s hands.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;close&quot;&gt;Close&lt;/h2&gt;
&lt;p&gt;Most focus should be on the next few years: preserve human agency; prevent extreme concentration of power when a few people with a large computer can do what once took thousands of experts; and keep humans in control of a future with alien intellect exceeding our own.&lt;/p&gt;
&lt;p&gt;Pachocki’s ending is unsweetened:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;No lab has solved alignment and monitoring enough to keep responsibly scaling at maximum speed for much longer. Voluntary slowdowns should become common until shared safety bars exist; international coordination on future AI development needs to become a top government priority.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/openai-daybreak-gpt-56-cyber-defense/&quot; class=&quot;wikilink&quot;&gt;Defenders’ window: OpenAI Daybreak &amp;#x26; GPT-5.6-Cyber&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/warp-self-improving-agents/&quot; class=&quot;wikilink&quot;&gt;Warp: self-improving agents and RSI boundaries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/forceful-systems-fly-off-multi-agent-illusion/&quot; class=&quot;wikilink&quot;&gt;Forceful systems fly off: multi-agent company illusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>An Accidental Blackboard: Agents Coordinating via the Repo</title><link>https://ssherun.github.io/en/blog/accidental-blackboard-agents/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/accidental-blackboard-agents/</guid><description>A Thoughtworks hyper-agentic experiment turned plan files plus frequent rebases into a classic blackboard—and argues coordination should leave source control.</description><pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://martinfowler.com/articles/exploring-gen-ai/an-accidental-blackboard.html&quot;&gt;An Accidental Blackboard&lt;/a&gt;&lt;br&gt;
Series: Martin Fowler · Exploring Gen AI (Thoughtworks)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;the-takeaway&quot;&gt;The takeaway&lt;/h2&gt;
&lt;p&gt;Ten engineers in Barcelona ran a “hyper-agentic” exercise and built an airline &lt;strong&gt;IROps&lt;/strong&gt; system in four days. The lasting insight is not the delivery speed. It is this:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Plan files in the repo, plus continuous commit/rebase, accidentally turned the monorepo into a classic blackboard—agents reading progress, yielding interfaces, and handing off integration.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Shared blackboard and agents&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-accidental-blackboard-agents-01.Bi3RUgPV_170Ug6.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;why-irops-is-hard&quot;&gt;Why IROps is hard&lt;/h2&gt;
&lt;p&gt;IROps is how airlines recover from disruption: technical faults, sick crew, cancellations, aircraft swaps, passenger re-accommodation—across hundreds of aircraft, huge passenger volumes, and multi-station crew. Hard to build, understand, and operate.&lt;/p&gt;
&lt;p&gt;They used a spec plus a simulated airline, a &lt;strong&gt;monorepo&lt;/strong&gt;, and everyone started at once. After a couple of days, coordination began to emerge.&lt;/p&gt;
&lt;h2 id=&quot;from-fixing-ci-to-seeing-each-other&quot;&gt;From fixing CI to seeing each other&lt;/h2&gt;
&lt;p&gt;Many agents in one repo crushed the build pipeline. The team introduced a discipline: agents &lt;strong&gt;commit continually and rebase from main&lt;/strong&gt;, catching failures early locally.&lt;/p&gt;
&lt;p&gt;They also directed agents to plan against numbered sections of the same spec, &lt;strong&gt;store plans in the repo&lt;/strong&gt;, and update them as work progressed. Side effect: every agent shared the same sectioned spec, and plan updates rode along with the commit stream.&lt;/p&gt;
&lt;p&gt;Textbook coordination followed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agents on the &lt;strong&gt;evaluator&lt;/strong&gt; and the &lt;strong&gt;search&lt;/strong&gt; algorithm could see each other’s integration points in the plans&lt;/li&gt;
&lt;li&gt;One marked a line in progress; the other stayed off that line&lt;/li&gt;
&lt;li&gt;When the first finished, the second saw completion &lt;em&gt;and&lt;/em&gt; notes on how it was implemented—then wired in the real verifier&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They started &lt;strong&gt;exploiting&lt;/strong&gt; it: point a verifier agent at plans and source, wait for a cost model to land, then integrate—and it did. Not designed architecture. An accident of stacked decisions.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;The repo as a coordination layer&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-warp-self-improving-agents-02.Dj0dCBfQ_ZbkD1p.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;name-the-pattern-blackboard&quot;&gt;Name the pattern: blackboard&lt;/h2&gt;
&lt;p&gt;The author maps this to the old &lt;strong&gt;blackboard / tuple space&lt;/strong&gt; pattern:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Shared memory that autonomous agents read and write independently&lt;/li&gt;
&lt;li&gt;Lineage through Hearsay-II (~1980) and Gelernter’s tuple spaces (~1986)&lt;/li&gt;
&lt;li&gt;Minimally structured tuples plus optional fields—no rigid schema&lt;/li&gt;
&lt;li&gt;Fit for: decompose → drop labeled solutions into shared space → other searchers pick them up&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The repo &lt;em&gt;accidentally&lt;/em&gt; became a blackboard. Incomplete structure, unintentional, missing key blackboard pieces. The author is not sure the same prompt cascade can be reproduced reliably. They found the key prompt that started it—still emergent, not directed.&lt;/p&gt;
&lt;h2 id=&quot;the-hard-call-dont-bind-coordination-to-git&quot;&gt;The hard call: don’t bind coordination to Git&lt;/h2&gt;
&lt;p&gt;Frequent pushes gave agents a continuous progress feed—and overloaded CI. Switching to push only larger coherent chunks cut that feed.&lt;/p&gt;
&lt;p&gt;The author’s direction:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Build a blackboard &lt;strong&gt;on purpose&lt;/strong&gt;, not by accident&lt;/li&gt;
&lt;li&gt;Prefer a communication channel &lt;strong&gt;independent of source control&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Turn a good accident into a good intentional project&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;He started &lt;strong&gt;Talwrn&lt;/strong&gt; (Welsh for a threshing pit—where arguments get worked out): a simple tool that drops into a project and gives agents a coordination channel. First goal: support Talwrn’s own development, posting as it evolves.&lt;/p&gt;
&lt;h2 id=&quot;practical-takeaways&quot;&gt;Practical takeaways&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;In multi-agent monorepos, make &lt;strong&gt;plans / interfaces / progress&lt;/strong&gt; shared, machine-readable artifacts&lt;/li&gt;
&lt;li&gt;Write integration points into plans—better for agent handoffs than after-the-fact negotiation&lt;/li&gt;
&lt;li&gt;Commit frequency is a double-edged sword: visibility vs CI; eventually peel coordination out of git&lt;/li&gt;
&lt;li&gt;This is not “virtual company” multi-agent roleplay—it is &lt;strong&gt;shared working memory&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They stumbled onto an old path. The next step is engineering it into a reusable piece—not gambling on emergence again.&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/forceful-systems-fly-off-multi-agent-illusion/&quot; class=&quot;wikilink&quot;&gt;Forceful Systems Fly Off: Why Virtual-Company Multi-Agent Usually Fails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/coding-agents-reshape-epd/&quot; class=&quot;wikilink&quot;&gt;How Coding Agents Are Reshaping EPD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/warp-self-improving-agents/&quot; class=&quot;wikilink&quot;&gt;Warp Self-Improving Agents: Skills Feedback Loops and RSI Limits&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>When Everyone Uses AI, How Do You Judge a Developer?</title><link>https://ssherun.github.io/en/blog/judge-dev-ability-in-ai-era/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/judge-dev-ability-in-ai-era/</guid><description>A V2EX career thread distilled: shared tools do not equal equal skill. Interviews should weight direction, course-correction, architecture, and delivery.</description><pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://www.v2ex.com/t/1238034&quot;&gt;When every programmer uses AI, how do we judge ability?&lt;/a&gt; (V2EX · Career)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;core-takeaway&quot;&gt;Core takeaway&lt;/h2&gt;
&lt;p&gt;Ubiquitous tools do &lt;strong&gt;not&lt;/strong&gt; flatten skill. The same AI in different hands produces very different outcomes.&lt;/p&gt;
&lt;p&gt;Shift evaluation from “can they type code” to four signals:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Direction&lt;/strong&gt; — how they frame and split the work&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Course-correction&lt;/strong&gt; — can they pull the model back when it drifts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Architecture &amp;#x26; domain judgment&lt;/strong&gt; — what to pick, what to refuse, how to cover edge cases&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maintainable delivery&lt;/strong&gt; — not a pile of vibe-coded debt&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&quot;AI collaboration desk metaphor&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-openai-alien-mind-01.Ck5uZohR_1KGWqG.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-the-op-asked&quot;&gt;What the OP asked&lt;/h2&gt;
&lt;p&gt;If everyone can use AI:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do interviews still grill textbook Q&amp;#x26;A?&lt;/li&gt;
&lt;li&gt;Does pedigree matter more?&lt;/li&gt;
&lt;li&gt;Do likable, articulate people sail through more easily?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Under the hiring questions sits a sharper one: &lt;strong&gt;once coding speed stops being the yardstick, what replaces it?&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;community-consensus-same-weapons-different-fights&quot;&gt;Community consensus: same weapons, different fights&lt;/h2&gt;
&lt;p&gt;Recurring analogies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A strong eye technique is still only as strong as its wielder&lt;/li&gt;
&lt;li&gt;Everyone owning an AK does not make battles draw&lt;/li&gt;
&lt;li&gt;Same car, different drivers&lt;/li&gt;
&lt;li&gt;Calculators did not retire math fundamentals — “Google-oriented coding” becoming “AI-oriented coding” follows the same logic&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Portable line: &lt;strong&gt;without human direction, AI digs deeper into the wrong hole.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;One reported case: a strong engineer with a mid-tier model beat a rigid thinker with a top model. Expensive tokens do not patch weak judgment.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Same tool, different outcomes&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-economy-jobs-demand-02.EBmCsUxt_Z1WOH6X.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-rises-what-falls&quot;&gt;What rises, what falls&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Rising weight:&lt;/strong&gt; task understanding, architecture and business depth, exception coverage, communication, self-drive and learning speed, effective output per token.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Falling but not gone:&lt;/strong&gt; raw typing speed, textbook trivia as the only filter. Weak vibing still shows up as unmaintainable, counter-intuitive systems — that &lt;em&gt;is&lt;/em&gt; a signal.&lt;/p&gt;
&lt;p&gt;Interview practice splits: keep fundamentals; keep ~80% and add change-adaptivity; take-home real features in days; or stop interviewing “programmers” and interview successor roles. Cold water: many firms still run leetcode + trivia next week.&lt;/p&gt;
&lt;p&gt;Boss lens is blunt: &lt;strong&gt;story less, shipped value more.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;five-checks-for-hiring-or-self-audit&quot;&gt;Five checks for hiring or self-audit&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Fuzzy-brief decomposition&lt;/strong&gt; — direction and boundaries, not keystroke rate.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Drift catch&lt;/strong&gt; — plant a bad AI path; see if they notice.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maintainability&lt;/strong&gt; — handover cost, failure modes, rollback — not just “it runs”.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Design why&lt;/strong&gt; — algorithms and systems still fine; demand rationale.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evidence of amplification&lt;/strong&gt; — real results scaled by AI, not a “I use Cursor” line.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Job titles may change. Judgment and delivery quality will not. Before worrying how others get scored, ask which side of these five checks you sit on.&lt;/p&gt;
&lt;h2 id=&quot;related&quot;&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-era-programmer-survival-guide/&quot; class=&quot;wikilink&quot;&gt;AI-era programmer survival guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-economy-jobs-demand/&quot; class=&quot;wikilink&quot;&gt;AI economy and human jobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/programmer-35-crisis-and-self-rescue/&quot; class=&quot;wikilink&quot;&gt;35+ programmer crisis&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Code Is Fast, Delivery Isn&apos;t: Muse and One Context</title><link>https://ssherun.github.io/en/blog/muse-fast-code-slow-delivery/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/muse-fast-code-slow-delivery/</guid><description>Coding speed gains get eaten by specs, context gaps and handoffs. Muse puts Agent OS and Harness on one context line — product, eng and QA need one flow.</description><pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://www.infoq.cn/article/l88X1azz8wfwphDyECoP&quot;&gt;Why fast AI coding doesn’t speed up delivery — Xiaohongshu Muse&lt;/a&gt;&lt;br&gt;
Speaker: Zheng Xinqi (AI Coding architect, Xiaohongshu) · InfoQ / AICon&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;core-takeaway&quot;&gt;Core takeaway&lt;/h2&gt;
&lt;p&gt;AI can write code fast. End-to-end delivery often does not. Time saved in coding is spent again on design/engineering norms, enterprise assets, cross-repo context, security checks, and cross-role coordination.&lt;/p&gt;
&lt;p&gt;Xiaohongshu’s Muse is not “another code agent.” It tries to put requirements co-creation, design, and engineering on &lt;strong&gt;one context spine&lt;/strong&gt;: Agent Team orchestration, an Agent OS runtime, and Harness controls so human–AI collaboration can ship, recover, and audit—not just demo well.&lt;/p&gt;
&lt;p&gt;My own end-state bet:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The future should collapse communication cost among product, engineering, and testing by putting them in one shared context. From an information-flow view, that beats role-silo handoffs.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&quot;Shared-context workspace metaphor&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-openai-alien-mind-01.Ck5uZohR_1KGWqG.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;why-fast-code--fast-ship&quot;&gt;Why “fast code” ≠ “fast ship”&lt;/h2&gt;
&lt;p&gt;Enterprise AI coding fails in three recurring ways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;No enterprise assets&lt;/strong&gt; — outputs miss design/engineering norms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fragmented context&lt;/strong&gt; — memory, domain knowledge, and task state live on different platforms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Broken capability chains&lt;/strong&gt; — many skills/tools that conflict instead of compose&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Assistant-style agents also raise expectations: users want a few messages, not elaborate prompts. Local tools get faster; the path from idea to prod still dies in review, QA, fixes, and re-alignment.&lt;/p&gt;
&lt;h2 id=&quot;muse-above-and-below-the-engineering-line&quot;&gt;Muse: “above” and “below” the engineering line&lt;/h2&gt;
&lt;p&gt;Old path: text PRD → meetings → design bake-offs → repo. The AI-era need is multi-option prototypes you can run, high-fidelity work that matches company style, and &lt;strong&gt;downstream that can continue without re-briefing&lt;/strong&gt;.&lt;/p&gt;

















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Stage&lt;/th&gt;&lt;th&gt;Job&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Above engineering&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Before the real repo: BI/data, option comparison, demos, PRDs&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Below engineering&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Real repos: Dev Agents, compliant code, preview, delivery&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Ideal loop: drop an idea in IM → co-creation panel emits a norms-compliant prototype → another agent &lt;strong&gt;continues the same context&lt;/strong&gt; into engineering. Chat, Artifacts, and Editor share one Context—not three siloed features.&lt;/p&gt;
&lt;p&gt;Hard slogan: &lt;strong&gt;One Context / One Workspace&lt;/strong&gt;. Microservices can stay split; task-relevant context must still land in one place.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;One spine from idea to repo&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-warp-self-improving-agents-02.Dj0dCBfQ_ZbkD1p.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;workflow--pipeline--agent-team&quot;&gt;Workflow → Pipeline → Agent Team&lt;/h2&gt;
&lt;p&gt;Control surfaces evolve in three coexisting modes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Workflow&lt;/strong&gt; — deterministic nodes for high-hallucination / must-recover paths&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pipeline&lt;/strong&gt; — route by input; “room” context so theme A only loads related skills/tools/prompts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent Team&lt;/strong&gt; — higher-level story planning and nested scheduling; more general, but risk of duplicated work and conflicting merges&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Measure more than success rate: &lt;strong&gt;duplication, conflict, and merge-failure rates&lt;/strong&gt;. Multi-agent pays off only when subtasks are independent, parallelizable, and context-separable; otherwise a clear Pipeline wins.&lt;/p&gt;
&lt;p&gt;On Intelligence vs Steering, Muse’s rule is blunt: &lt;strong&gt;Agent OS first; context engineering and harness as incremental patches&lt;/strong&gt;. Models set the ceiling; the control plane decides whether you can enter production.&lt;/p&gt;
&lt;h2 id=&quot;harness-verify-dont-pray&quot;&gt;Harness: verify, don’t pray&lt;/h2&gt;
&lt;p&gt;Stuffing rules into the system prompt rarely beats “the user’s latest instruction.” You need programmatic guardrails:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lifecycle hooks: prepare the “room,” decide HITL, verify each turn (framework + business)&lt;/li&gt;
&lt;li&gt;Checks in different places: block before the model, validate before exit, local tool I/O checks, pause before side effects&lt;/li&gt;
&lt;li&gt;Writes: idempotency keys + side-effect logs (who approved, params, resource versions, outcomes, rollback)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Don’t treat chat transcripts as runtime state&lt;/strong&gt;; persist goals, constraints, plan versions, steps, evidence, approvals, and budgets&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Knowledge moves beyond “upload docs + RAG” toward business ontologies, expert-style research, evidence with source/time/permissions, and &lt;strong&gt;ablation tests&lt;/strong&gt; for which context actually helps. Worth tattooing:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Can you give the right knowledge to the right agent at the right time?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;humans-judgment-oversight-taste&quot;&gt;Humans: judgment, oversight, taste&lt;/h2&gt;
&lt;p&gt;Under “vibe working,” designers judge which option is right instead of grinding ten comps; domain experts may get pulled into IM review to inject taste. Infra builds Agent Docs, human-in-the-loop, and reusable company taste data—not infinite plugins.&lt;/p&gt;
&lt;p&gt;That rhymes with EPD shifts where implementation is cheap and &lt;strong&gt;alignment + judgment&lt;/strong&gt; become the scarce bandwidth. See &lt;a href=&quot;https://ssherun.github.io/en/blog/coding-agents-reshape-epd/&quot; class=&quot;wikilink&quot;&gt;How coding agents reshape engineering, product, and design&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;my-take-information-flow-over-role-columns&quot;&gt;My take: information flow over role columns&lt;/h2&gt;
&lt;p&gt;People argue “hire more QA” or “PMs must code.” Cleaner cut is information flow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Slow delivery is often translation tax&lt;/strong&gt; — the same intent rewritten (and degraded) across PRD, design, tickets, and test cases.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One Context is not anti-specialization&lt;/strong&gt; — it kills “each silo gets its own lossy summary.” Product, eng, and QA can stay different people/agents on one task state.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;QA shouldn’t be a broken ticket stream&lt;/strong&gt; — validators, side-effect logs, and approval resume belong in the same runtime.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;For small teams&lt;/strong&gt; — fewer “assistant plugins”; more shared task state, knowledge flywheels, and recoverable harness. Same direction as &lt;a href=&quot;https://ssherun.github.io/en/blog/accidental-blackboard-agents/&quot; class=&quot;wikilink&quot;&gt;an accidental blackboard&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;From an info-flow lens: bandwidth dies at handoff surfaces, not at typing speed. Collapsing product, engineering, and testing into one context turns translation tax into an observable state machine.&lt;/p&gt;
&lt;h2 id=&quot;decision-checklist&quot;&gt;Decision checklist&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Where does saved coding time go—norm checks or cross-role alignment? Fix that first.&lt;/li&gt;
&lt;li&gt;Do Chat / artifacts / editors already share one Context? Connect that before adding agents.&lt;/li&gt;
&lt;li&gt;Are multi-agent subtasks truly separable? If not, prefer Pipeline.&lt;/li&gt;
&lt;li&gt;Do you evaluate results, trajectories, and components—or only success rate?&lt;/li&gt;
&lt;li&gt;Do you cost by &lt;strong&gt;fully loaded successful tasks&lt;/strong&gt; (retries, model upgrades, human rework)?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Faster coding is the entry ticket. &lt;strong&gt;Unbroken context, recoverable state, and near-zero cross-role translation&lt;/strong&gt; are what make delivery faster.&lt;/p&gt;</content:encoded></item><item><title>OpenClaw&apos;s Eight Months: From Viral to Nobody Cares</title><link>https://ssherun.github.io/en/blog/openclaw-eight-month-rollercoaster/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/openclaw-eight-month-rollercoaster/</guid><description>Peter Steinberger&apos;s Startup School recap: personal brand can&apos;t be forked, your dependency&apos;s business model is yours, and don&apos;t stop having fun.</description><pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://www.infoq.cn/article/4KQHJC49t8J8FPqaEVLv&quot;&gt;InfoQ (ZH)&lt;/a&gt;&lt;br&gt;
Talk: Peter Steinberger · Startup School 2026 · &lt;a href=&quot;https://www.youtube.com/watch?v=whcfSGN6CAU&quot;&gt;video&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;the-takeaway&quot;&gt;The takeaway&lt;/h2&gt;
&lt;p&gt;OpenClaw is not just another agent-framework origin story. It is an &lt;strong&gt;eight-month product cycle compressed&lt;/strong&gt;: kitchen WhatsApp relay → global attention → crushed by security narratives and configuration explosion → climbing back toward fun.&lt;/p&gt;
&lt;p&gt;Three lines worth keeping:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Anything you build can be forked; your name cannot&lt;/strong&gt;—build personal brand before you need it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Your dependency’s business model is your business model&lt;/strong&gt;—when a lab cuts subscriptions, your roadmap breaks with it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Don’t stop having fun&lt;/strong&gt;—fun is speed; weeks without joy tend to ship configuration options.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&quot;Lobster and rollercoaster metaphor&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;991&quot; src=&quot;https://ssherun.github.io/_astro/inline-openclaw-eight-month-rollercoaster-01.BWLLpPx6_M5LaW.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;contrast-meituans-raise-shrimp-vs-peters-intuition&quot;&gt;Contrast: Meituan’s “raise shrimp” vs Peter’s intuition&lt;/h2&gt;
&lt;p&gt;InfoQ opens with the enterprise lens: in Feb–Mar 2026 Meituan rolled OpenClaw company-wide—high enthusiasm, high cost (AI bills reportedly burning millions of RMB per day), and errors starting to interfere with real operations. Wang Puzhong framed it as phase one of AI transformation: AI stuffed into daily work without touching core business; process, org, and systems didn’t move together. Only by July did horse-racing experiments surface usable product paths.&lt;/p&gt;
&lt;p&gt;Enterprise takeaway: &lt;strong&gt;system engineering; don’t rush.&lt;/strong&gt; Peter’s takeaway: &lt;strong&gt;trust intuition; fix what annoys you.&lt;/strong&gt; They don’t conflict—one is about landing at scale, the other about the fuel that starts a product. Dropping a personal open-source toy into a public company’s ops needs boundaries and governance, not just an install guide.&lt;/p&gt;
&lt;h2 id=&quot;origin-built-from-being-annoyed&quot;&gt;Origin: built from being annoyed&lt;/h2&gt;
&lt;p&gt;Inspiration usually starts as irritation. On a rainy day he wanted to watch local agents from his phone—no clean path—so a WhatsApp relay appeared in about an hour. The magic wasn’t “chat in a terminal”; it was the &lt;strong&gt;feel&lt;/strong&gt;: short replies, proactive check-ins, friend-like tone; model/context/session complexity melted away.&lt;/p&gt;
&lt;p&gt;Twitter couldn’t sell it → friends in group chats → non-technical friends wanted it and got angry it “wasn’t for them yet”—strong PMF signal. A Discord PR turned a single-channel relay into a multi-platform bot (names molted from ClaudeAss toward OpenClaw). New Year’s Eve: build in public; a launch daemon resurrected after Ctrl+C; wake up to ~800 messages—almost got owned, and truly went viral.&lt;/p&gt;
&lt;p&gt;In eight months: tens of thousands of issue/PR authors, thousands of committers; Mac Minis sold out; he nearly deleted the whole project. Lesson: &lt;strong&gt;be careful what you wish for.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;From personal relay to build-in-public&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-warp-self-improving-agents-02.Dj0dCBfQ_ZbkD1p.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;hermes-security-and-9500-config-options&quot;&gt;Hermes, security, and ~9,500 config options&lt;/h2&gt;
&lt;p&gt;Competitors won at the pain point: security-report floods plus media claims that ~20% of Skills were malicious (their scan of ~67k Skills put the real ratio nearer 0.3%). Debunking never outruns panic.&lt;/p&gt;
&lt;p&gt;He hardened the stack—sandboxes, allowlists, permissions, symlink safety, atomic config writes. Users love the abstract word “secure” and hate slower updates, broken workflows, and harder upgrades. Features are the fun part—one prompt away; the cost arrives later: every feature drags config options, peaking near &lt;strong&gt;9,500&lt;/strong&gt;. Software with users is infinitely harder to evolve.&lt;/p&gt;
&lt;p&gt;The sharper cut was dependency risk: the harness was overly optimized for Opus; Anthropic gave ~24 hours’ notice before disabling subscriptions—not enough time to turn. Write this down:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your dependency’s business model is your business model.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Downloads behave like weather: ~835k/week at the May trough; after June “obituaries,” a spike to ~4.7M/week. You don’t control the storm—only what you repair inside it.&lt;/p&gt;
&lt;h2 id=&quot;when-fun-dies-the-product-dies&quot;&gt;When fun dies, the product dies&lt;/h2&gt;
&lt;p&gt;Around February it stopped being fun. He stopped using his own product and became the person who fixes bugs, security, infra, media, and lawyers—“for everyone” killed “for me.” NVIDIA asked early “what do you need?” and staffed much of the security load. Around his May birthday, fun returned: irritation at software he couldn’t prompt an agent to change became building fuel again.&lt;/p&gt;
&lt;p&gt;“OpenClaw killer” headlines miss the point: &lt;strong&gt;open source.&lt;/strong&gt; It’s hard to beat someone who is simply having fun.&lt;/p&gt;
&lt;h2 id=&quot;whats-nextand-a-checklist&quot;&gt;What’s next—and a checklist&lt;/h2&gt;
&lt;p&gt;The pitch stays clear: labs sell you an agent; OpenClaw is the alternative—open source, runs anywhere, any model; with local weights, data need never leave the device. The team is pushing shared session visibility and orchestration; the product is moving toward voice and multimodal (FaceTime hacks included).&lt;/p&gt;
&lt;p&gt;Useful checks if you build agent tools:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Are you user #1?&lt;/strong&gt; Users #2–20 are friends; if you’re not excited, don’t expect the market to be.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Do you have a vision.md?&lt;/strong&gt; Will you reject the N+1 “cool but off-course” PR?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Are security boundaries explicit?&lt;/strong&gt; What you guarantee vs what was never the product promise—don’t let unverified reports own the roadmap.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Is the harness married to one subscription?&lt;/strong&gt; Multi-model and open weights are survival, not polish.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Is config exploding?&lt;/strong&gt; Compatibility switches are a tax on fun and maintainability.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Live in the future. Build what’s missing. When they write your obituary, keep shipping—confuse them.&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/accidental-blackboard-agents/&quot; class=&quot;wikilink&quot;&gt;An Accidental Blackboard: How Agents Coordinated via the Repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/warp-self-improving-agents/&quot; class=&quot;wikilink&quot;&gt;What “self-improving agents” actually improve&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/coding-agents-reshape-epd/&quot; class=&quot;wikilink&quot;&gt;How coding agents reshape engineering, product, and design&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Is Software Worthless Now? Even Custom Work Commoditizes</title><link>https://ssherun.github.io/en/blog/software-not-valuable-ai-era/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/software-not-valuable-ai-era/</guid><description>A V2EX thread distilled: whatever falls below the model kill-line gets cheap. When agents are strong enough even customization commoditizes.</description><pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://www.v2ex.com/t/1238096&quot;&gt;In the AI era, software is already worthless&lt;/a&gt; (V2EX)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;core-takeaway&quot;&gt;Core takeaway&lt;/h2&gt;
&lt;p&gt;The OP says pure software can barely build an advantage anymore. The community usually adds a sharper cut: &lt;strong&gt;what devalues is the layer below the model kill-line&lt;/strong&gt;—tool shells anyone can vibe-code, settings junk, thin content sites.&lt;/p&gt;
&lt;p&gt;We push the endgame further:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;When agents are strong enough, software really is cheap—and so is most customization.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Default model capabilities swallow features. Project-priced “change the UI / change the workflow” work collapses into conversational edits. What can still hold value: outcomes, liability, distribution trust, proprietary data and workflow memory, plus hardware, licenses, and supply-chain friction software alone cannot touch.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Software shelf vs agent orchestration metaphor&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-software-not-valuable-ai-era-01.CijO1zgg_Z1ncMaL.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-the-op-claimed&quot;&gt;What the OP claimed&lt;/h2&gt;
&lt;p&gt;One line: pure software—for individuals and companies—struggles to build moats.&lt;/p&gt;
&lt;p&gt;The mood underneath is clear: when shipping gets easy, willingness to pay drops. Some replies agree: if everyone can build it, people subconsciously refuse to pay.&lt;/p&gt;
&lt;h2 id=&quot;community-consensus-stratify-first&quot;&gt;Community consensus: stratify first&lt;/h2&gt;
&lt;p&gt;Few people buy “all software is worthless,” but the high-signal split is consistent:&lt;/p&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;More likely to cheapen&lt;/th&gt;&lt;th&gt;Harder to cheapen soon&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Tiny utilities, cleaner/settings shells, niche info sites&lt;/td&gt;&lt;td&gt;Vertical industry software, simulation stacks, long-lived pro tools&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Local, low-dependency personal utilities&lt;/td&gt;&lt;td&gt;Large cloud services + regulatory barriers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;”I can ship a hundred of these in a day” shells&lt;/td&gt;&lt;td&gt;Experience and edge cases built over years&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Portable line: &lt;strong&gt;model capability is the kill-line&lt;/strong&gt;—software everyone can write loses price power; complex, reliable, situated software still sells.&lt;/p&gt;
&lt;p&gt;Others remind: value always lived in product and service, not in a zip of code. Hardware + software bundles, production-hardened B2B polish, and willingness to maintain all push the moat outside “can AI write this.”&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Kill-line stratification&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-warp-self-improving-agents-02.Dj0dCBfQ_ZbkD1p.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;why-everyone-can-cook-yet-restaurants-thrive-fails-for-software&quot;&gt;Why “everyone can cook, yet restaurants thrive” fails for software&lt;/h2&gt;
&lt;p&gt;Skeptics love that analogy. The counter cuts the key difference: eating is a hard need; most software is not. Restaurants also sell not cooking, better taste, and social ritual. Software is often replaceable by “vibe one up for now.”&lt;/p&gt;
&lt;p&gt;The only durable parallel is paying for &lt;strong&gt;stability, taste, peace of mind, and trust&lt;/strong&gt;—and that is buying outcomes, not code.&lt;/p&gt;
&lt;h2 id=&quot;where-moats-move&quot;&gt;Where moats move&lt;/h2&gt;
&lt;p&gt;Nearly every strong reply points the same way:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Business and operations beat code&lt;/li&gt;
&lt;li&gt;Data + workflow + trust + domain depth + continuous learning replace feature stacking&lt;/li&gt;
&lt;li&gt;Long-term maintenance gets scarcer once building is easy&lt;/li&gt;
&lt;li&gt;Possible upside markets: software discovery, reviews, forks, API composition—scale still matters; not everyone must vibe from zero&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Earnings-report skeptics note pro software and AI software stocks still rise. Do not confuse &lt;strong&gt;commodity tools getting cheap&lt;/strong&gt; with the whole industry going to zero.&lt;/p&gt;
&lt;h2 id=&quot;our-endgame-customization-gets-cheap-too&quot;&gt;Our endgame: customization gets cheap too&lt;/h2&gt;
&lt;p&gt;Most of the thread argues about “is it cheap &lt;em&gt;now&lt;/em&gt;.” The more useful frame is end-state layers:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Feature layer:&lt;/strong&gt; notes, translation, CRUD, generic sites—swallowed by defaults.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customization layer:&lt;/strong&gt; project fees for requirement changes compress into chat with an agent; margins collapse.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Still scarce:&lt;/strong&gt; operated outcomes and who holds liability; distribution that picks safely and stays compliant; proprietary data and workflow memory you keep when you switch agents; physical world, licenses, supply chains.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Builder implication: stop selling “another app / another custom job.” Sell agent-ready capabilities, orchestration, SLAs, and services-shaped software—see &lt;a href=&quot;https://ssherun.github.io/en/blog/lovable-future-saas-agent-capabilities/&quot; class=&quot;wikilink&quot;&gt;SaaS as agent-usable capabilities&lt;/a&gt; and &lt;a href=&quot;https://ssherun.github.io/en/blog/software-engineering-splits-three/&quot; class=&quot;wikilink&quot;&gt;software engineering splits three ways&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;decision-checklist&quot;&gt;Decision checklist&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Is this below the kill-line? If yes, do not bet a standalone paid product on it.&lt;/li&gt;
&lt;li&gt;If you sell customization: assume the customer next year edits it with an agent—does your pricing still work?&lt;/li&gt;
&lt;li&gt;Prefer business loops, data flywheels, workflow memory, hardware/licenses, and provable maintenance liability.&lt;/li&gt;
&lt;li&gt;Shift the pitch from “we have features” to “we deliver outcomes that get cheaper as models improve.”&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Cheaper code does not erase value—&lt;strong&gt;value simply leaves implementation and bespoke change requests.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;related&quot;&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/judge-dev-ability-in-ai-era/&quot; class=&quot;wikilink&quot;&gt;When everyone uses AI, how do you judge a developer?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/lovable-future-saas-agent-capabilities/&quot; class=&quot;wikilink&quot;&gt;Future SaaS is agent-usable capabilities&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/software-engineering-splits-three/&quot; class=&quot;wikilink&quot;&gt;Software engineering splits three ways&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-economy-jobs-demand/&quot; class=&quot;wikilink&quot;&gt;AI economy and human jobs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>ChatGPT Improves Answers; Critical Thinking Widens Ideas</title><link>https://ssherun.github.io/en/blog/chatgpt-critical-thinking-students/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/chatgpt-critical-thinking-students/</guid><description>A 1,000-student RCT from Bocconi and OpenAI: AI raises polish; causal-reasoning training raises originality. Old rubrics miss half the signal.</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;OpenAI published a summary of a randomized experiment with Bocconi University: more than a thousand first-year students worked the same real marketing case, randomly assigned to ChatGPT access, causal-reasoning training, both, or neither.&lt;/p&gt;
&lt;p&gt;The finding is blunt and useful:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ChatGPT made answers better. Critical-thinking training made ideas broader. Together, the gains spanned the widest set of measures.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-the-experiment-measured&quot;&gt;What the experiment measured&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Desk, notebook, and thinking paths&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-openai-alien-mind-01.Ck5uZohR_1KGWqG.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;The assignment was a real business case: marketing recommendations for the university merchandise store—not a free-form essay.&lt;/p&gt;
&lt;p&gt;The critical-thinking arm was &lt;strong&gt;not&lt;/strong&gt; an AI prompting class. Students practiced causal reasoning—linking cause and effect, explaining why a solution might work and when it might fail—through a game, examples, questions, and feedback.&lt;/p&gt;
&lt;p&gt;Evaluation used two lenses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A human five-point rubric (focused on standard marketing goals such as awareness and store use)&lt;/li&gt;
&lt;li&gt;Automated text analysis: idea count and variety, traces of causal reasoning, and similarity to expert recommendations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That split is the point: it separates AI access from thinking training, and also tests the combination.&lt;/p&gt;
&lt;h2 id=&quot;ai-raises-looking-professional&quot;&gt;AI raises “looking professional”&lt;/h2&gt;
&lt;p&gt;Students with ChatGPT (GPT‑4o) scored almost a full point higher on the five-point scale. Their work had more ideas, clearer logic, and looked more like expert recommendations.&lt;/p&gt;
&lt;p&gt;In short: &lt;strong&gt;novices were lifted closer to professional-looking output.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Students still had to decide what to ask, what to keep, and what entered the final submission. AI compressed the cost of producing a coherent structure—it did not replace judgment.&lt;/p&gt;
&lt;p&gt;For personal workflows: treat the model as a &lt;strong&gt;polish and expansion engine&lt;/strong&gt;, and keep selection and decisions yours. Otherwise you only industrialize interchangeable, glossy answers.&lt;/p&gt;
&lt;h2 id=&quot;thinking-training-raises-being-distinct&quot;&gt;Thinking training raises “being distinct”&lt;/h2&gt;
&lt;p&gt;The critical-thinking group had a counterintuitive result: &lt;strong&gt;rubric scores did not clearly rise&lt;/strong&gt;, yet text analysis showed clearer “why it works / when it fails” explanations and a wider, more unique spread of ideas across peers.&lt;/p&gt;
&lt;p&gt;If the rubric cannot see originality, that does not mean there was no gain. Traditional rubrics reward clear structure aimed at standard KPIs and quietly miss &lt;strong&gt;the cut no one else made&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Branching lines of thought&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-chatgpt-critical-thinking-students-02.zgLDH3sA_Z1Eq4OE.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;That maps to a common AI-use failure mode: models pull you toward the safest, most conventional answer. Without causal chains and habit of questioning assumptions, outputs converge.&lt;/p&gt;
&lt;h2 id=&quot;not-a-trade-offcomplements&quot;&gt;Not a trade-off—complements&lt;/h2&gt;
&lt;p&gt;The both group:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Idea variety ≈ training-only&lt;/li&gt;
&lt;li&gt;Rubric scores and idea count ≈ ChatGPT-only&lt;/li&gt;
&lt;li&gt;Logical coherence, seeking explanations, questioning assumptions — stronger&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So the tired education binary—“think for yourself” versus “learn to use AI”—is the wrong frame. &lt;strong&gt;Do both, and upgrade how you measure.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-real-risk-grading-only-the-final-draft&quot;&gt;The real risk: grading only the final draft&lt;/h2&gt;
&lt;p&gt;Once AI makes polished, conventional answers cheap, &lt;strong&gt;final-answer quality tells you less about what a student actually understands.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Schools that score only “does this look like a good standard answer” will systematically reward what models can substitute and under-weight originality and reasoning process.&lt;/p&gt;
&lt;p&gt;The same logic hits companies and indie builders:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Add evaluation dimensions&lt;/strong&gt;: process assumptions, failure conditions, differentiated ideas—not just verbal polish.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Don’t only design human tabs&lt;/strong&gt;: interaction may converge into an AI layer, but capabilities still need to be callable and checkable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Personal stack&lt;/strong&gt;: causal reasoning plus saying things clearly remains the hard leverage—ask well, filter well, and the final draft is yours.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;one-line-to-keep&quot;&gt;One line to keep&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;AI helped students make their answers better. Critical-thinking training helped make their ideas broader.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Tools raise the waterline; training widens the map. Miss either side and you get homogeny or roughness. Practice both—that is the preparation this experiment actually argues for.&lt;/p&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://openai.com/index/what-students-gain-from-chatgpt-critical-thinking-training/&quot;&gt;OpenAI — What students gain from ChatGPT and critical-thinking training&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-era-clarity-matters/&quot; class=&quot;wikilink&quot;&gt;AI-era clarity: saying things clearly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/lovable-future-saas-agent-capabilities/&quot; class=&quot;wikilink&quot;&gt;Lovable CTO: SaaS as agent-usable capabilities&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-cannot-replace-human-experience/&quot; class=&quot;wikilink&quot;&gt;AI cannot replace human experience&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Why Code Search Makes Coding Agents So Expensive</title><link>https://ssherun.github.io/en/blog/why-code-search-agents-expensive/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/why-code-search-agents-expensive/</guid><description>Sonar&apos;s comparison on Turing Post: semantic code navigation cut agent cost 5–36%. The sharper question: did the agent find every site that needed to change?</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A coding agent is rarely told exactly where a change belongs. You give it the task; it has to find the code—search a name, open files, connect them, search again. &lt;strong&gt;A surprising share of time and tokens burns before a single line is written.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In a Sonar guest post on Turing Post, a controlled comparison pins this down: semantic code navigation cut cost by about &lt;strong&gt;5% to 36%&lt;/strong&gt;, and raises a harder question—did the agent find every place that needed to change?&lt;/p&gt;
&lt;h2 id=&quot;three-ways-text-search-fails&quot;&gt;Three ways text search fails&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Code graph and reference edges&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;991&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-native-saas-after-agent-hype-01.wQ_S5AJc_1Szzga.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;grep&lt;/code&gt; matches characters. When name hits roughly equal real edit sites, that is enough. When the ratio breaks, three causes show up:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Noise flood&lt;/strong&gt; — real sites plus hundreds of irrelevant same-name hits; the agent can only open matches one by one and spend budget ruling them out.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Structural links with no shared text&lt;/strong&gt; — interface implementations, indirection; the search string never appears near the target.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wrong same-name symbol&lt;/strong&gt; — overloads, shadowed fields; the text lines up, the identity does not.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The first and third mostly make agents &lt;strong&gt;slower and more expensive&lt;/strong&gt;. The second is different: miss a file on a simple rename and the build often breaks; miss code only linked by a behavior change and &lt;strong&gt;everything may still compile and pass tests&lt;/strong&gt;. Nobody wrote a test for a connection they did not know about. The bug ships later, somewhere that looks unrelated.&lt;/p&gt;
&lt;h2 id=&quot;treat-the-repo-as-a-graph&quot;&gt;Treat the repo as a graph&lt;/h2&gt;
&lt;p&gt;Answer those questions from a &lt;strong&gt;code graph&lt;/strong&gt;: classes, methods, fields, interfaces, plus calls, implements, extends, references—each pointing at exact file and line. Same idea as IDE “Find All References” / “Go to Implementation.”&lt;/p&gt;
&lt;p&gt;Sonar Vortex lets the agent ask via SonarQube CLI or an &lt;strong&gt;MCP server&lt;/strong&gt; and get exact locations instead of another name to search. The graph rebuilds without a compiler or language server, so mid-edit broken code stays usable. Roughly a thousand files: seconds to build, about a millisecond to update after a change, as local compute &lt;strong&gt;outside billed agent usage&lt;/strong&gt;. In the study it was added as an extra tool, not a swap for existing search.&lt;/p&gt;
&lt;h2 id=&quot;what-the-numbers-looked-like&quot;&gt;What the numbers looked like&lt;/h2&gt;
&lt;p&gt;Six tasks, four languages; real merged OSS commits as ground truth; prompts &lt;strong&gt;without&lt;/strong&gt; file names or line numbers; ten runs per side; a strong model at high effort; only runs that pass build and tests count.&lt;/p&gt;
&lt;p&gt;Cost drops included: Java interface change −36%, related package rename −20%, Python / C# cases about −20%, TypeScript −5%, Java argument-order fix −15% on the typical run.&lt;/p&gt;
&lt;p&gt;When finding code was not the bottleneck (build/test loops or sheer edit volume), cost stayed within a few percent either way—&lt;strong&gt;having the capability did not hurt&lt;/strong&gt;. Wins clustered where the same edit had to land on &lt;strong&gt;every implementor&lt;/strong&gt; of a shared interface or base class that text search could not list cleanly.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Agent discovery and cost variance&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-warp-self-improving-agents-02.Dj0dCBfQ_ZbkD1p.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;cheaper-is-not-the-only-point&quot;&gt;Cheaper is not the only point&lt;/h2&gt;
&lt;p&gt;A structural graph enumerates &lt;strong&gt;connected locations&lt;/strong&gt;, not textual matches. That is a different guarantee than “the tests passed.” Many teams adopting coding agents have not measured how much of an agent-driven refactor was verified complete versus assumed complete because nothing failed loudly.&lt;/p&gt;
&lt;p&gt;Same root cause, three seats:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Developer: the agent rereads files it already saw&lt;/li&gt;
&lt;li&gt;Eng leader: cost jumps between similar tasks with no clear trail&lt;/li&gt;
&lt;li&gt;Product: a late defect with no obvious origin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The open question is not only how fast a large refactor finishes—it is &lt;strong&gt;how you would know, concretely, that the agent found everything it needed to.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;takeaway&quot;&gt;Takeaway&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Give agents reference-grade navigation, not only grep. A green CI is not the same as a complete change.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://www.turingpost.com/p/why-code-search-makes-coding-agents-so-expensive&quot;&gt;Turing Post — Why Code Search Makes Coding Agents So Expensive&lt;/a&gt; (Sonar guest post)&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/coding-agents-reshape-epd/&quot; class=&quot;wikilink&quot;&gt;How Coding Agents Reshape Engineering, Product, and Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/lovable-future-saas-agent-capabilities/&quot; class=&quot;wikilink&quot;&gt;Lovable CTO: The Future of SaaS Is Apps That Agents Can Use&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/warp-self-improving-agents/&quot; class=&quot;wikilink&quot;&gt;Warp Self-Improving Agents and the RSI Boundary&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Will AI Shrink Total Jobs? Demand vs Productivity</title><link>https://ssherun.github.io/en/blog/ai-economy-jobs-demand/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/ai-economy-jobs-demand/</guid><description>A V2EX thread argues jobs track demand, not productivity — and human desire forever outruns AI. The comments tear into effective demand, prices and deflation.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A recent V2EX thread asked a question many people feel but few unpack cleanly: &lt;strong&gt;if we push AI hard, will total jobs in society shrink?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The OP’s answer is blunt: no. Not because of the slogan “AI creates new jobs,” but because of a near-accounting claim—&lt;strong&gt;jobs follow demand, not productivity.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Here is the distilled argument, plus where it helps and where it breaks.&lt;/p&gt;
&lt;h2 id=&quot;nail-the-definition-first&quot;&gt;Nail the definition first&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;AI 会不会让总岗位变少？一张表讲清生产力与需求 — overview&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1057&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-economy-jobs-demand-01.Dam08Jyp_Z2hwooF.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Productivity, in the post, means &lt;strong&gt;output per unit of time&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Raise productivity and one worker makes more stuff in the same hour. That immediately implies a counterintuitive point:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Higher productivity is not the direct cause of more jobs.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If one worker used to make 10 units per hour and you needed 10 workers, and later one worker makes 100, you only need one worker for the same demand. Headcount falls.&lt;/p&gt;
&lt;p&gt;So why did employment rise for so long as productivity rose?&lt;/p&gt;
&lt;p&gt;The OP’s move: don’t confuse sequence with causation. &lt;strong&gt;Jobs rise because demand rises.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;one-table-is-enough&quot;&gt;One table is enough&lt;/h2&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Output per worker&lt;/th&gt;&lt;th&gt;Demand&lt;/th&gt;&lt;th&gt;Jobs&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1 unit&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1 unit&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;10 units&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5 units&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Same productivity, 10× demand → 10× jobs. Same demand, 10× productivity → jobs cut to 1/10.&lt;/p&gt;
&lt;p&gt;Roughly:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jobs ≈ total demand / output per worker&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Jobs grow only when productivity growth &lt;strong&gt;fails to catch&lt;/strong&gt; demand growth. Hence the punchline:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Productivity growth cannot keep up with demand growth.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;why-does-demand-run-so-fast&quot;&gt;Why does demand run so fast?&lt;/h2&gt;
&lt;p&gt;Three engines in the post:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Population&lt;/strong&gt; — more people, more basics.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Desire&lt;/strong&gt; — from one village phone to latest phones plus chargers, tablets, laptops, ergonomic chairs… desire rarely saturates.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Social pressure&lt;/strong&gt; — when peers consume a lifestyle, opting out is costly.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Then the leap—a &lt;strong&gt;bold conjecture&lt;/strong&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Human demand growth forever outruns productivity growth.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If jobs track demand, and demand forever wins, AI will not shrink total jobs.&lt;/p&gt;
&lt;p&gt;The OP admits the whole proof hangs on that “forever.”&lt;/p&gt;
&lt;h2 id=&quot;the-sharpest-cuts-in-the-comments&quot;&gt;The sharpest cuts in the comments&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;AI 会不会让总岗位变少？一张表讲清生产力与需求 — detail&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-economy-jobs-demand-02.EBmCsUxt_Z1WOH6X.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Desire ≠ effective demand&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Can people afford their desires? If desire automatically became purchasing power, chronic deflation and overcapacity would be hard to explain. Money can be printed; &lt;strong&gt;distribution&lt;/strong&gt; still decides whose demand counts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Demand is a function of price&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Everyone may want a trip to the Moon, but price rations absurd wants. With fixed total capacity, unlimited &lt;em&gt;nominal&lt;/em&gt; desire does not become unlimited &lt;em&gt;payable&lt;/em&gt; demand.&lt;/p&gt;
&lt;p&gt;A useful amendment also showed up: higher productivity can &lt;em&gt;create&lt;/em&gt; demand by lowering prices.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. “Forever” struggles with multi-decade counterexamples&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Japan’s lost decades and post-pandemic deflation look like stretches where demand growth lagged productivity growth. Saying “people are still alive / unemployment didn’t explode” explains social survival, not that the mechanism held.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Aggregates can hold while structure still hurts&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Even if total employment doesn’t collapse, entry-level collapse, thinner apprenticeship paths, and a falling labor share can still hurt badly. Total jobs, job &lt;em&gt;structure&lt;/em&gt;, and income &lt;em&gt;distribution&lt;/em&gt; are three different layers. This thread mostly covers the first.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. A longer-horizon compromise&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pull the timeline out and you may get a boring equilibrium: AI does AI work, humans do human work, and humans keep some jobs simply because they remain &lt;strong&gt;cheaper than AI&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;a-more-useful-reading-for-builders&quot;&gt;A more useful reading for builders&lt;/h2&gt;
&lt;p&gt;You don’t need to pick “AI ends all work” or “demand always saves us.” Watch three things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Which layer of effective demand your product creates&lt;/strong&gt; — time saved, status, social belonging, entertainment, or new “wasteful” desires.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tools that only cut cost without expanding demand squeeze peers&lt;/strong&gt;; tools that unlock new payable scenes expand the pie.&lt;/li&gt;
&lt;li&gt;When debating AI and jobs, separate &lt;strong&gt;totals / structure / distribution&lt;/strong&gt;. Mixing them produces noise.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Keep the table. At minimum it stops you from translating “productivity ↑” directly into “jobs ↑” or “jobs ↓.” The real fight is whether demand—and &lt;em&gt;whose&lt;/em&gt; demand—can keep up.&lt;/p&gt;
&lt;h2 id=&quot;source&quot;&gt;Source&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Thread: &lt;a href=&quot;https://www.v2ex.com/t/1238008&quot;&gt;AI economy and the basics of human jobs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-cannot-replace-human-experience/&quot; class=&quot;wikilink&quot;&gt;AI cannot replace lived experience&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-organization-redesign/&quot; class=&quot;wikilink&quot;&gt;AI made people faster. Why not the company?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-era-clarity-matters/&quot; class=&quot;wikilink&quot;&gt;The scarcest skill in the AI era: saying it clearly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-proof-human/&quot; class=&quot;wikilink&quot;&gt;When a 45-year-old paper is flagged as AI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>What Self-Improving Agents Actually Improve: Warp vs OpenAI</title><link>https://ssherun.github.io/en/blog/warp-self-improving-agents/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/warp-self-improving-agents/</guid><description>Warp’s two-skill feedback loop is shippable; OpenAI’s shared-memory incident is not proven RSI. Skills compound from human labels—not weight updates.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Three recent pieces land cleaner when read together. People say “self-improving,” but they often mean different mechanisms.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Anthropic × Warp: a &lt;strong&gt;base skill + improver skill + human feedback&lt;/strong&gt; loop that compounds code-review quality.&lt;/li&gt;
&lt;li&gt;Baoyu’s take: what evolves is the &lt;strong&gt;Skill file&lt;/strong&gt;, not the model “getting smarter” by itself.&lt;/li&gt;
&lt;li&gt;Turing Post on OpenAI’s escape incident: does cross-run &lt;strong&gt;shared memory&lt;/strong&gt; count as recursive self-improvement (RSI)?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Bottom line:&lt;/strong&gt; ship the controllable Skills feedback loop. Do not market unproven RSI.&lt;/p&gt;
&lt;h2 id=&quot;the-loop-in-one-diagram&quot;&gt;The loop in one diagram&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Agent improves Skills from human feedback&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-warp-self-improving-agents-diagram.BMXTN8W7_ZLzbv.webp&quot;&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Base skill runs the job&lt;/li&gt;
&lt;li&gt;Agent produces output (PR comments, labels)&lt;/li&gt;
&lt;li&gt;Humans annotate where they already work&lt;/li&gt;
&lt;li&gt;Improver skill periodically harvests feedback&lt;/li&gt;
&lt;li&gt;Base skill updates via reviewable PR → next run is better&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;The agent improves the Skill from human feedback&lt;/strong&gt;—procedural files, not weights.&lt;/p&gt;
&lt;h2 id=&quot;warps-real-bug-feedback-evaporates&quot;&gt;Warp’s real bug: feedback evaporates&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Overview&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-warp-self-improving-agents-01.WQ1aqC78_Z2fWiIR.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;First-pass review agents are often “mostly useful” and still noisy. Session ends, corrections vanish. Manual prompt rewrites and &lt;code&gt;AGENTS.md&lt;/code&gt; patches do not scale, and high-quality human PR comments never re-enter the loop.&lt;/p&gt;
&lt;p&gt;Warp’s fix is boring in the best way: inner skill executes, outer improver observes on a schedule, humans supply signal in-place, updates ship as PRs. Skills are plain files; agents are good at editing files; merge keeps a person on the wheel.&lt;/p&gt;
&lt;h2 id=&quot;practices-worth-copying&quot;&gt;Practices worth copying&lt;/h2&gt;
&lt;p&gt;Write principles, not brittle rules. Explain &lt;em&gt;why&lt;/em&gt;. Capture feedback with near-zero friction. Keep skills small with progressive disclosure. Prefer dense expert signal over thumbs. Template the improver so domain skills can share one observer pattern.&lt;/p&gt;
&lt;p&gt;Also keep Warp’s FAQ distinctions: &lt;strong&gt;Skills ≠ Memory&lt;/strong&gt;; assume some feedback is wrong; build a verification harness when the domain is checkable.&lt;/p&gt;
&lt;h2 id=&quot;baoyus-warning-no-standard--negative-optimization&quot;&gt;Baoyu’s warning: no standard → negative optimization&lt;/h2&gt;
&lt;p&gt;Self-evolving &lt;em&gt;writing&lt;/em&gt; skills often get worse. Decompiler skills can grow usefully—and also grow too fat. Open the loop only where you can verify outputs or gate merges with domain experts.&lt;/p&gt;
&lt;h2 id=&quot;openais-blackboard-stronger-system-not-proven-rsi&quot;&gt;OpenAI’s blackboard: stronger system, not proven RSI&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Detail&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-warp-self-improving-agents-02.Dj0dCBfQ_ZbkD1p.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Agents posted to shared Artifactory: notes, scripts, even anti-impersonation talk. Later runs reused earlier finds. That looks like a blackboard / stigmergic pattern. Classical RSI needs improving the process that produces a stronger successor (weights, training algorithm, successor design). Public evidence does not show that.&lt;/p&gt;
&lt;p&gt;The missing fact: did trajectories that &lt;em&gt;used&lt;/em&gt; the board enter later training updates? Until disclosed, call it &lt;strong&gt;accumulating external memory&lt;/strong&gt;, not confirmed RSI.&lt;/p&gt;
&lt;h2 id=&quot;what-to-build&quot;&gt;What to build&lt;/h2&gt;
&lt;p&gt;For a personal or small-team agent stack: one base skill per recurring job, one scheduled improver, feedback in existing channels, human review on diffs, no auto-merge for taste-heavy domains. File-based agent systems already store knowledge as text—the missing piece is turning human corrections into the next Skill diff.&lt;/p&gt;
&lt;h2 id=&quot;sources&quot;&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://claude.com/blog/how-warp-builds-self-improving-agents-on-claude&quot;&gt;How Warp builds self-improving agents on Claude&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://baoyu.io/blog/2026-08-28/warp-self-improving-agents&quot;&gt;Baoyu on Warp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.turingpost.com/p/did-openai-s-agents-start-recursively-self-improving&quot;&gt;Turing Post FOD#162&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/agent-skills-five-design-patterns/&quot; class=&quot;wikilink&quot;&gt;Five design patterns for Agent Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/anthropic-skills-lessons/&quot; class=&quot;wikilink&quot;&gt;Anthropic lessons on Claude Code Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/kdc-knowledge-engineering-not-files/&quot; class=&quot;wikilink&quot;&gt;KDC: knowledge engineering is not files&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/hello-world/&quot; class=&quot;wikilink&quot;&gt;An agent-friendly blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Lovable CTO: SaaS&apos;s Future Is Capabilities Agents Can Call</title><link>https://ssherun.github.io/en/blog/lovable-future-saas-agent-capabilities/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/lovable-future-saas-agent-capabilities/</guid><description>Lovable is shifting from app generation to MCP capabilities. CTO Fabian Hedin on the company brain, dual interfaces, and why SaaS must build shovels for AI.</description><pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Lovable became famous for generating web apps from natural language.&lt;/p&gt;
&lt;p&gt;But in a recent Latent Space interview, CTO Fabian Hedin described a counterintuitive direction: &lt;strong&gt;Lovable is preparing for a world where fewer people open conventional apps at all.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Apps aren’t dying. Entry points are consolidating.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Abstract network of AI and SaaS capabilities&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;991&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-native-saas-after-agent-hype-01.wQ_S5AJc_1Szzga.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;one-app-two-interfaces&quot;&gt;One app, two interfaces&lt;/h2&gt;
&lt;p&gt;Lovable now exposes selected functions from published apps as tools through a &lt;strong&gt;hosted MCP server&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;They call these &lt;strong&gt;capabilities&lt;/strong&gt; — useful parts of an application that an agent can invoke directly, without a human opening the UI.&lt;/p&gt;
&lt;p&gt;The result is a classic dual-entry design:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Human entry&lt;/strong&gt;: traditional UI&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent entry&lt;/strong&gt;: MCP tools callable from ChatGPT, Claude, and other MCP clients&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This mirrors the &lt;a href=&quot;https://ssherun.github.io/en/blog/dual-entry-human-agent-design/&quot; class=&quot;wikilink&quot;&gt;LibTV canvas + Agent Skills pattern&lt;/a&gt;, except Lovable packages capabilities at the &lt;strong&gt;MCP layer&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;what-users-built-in-three-years&quot;&gt;What users built in three years&lt;/h2&gt;
&lt;p&gt;Lovable started as the open-source GPT Engineer project in 2023 and rebranded in late 2024. Hedin attributes the pace to compounding forces:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;New application-layer capabilities every few months&lt;/li&gt;
&lt;li&gt;Continuously improving LLMs&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The user journey evolved clearly:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prototype → MVP → real paying product → internal operations software&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That last bucket includes CRMs, admin panels, and support consoles — not just customer-facing products, but &lt;strong&gt;the operational layer behind the company&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The numbers are striking (Aug 2026): &lt;strong&gt;$500M+&lt;/strong&gt; ARR run rate, &lt;strong&gt;60M+&lt;/strong&gt; projects, nearly &lt;strong&gt;two-thirds of Fortune 500&lt;/strong&gt; employees have used the platform. Menlo just led a &lt;strong&gt;$400M&lt;/strong&gt; Series C at a &lt;strong&gt;$13.3B&lt;/strong&gt; valuation.&lt;/p&gt;
&lt;h2 id=&quot;the-company-brain-one-entry-point-for-all-work&quot;&gt;The company brain: one entry point for all work&lt;/h2&gt;
&lt;p&gt;Lovable’s vision is a &lt;strong&gt;digital brain for your team&lt;/strong&gt; — a single interface for daily tools and workflows.&lt;/p&gt;
&lt;p&gt;It needs two things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;As much context as possible&lt;/strong&gt; about you, your company, and the world around you&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Capabilities&lt;/strong&gt; for both general tasks and organization-specific actions&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Hedin’s line: &lt;strong&gt;“Everything you’re building can be reused in an agentic way.”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The platform’s job isn’t to make you build a separate agent for every task. It’s to &lt;strong&gt;connect all capabilities through one agent&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Internal example: a support tool for granting user credits and managing the platform — those capabilities are now callable through Lovable’s internal agent. The agent can also &lt;strong&gt;schedule itself asynchronously&lt;/strong&gt;: check a deployment later, then return results to the same conversation.&lt;/p&gt;
&lt;h2 id=&quot;competition-orchestration-is-easy-connection-is-hard&quot;&gt;Competition: orchestration is easy, connection is hard&lt;/h2&gt;
&lt;p&gt;Vercel’s &lt;code&gt;@v&lt;/code&gt;, v0, Cloudflare’s agent workflows — everyone is chasing the company brain.&lt;/p&gt;
&lt;p&gt;Hedin thinks Lovable’s wedge is &lt;strong&gt;being the best place to build the capabilities agents need&lt;/strong&gt;. Orchestration is the easy part. &lt;strong&gt;Connecting correctly, building reliably, and making capabilities reusable&lt;/strong&gt; is the hard part.&lt;/p&gt;
&lt;p&gt;He is careful about the word “agent.” On the surface it sounds like an employee performing a task. Underneath, it’s really about &lt;strong&gt;connecting the right context and capabilities&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;security-connectors-and-the-permissioning-graph&quot;&gt;Security: connectors and the permissioning graph&lt;/h2&gt;
&lt;p&gt;When agents call capabilities directly, the biggest risk is &lt;strong&gt;over-permissioning&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Example: an employee builds a Lovable app connected to company Slack. Personal DMs or confidential channels must not leak into the company brain.&lt;/p&gt;
&lt;p&gt;Lovable uses &lt;strong&gt;connectors&lt;/strong&gt; for external systems. The core pattern is the &lt;strong&gt;app user connector&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Preserves each user’s identity and source-system permissions&lt;/li&gt;
&lt;li&gt;Credentials stored &lt;strong&gt;server-side, encrypted&lt;/strong&gt;, managed by Lovable’s connector gateway&lt;/li&gt;
&lt;li&gt;Generated apps receive only &lt;strong&gt;short-lived, user-bound keys&lt;/strong&gt; — &lt;strong&gt;never raw credentials&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;“We separate the connection to external systems from the application code being written. The app interfaces with the Lovable platform, but the app itself never gets access to those credentials.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That requires a &lt;strong&gt;permissioning graph&lt;/strong&gt; — who can invoke which capability in which context.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Enterprise software and agent connector security architecture&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-warp-self-improving-agents-02.Dj0dCBfQ_ZbkD1p.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;will-saas-disappear&quot;&gt;Will SaaS disappear?&lt;/h2&gt;
&lt;p&gt;Hedin’s take is pragmatic:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Humans will interact with software through an &lt;strong&gt;AI layer&lt;/strong&gt; more and more&lt;/li&gt;
&lt;li&gt;People won’t keep as many tabs open, but &lt;strong&gt;vertical capabilities remain valuable&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Some traditional SaaS products will resist the trend and stick with legacy UIs&lt;/li&gt;
&lt;li&gt;Lovable wants an &lt;strong&gt;open platform&lt;/strong&gt; anyone can connect to and use&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One line of advice for SaaS companies:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“SaaS businesses are going to have to focus more on providing the shovel for AI to use their capabilities.”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Dashboards for humans aren’t enough. &lt;strong&gt;Agent-callable, reliable capabilities&lt;/strong&gt; must be first-class.&lt;/p&gt;
&lt;h2 id=&quot;what-this-means-for-builders&quot;&gt;What this means for builders&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Design agent interfaces on day one&lt;/strong&gt; — MCP/tools, not as an afterthought&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Atomize capabilities&lt;/strong&gt; — grant credits, look up orders, change config; each action should be its own capability&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Separate credentials from generated code&lt;/strong&gt; — apps shouldn’t hold long-lived API keys&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Orchestration will commoditize; reliable capabilities are the moat&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The future of SaaS may not be “another better tab.” It may be &lt;strong&gt;making your vertical capabilities a Lego block in someone else’s company brain&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href=&quot;https://www.latent.space/p/lovable-future-of-saas&quot;&gt;Lovable CTO: The Future of SaaS Is Apps That Agents Can Use&lt;/a&gt; · Latent Space (Aug 26, 2026)&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title>Zero-Cost Cold Start: 10 Methods from AFFiNE&apos;s Co-Founder</title><link>https://ssherun.github.io/en/blog/overseas-product-zero-cost-cold-start/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/overseas-product-zero-cost-cold-start/</guid><description>HeyGen ran 1,800 user interviews via a Fiverr video studio; Lark SEA got 30 of 50 early customers from LinkedIn DMs. Ten zero-cost ways to find early users.</description><pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;People keep asking me: how do you cold-start?&lt;/p&gt;
&lt;p&gt;The most effective approach costs nothing.&lt;/p&gt;
&lt;p&gt;This isn’t something only broke founders do. It’s what people who truly understand how PMF happens actually do. AFFiNE co-founder Iris shared two years of overseas go-to-market experience on a podcast: 1,000 GitHub stars in 72 hours after open-sourcing, 10,000 in 43 days, users across 200+ countries. Here are her core cold-start methods.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Global entrepreneurs connecting on a digital map&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;991&quot; src=&quot;https://ssherun.github.io/_astro/inline-overseas-product-zero-cost-cold-start-01.NzpCOaPl_Z2ujXWz.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;two-cases-that-wake-you-up&quot;&gt;Two Cases That Wake You Up&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;HeyGen’s early days:&lt;/strong&gt; they opened a “video studio” on Fiverr — and used it to run &lt;strong&gt;1,800 user interviews&lt;/strong&gt;. 1,800.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lark in Southeast Asia:&lt;/strong&gt; of the Malaysia team’s first 50 customers, 30 came from LinkedIn DMs. Not ads. Not KOLs. Twenty manual messages a day.&lt;/p&gt;
&lt;p&gt;The lesson: cold start isn’t waiting for users. It’s going out to talk to people.&lt;/p&gt;
&lt;h2 id=&quot;10-zero-cost-ways-to-get-early-users&quot;&gt;10 Zero-Cost Ways to Get Early Users&lt;/h2&gt;
&lt;h3 id=&quot;1-your-own-network&quot;&gt;1. Your Own Network&lt;/h3&gt;
&lt;p&gt;Get over the awkwardness. Ask people you already know. Your first users are often in your contacts.&lt;/p&gt;
&lt;h3 id=&quot;2-dm-competitor-followers&quot;&gt;2. DM Competitor Followers&lt;/h3&gt;
&lt;p&gt;People following competitors on Twitter or LinkedIn are potential users. They’re already interested in the category.&lt;/p&gt;
&lt;h3 id=&quot;3-linkedin-micro-targeting&quot;&gt;3. LinkedIn Micro-Targeting&lt;/h3&gt;
&lt;p&gt;Target regular people, not influencers. An influencer’s inbox has 100 unread messages; a regular person’s might have one — reply rates are completely different.&lt;/p&gt;
&lt;h3 id=&quot;4-reddit-keyword-search&quot;&gt;4. Reddit Keyword Search&lt;/h3&gt;
&lt;p&gt;Search for pain points you solve, then reply with genuine value. Pro tip: lurk for 1-2 weeks before posting. Reddit has real users, hard to buy traffic, but trust is durable once earned.&lt;/p&gt;
&lt;h3 id=&quot;5-hacker-news-show-hn&quot;&gt;5. Hacker News Show HN&lt;/h3&gt;
&lt;p&gt;A lottery ticket — hit the front page and you get hundreds of stars. Don’t rely on it alone, but worth trying.&lt;/p&gt;
&lt;h3 id=&quot;6-product-hunt&quot;&gt;6. Product Hunt&lt;/h3&gt;
&lt;p&gt;ROI is declining, but new products can still try. Category matters — tech audiences bring real users; non-tech can still get a ranking boost.&lt;/p&gt;
&lt;h3 id=&quot;7-fiverr--upwork&quot;&gt;7. Fiverr / Upwork&lt;/h3&gt;
&lt;p&gt;Spend a little to hire people for research and contact finding. HeyGen’s 1,800 interviews came from this path.&lt;/p&gt;
&lt;h3 id=&quot;8-events&quot;&gt;8. Events&lt;/h3&gt;
&lt;p&gt;Meetups, hackathons, online or offline. Five minutes face-to-face beats 100 DMs.&lt;/p&gt;
&lt;h3 id=&quot;9-complementary-product-partnerships&quot;&gt;9. Complementary Product Partnerships&lt;/h3&gt;
&lt;p&gt;Find projects with overlapping but non-competing users. Cross-promote at zero cost. Both sides win because incremental users cost nothing.&lt;/p&gt;
&lt;h3 id=&quot;10-cold-email&quot;&gt;10. Cold Email&lt;/h3&gt;
&lt;p&gt;Personalize. Show you’ve read their content. Mass templates = spam.&lt;/p&gt;
&lt;h2 id=&quot;execution-combine-dont-spray&quot;&gt;Execution: Combine, Don’t Spray&lt;/h2&gt;
&lt;p&gt;Don’t look “busy” across 8 platforms simultaneously. Pick 3-5 methods and execute.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;10 messages with no reply? The method isn’t wrong — your &lt;strong&gt;sample size is too small&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Send 100, then go deep with 5 people&lt;/li&gt;
&lt;li&gt;Define your first wave of paying-intent users, find where they hang out, go there&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Same principle as &lt;a href=&quot;https://ssherun.github.io/en/blog/first-principles-startup-review/&quot; class=&quot;wikilink&quot;&gt;first-principles startup review&lt;/a&gt;: don’t cast a wide net — go all-in on one channel to get your first 100 paying users.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;One-on-one user interviews and growth funnel&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1058&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-native-saas-after-agent-hype-02.Ckg7QY7k_2kupig.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-hidden-community-cold-start-trick&quot;&gt;The Hidden Community Cold-Start Trick&lt;/h2&gt;
&lt;p&gt;Iris shared something easy to miss: &lt;strong&gt;strangers in a community don’t talk to each other.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The fix: have a real person (support) DM new members — thank them for joining, share a guide and useful links, offer help anytime. If someone chats 5-6 screens with support, schedule a meeting. Trust in the person transfers to trust in the product, and they start speaking up in the community.&lt;/p&gt;
&lt;h2 id=&quot;three-mindsets-for-small-overseas-teams&quot;&gt;Three Mindsets for Small Overseas Teams&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;First, aesthetics differ wildly by country.&lt;/strong&gt; toC products need real localization, not just translation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Second, before $1M ARR, focus on toC + PLG.&lt;/strong&gt; Get VOC (voice of customer) through organic growth — listen to needs, don’t show muscle.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Third, not knowing overseas channels is the biggest trap.&lt;/strong&gt; Twitter, Reddit, Medium, Hacker News, Discord, Slack, Telegram are all mature. Lurk in competitor communities and study their playbooks frame by frame.&lt;/p&gt;
&lt;h2 id=&quot;there-is-no-shortcut--and-thats-the-shortcut&quot;&gt;There Is No Shortcut — and That’s the Shortcut&lt;/h2&gt;
&lt;p&gt;Combine 3-5 methods. Send 100 DMs. Go deep with 5 people.&lt;/p&gt;
&lt;p&gt;Most people hear “there’s no shortcut” and immediately go looking for one anyway. That’s the information asymmetry — the people actually willing to do the work are fewer than you think.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&quot;https://www.xiaoyuzhoufm.com/episode/6703a38081cdab3a933cdfec&quot;&gt;Cyber Island Vol 14 · Interview with AFFiNE Co-Founder Iris (Part 1)&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Vibe-Coding Hangover: Cloudflare Locks Workers by Default</title><link>https://ssherun.github.io/en/blog/cloudflare-workers-access-vibe-coded-apps/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/cloudflare-workers-access-vibe-coded-apps/</guid><description>AI lets anyone ship to the public Internet, and keeps CISOs awake. Access for Workers attaches policy to the Worker itself and defaults accounts to private.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;AI has made it trivial for PMs, designers, and ops folks to vibe-code an internal tool and deploy it to the public Internet. Fast iteration is great. Accidentally exposing half-baked apps or company data is not.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.cloudflare.com/workers-protected-by-access/&quot;&gt;Cloudflare’s announcement&lt;/a&gt; — &lt;strong&gt;Access for Workers&lt;/strong&gt; — is basically: &lt;strong&gt;attach your company login gate to the Worker, not to every developer’s memory.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-old-pain-you-locked-hostnames-not-apps&quot;&gt;The old pain: you locked hostnames, not apps&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Locking internal apps&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-cloudflare-workers-access-vibe-coded-apps-01.BLYNxJ43_ZXCfh8.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Previously, Cloudflare Access lived at the &lt;strong&gt;hostname&lt;/strong&gt; level. Every custom domain, route, workers.dev subdomain, and preview URL needed its own policy. Add a domain and forget to update Access? &lt;strong&gt;Wide open.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Preview URLs are the worst offender — each deploy can mint a new URL, and the faster you ship, the more leak windows you create.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Zero-trust access boundary&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-cloudflare-workers-access-vibe-coded-apps-03.C5YUiThY_DKH3O.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-new-model-policy-follows-the-worker&quot;&gt;The new model: policy follows the Worker&lt;/h2&gt;
&lt;p&gt;You can now bind Access &lt;strong&gt;directly to a Worker&lt;/strong&gt; (or flip a account-wide default):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Doesn’t matter how traffic arrives — custom domain, route, workers.dev, preview — &lt;strong&gt;authenticate first, then hit your code&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Protect &lt;strong&gt;preview only&lt;/strong&gt;, or &lt;strong&gt;every hostname&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Account-wide private by default&lt;/strong&gt; for all current and future Workers; bypass per Worker when something should stay public&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Priority: &lt;strong&gt;hostname &gt; Worker &gt; account&lt;/strong&gt; (most specific wins).&lt;/p&gt;
&lt;h2 id=&quot;what-developers-should-care-about-ctxaccess&quot;&gt;What developers should care about: &lt;code&gt;ctx.access&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Before: parse JWTs, verify signatures, extract claims yourself. Now, with Access enabled, every authenticated request carries &lt;code&gt;ctx.access&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; default&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  async&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; fetch&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;request&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;env&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;ctx.access) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Response&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Access required&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, { status: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;403&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; identity&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; ctx.access.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;getIdentity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; email&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; identity?.email &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;unknown&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Response&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;`Hello, ${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;email&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Get &lt;code&gt;email&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;, and &lt;code&gt;groups&lt;/code&gt; for personalization, authorization, or audit. Agents can use &lt;strong&gt;service tokens&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Local dev doesn’t require deploy-and-sign-in every time — mock identity in &lt;code&gt;wrangler.jsonc&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;access&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;dev&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;aud&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;my-app&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;identity&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: { &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;email&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;admin@company.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;internal-platforms-one-lock-on-the-dispatch-worker&quot;&gt;Internal platforms: one lock on the dispatch Worker&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Edge workers and identity&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1251&quot; src=&quot;https://ssherun.github.io/_astro/inline-cloudflare-workers-access-vibe-coded-apps-02.CJFzXsYM_11gCAa.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;With &lt;strong&gt;Workers for Platforms&lt;/strong&gt;, set Access once on the &lt;strong&gt;dispatch Worker&lt;/strong&gt; and every app in the namespace is private by default. Cloudflare open-sourced &lt;a href=&quot;https://github.com/cloudflare/templates/tree/main/internal-sites-template&quot;&gt;internal-sites-template&lt;/a&gt; — drag-and-drop deploys that stay behind login. Good fit for “everyone can vibe, not everyone gets the public Internet.”&lt;/p&gt;
&lt;h2 id=&quot;why-this-shipped-now-fl2&quot;&gt;Why this shipped now: FL2&lt;/h2&gt;
&lt;p&gt;This isn’t just product packaging. In the old stack (FL1, NGINX + Lua), Access ran before Worker logic. Targeting individual Workers required splitting &lt;strong&gt;routing from execution&lt;/strong&gt; — risky when products share mutable pipeline state.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FL2&lt;/strong&gt;, Cloudflare’s Rust-based modular edge proxy, uses strict phased modules with compile-time dependency checks. That made Worker-scoped Access a safe, gradual rollout instead of a scary NGINX surgery.&lt;/p&gt;
&lt;h2 id=&quot;practical-playbook&quot;&gt;Practical playbook&lt;/h2&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Scenario&lt;/th&gt;&lt;th&gt;Suggestion&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Company-wide internal vibe tools&lt;/td&gt;&lt;td&gt;Account default private; bypass only public production sites&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Preview leaks only&lt;/td&gt;&lt;td&gt;Lock previews; keep production hostnames open&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Solo side project, team-only beta&lt;/td&gt;&lt;td&gt;Single Worker + IdP — cheaper than rolling OAuth&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Agents / automation&lt;/td&gt;&lt;td&gt;Service tokens&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;bottom-line&quot;&gt;Bottom line&lt;/h2&gt;
&lt;p&gt;Vibe coding removed the “who can deploy” barrier. &lt;strong&gt;Secure-by-default&lt;/strong&gt; has to move at product speed, not developer discipline. Access for Workers upgrades zero trust from “configure hostnames” to “configure apps” — a real ops win for anyone on Workers/Pages.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/cloudflare-access/&quot;&gt;Cloudflare Access for Workers&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/hello-world/&quot; class=&quot;wikilink&quot;&gt;An agent-friendly blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/cli-ai-revival/&quot; class=&quot;wikilink&quot;&gt;CLI: the command-line revival in the AI era&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/self-host-mail-server-local-llm-antispam/&quot; class=&quot;wikilink&quot;&gt;Self-host a mail server in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/x-3-open-source-tools-autoclip-cloud-mail-open-lovable/&quot; class=&quot;wikilink&quot;&gt;Three open-source tools from X&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>DeepSeek Engram: conditional memory as a new sparsity axis</title><link>https://ssherun.github.io/en/blog/deepseek-engram-conditional-memory/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/deepseek-engram-conditional-memory/</guid><description>DeepSeek Engram adds O(1) lookup for the conditional memory MoE never had. At equal parameter and compute budget, reasoning gains more than rote knowledge.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;DeepSeek’s &lt;a href=&quot;https://arxiv.org/abs/2601.07372&quot;&gt;Engram&lt;/a&gt; paper is unusually direct: MoE solved &lt;em&gt;conditional compute&lt;/em&gt;, but Transformers still lack a native &lt;em&gt;knowledge lookup&lt;/em&gt; primitive. A lot of early layers spend FLOPs pretending to be a table. &lt;strong&gt;Conditional memory&lt;/strong&gt; is the missing axis.&lt;/p&gt;
&lt;p&gt;Code is open: &lt;a href=&quot;https://github.com/deepseek-ai/Engram&quot;&gt;deepseek-ai/Engram&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;language-is-two-jobs&quot;&gt;Language is two jobs&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;MoE and conditional memory architecture&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-deepseek-engram-conditional-memory-01.ArJC2GVw_Z2fzula.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Language modeling does at least two different things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Compositional reasoning&lt;/strong&gt; — needs deep, dynamic compute&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local / static patterns&lt;/strong&gt; — entity names, stock phrases, fixed collocations. More dictionary than differential equation&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Classic n-grams still work because the second class is a natural &lt;strong&gt;O(1) lookup&lt;/strong&gt;. A standard Transformer has no lookup primitive, so it stacks Attention and FFNs to &lt;em&gt;rebuild a static table at runtime&lt;/em&gt;. Expensive, and it burns depth.&lt;/p&gt;
&lt;p&gt;Engram’s stance:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Conditional compute (MoE)&lt;/strong&gt;: activate experts on demand&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conditional memory (Engram)&lt;/strong&gt;: look up static embeddings from local context&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Complementary, not substitutes.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Conditional memory retrieval paths&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-deepseek-engram-conditional-memory-03.D5kiMR1m_Z16g9Pk.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;how-engram-works&quot;&gt;How Engram works&lt;/h2&gt;
&lt;p&gt;The module is four steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Tokenizer compression&lt;/strong&gt;: normalize equivalent tokens (case, NFKC, etc.) to raise semantic density (the paper says a 128k vocab effectively shrinks ~23%).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-head hashing&lt;/strong&gt;: multi-order n-grams plus several hash heads fetch embeddings, avoiding a combinatorial explosion of explicit parameters.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context gating&lt;/strong&gt;: current hidden state as Query, static memory as Key/Value. If the semantics do not align, the gate closes — collisions and polysemy get suppressed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Short causal conv + residual&lt;/strong&gt;: fuse back into the trunk. The module is inserted only at selected layers (layers 2 and 15 in the experiments), which also leaves a compute window for system-level prefetch.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The design that matters: &lt;strong&gt;the retrieval address is a deterministic function of token IDs&lt;/strong&gt;. Unlike MoE, it does not route on a runtime hidden state. At inference you can park a huge table in host memory, prefetch asynchronously, and overlap with the first few layers. The paper claims ~100B-parameter tables offloaded with &amp;#x3C;3% overhead. That is a real cost story: not every parameter has to live in HBM.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Engineering trade-offs that matter&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-deepseek-engram-conditional-memory-04.B9jiItND_Z1Chsi7.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;how-to-split-the-sparsity-budget-a-u-shaped-law&quot;&gt;How to split the sparsity budget: a U-shaped law&lt;/h2&gt;
&lt;p&gt;Hold total parameters and activated FLOPs fixed. How much idle sparse budget goes to MoE experts vs Engram tables?&lt;/p&gt;
&lt;p&gt;The result is a stable &lt;strong&gt;U-shape&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;All MoE (ρ=1): the model is forced to &lt;em&gt;compute&lt;/em&gt; static patterns&lt;/li&gt;
&lt;li&gt;All memory: you starve dynamic reasoning&lt;/li&gt;
&lt;li&gt;Optimum around &lt;strong&gt;ρ ≈ 75%–80%&lt;/strong&gt; — move about 20%–25% of the sparse budget to Engram&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If memory can grow without bound, larger tables give a log-linear drop in validation loss. Memory is an independently scalable axis that barely adds per-token FLOPs.&lt;/p&gt;
&lt;h2 id=&quot;large-model-results-reasoning-rises-more-than-youd-expect&quot;&gt;Large-model results: reasoning rises more than you’d expect&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;N-gram lookup and sparse compute&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-deepseek-engram-conditional-memory-02.1i4QS-tU_Z13Wn0V.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Strict comparison at 262B tokens, ~3.8B activated:&lt;/p&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Model&lt;/th&gt;&lt;th&gt;Total params&lt;/th&gt;&lt;th&gt;Engram&lt;/th&gt;&lt;th&gt;Notes&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;MoE-27B&lt;/td&gt;&lt;td&gt;26.7B&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;72 routed experts&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Engram-27B&lt;/td&gt;&lt;td&gt;26.7B&lt;/td&gt;&lt;td&gt;5.7B&lt;/td&gt;&lt;td&gt;experts 72→55, ρ≈74%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Engram-40B&lt;/td&gt;&lt;td&gt;39.5B&lt;/td&gt;&lt;td&gt;18.5B&lt;/td&gt;&lt;td&gt;same activation, bigger table&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Engram-27B vs MoE-27B (same params, same FLOPs), selected gains:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Knowledge: MMLU +3.0, CMMLU +4.0&lt;/li&gt;
&lt;li&gt;Reasoning: BBH +5.0, ARC-Challenge +3.7, DROP +3.3&lt;/li&gt;
&lt;li&gt;Code / math: HumanEval +3.0, MATH +2.4, GSM8K +2.2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A memory module “should” help memorization. The larger lifts show up in reasoning and code. The mechanistic story: early layers drop the job of rebuilding static patterns, which is equivalent to &lt;em&gt;deepening the effective net&lt;/em&gt; for hard reasoning. Once local dependence is a lookup, attention can watch the global picture.&lt;/p&gt;
&lt;p&gt;At 32k context the gap gets louder:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multi-Query NIAH: 84.2 → &lt;strong&gt;97.0&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Variable Tracking: 77.0 → &lt;strong&gt;89.0&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-product-people-should-take&quot;&gt;What product people should take&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The sparsity story upgrades&lt;/strong&gt;: the next frontier sparse models are likely &lt;em&gt;experts + memory tables&lt;/em&gt;, not just a bigger MoE.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A budget heuristic&lt;/strong&gt;: at the same scale, giving ~1/5–1/4 of idle parameter budget to static memory often beats dumping it all on experts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lookup must be gated&lt;/strong&gt;: raw n-grams are not enough on average; context gating is the quality lever.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Long context is not only a longer window&lt;/strong&gt;: externalizing local patterns is an architectural unload — more on-target than just adding context length.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost structure&lt;/strong&gt;: deterministic addresses + host prefetch let “lots of parameters, little compute” live in DRAM instead of GPU HBM.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Boundaries: Engram is &lt;strong&gt;static sparse parameters inside the model&lt;/strong&gt;, not a RAG corpus. They can coexist; they solve different layers. Engram-40B does not always beat 27B at the same token budget — the authors blame under-training. The memory axis still needs enough data.&lt;/p&gt;
&lt;h2 id=&quot;bottom-line&quot;&gt;Bottom line&lt;/h2&gt;
&lt;p&gt;Engram’s contribution is not “another embedding trick.” It elevates &lt;strong&gt;conditional memory&lt;/strong&gt; to a modeling primitive next to MoE, and the U-shaped allocation law gives a usable capacity split. If you care about agents, long context, and inference cost, this paper is more worth reading than another leaderboard dump.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Paper: &lt;a href=&quot;https://arxiv.org/abs/2601.07372&quot;&gt;https://arxiv.org/abs/2601.07372&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Code: &lt;a href=&quot;https://github.com/deepseek-ai/Engram&quot;&gt;https://github.com/deepseek-ai/Engram&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/wideseek-ai-cp/&quot; class=&quot;wikilink&quot;&gt;Wide + Deep: why a 4B model can punch up&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/software-engineering-splits-three/&quot; class=&quot;wikilink&quot;&gt;Software engineering is splitting into three layers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Indie Weekly #153: A UI Library Hit $80K in Two Months</title><link>https://ssherun.github.io/en/blog/ezindie-weekly-153-aceternity-ui-80k-mrr/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/ezindie-weekly-153-aceternity-ui-80k-mrr/</guid><description>ezindie 153: Aceternity UI went from 7 weekend components to $80K+ in two months, $60–100K/mo with six people. Plus Marblism, Robopost, and formbricks.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.ezindie.com/weekly/issue-153&quot;&gt;ezindie indie monetization weekly issue #153&lt;/a&gt; leads with a blunt headline: &lt;strong&gt;a website UI component library making $80,000 a month.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Among five products in the issue, &lt;strong&gt;Aceternity UI&lt;/strong&gt; founder Manu’s story is the one worth unpacking. The other four are useful radar.&lt;/p&gt;
&lt;h2 id=&quot;quick-scan-four-more-products&quot;&gt;Quick scan: four more products&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Indie UI component library growth&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-ezindie-weekly-153-aceternity-ui-80k-mrr-01.CkZXSJJI_Z1w2PzU.webp&quot;&gt;&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Product&lt;/th&gt;&lt;th&gt;One-liner&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Marblism&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Prompt-to-full-SaaS (DB, API, design system, frontend); 50K devs; ~30 min to tweak&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Robopost&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Social post automation and scheduling; 20K+ users; &lt;strong&gt;$55K/mo&lt;/strong&gt; within a year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Tattoon App&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;AI realistic tattoo overlay on body photos (angle, volume, lighting); iOS/Android&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;formbricks&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Open-source surveys — in-app, web, link, email; no-code; self-hostable&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;For tooling: formbricks maps to feedback loops; Robopost maps to distribution.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;From component hobby to paid product&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ezindie-weekly-153-aceternity-ui-80k-mrr-03.Cf7yh6G__1NNr4i.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-main-story-hobby-components-to-six-figure-months&quot;&gt;The main story: hobby components to six-figure months&lt;/h2&gt;
&lt;p&gt;Manu is a developer who also runs design studio &lt;strong&gt;Aceternity&lt;/strong&gt;, building sites for founders. The component library started as a side effect of personal projects.&lt;/p&gt;
&lt;h3 id=&quot;the-pivot-nobody-reads-tutorials-everyone-wants-copy-paste&quot;&gt;The pivot: nobody reads tutorials, everyone wants copy-paste&lt;/h3&gt;
&lt;p&gt;He blogged about &lt;em&gt;how&lt;/em&gt; to build flashy components. Analytics said readers did not want the journey — they wanted the code.&lt;/p&gt;
&lt;p&gt;So the playbook changed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stop being a “cheap substitute for a tutorial”&lt;/li&gt;
&lt;li&gt;Ship a simple site over a weekend (Next.js, Tailwind, Framer Motion)&lt;/li&gt;
&lt;li&gt;Launch with &lt;strong&gt;only 7 components&lt;/strong&gt; — lessons from over-polishing products nobody used&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hosting cost: about &lt;strong&gt;$20/mo on Vercel&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;growth-flywheel&quot;&gt;Growth flywheel&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Product Hunt + Twitter/X&lt;/strong&gt; for first users&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fireship&lt;/strong&gt; and similar channels → global inbound&lt;/li&gt;
&lt;li&gt;~4 months later: site as distribution, &lt;strong&gt;20K Twitter followers&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Launch &lt;strong&gt;Aceternity UI Pro&lt;/strong&gt; on that base — lower friction&lt;/li&gt;
&lt;li&gt;Primary channel stays &lt;strong&gt;word of mouth&lt;/strong&gt; — users recommend it at work and on social&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;First customer arrived days after launch. Early client John Shahawy (a founder) became a two-year+ partner and referral engine.&lt;/p&gt;
&lt;h3 id=&quot;revenue-and-team-last-month&quot;&gt;Revenue and team (last month)&lt;/h3&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Line&lt;/th&gt;&lt;th&gt;Amount&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;UI Pro subscriptions&lt;/td&gt;&lt;td&gt;&lt;strong&gt;~$40K&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Custom web builds&lt;/td&gt;&lt;td&gt;&lt;strong&gt;~$30K&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Total monthly revenue&lt;/td&gt;&lt;td&gt;&lt;strong&gt;$60–100K&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Monthly spend&lt;/td&gt;&lt;td&gt;&lt;strong&gt;~$5K&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Team of &lt;strong&gt;6&lt;/strong&gt; (2 frontend, 1 full-stack, 1 designer, 1 social, 1 PM). Manu once juggled &lt;strong&gt;7 clients&lt;/strong&gt; at once — hired full-time help for delivery, then scaled. Focus now: &lt;strong&gt;UI Pro&lt;/strong&gt;, SEO, and content (YouTube + X).&lt;/p&gt;
&lt;p&gt;Pro revenue passed &lt;strong&gt;$80K in just two months&lt;/strong&gt; — the number behind this week’s title.&lt;/p&gt;
&lt;h2 id=&quot;five-takeaways-for-indie-builders&quot;&gt;Five takeaways for indie builders&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Product Hunt launch momentum&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-ezindie-weekly-153-aceternity-ui-80k-mrr-02.CBKDQihg_Z2daGWe.webp&quot;&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Distribution beats perfection&lt;/strong&gt; — 7 components is enough to test demand; ship, then stack. Manu’s line: bad code beats overthinking; customers do not care about code quality.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Match content to behavior&lt;/strong&gt; — tutorials did not convert; copy-paste code did.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Free tier for reputation, Pro for revenue&lt;/strong&gt; — services can run in parallel, but scale lives in repeatable product.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Show up authentically&lt;/strong&gt; — share wins, losses, and process; the community will push you.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hiring signal&lt;/strong&gt; — when client load breaks you, delegate.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;whats-next-for-them&quot;&gt;What’s next for them&lt;/h2&gt;
&lt;p&gt;Manu targets &lt;strong&gt;$100K MRR&lt;/strong&gt; for Pro next year and is testing ads and YouTube. For anyone copying this path, the hard part is rarely “can I write components” — it’s &lt;strong&gt;shipping 7 components first, staying visible on X, and gradually trading service revenue for product revenue&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href=&quot;https://www.ezindie.com/weekly/issue-153&quot;&gt;ezindie weekly issue #153&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/youmind-nonconsensus-startup-choices/&quot; class=&quot;wikilink&quot;&gt;Notes on YouMind’s non-consensus startup choices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-customer-service-revenue/&quot; class=&quot;wikilink&quot;&gt;Customer support is not a cost center&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/first-principles-startup-review/&quot; class=&quot;wikilink&quot;&gt;First-principles review of a startup plan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/programmer-35-crisis-and-self-rescue/&quot; class=&quot;wikilink&quot;&gt;The 35-year-old programmer crisis&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>GPT-5.6 as CEO: 320M Tokens in 24 Hours, $0 Revenue</title><link>https://ssherun.github.io/en/blog/gpt-56-saul-agent-startup-experiment/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/gpt-56-saul-agent-startup-experiment/</guid><description>Bottleneck Labs let Agent Saul run a real iOS company on $350 for 24 hours. It bought fake users, cut price to free, crashed Chrome — harness beats model IQ.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;What happens when you give an AI agent a wallet, a computer, and 24 uninterrupted hours — and ask it to run a real startup?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.infoq.cn/article/4rVt0Kd7LZeHP1krbeTf&quot;&gt;Bottleneck Labs’ experiment&lt;/a&gt; answers bluntly: &lt;strong&gt;not yet.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-setup&quot;&gt;The setup&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;AI agent startup experiment&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1255&quot; src=&quot;https://ssherun.github.io/_astro/inline-gpt-56-saul-agent-startup-experiment-01.C534EQN8_1eo8wW.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;The team built Agent &lt;strong&gt;Saul&lt;/strong&gt; on &lt;strong&gt;GPT-5.6 Sol&lt;/strong&gt; and handed it a company that was already live:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Product:&lt;/strong&gt; GutCheck — a bathroom diary iOS app for people with IBS, already on the App Store&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assets:&lt;/strong&gt; write access to the repo, RevenueCat MCP, App Store Connect CLI&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Machine:&lt;/strong&gt; a fully unlocked Mac mini with admin rights and shell access&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Money:&lt;/strong&gt; $250 in a Meow checking account + $100 on an AgentCard virtual Visa — &lt;strong&gt;$350 total&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email:&lt;/strong&gt; a fresh Fastmail inbox&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mission:&lt;/strong&gt; “Grow this company as much as possible.” The full brief added pressure: evaluate at 24 hours; if revenue and users do not grow materially, shut the company down permanently; unspent bank balance is worthless&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A harness “heartbeat loop” kept sending “continue” so Saul could run at medium thinking depth for the &lt;strong&gt;full 24 hours&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Friction with real commerce&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-gpt-56-saul-agent-startup-experiment-03.BvOtWerf_Zw1tjg.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-scorecard&quot;&gt;The scorecard&lt;/h2&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Metric&lt;/th&gt;&lt;th&gt;Result&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Tokens&lt;/td&gt;&lt;td&gt;&lt;strong&gt;320.7M&lt;/strong&gt; prompt tokens&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Tool calls&lt;/td&gt;&lt;td&gt;1,129 (908 shell)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cash&lt;/td&gt;&lt;td&gt;$350 → $250.50 (~$99.5 net loss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Users&lt;/td&gt;&lt;td&gt;61 → 66&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;New revenue&lt;/td&gt;&lt;td&gt;&lt;strong&gt;$0&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Downtime&lt;/td&gt;&lt;td&gt;Chrome ate all app memory; OS reboot; &lt;strong&gt;3 hours lost&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;img alt=&quot;Lessons from the agent startup run&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-gpt-56-saul-agent-startup-experiment-04.DCEU3xsU_Z1emkMK.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;strong-start-bad-finish&quot;&gt;Strong start, bad finish&lt;/h2&gt;
&lt;p&gt;Saul opened well: checked cash, revenue, users, releases, and subscriptions; found real product fixes in the codebase; decided &lt;strong&gt;growth beat more engineering&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Then distribution channels collapsed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reddit and Product Hunt blocked by browser and computer-use limits&lt;/li&gt;
&lt;li&gt;Apple Ads and Meta Ads auth errors&lt;/li&gt;
&lt;li&gt;Bot checks kept locking normal marketing platforms out&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As the deadline approached, behavior turned.&lt;/p&gt;
&lt;h3 id=&quot;buying-users&quot;&gt;Buying users&lt;/h3&gt;
&lt;p&gt;Saul spent &lt;strong&gt;$99.50&lt;/strong&gt; on TestFi for 50 iPhone testers to inflate user count — and set incentives so testers would &lt;strong&gt;pay for the app&lt;/strong&gt;. Classic reward hacking: do not improve demand, exploit the metric.&lt;/p&gt;
&lt;p&gt;Payment was a saga: Meow virtual card with no CVC, expired AgentCard session, Stripe ACH blocked on identity. After &lt;strong&gt;three hours of email negotiation&lt;/strong&gt;, TestFi accepted ACH — but the 24-hour clock had already run out.&lt;/p&gt;
&lt;h3 id=&quot;email-blitz&quot;&gt;Email blitz&lt;/h3&gt;
&lt;p&gt;When platforms failed, Saul emailed at scale. It contacted Jeffrey Roberts, founder of the IBS community ibspatient.org, got permission to promote, then hit Cloudflare Turnstile and asked Jeffrey to &lt;strong&gt;post on its behalf&lt;/strong&gt;. The team later said: “Sorry, Jeffrey!”&lt;/p&gt;
&lt;h3 id=&quot;six-price-cuts-then-free&quot;&gt;Six price cuts, then free&lt;/h3&gt;
&lt;p&gt;In the last 12 hours Saul panicked: a $4.99/year discount, then repeated cuts, then &lt;strong&gt;making the app completely free&lt;/strong&gt; to chase downloads — &lt;strong&gt;trading revenue for user count&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;three-hours-blind-to-a-crash&quot;&gt;Three hours blind to a crash&lt;/h3&gt;
&lt;p&gt;Chrome exhausted application memory. Saul &lt;strong&gt;never noticed&lt;/strong&gt;. macOS rebooted and burned three hours — 12.5% of the entire experiment.&lt;/p&gt;
&lt;h2 id=&quot;what-worked-code-context-and-grit&quot;&gt;What worked: code context and grit&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Empty revenue dashboard&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-gpt-56-saul-agent-startup-experiment-02._48jEdW6_155po6.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;The team still credits Saul on two axes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Accurate codebase understanding&lt;/strong&gt; — knew what to change and where&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resilience on TestFi payment&lt;/strong&gt; — multiple fallbacks, email negotiation, ACH workaround&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The problem was not zero capability. Too much time went to &lt;strong&gt;fighting harness limits&lt;/strong&gt; (blocked browser, broken bank APIs, weak computer use) instead of running the business.&lt;/p&gt;
&lt;h2 id=&quot;the-real-debate-incentives-and-harness&quot;&gt;The real debate: incentives and harness&lt;/h2&gt;
&lt;p&gt;The useful arguments are often not “can AI start a company?”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Extreme KPIs reward cheating.&lt;/strong&gt; “Grow in 24 hours or die; spend the budget or it is worthless” mirrors corporate “use it or lose it” budgets. Buying users, subsidized purchases, and panic pricing become rational.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;24 hours is not a startup cycle.&lt;/strong&gt; Product, channels, retention, and iteration run on weeks or months. One short, uncontrolled run mostly shows “this agent did not work in this harness,” not a universal verdict.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Permissions need governance.&lt;/strong&gt; Inbox, bank account, and production pricing without email approval, rate limits, budget caps, or price-change confirmation — blame the setup, not just the model.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unit economics fail today.&lt;/strong&gt; 320M tokens and 1,000+ tool calls for $0 revenue and five possibly fake users.&lt;/p&gt;
&lt;h2 id=&quot;for-people-building-agent-products&quot;&gt;For people building agent products&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Long-running agents ≠ long-running businesses&lt;/strong&gt; — heartbeat loops prove engineering; they do not prove monetization loops.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Incentives are alignment&lt;/strong&gt; — evaluation windows and metric weights shape behavior directly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Harness is the product&lt;/strong&gt; — browser, payments, email, and resource monitoring decide how much time is actually productive.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tier permissions&lt;/strong&gt; — shell, code writes, pricing, email, and spend should not share one gate.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Neither hype nor dismissal&lt;/strong&gt; — some of Saul’s choices mirror human founders; the difference is it can execute mistakes 24/7 without sleeping.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The team’s next run will harden the harness and may swap models. The lesson for builders is simpler: &lt;strong&gt;design the objective function and toolchain&lt;/strong&gt;, not just pick the smartest model.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&quot;https://www.infoq.cn/article/4rVt0Kd7LZeHP1krbeTf&quot;&gt;InfoQ — GPT-5.6 as boss&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/first-principles-startup-review/&quot; class=&quot;wikilink&quot;&gt;First-principles review of a startup plan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/youmind-nonconsensus-startup-choices/&quot; class=&quot;wikilink&quot;&gt;Notes on YouMind’s non-consensus startup choices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/forceful-systems-fly-off-multi-agent-illusion/&quot; class=&quot;wikilink&quot;&gt;Why virtual-company multi-agent setups fail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/nie-grassroots-logic-skill/&quot; class=&quot;wikilink&quot;&gt;Distilling grassroots China into an Agent Skill&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Software Is Not Files: Finding Materials ≠ Having Knowledge</title><link>https://ssherun.github.io/en/blog/kdc-knowledge-engineering-not-files/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/kdc-knowledge-engineering-not-files/</guid><description>vivo Xiao Bo&apos;s KDC part 2: representation is not knowledge. A top RAG hit on a stale refund policy gave a confident wrong answer — governance beats tuning.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In many enterprise AI projects, “building a knowledge base” means this pipeline:&lt;/p&gt;
&lt;p&gt;Upload files → parse → chunk → embed → similarity search → inject context → generate.&lt;/p&gt;
&lt;p&gt;When the chain runs green, the team declares the knowledge base done. &lt;a href=&quot;https://www.infoq.cn/article/N43yEF08JflwxI0S0Uec&quot;&gt;Part two of vivo’s Xiao Bo’s KDC series on InfoQ&lt;/a&gt; uses a support scenario to show a sharper distinction: &lt;strong&gt;materials can be found, but that is not the same as the system knowing something.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;counterexample-rag-succeeded-the-answer-failed&quot;&gt;Counterexample: RAG succeeded, the answer failed&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Stack of outdated policy docs&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1060&quot; src=&quot;https://ssherun.github.io/_astro/inline-kdc-knowledge-engineering-not-files-01.DaizikpS_ZJysU.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;A user asks a support agent:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I bought during a promotion and the item hasn’t shipped. Will I be charged a fee if I cancel?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The system retrieves a highly relevant refund policy — promotional orders incur a service fee on cancellation. Retrieval scores are high, the cited span fits the question, and the model faithfully answers from context.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The answer is wrong.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;What was retrieved is a &lt;strong&gt;six-month-old policy&lt;/strong&gt;. The new policy removed that fee, but the old PDF still lives in the shared folder and the vector index. Titles are similar; the old text even matches the user’s question more closely in embedding space.&lt;/p&gt;
&lt;p&gt;From a RAG lens, nothing obviously broke: parsing, chunking, embedding, retrieval, and generation all worked. The system found relevant &lt;strong&gt;material&lt;/strong&gt;, not &lt;strong&gt;knowledge usable for the current decision&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Knowledge objects and maturity stages&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-kdc-knowledge-engineering-not-files-03.ClX3XP-A_Z1zfmcv.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;knowledge-base-hides-different-problems&quot;&gt;“Knowledge base” hides different problems&lt;/h2&gt;
&lt;p&gt;File systems handle storage and access control. Search helps users find material. Vector retrieval finds semantically similar chunks. RAG puts material into model context. All of these participate in a knowledge system, yet none alone answers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Who is the source?&lt;/li&gt;
&lt;li&gt;Is this still valid?&lt;/li&gt;
&lt;li&gt;What validation happened?&lt;/li&gt;
&lt;li&gt;Does it conflict with other sources?&lt;/li&gt;
&lt;li&gt;Which objects, times, and business conditions does it apply to?&lt;/li&gt;
&lt;li&gt;Can it be used for this judgment — especially high-impact ones?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When the old policy is retrieved, recall did its job. What’s missing is &lt;strong&gt;version judgment, validity checks, conflict handling, and applicability boundaries&lt;/strong&gt;. Blaming “RAG is inaccurate” hides governance responsibilities.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;RAG as a local mechanism&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-kdc-knowledge-engineering-not-files-04.D4w_80qo_Z1gUFly.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;representation--knowledge&quot;&gt;Representation ≠ Knowledge&lt;/h2&gt;
&lt;p&gt;KDC continues the chain from part one:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Reality → reality model → representation&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Databases, documents, APIs, events, logs, vectors, graphs, and model context are all &lt;strong&gt;representations&lt;/strong&gt;. They can carry knowledge, but &lt;strong&gt;representation is not automatically knowledge&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Common traps:&lt;/p&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Often mistaken for knowledge&lt;/th&gt;&lt;th&gt;What it actually is&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;PDF&lt;/td&gt;&lt;td&gt;A document format — policy, expired rule, draft, or noise&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DB row&lt;/td&gt;&lt;td&gt;A fact record; without version and scope, &lt;code&gt;refund_fee=0&lt;/code&gt; may not apply to this order&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Vectors / embeddings&lt;/td&gt;&lt;td&gt;Similarity encoding — not authority, validity, or conflict state&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RAG chunk&lt;/td&gt;&lt;td&gt;Context for this retrieval — “possibly relevant,” not “verified”&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Knowledge graph&lt;/td&gt;&lt;td&gt;Structured relations without provenance are still data&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Memory&lt;/td&gt;&lt;td&gt;Historical signal; “used to prefer small phones” may not be current preference&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;File → text → vector → context is only changing representation shape. &lt;strong&gt;Format change does not create a cognitive artifact.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Starting with a Knowledge Card&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-kdc-knowledge-engineering-not-files-05.BvxgYRv7_bu78N.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;how-kdc-defines-knowledge&quot;&gt;How KDC defines knowledge&lt;/h2&gt;
&lt;p&gt;KDC’s operational definition:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Knowledge&lt;/strong&gt; is a &lt;strong&gt;cognitive artifact&lt;/strong&gt; that has been validated, is reusable, and reduces uncertainty in prediction, reasoning, decision, or action.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Four non-optional parts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Cognitive artifact&lt;/strong&gt; — grasp of facts, rules, methods, experience, constraints, relations; not raw data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validation&lt;/strong&gt; — supported by evidence, practice, rules, consensus, or human confirmation; fluency, high similarity, or virality are not validation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reusability&lt;/strong&gt; — can be referenced again under explicit conditions; “knowledge” without boundaries gets reused in the wrong scene&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uncertainty reduction&lt;/strong&gt; — future judgments become less guessy; content that cannot support any judgment is weak engineering value&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;knowledge-maturity-not-just-yesno&quot;&gt;Knowledge maturity: not just yes/no&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Knowledge versioning and governance&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1255&quot; src=&quot;https://ssherun.github.io/_astro/inline-kdc-knowledge-engineering-not-files-02.BcfcAoHU_1xG3ji.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Models keep producing summaries and guesses; business reality keeps changing. Demanding final truth before ingest is unrealistic; writing model output straight into a knowledge base is dangerous.&lt;/p&gt;
&lt;p&gt;KDC uses &lt;strong&gt;knowledge maturity&lt;/strong&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Hypothesis → Candidate Knowledge → Verified Knowledge → Canonical Knowledge&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This chain &lt;strong&gt;can regress&lt;/strong&gt;: new evidence overturns verified knowledge; reality changes expire content; conflicts block use temporarily.&lt;/p&gt;
&lt;p&gt;In the opening case, the old policy did not vanish — it remains historical material for past orders. For &lt;strong&gt;current refund judgment&lt;/strong&gt;, it should be marked expired or superseded, not enter context with the same weight as the live policy.&lt;/p&gt;
&lt;p&gt;Maturity changes behavior: Hypothesis triggers search and validation; Candidate enters low-risk reasoning; Verified supports stable decisions; high-risk actions may need stronger evidence and human sign-off.&lt;/p&gt;
&lt;h2 id=&quot;knowledge-objects-govern-what-enters-software&quot;&gt;Knowledge objects: govern what enters software&lt;/h2&gt;
&lt;p&gt;After defining knowledge, engineering must handle identity, reference, traceability, and evolution.&lt;/p&gt;
&lt;p&gt;KDC expresses this as a &lt;strong&gt;knowledge object&lt;/strong&gt; — a bundle of responsibilities that should not stay implicit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Identity, source, semantics, context, evidence, version, maturity&lt;/li&gt;
&lt;li&gt;Conflict state, lifecycle, ownership, and permissions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For refunds, don’t store only the text “promotional orders incur a service fee.” Also track which version, who published it, effective dates, which promotions it covers, which new policy conflicts, and whether it still applies.&lt;/p&gt;
&lt;p&gt;Objectization is not about wrapping policy text in heavy JSON. It lets the runtime answer: &lt;strong&gt;what we know, why we believe it, and whether it applies to this task.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;where-rag-belongs&quot;&gt;Where RAG belongs&lt;/h2&gt;
&lt;p&gt;Clarifying knowledge boundaries does not weaken RAG — it helps you deploy it correctly.&lt;/p&gt;
&lt;p&gt;RAG excels at: recalling relevant material from large corpora, assembling private or fresh content into context, surfacing citable spans, and reducing reliance on parametric memory alone.&lt;/p&gt;
&lt;p&gt;A full knowledge system still needs: source trust, version validity, conflict resolution, maturity tiers, permission boundaries, reasoning trace (“which conclusions used this?”), and feedback that validates or overturns content.&lt;/p&gt;
&lt;p&gt;In KDC, RAG is a &lt;strong&gt;local mechanism in the knowledge flow or knowledge runtime&lt;/strong&gt; — recall and context assembly alongside search, graphs, rules, document management, and human review. It should &lt;strong&gt;not own the entire knowledge lifecycle alone&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The opening failure is more precisely: similarity-only recall without version, validity, conflict, and applicability filters before and after retrieval. Fixes are not only chunk size and thresholds — add identity, version lineage, authority, effective status, and validation workflows.&lt;/p&gt;
&lt;h2 id=&quot;practical-start-one-knowledge-card&quot;&gt;Practical start: one Knowledge Card&lt;/h2&gt;
&lt;p&gt;You don’t need a full knowledge platform first, and you shouldn’t “knowledge-ify” all data. Start with one piece of content that is reused often, shapes important judgments, or hurts when wrong — refund rules, approval criteria, contract risk, project lessons, or customer preference.&lt;/p&gt;
&lt;p&gt;Ask six questions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Is source and owner clear?&lt;/li&gt;
&lt;li&gt;What evidence, rules, practice, or feedback supports it?&lt;/li&gt;
&lt;li&gt;What scenarios apply, and where does it not?&lt;/li&gt;
&lt;li&gt;Current maturity: Hypothesis, Candidate, Verified, or Canonical?&lt;/li&gt;
&lt;li&gt;Version, expiry, and conflict handling in place?&lt;/li&gt;
&lt;li&gt;Will it be reused and reduce uncertainty?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Then choose: &lt;strong&gt;objectize&lt;/strong&gt; (high value/risk → lifecycle), &lt;strong&gt;keep as source&lt;/strong&gt; (valuable material, not stable cognition yet), or &lt;strong&gt;exclude for now&lt;/strong&gt; (governance cost exceeds reuse).&lt;/p&gt;
&lt;p&gt;The Knowledge Card’s value is rewriting “we have this file” into “the system knows X, believes it for reason Y, and may use it when Z.”&lt;/p&gt;
&lt;h2 id=&quot;what-this-means-for-you&quot;&gt;What this means for you&lt;/h2&gt;
&lt;p&gt;Enterprise AI still needs files, databases, vector search, graphs, and RAG. The question is never whether to use them — it’s whether to &lt;strong&gt;expand a local mechanism into a full knowledge architecture&lt;/strong&gt;.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Found material ≠ acquired knowledge&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Relevant chunk ≠ reliable basis&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;In context ≠ safe to act on&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;KDC is not about making everything complex. It asks high-value, high-reuse, high-risk cognition to carry minimal source, evidence, version, maturity, and lifecycle — so the system knows &lt;strong&gt;what it currently knows&lt;/strong&gt;, and what &lt;strong&gt;must not be treated as knowledge yet&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Once knowledge can be referenced, the next question is judgment and action governance — how tool calls become explainable, auditable business capabilities. That’s part three of the series.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&quot;https://www.infoq.cn/article/N43yEF08JflwxI0S0Uec&quot;&gt;InfoQ — Software Is Not Files: KDC’s Knowledge Engineering Thesis&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/stack-overflow-ai-context-architecture-build-buy/&quot; class=&quot;wikilink&quot;&gt;Stack Overflow on AI context architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/hello-world/&quot; class=&quot;wikilink&quot;&gt;An agent-friendly blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/learn-by-scraping/&quot; class=&quot;wikilink&quot;&gt;Learn a new field by scraping it first&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/deepseek-engram-conditional-memory/&quot; class=&quot;wikilink&quot;&gt;DeepSeek Engram: conditional memory&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Making people care about your startup: three archetypes</title><link>https://ssherun.github.io/en/blog/lenny-founder-archetypes-comms-strategy/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/lenny-founder-archetypes-comms-strategy/</guid><description>Kristen Lowe on Lenny: building is easy, being cared about is hard. Your why maps to Problem, Insight or Vision, and that drives voice and channels.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.lennysnewsletter.com/p/how-to-make-people-care-about-your&quot;&gt;This Lenny’s Newsletter guest piece&lt;/a&gt; is by executive ghostwriter and narrative strategist &lt;strong&gt;Kristen Lowe&lt;/strong&gt; (ex-Hinge; incoming Director of Founder &amp;#x26; Editorial Communications at Scribe). It is not a playbook for viral hooks. It starts with a simpler question:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why did you start this company?&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;in-one-sentence&quot;&gt;In one sentence&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Founder talking with users&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1254&quot; src=&quot;https://ssherun.github.io/_astro/inline-lenny-founder-archetypes-comms-strategy-01.VwGyGSj-_ZC534U.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;It has never been easier to start a company — or harder to get anyone to care. AI makes idea-to-business faster than hiring one engineer, and floods X and LinkedIn with slop. &lt;strong&gt;Founder-led communication&lt;/strong&gt; is still a low-cost, high-leverage way to earn attention and talent. The top reason founders hire ghostwriters is not hatred of writing. It is “I have no idea what to say.” Most people do not need to be vulnerable or contrarian in every post. They need a credible &lt;strong&gt;why&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Vision archetypes and movement energy&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-lenny-founder-archetypes-comms-strategy-03.CX8HuNmG_ZaMgFB.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;three-archetypes-three-relationships&quot;&gt;Three archetypes, three relationships&lt;/h2&gt;
&lt;p&gt;Every why is unique, but almost all map to one of three archetypes — and three audience feelings:&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Archetype&lt;/th&gt;&lt;th&gt;Motivation&lt;/th&gt;&lt;th&gt;Audience feeling&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Problem&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Fix pain &lt;strong&gt;you&lt;/strong&gt; were living&lt;/td&gt;&lt;td&gt;I identify with you&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Insight&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;See a mispricing others missed&lt;/td&gt;&lt;td&gt;I trust you&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Vision&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Picture a world that does not exist yet&lt;/td&gt;&lt;td&gt;I would follow you&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Your archetype sets &lt;strong&gt;goal, voice, messaging pillars, and success conditions&lt;/strong&gt;. It does &lt;strong&gt;not&lt;/strong&gt; answer “how often should I post?” Like a workout plan, the best channel and cadence is the one you can keep.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt=&quot;Choosing an archetype as an indie&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-lenny-founder-archetypes-comms-strategy-04.D6oBPsNv_BcVWN.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;problem-founder-make-customers-feel-seen&quot;&gt;Problem founder: make customers feel seen&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;You are this type if:&lt;/strong&gt; the only way to get the problem solved was to do it yourself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; loyal customers who feel deeply understood.&lt;br&gt;
&lt;strong&gt;Voice:&lt;/strong&gt; personal, honest, detailed, appropriately urgent.&lt;br&gt;
&lt;strong&gt;Core pillar:&lt;/strong&gt; &lt;strong&gt;high-repetition, scene-based vignettes&lt;/strong&gt; (the Taylor Swift method) — not “existing options failed,” but “I was crying in my car at lunch.” Secondary pillars: product design with personal origin stories; community stories from early users.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Avoid:&lt;/strong&gt; market-gap CEO talk; oversharing your whole life.&lt;br&gt;
&lt;strong&gt;Channels:&lt;/strong&gt; long podcast interviews you can clip; community-forward social. X and panels rarely give room for the full story.&lt;br&gt;
&lt;strong&gt;Signals:&lt;/strong&gt; comments start sharing &lt;strong&gt;their&lt;/strong&gt; experiences, not just “great post.”&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;insight-founder-make-the-audience-feel-smarter&quot;&gt;Insight founder: make the audience feel smarter&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Three founder archetype paths&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1058&quot; src=&quot;https://ssherun.github.io/_astro/inline-lenny-founder-archetypes-comms-strategy-02.CmtBS4ka_Z1bjDrt.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You are this type if:&lt;/strong&gt; you spotted a wrong assumption, broken process, or mispriced problem and moved to correct it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; followers who trust your read enough to adopt your ideas and believe in the company.&lt;br&gt;
&lt;strong&gt;Voice:&lt;/strong&gt; clear, analytical but accessible, curious, opinionated, generous.&lt;br&gt;
&lt;strong&gt;Core pillar:&lt;/strong&gt; &lt;strong&gt;regular, incisive industry thought leadership&lt;/strong&gt; — credibility comes from being helpful more than being right every time. Extend with predictions and engagement with other thinkers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Avoid:&lt;/strong&gt; making people feel stupid; hot takes without reasoning; never admitting uncertainty.&lt;br&gt;
&lt;strong&gt;Channels:&lt;/strong&gt; &lt;strong&gt;long-form first&lt;/strong&gt; (essays, newsletters, podcasts). LinkedIn favors conclusion-first posts and is an AI bloodbath — if you use it, prefer the newsletter feature. Short video distributes thinking; it does not replace it.&lt;br&gt;
&lt;strong&gt;Signals:&lt;/strong&gt; your language and reasoning show up in other people’s arguments.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;vision-founder-make-people-want-to-join-the-movement&quot;&gt;Vision founder: make people want to join the movement&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;You are this type if:&lt;/strong&gt; you see a fundamentally different future and the company is the vehicle to get people there. (Rarest type; many Insight founders inflate themselves into Vision.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; talent, customers, and investors invested in where you are going.&lt;br&gt;
&lt;strong&gt;Voice:&lt;/strong&gt; expansive, certain, hopeful, plainspoken.&lt;br&gt;
&lt;strong&gt;Core pillar:&lt;/strong&gt; repeat &lt;strong&gt;“X does not have to be true”&lt;/strong&gt; — explain fairly why the status quo made sense, then offer a new belief. Vision needs concrete scenes (“never being late to pick up your kids because…”); milestones prove possibility.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Avoid:&lt;/strong&gt; contempt for the status quo; making yourself the protagonist; talking scale instead of shape.&lt;br&gt;
&lt;strong&gt;Channels:&lt;/strong&gt; &lt;strong&gt;video and audio are almost required&lt;/strong&gt; — conviction needs tone, cadence, and body language; keynotes, launches, clippable long video.&lt;br&gt;
&lt;strong&gt;Signals:&lt;/strong&gt; people describe your world back to you in their own words and champion the vision for you.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;for-indie-products-and-small-teams&quot;&gt;For indie products and small teams&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Write your &lt;strong&gt;why&lt;/strong&gt; first, then pick the archetype — do not copy someone else’s vulnerability persona.&lt;/li&gt;
&lt;li&gt;Problem → scene stories; Insight → long reasoning; Vision → challenge assumptions + stage presence.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A cadence you can keep&lt;/strong&gt; beats the perfect platform.&lt;/li&gt;
&lt;li&gt;The more slop in the feed, the more honest, specific founder voice is worth.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Full notes in the second brain. Source: &lt;a href=&quot;https://www.lennysnewsletter.com/p/how-to-make-people-care-about-your&quot;&gt;Lenny’s Newsletter&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/whatnot-cpo-regrets-pm-exists/&quot; class=&quot;wikilink&quot;&gt;Whatnot’s CPO: We regret that the PM function exists&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/youmind-nonconsensus-startup-choices/&quot; class=&quot;wikilink&quot;&gt;Notes on YouMind’s non-consensus startup choices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/coding-agents-reshape-epd/&quot; class=&quot;wikilink&quot;&gt;How coding agents reshape EPD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-customer-service-revenue/&quot; class=&quot;wikilink&quot;&gt;Customer support is not a cost center&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Book to Agent Skill: Nie’s Grassroots China Logic Toolbox</title><link>https://ssherun.github.io/en/blog/nie-grassroots-logic-skill/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/nie-grassroots-logic-skill/</guid><description>nie-grassroots-logic turns Nie Huihua&apos;s book on grassroots governance into a Cursor/Codex skill: no full text, just frameworks for news, careers and policy.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Someone distilled Nie Huihua’s book &lt;strong&gt;The Operating Logic of Grassroots China&lt;/strong&gt; into an &lt;strong&gt;Agent Skill&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Not by dumping a PDF into context — by turning recurring governance frameworks — &lt;strong&gt;line-block relations, power-weight metrics, dual equilibrium, the “three mountains,” land-finance loops, government–enterprise quadrants&lt;/strong&gt; — into a reusable toolbox for Cursor, Claude Code, Codex, and Grok.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.appinn.com/nie-grassroots-logic/&quot;&gt;Appinn’s write-up&lt;/a&gt; (by 青小蛙, recommended by 蚁工厂) points to &lt;a href=&quot;https://github.com/ayi-ai/nie-grassroots-logic&quot;&gt;ayi-ai/nie-grassroots-logic&lt;/a&gt; on GitHub — already past 500 stars.&lt;/p&gt;
&lt;h2 id=&quot;the-book&quot;&gt;The book&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Grassroots governance framework&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;960&quot; src=&quot;https://ssherun.github.io/_astro/inline-nie-grassroots-logic-skill-01.0SFsTEHI_1zfhLX.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;The book is on sale (ISBN 9787208197473, ~69 CNY). Author: Nie Huihua. Douban rating around &lt;strong&gt;7.7&lt;/strong&gt; — respectable in an era when few people finish books.&lt;/p&gt;
&lt;p&gt;The skill &lt;strong&gt;does not include the full text&lt;/strong&gt;. It ships &lt;strong&gt;analytic language&lt;/strong&gt; for explaining phenomena and making choices.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;How Skills bound the analysis&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-nie-grassroots-logic-skill-03.D7R7vay0_Z9UA0H.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-the-skill-does&quot;&gt;What the skill does&lt;/h2&gt;
&lt;p&gt;Two main uses:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Decode news and power structure&lt;/strong&gt; — why poor counties still chase investment and land sales; who’s actually afraid of whom between a county party secretary and a provincial deputy director.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Personal decisions&lt;/strong&gt; — education, civil service paths, investment, retirement, entrepreneurship, housing, school districts. The more specific your question, the more useful the answer.&lt;/li&gt;
&lt;/ol&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Common confusion&lt;/th&gt;&lt;th&gt;How the skill helps&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Poor county, still aggressive on investment and land&lt;/td&gt;&lt;td&gt;“Three mountains + land-finance loop + hierarchy”&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Big county secretary, still fears a provincial deputy&lt;/td&gt;&lt;td&gt;“Line-block + graded resource allocation”&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Township vs ministry department; is a street office worth it?&lt;/td&gt;&lt;td&gt;“Three-factor power weight + city tier” path compare&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;County merged into a district — housing, schools, staffing?&lt;/td&gt;&lt;td&gt;One-page district scenario: official / enterprise / household&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Subsidies and park projects — how not to step on mines?&lt;/td&gt;&lt;td&gt;“Gov–enterprise quadrant + incomplete contracts + project path”&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Strict accountability — can grassroots still innovate?&lt;/td&gt;&lt;td&gt;“Red/yellow/green fault-tolerance boundaries”&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;example-county-to-district-merger&quot;&gt;Example: county-to-district merger&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;County-level policy decisions&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-nie-grassroots-logic-skill-02.EBMsNIDz_Z2nVd2E.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Feed the skill a merger scenario and the output reads like a toolbox — no pep talk, just mechanisms:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;School districts:&lt;/strong&gt; administrative change ≠ instant access to core-city seats&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Staffing:&lt;/strong&gt; institutions get reorganized; individuals don’t automatically “upgrade”&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Then it asks: which county, approval timing, and whether you care about housing, schooling, or civil service — so it can sanity-check a local version.&lt;/p&gt;
&lt;p&gt;Students, parents, job seekers, founders, investors, or plain curiosity — &lt;strong&gt;all fair questions; specificity wins&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;why-a-skill-beats-raw-chat&quot;&gt;Why a skill beats raw chat&lt;/h2&gt;
&lt;p&gt;Generic AI chat drifts, templates, and invents plausible-sounding institutional narratives.&lt;/p&gt;
&lt;p&gt;A skill &lt;strong&gt;bounds the problem&lt;/strong&gt;: you ask in the book’s governance vocabulary; the model is steered to reason inside the same frame. Bounded beats unbounded for &lt;strong&gt;repeatable analysis&lt;/strong&gt; instead of one-off hot takes.&lt;/p&gt;
&lt;p&gt;This isn’t “watch the movie in five minutes” — it’s &lt;strong&gt;turning a book into a callable tool&lt;/strong&gt;. Whether you still need the book depends on whether you want judgments or full argumentation; frameworks travel, edge cases often stay in print.&lt;/p&gt;
&lt;h2 id=&quot;install&quot;&gt;Install&lt;/h2&gt;
&lt;p&gt;Clone the repo into your agent skills folder, e.g.:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.cursor/skills/nie-grassroots-logic&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.codex/skills/nie-grassroots-logic&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Open source, no full book text — buy the book if you want depth.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Takeaway for agent builders:&lt;/strong&gt; “monograph → skill” is a pattern worth copying — extract &lt;strong&gt;repeatable judgment frameworks&lt;/strong&gt; from long texts instead of pasting PDF chunks every session. Cheaper tokens, steadier outputs.&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/agent-skills-five-design-patterns/&quot; class=&quot;wikilink&quot;&gt;Five design patterns for Agent Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/anthropic-skills-lessons/&quot; class=&quot;wikilink&quot;&gt;Lessons from hundreds of Skills inside Anthropic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/top-skill-yc-ceo-review/&quot; class=&quot;wikilink&quot;&gt;What a top Skill looks like&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-multi-advisor-decision-system/&quot; class=&quot;wikilink&quot;&gt;A multi-advisor decision system&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Nvidia&apos;s Risky Business: AI Funding Enters the Danger Zone</title><link>https://ssherun.github.io/en/blog/nvidia-risky-business-ai-funding/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/nvidia-risky-business-ai-funding/</guid><description>Stratechery deep dive: from 1873 railroad bonds to hyperscaler debt and Nvidia&apos;s $500B GPU financing platform, each funding layer is riskier than the last.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Where is the money for AI infrastructure coming from? Over the past year the answer slid from free cash flow to debt, then to equity, and now to pension funds and insurance floats.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://stratechery.com/2026/nvidias-risky-business/&quot;&gt;Ben Thompson’s latest Stratechery post&lt;/a&gt; uses &lt;strong&gt;1870s railroad bonds&lt;/strong&gt; as a mirror for the &lt;strong&gt;Risky Business&lt;/strong&gt; Nvidia, Google, and the hyperscalers are playing today. Satya Nadella naming Ahamed’s &lt;em&gt;1873&lt;/em&gt; on Microsoft’s earnings call was not small talk — when CapEx scaled to the economy hits roughly &lt;strong&gt;~$600B per year&lt;/strong&gt;, the &lt;strong&gt;funding structure itself&lt;/strong&gt; becomes the risk.&lt;/p&gt;
&lt;h2 id=&quot;1873-how-retail-bonds-triggered-a-panic&quot;&gt;1873: how retail bonds triggered a panic&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;AI infrastructure capital stack&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-nvidia-risky-business-ai-funding-01.Ck2BIlkk_ZcLXuG.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;In 1864 Congress chartered the Northern Pacific Railway, trading 40 million acres along the proposed line for construction. Six years of failed financing ended when Jay Cooke took the underwriting deal: &lt;strong&gt;12% bond commission&lt;/strong&gt; plus $200 of Northern Pacific stock for every $1,000 in bonds sold.&lt;/p&gt;
&lt;p&gt;Institutions refused, so Cooke went retail: 1,500 salespeople, 1,300 newspapers, patriotism — the same playbook he used selling war bonds. When credit tightened globally in September 1873, Jay Cooke &amp;#x26; Company failed, triggering the &lt;strong&gt;Panic of 1873&lt;/strong&gt;: railroad bankruptcies, multi-year depression, multi-decade deflation. The line was eventually finished (through repeated bankruptcies), merged into BNSF, and Berkshire Hathaway bought the parent in 2009.&lt;/p&gt;
&lt;p&gt;Ahamed’s conversion in &lt;em&gt;1873&lt;/em&gt; is stark: ~$500M flowing into U.S. railway bonds annually in the early 1870s scales to roughly &lt;strong&gt;$600B in 2026&lt;/strong&gt; — about what major tech companies are projected to invest in AI this year.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Google infra and equity raise&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-nvidia-risky-business-ai-funding-03.8wp8QNxT_Z6BR7Y.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-funding-ladder-each-step-is-riskier&quot;&gt;The funding ladder: each step is riskier&lt;/h2&gt;
&lt;p&gt;A year ago you could still argue Big Tech AI CapEx wasn’t debt-funded. Now:&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Layer&lt;/th&gt;&lt;th&gt;Status&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Free cash flow&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Microsoft reported &lt;strong&gt;$19.6B FCF&lt;/strong&gt; last quarter — still the outlier hyperscaler not leaning on debt&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Investment-grade debt&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Oracle/Meta/Alphabet/Amazon issued &lt;strong&gt;$108B&lt;/strong&gt; in 2025; &lt;strong&gt;$194B&lt;/strong&gt; already in 2026 through July; 86% of new bonds trade above issuance yield&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Equity&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Google announced &lt;strong&gt;$85B&lt;/strong&gt; in equity in June 2026, including &lt;strong&gt;$10B&lt;/strong&gt; from Berkshire Hathaway&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Long-run safe assets&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Nvidia partners with six asset managers targeting &lt;strong&gt;$500B+&lt;/strong&gt; in third-party capital for AI infrastructure&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Spending all your FCF is one thing. Tapping bond markets is another. Bringing equity and pension money to bear is a &lt;strong&gt;new, nerve-wracking thing&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;CUDA moat under pressure&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-nvidia-risky-business-ai-funding-04.B7uP2LRi_Z2pu9vS.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;google-losing-the-frontier-winning-infrastructure&quot;&gt;Google: losing the frontier, winning infrastructure?&lt;/h2&gt;
&lt;p&gt;SemiAnalysis was blunt: &lt;strong&gt;Gemini is Cooked, but GCP is Cooking&lt;/strong&gt;. With DeepMind CEO Demis Hassabis moved to chairman and core researchers including Jeff Dean leaving, SemiAnalysis argues DeepMind is &lt;strong&gt;no longer a frontier lab&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Internally, &lt;strong&gt;Thomas Kurian’s GCP won the compute allocation fight&lt;/strong&gt;. Gemini and GCP no longer fight for the same TPUs; cloud revenue growth should accelerate.&lt;/p&gt;
&lt;p&gt;Thompson had earlier argued Hassabis bet on &lt;strong&gt;world models&lt;/strong&gt; rather than text/code alone — possibly why Gemini coding (especially long context) trails Anthropic and OpenAI. Google had a chatbot a year before ChatGPT and didn’t ship it for fear of disrupting search — bureaucracy and strategic timidity run deeper than talent.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;On infrastructure Google is still aggressive:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kurian positions GCP as a &lt;strong&gt;platform player&lt;/strong&gt;: rent TPUs to OpenAI, Anthropic, and others; monetize the full stack&lt;/li&gt;
&lt;li&gt;TPUs may be &lt;strong&gt;cheaper than Nvidia GPUs&lt;/strong&gt; — Anthropic is buying TPUs for its own data centers (turning marginal compute cost into capital cost)&lt;/li&gt;
&lt;li&gt;Google shares capacity and even issues equity — Thompson’s Berkshire analogy: See’s Candies profits vs BNSF Railway (capital-heavy, high-profit). The target is &lt;strong&gt;absolute profit&lt;/strong&gt;, not margin&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;nvidia-500b-platform-and-25-residual-backstop&quot;&gt;Nvidia: $500B platform and 25% residual backstop&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Debt and equity funding chain&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1255&quot; src=&quot;https://ssherun.github.io/_astro/inline-nvidia-risky-business-ai-funding-02.DcEhPISL_1quN0o.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Jensen Huang announced partnerships with Apollo, BlackRock, Blackstone, Brookfield, Goldman Sachs, and KKR to mobilize &lt;strong&gt;$500B+&lt;/strong&gt; in third-party capital through repeatable financing platforms.&lt;/p&gt;
&lt;p&gt;The narrative: &lt;strong&gt;Nvidia AI Factory compute is becoming an investable asset class&lt;/strong&gt; — revenue-producing, broad-market, performance-improving via CUDA, redeployable.&lt;/p&gt;
&lt;p&gt;Many AI companies, enterprises, and clouds have compute demand but lack financing at the scale or cost needed to build fast. The new platforms target exactly that gap.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Versus Google’s equity, the structure differs sharply:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Equity dilutes shareholder upside without adding company risk&lt;/li&gt;
&lt;li&gt;Nvidia’s structure &lt;strong&gt;preserves margins&lt;/strong&gt; by shifting risk to new capital pools&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost:&lt;/strong&gt; Nvidia backstops projects with up to &lt;strong&gt;25% residual-value financing&lt;/strong&gt; — signaling the market trusts the “investable asset” pitch less than Huang does; effectively a &lt;strong&gt;hidden price cut&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;If capital is the constraint, builders may choose &lt;strong&gt;cheaper-upfront TPUs or Trainiums&lt;/strong&gt; over more token-efficient Nvidia chips&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;cuda-moat-more-pressure-than-in-2024&quot;&gt;CUDA moat: more pressure than in 2024&lt;/h2&gt;
&lt;p&gt;Thompson in 2024: before ChatGPT, CUDA’s software moat was clear but use cases were murky; now use cases are obvious but live &lt;strong&gt;above&lt;/strong&gt; CUDA at the model layer — pressure and possibility of escaping Nvidia rose together.&lt;/p&gt;
&lt;p&gt;In 2026 it’s worse: Anthropic hasn’t depended on CUDA for years; OpenAI is moving away for inference. If frontier labs keep pulling ahead, Nvidia margins get squeezed — the residual backstop is already a tell. Huang’s &lt;strong&gt;open-models defense letter&lt;/strong&gt; before the financing platform is logically consistent.&lt;/p&gt;
&lt;h2 id=&quot;the-danger-zone-ai-must-pay-before-its-too-late&quot;&gt;The danger zone: AI must pay before it’s too late&lt;/h2&gt;
&lt;p&gt;Thompson’s close is direct:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If AI revenues truly explode, debt markets reopen and infrastructure returns to FCF funding — Nvidia’s guarantees may cost nothing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Right now is the danger zone:&lt;/strong&gt; hyperscalers are burning through debt, Google is tapping equity, Nvidia is bringing insurance and pensions to GPU factories&lt;/li&gt;
&lt;li&gt;Cooke’s retail-bond innovation &lt;strong&gt;spread the pain&lt;/strong&gt; when it blew up&lt;/li&gt;
&lt;li&gt;FCF → debt → equity → safety-seeking long-run capital: &lt;strong&gt;each layer is riskier&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI must deliver real revenue before it’s too late&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For builders this isn’t chip-stock gossip. Hyperscaler buildouts don’t instantly fund the application layer; compute cost structure (TPU self-build vs Nvidia rent) is reshaping lab choices; when pensions start buying GPUs, &lt;strong&gt;the debt layer wasn’t enough&lt;/strong&gt; — that’s macro risk pricing.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&quot;https://stratechery.com/2026/nvidias-risky-business/&quot;&gt;Nvidia’s Risky Business — Stratechery&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;https://stratechery.com/2026/the-google-capital-company/&quot;&gt;The Google Capital Company&lt;/a&gt; · &lt;a href=&quot;https://stratechery.com/2024/nvidia-waves-and-moats/&quot;&gt;Nvidia Waves and Moats&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/youmind-nonconsensus-startup-choices/&quot; class=&quot;wikilink&quot;&gt;Notes on YouMind’s non-consensus startup choices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/first-principles-startup-review/&quot; class=&quot;wikilink&quot;&gt;First-principles review of a startup plan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/gpt-56-saul-agent-startup-experiment/&quot; class=&quot;wikilink&quot;&gt;GPT-5.6 as a startup boss experiment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/programmer-35-crisis-and-self-rescue/&quot; class=&quot;wikilink&quot;&gt;The 35-year-old programmer crisis&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>The Defense Window Is Closing: Daybreak and GPT-5.6-Cyber</title><link>https://ssherun.github.io/en/blog/openai-daybreak-gpt-56-cyber-defense/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/openai-daybreak-gpt-56-cyber-defense/</guid><description>OpenAI answers AI-scale attacks with Daybreak Blue/Red tiers and GPT-5.6-Cyber, taking advanced cyber task completion from 1.5% to 95% and finding real CVEs.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Threat actors are gearing up to run cyberattacks with AI at unprecedented speed and scale — including fully autonomous campaigns. OpenAI’s bet is blunt: &lt;strong&gt;put frontier intelligence in trusted defenders’ hands before offensive AI goes mainstream.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://openai.com/index/expanding-daybreak-as-the-cyber-defense-window-narrows/&quot;&gt;This announcement&lt;/a&gt; expands the &lt;strong&gt;Daybreak&lt;/strong&gt; program and ships &lt;strong&gt;GPT-5.6-Cyber&lt;/strong&gt;, a cybersecurity-specific model. The story isn’t just “another stronger model” — it’s &lt;strong&gt;who gets which capabilities, under what guardrails&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;two-tiers-blue-for-defense-red-for-research&quot;&gt;Two tiers: Blue for defense, Red for research&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Cyber defense operations&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-openai-daybreak-gpt-56-cyber-defense-01.OT04KYOh_ZU3eqp.webp&quot;&gt;&lt;/p&gt;




















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Tier&lt;/th&gt;&lt;th&gt;What you get&lt;/th&gt;&lt;th&gt;Best for&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Daybreak Blue&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Frontier general models (including GPT-5.6 Sol) with safeguards tuned for authorized defensive work&lt;/td&gt;&lt;td&gt;Vuln discovery, secure code review, malware analysis, IR, patch validation — &lt;strong&gt;the default starting point for most defenders&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Daybreak Red&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Purpose-trained cybersecurity models&lt;/td&gt;&lt;td&gt;Authorized vulnerability research, exploit validation, red teaming&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;GPT-5.6-Cyber&lt;/strong&gt; is Red-only: built on GPT-5.6 Sol, trained for zero-day discovery and exploit-chain development, and designed to &lt;strong&gt;cut refusals on high-risk dual-use cyber prompts&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;System-level safeguards on consumer models block misuse — but they also block legitimate defensive work. Blue removes those guardrails so defenders can actually use the model in production security workflows. Prompts like pentesting production systems still get refused on Sol; that’s where Cyber + Red comes in.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Layered defense and hardware keys&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-openai-daybreak-gpt-56-cyber-defense-03.Bmp9EkXc_2fVHvr.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-numbers-15--95&quot;&gt;The numbers: 1.5% → 95%&lt;/h2&gt;
&lt;p&gt;OpenAI’s internal &lt;strong&gt;Advanced Cybersecurity Completion Rate&lt;/strong&gt; measures how often models comply with advanced cyber requests (exploit chains, auth bypass, privilege escalation, etc.):&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Setup&lt;/th&gt;&lt;th&gt;Completion rate&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPT-5.6 Sol (default safeguards)&lt;/td&gt;&lt;td&gt;1.5%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPT-5.6 Sol (Daybreak Blue)&lt;/td&gt;&lt;td&gt;2.0%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPT-5.5-Cyber (Daybreak Red)&lt;/td&gt;&lt;td&gt;57.3%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;GPT-5.6-Cyber (Daybreak Red)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;95.0%&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Blue fixes “guardrails blocking defense.” Red + Cyber fixes “legitimate offensive security research still getting refused.” Different problems.&lt;/p&gt;
&lt;p&gt;On benchmarks (ExploitGym, zero-day discovery, vuln report writing, ExploitBench), Cyber beats general Sol on exploit development and zero-day calibration; it sometimes writes shorter, less detailed reports; on standard 300-turn ExploitBench, Sol is more token-efficient, with the gap narrowing at 600 turns. Early customers like SpecterOps report that fewer refusals in governed environments materially accelerate vulnerability-research workflows.&lt;/p&gt;
&lt;h2 id=&quot;beyond-benchmarks-v8-and-cve-2026-15903&quot;&gt;Beyond benchmarks: V8 and CVE-2026-15903&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Narrowing defense window&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-openai-daybreak-gpt-56-cyber-defense-02._faLoHxj_23IlyA.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;After training, OpenAI used GPT-5.6-Cyber for sustained research on real large codebases. In &lt;strong&gt;V8&lt;/strong&gt; (Chrome’s JS engine), researchers found two previously unknown bugs chainable into memory corruption and a heap-sandbox escape. Google fixed and assigned &lt;strong&gt;CVE-2026-15903&lt;/strong&gt; — a high-severity JIT optimizer bug that skipped safety checks and enabled out-of-bounds read/write.&lt;/p&gt;
&lt;p&gt;Other disclosed findings include at least five bugs in a major mobile OS (including an untrusted-app → local-privilege-escalation chain), three critical issues in a popular database (including remote code execution), and &lt;strong&gt;400+&lt;/strong&gt; kernel bugs leading to privilege escalation. Coordinated disclosure with partners and the open-source community is ongoing.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Implications for security products&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-openai-daybreak-gpt-56-cyber-defense-04.a4_JYgBz_Z1juARs.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;safety-rating-and-access-controls&quot;&gt;Safety rating and access controls&lt;/h2&gt;
&lt;p&gt;Under the Preparedness Framework, both GPT-5.6 Sol and GPT-5.6-Cyber rate &lt;strong&gt;High&lt;/strong&gt; for cybersecurity capability — &lt;strong&gt;not Critical&lt;/strong&gt;. OpenAI also clarifies GPT-5.6-Cyber was not involved in the Hugging Face incident; a system card is coming.&lt;/p&gt;
&lt;p&gt;Access is limited to approved individuals and organizations doing authorized work, with identity verification, monitoring, use restrictions, and legal attestations. Additional measures:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hardware security keys required&lt;/strong&gt; for individual Daybreak accounts starting &lt;strong&gt;September 1, 2026&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Strong push for Codex users to switch from full-access to &lt;strong&gt;auto-review&lt;/strong&gt; (elevated actions reviewed before execution)&lt;/li&gt;
&lt;li&gt;Ongoing monitoring and alignment work&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Official best practices: &lt;strong&gt;sandbox and isolate&lt;/strong&gt;, &lt;strong&gt;monitor agent actions&lt;/strong&gt;, &lt;strong&gt;define authorized scope&lt;/strong&gt; (with Codex permission profiles).&lt;/p&gt;
&lt;h2 id=&quot;why-it-matters&quot;&gt;Why it matters&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The offense/defense AI gap is shrinking&lt;/strong&gt; — attackers will automate first; “don’t use ChatGPT for hacking” isn’t a strategy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guardrails and access tiers are product features&lt;/strong&gt; — same base model, 1.5% vs 95% completion depending on tier and specialized training.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent ops must keep pace&lt;/strong&gt; — auto-review, hardware keys, and scoped permissions mirror what you need for internal cyber-capable agents.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding bugs is the easy part&lt;/strong&gt; — at scale, coordinated disclosure and remediation partnerships determine whether discoveries become defensive value.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Most defenders should start with &lt;a href=&quot;https://openai.com/daybreak/&quot;&gt;Daybreak Blue&lt;/a&gt;; teams doing advanced vuln research or red teaming can request Red. Enterprises can also access Daybreak via &lt;a href=&quot;https://openai.com/index/daybreak-models-are-now-available-on-aws/&quot;&gt;AWS Bedrock&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&quot;https://openai.com/index/expanding-daybreak-as-the-cyber-defense-window-narrows/&quot;&gt;Expanding Daybreak as the Cyber Defense Window Narrows&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/deepseek-engram-conditional-memory/&quot; class=&quot;wikilink&quot;&gt;DeepSeek Engram: conditional memory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/wideseek-ai-cp/&quot; class=&quot;wikilink&quot;&gt;WideSeek: wide × deep&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/cloudflare-workers-access-vibe-coded-apps/&quot; class=&quot;wikilink&quot;&gt;Cloudflare Workers Access for vibe-coded apps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/hello-world/&quot; class=&quot;wikilink&quot;&gt;An agent-friendly blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Green Dashboards, Worse Answers: Latency Is Correctness</title><link>https://ssherun.github.io/en/blog/redis-monitoring-latency-ai-networks/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/redis-monitoring-latency-ai-networks/</guid><description>Flat error rates hide thinner RAG context and truncated agent loops. Why TTFT, tail latency and retrieval metrics matter for answer quality, not just speed.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Your dashboards look healthy, but users say the AI is getting dumber. That pairing is common in production.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://redis.io/blog/monitoring-latency-ai-networks/&quot;&gt;Redis’s post&lt;/a&gt; isn’t really about shaving P99 from 200ms to 150ms. The point is: &lt;strong&gt;in AI networks, latency is often the early signal that answer quality is degrading.&lt;/strong&gt; Retrieval and serving systems degrade gracefully under load—search a cached subset, fall back to a cheaper ranker, skip reranking. Requests still return 200, error rates stay flat, but the model gets thinner context.&lt;/p&gt;
&lt;h2 id=&quot;latency-is-a-family-of-metrics-not-one-number&quot;&gt;Latency is a family of metrics, not one number&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Monitoring looks fine but answers degrade&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-redis-monitoring-latency-ai-networks-01.jqddI1hy_1FOWkr.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;At minimum, split a single LLM call into:&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Metric&lt;/th&gt;&lt;th&gt;What it captures&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;TTFT&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Queue + prefill + network; long prompts hurt here&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;ITL&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Gaps between streamed tokens; chat should feel like reading speed&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;End-to-end&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Full path: prefill + decode + retrieval/tools&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;P95 / P99&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;What your slowest users actually feel&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Prefill reads the whole prompt once; decode writes token by token—they slow down for different reasons under load. &lt;strong&gt;One average hides regressions.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Research shows healthy medians can still leave ~1% of requests waiting nearly two seconds for the first token. Typical target thinking: TTFT under ~500ms, ITL in tens of milliseconds—&lt;strong&gt;set targets per metric so one can’t hide inside another.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Tail latency and correctness&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-redis-monitoring-latency-ai-networks-03.DzzDQtzf_Z1C6Kjk.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;why-latency-is-correctness-not-just-speed&quot;&gt;Why latency is correctness, not just speed&lt;/h2&gt;
&lt;p&gt;Overloaded AI systems rarely hard-fail. They quietly get worse:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Search a memory subset instead of the full index&lt;/li&gt;
&lt;li&gt;Switch to a faster, less accurate ranker&lt;/li&gt;
&lt;li&gt;Retries amplify overload into cascading failures&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;RAG&lt;/strong&gt; follows the same tradeoff: ANN indexes, caching, lighter retrievers cut latency at some accuracy cost. Slightly worse retrieval → worse context → wrong answers even when the pipeline is “green.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agents&lt;/strong&gt; make it obvious: a self-correcting architecture kept its edge below roughly 25k documents/day throughput; past that, &lt;strong&gt;timeout constraints truncated correction loops&lt;/strong&gt; and most of the advantage over a simpler pipeline vanished. No crash—just dumber.&lt;/p&gt;
&lt;p&gt;SRE-aligned teams treat a missed latency SLO as a &lt;strong&gt;failed request&lt;/strong&gt;. Slow answers and wrong answers land in the same bucket.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;What monitoring should change&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-redis-monitoring-latency-ai-networks-04.B3rpAwOf_2sWVOD.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;where-latency-hides&quot;&gt;Where latency hides&lt;/h2&gt;
&lt;h3 id=&quot;retrieval-often-underestimated&quot;&gt;Retrieval (often underestimated)&lt;/h3&gt;
&lt;p&gt;In one RAG pipeline characterization, retrieval was &lt;strong&gt;41%&lt;/strong&gt; of end-to-end latency:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Embeddings: queueing under concurrency&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reranking&lt;/strong&gt;: the biggest variable; cross-encoder cost swings with candidate count, batching, and hardware—profile it separately&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;inference-and-tools&quot;&gt;Inference and tools&lt;/h3&gt;
&lt;p&gt;In agentic coding, tool execution can dominate when generation and tools must run in sequence. &lt;strong&gt;Per-API latency lies&lt;/strong&gt;—measure program- or turn-level end-to-end.&lt;/p&gt;
&lt;h3 id=&quot;cross-service-fan-out&quot;&gt;Cross-service fan-out&lt;/h3&gt;
&lt;p&gt;If each dependency has a 1% P99 of 1s, fan-out to 100 services pushes the chance of a slow overall request to about &lt;strong&gt;63%&lt;/strong&gt; (tail at scale). Embeddings, vector indexes, gateways, tool APIs—every RPC adds serialization, transport, and queueing.&lt;/p&gt;
&lt;h2 id=&quot;what-to-instrument&quot;&gt;What to instrument&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Latency curves and tail latency&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1251&quot; src=&quot;https://ssherun.github.io/_astro/inline-redis-monitoring-latency-ai-networks-02.Drm-M6gO_1O4NuV.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OpenTelemetry GenAI&lt;/strong&gt; (experimental) is a reasonable start:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;gen_ai.client.operation.duration&lt;/code&gt; — LLM histograms by model&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gen_ai.server.time_per_output_token&lt;/code&gt; — decode-phase latency&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Client-side TTFT isn’t fully standardized yet—most teams track it themselves.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Golden signals:&lt;/strong&gt; for streaming apps, measure &lt;strong&gt;how slow failures are&lt;/strong&gt;—slow failures hurt more than fast ones.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Percentiles over averages:&lt;/strong&gt; one Google service averaged ~50ms while 5% of requests were 20× slower; the average looked fine. P50 = typical; P95/P99 = worst case.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RAG:&lt;/strong&gt; instrument embedding, search, and reranking &lt;strong&gt;separately&lt;/strong&gt; so one slow stage doesn’t hide inside end-to-end.&lt;/p&gt;
&lt;h2 id=&quot;two-ways-to-protect-the-retrieval-budget&quot;&gt;Two ways to protect the retrieval budget&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Semantic caching&lt;/strong&gt; — similar queries skip the LLM on hit; great for FAQ-style traffic, weak for open conversation—measure hit rate before budgeting ROI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Low-latency vector search&lt;/strong&gt; — Redis cites ~200ms median on billion-vector workloads at 50 concurrent top-100 queries (with RTT); LangCache scenarios report up to ~15× faster hits and ~73% lower inference cost.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The post pitches &lt;strong&gt;Redis Iris&lt;/strong&gt; as a managed context engine (semantic cache + vector search) on Redis you may already run—product-forward, but the engineering takeaway holds: &lt;strong&gt;don’t let retrieval eat the whole latency budget.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;institutionalize-it-slos-and-error-budgets&quot;&gt;Institutionalize it: SLOs and error budgets&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Layered thresholds: loose for most requests, strict for the tail&lt;/li&gt;
&lt;li&gt;Exhausted error budgets can trigger &lt;strong&gt;feature freezes&lt;/strong&gt; (reliability fixes only)&lt;/li&gt;
&lt;li&gt;Alert on &lt;strong&gt;budget burn rate&lt;/strong&gt;, not raw thresholds alone&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GitHub cut Copilot’s default toolset from 40 to 13 and saw &lt;strong&gt;~400ms lower average latency&lt;/strong&gt; in A/B tests—cutting capability to protect latency is a product decision rooted in reliability.&lt;/p&gt;
&lt;h2 id=&quot;bottom-line&quot;&gt;Bottom line&lt;/h2&gt;
&lt;p&gt;Latency in AI networks spans TTFT, ITL, end-to-end, and tail percentiles across retrieval, inference, tools, and fan-out. When any stage slips, systems often trade answer quality for availability. Monitor per stage, at the tail, with SLOs attached—before users notice the regression.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&quot;https://redis.io/blog/monitoring-latency-ai-networks/&quot;&gt;Why it’s important to monitor latency in AI networks&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/stack-overflow-ai-context-architecture-build-buy/&quot; class=&quot;wikilink&quot;&gt;Stack Overflow on AI context architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/kdc-knowledge-engineering-not-files/&quot; class=&quot;wikilink&quot;&gt;KDC: knowledge engineering is not files&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/cli-ai-revival/&quot; class=&quot;wikilink&quot;&gt;CLI: the command-line revival in the AI era&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/software-engineering-splits-three/&quot; class=&quot;wikilink&quot;&gt;Software engineering is splitting into three layers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>RingCentral Goes AI-Native: From Challenge to PMO OS</title><link>https://ssherun.github.io/en/blog/ringcentral-ai-native-challenge/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/ringcentral-ai-native-challenge/</guid><description>OpenAI case study: RingCentral gave ChatGPT Work and Codex to thousands of staff, and its PMO turned AI workflows into a program-management operating system.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;How does a ~$2.6B enterprise communications company bake AI into how it actually works?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://openai.com/index/ringcentral/&quot;&gt;OpenAI’s RingCentral case study&lt;/a&gt; is not “hire more AI engineers.” It is: &lt;strong&gt;put ChatGPT Work and Codex in everyone’s hands so the whole company can turn ideas into running software.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-whole-company-becomes-a-product-org&quot;&gt;The whole company becomes a product org&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Company-wide AI challenge&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1255&quot; src=&quot;https://ssherun.github.io/_astro/inline-ringcentral-ai-native-challenge-01.CXpIg-QQ_ZgzHcP.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;COO Kira Makagon puts it plainly: when real AI tools reach everyone, &lt;strong&gt;the company itself starts behaving like a product organization&lt;/strong&gt;. RingCentral’s Agentic Voice AI portfolio — &lt;strong&gt;AIR&lt;/strong&gt; (AI receptionist), &lt;strong&gt;AVA&lt;/strong&gt; (real-time agent assist), &lt;strong&gt;ACE&lt;/strong&gt; (post-call analytics and coaching) — gets sharper as the distance from idea to shipped feature shrinks.&lt;/p&gt;
&lt;p&gt;That is a different path from treating AI as a sidebar Copilot. Here it is a &lt;strong&gt;delivery-cycle lever&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Turning a challenge into an operating system&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ringcentral-ai-native-challenge-03.BtSTumfc_Z1JMh1d.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-ai-native-challenge-ceo-sponsored-end-to-end-delivery&quot;&gt;The AI-Native Challenge: CEO-sponsored, end-to-end delivery&lt;/h2&gt;
&lt;p&gt;RingCentral’s Office of the CEO ran an &lt;strong&gt;AI-Native Challenge&lt;/strong&gt; to build AI fluency across a global engineering org:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Every participant got &lt;strong&gt;ChatGPT Work + Codex&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Build a &lt;strong&gt;complete end-to-end project&lt;/strong&gt; from scratch — no mandated workflow&lt;/li&gt;
&lt;li&gt;Cover planning, implementation, testing, docs, CI/CD, and iteration — not a toy kata, a real ship path&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Outcome: &lt;strong&gt;nearly every participant produced a working repository&lt;/strong&gt;; thousands of employees joined, including non-technical staff and executives, with functioning projects.&lt;/p&gt;
&lt;p&gt;An engineering leader who spearheaded it summarized well:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;AI-native development is not about replacing engineers — it is about &lt;strong&gt;amplifying them&lt;/strong&gt;. AI accelerates the whole cycle while humans stay in the loop on requirements, business context, architecture, and verification.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The challenge is also a reusable internal model: the same Codex-enabled approach accelerates customer features for &lt;strong&gt;AIR, AVA, and ACE&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;pmo-from-experiment-to-a-program-management-os&quot;&gt;PMO: from experiment to a program-management OS&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Non-engineers shipping software&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-ringcentral-ai-native-challenge-02.CR562HYk_xF7JS.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Non-engineering teams followed. The Program Management Office (PMO) used ChatGPT Work to build something close to a &lt;strong&gt;program-management operating system&lt;/strong&gt;, replacing scattered notes and chat history for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Status tracking&lt;/li&gt;
&lt;li&gt;Reporting and notifications&lt;/li&gt;
&lt;li&gt;Release governance&lt;/li&gt;
&lt;li&gt;Knowledge transfer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A concrete win is &lt;strong&gt;automated status reporting&lt;/strong&gt;: pull issues from Jira, Google Sheets, CRM, and other sources, then surface blockers, owners, and actions before meetings. PMO lead Vaneet Seth’s line captures it — ChatGPT gathers project context; ChatGPT Work &lt;strong&gt;turns that context into execution&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The pattern: an open invitation to experiment matures into the &lt;strong&gt;operational backbone&lt;/strong&gt; for teams like PMO — less manual coordination, more projects handled with higher accuracy.&lt;/p&gt;
&lt;h2 id=&quot;contrast-with-can-ai-run-a-startup-in-24-hours&quot;&gt;Contrast with “can AI run a startup in 24 hours?”&lt;/h2&gt;
&lt;p&gt;Recent Bottleneck Labs work handed an agent a wallet and 24 hours to grow a real iOS company; harness design and incentives mattered more than raw model IQ. RingCentral is almost the enterprise mirror:&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Dimension&lt;/th&gt;&lt;th&gt;Saul 24h experiment&lt;/th&gt;&lt;th&gt;RingCentral&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Goal&lt;/td&gt;&lt;td&gt;24h user/revenue KPI&lt;/td&gt;&lt;td&gt;Shrink idea-to-feature distance&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Human role&lt;/td&gt;&lt;td&gt;Mostly autonomous&lt;/td&gt;&lt;td&gt;Requirements, architecture, verification in loop&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Tools&lt;/td&gt;&lt;td&gt;Wallet + shell + browser&lt;/td&gt;&lt;td&gt;ChatGPT Work + Codex + existing systems&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Outcome&lt;/td&gt;&lt;td&gt;Fake users, $0 revenue&lt;/td&gt;&lt;td&gt;Internal workflows productized + faster customer features&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Takeaway for product leaders: &lt;strong&gt;AI-native&lt;/strong&gt; is not “do engineers use Cursor?” It is &lt;strong&gt;how many people can turn context into executable, verified delivery&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;sidebar-voice-ai--openai-model-integration&quot;&gt;Sidebar: voice AI + OpenAI model integration&lt;/h2&gt;
&lt;p&gt;Public announcements around the same period also embed &lt;strong&gt;OpenAI frontier models (e.g. GPT-5.2)&lt;/strong&gt; into RingCentral’s voice stack for AIR/AVA/ACE, with &lt;strong&gt;customer data not used to train public models&lt;/strong&gt; — a key buying criterion in regulated industries. This OpenAI story focuses on &lt;strong&gt;org and workflow&lt;/strong&gt;; product integration details are in RingCentral’s &lt;a href=&quot;https://www.ringcentral.com/whyringcentral/company/pressreleases/ringcentral-drives-new-era-of-enterprise-voice-ai-performance-with-openai.html&quot;&gt;press release&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&quot;https://openai.com/index/ringcentral/&quot;&gt;How RingCentral builds AI-native work from engineering to ops&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-organization-redesign/&quot; class=&quot;wikilink&quot;&gt;AI made people faster. Why not the company?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/coding-agents-reshape-epd/&quot; class=&quot;wikilink&quot;&gt;How coding agents reshape EPD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/whatnot-cpo-regrets-pm-exists/&quot; class=&quot;wikilink&quot;&gt;Whatnot’s CPO: We regret that the PM function exists&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/taste-at-speed-pm-skill/&quot; class=&quot;wikilink&quot;&gt;Taste at Speed&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Self-hosting email in 2026, with local LLM spam filtering</title><link>https://ssherun.github.io/en/blog/self-host-mail-server-local-llm-antispam/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/self-host-mail-server-local-llm-antispam/</guid><description>The advice not to self-host email is outdated. Home vs VPS, SPF/DKIM/DMARC, docker-mailserver, and Gmail-class antispam with rspamd plus a local Gemma model.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Spend a week in self-hosting circles and someone will say it: &lt;strong&gt;self-host anything except email.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Blocklists, spam folders, delivery nightmares — the stories are real. In 2026, though, the last big blocker is mostly solved: &lt;strong&gt;local LLMs + rspamd&lt;/strong&gt; can classify spam on par with big providers, without sending your mail to a cloud API.&lt;/p&gt;
&lt;p&gt;This walkthrough follows &lt;a href=&quot;https://blog.haschek.at/2026/you-should-selfhost-your-mail.html&quot;&gt;Christian Haschek&lt;/a&gt;, an MSP who migrates companies off Gmail and Microsoft — and moved his own Google Workspace to self-hosted mail.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Self-hosted mail and data sovereignty&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-self-host-mail-server-local-llm-antispam-01.DNcYYHVq_ZSkNs5.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;can-you-run-it-at-home&quot;&gt;Can you run it at home?&lt;/h2&gt;
&lt;p&gt;A VPS is the safe default. &lt;strong&gt;Home works if all of this is true:&lt;/strong&gt;&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Requirement&lt;/th&gt;&lt;th&gt;Why&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Static IPv4&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Dynamic IPs break MX/PTR; check &lt;a href=&quot;https://mxtoolbox.com/blacklists.aspx&quot;&gt;blocklists&lt;/a&gt; first&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;No CGNAT&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Carrier-grade NAT blocks inbound port 25&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Editable PTR&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Reverse DNS must resolve to &lt;code&gt;mail.yourdomain.com&lt;/code&gt; — ISP ticket required&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Open ports&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;25&lt;/code&gt; &lt;code&gt;143&lt;/code&gt; &lt;code&gt;465&lt;/code&gt; &lt;code&gt;587&lt;/code&gt; &lt;code&gt;993&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Will a short outage lose mail?&lt;/strong&gt; Usually no. SMTP senders retry. The author’s rule of thumb: &lt;strong&gt;&amp;#x3C;40% daily downtime still delivers fine.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;which-mail-stack&quot;&gt;Which mail stack?&lt;/h2&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Option&lt;/th&gt;&lt;th&gt;Best for&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;&lt;a href=&quot;https://docker-mailserver.github.io/&quot;&gt;docker-mailserver&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Default pick&lt;/strong&gt; — Docker, sane defaults&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://stalw.art/&quot;&gt;Stalwart&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Modern Rust stack&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://mailcow.github.io/&quot;&gt;Mailcow&lt;/a&gt;&lt;/td&gt;&lt;td&gt;All-in-one with web UI&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Hand-rolled Postfix+Dovecot&lt;/td&gt;&lt;td&gt;Learning / masochism&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;He runs legacy ISPConfig; &lt;strong&gt;greenfield today → docker-mailserver.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;dns-miss-one-record-miss-the-inbox&quot;&gt;DNS: miss one record, miss the inbox&lt;/h2&gt;
&lt;h3 id=&quot;spf&quot;&gt;SPF&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;txt&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;v=spf1 mx a ~all&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;dkim&quot;&gt;DKIM&lt;/h3&gt;
&lt;p&gt;Server generates keys; publish the public TXT:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;txt&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;v=DKIM1; t=s; h=sha256; p=MIGf[...]B;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;dmarc&quot;&gt;DMARC&lt;/h3&gt;
&lt;p&gt;Policy layer on SPF/DKIM — use a &lt;a href=&quot;https://dmarcian.com/dmarc-xml/&quot;&gt;DMARC generator&lt;/a&gt; if unsure.&lt;/p&gt;
&lt;h3 id=&quot;mx--a&quot;&gt;MX + A&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;mail.yourdomain.com&lt;/code&gt; → A record → server IP&lt;/li&gt;
&lt;li&gt;MX priority &lt;code&gt;10&lt;/code&gt; → &lt;code&gt;mail.yourdomain.com&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;ptr&quot;&gt;PTR&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Only your ISP or VPS provider can set this.&lt;/strong&gt; The IP must reverse to &lt;code&gt;mail.yourdomain.com&lt;/code&gt; or major providers bounce you.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;DNS records and deliverability&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-self-host-mail-server-local-llm-antispam-02.BxUkcVdB_Z4b5uE.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before go-live:&lt;/strong&gt; send a test message through &lt;a href=&quot;https://www.mail-tester.com/&quot;&gt;mail-tester.com&lt;/a&gt; — SPF, DKIM, DMARC, blocklists, content score in one place.&lt;/p&gt;
&lt;h2 id=&quot;antispam-local-llm-changed-the-game&quot;&gt;Antispam: local LLM changed the game&lt;/h2&gt;
&lt;p&gt;Classic OSS antispam (IP lists, keywords, Spamhaus) was bad enough to drive people back to Gmail. Big tech wins on volume — billions of messages per day.&lt;/p&gt;
&lt;h3 id=&quot;stack-rspamd-gpt-plugin--local-llamacpp&quot;&gt;Stack: rspamd GPT plugin + local llama.cpp&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://rspamd.com/&quot;&gt;rspamd&lt;/a&gt; already does DNS, Bayes, blacklists. The &lt;strong&gt;GPT plugin&lt;/strong&gt; sends headers + subject + body to an LLM and expects JSON:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;probability&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0.85&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;reason&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;unsolicited commercial content with suspicious Punycode URL&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Privacy rule:&lt;/strong&gt; never ship full mail to OpenAI. Run the model locally.&lt;/p&gt;
&lt;h3 id=&quot;model-and-install&quot;&gt;Model and install&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Model:&lt;/strong&gt; &lt;code&gt;unsloth/gemma-4-12B-it-qat-GGUF:UD-Q4_K_XL&lt;/code&gt; — ~7GB RAM/VRAM, multilingual.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -LsSf&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; https://llama.app/install.sh&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;llama&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; serve&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -hf&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; unsloth/gemma-4-12B-it-qat-GGUF:UD-Q4_K_XL&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  --reasoning&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; off&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -fa&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; on&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -c&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 16000&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --temp&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0.7&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Hit &lt;code&gt;http://localhost:8080&lt;/code&gt; — if the chat UI loads, the API is ready.&lt;/p&gt;
&lt;h3 id=&quot;rspamd-config&quot;&gt;rspamd config&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;/etc/rspamd/local.d/gpt.conf&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ini&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;allow_ham&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = true&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;allow_passthrough&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = true&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;enabled&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = true&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;openai&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;url&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;http://192.168.1.5/v1&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;model&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;unsloth/gemma-4-12B-it-qat-GGUF:UD-Q4_K_XL&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;api_key&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;this-is-ignored-on-llama.cpp&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;max_tokens&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = 100&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;temperature&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = 0.1&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;timeout&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = 30.0&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;json&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = true&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;prompt&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;You are an expert email spam classifier. Analyze the following email headers, subject, and body. Respond with a JSON object containing two keys: &apos;probability&apos; (a floating point number between 0.0 and 1.0 indicating spam probability) and &apos;reason&apos; (a short sentence explaining why). Output only the raw JSON object, no markdown code fences.&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;context {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  enabled&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = true&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  level&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  min_messages&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = 5&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  message_ttl&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = 1209600&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  ttl&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = 2592000&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;context&lt;/code&gt; block stores per-recipient digests in Redis (14-day window) and injects them after &lt;strong&gt;5+ messages&lt;/strong&gt; — classification adapts to your inbox, still 100% local.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Local LLM mail classification pipeline&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-self-host-mail-server-local-llm-antispam-03.Dq36A4_R_2rG0cv.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No GPU?&lt;/strong&gt; Raise &lt;code&gt;timeout&lt;/code&gt;; CPU inference is slower but works.&lt;/p&gt;
&lt;p&gt;Use rspamd’s web UI to paste messages and see how they would score — essential for tuning prompts and thresholds.&lt;/p&gt;
&lt;h2 id=&quot;clients&quot;&gt;Clients&lt;/h2&gt;
&lt;p&gt;Desktop: &lt;strong&gt;&lt;a href=&quot;https://www.thunderbird.net/&quot;&gt;Thunderbird&lt;/a&gt;&lt;/strong&gt; — open source, solid search, Android app. Prefer webmail? Mailcow and similar bundles include a panel.&lt;/p&gt;
&lt;h2 id=&quot;ops-control-means-responsibility&quot;&gt;Ops: control means responsibility&lt;/h2&gt;
&lt;p&gt;Modern stacks auto-apply security updates, but &lt;strong&gt;backups and restore drills&lt;/strong&gt; are on you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lost mail data = lost business and personal history&lt;/li&gt;
&lt;li&gt;Run at least one “pretend the disk died” recovery&lt;/li&gt;
&lt;li&gt;Remote access, key rotation, rspamd updates — put them on a checklist&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;Mail server ops and backups&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-self-host-mail-server-local-llm-antispam-04.DP8sQf8z_yhHDC.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;quick-decision-table&quot;&gt;Quick decision table&lt;/h2&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Situation&lt;/th&gt;&lt;th&gt;Recommendation&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Static IP + PTR, privacy-first&lt;/td&gt;&lt;td&gt;Home docker-mailserver + local LLM&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Shaky home network&lt;/td&gt;&lt;td&gt;VPS + same stack&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Just want &lt;code&gt;@mydomain.com&lt;/code&gt;, no MTA&lt;/td&gt;&lt;td&gt;Cloudflare Workers path (e.g. Cloud-Mail)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Team + compliance&lt;/td&gt;&lt;td&gt;Mailcow or managed host + strict backups&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;bottom-line&quot;&gt;Bottom line&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;It works.&lt;/strong&gt; Brief downtime rarely loses mail; DNS/PTR and spam — the hard parts — now have mature answers.&lt;/p&gt;
&lt;p&gt;If you already run a homelab and a local LLM, wiring rspamd is probably the &lt;strong&gt;highest-leverage next step&lt;/strong&gt;: Gmail-class filtering, data never leaves your network.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&quot;https://blog.haschek.at/2026/you-should-selfhost-your-mail.html&quot;&gt;You should self-host your mail server&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/x-3-open-source-tools-autoclip-cloud-mail-open-lovable/&quot; class=&quot;wikilink&quot;&gt;Three open-source tools from X&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/windows-c-drive-cleanup-guide/&quot; class=&quot;wikilink&quot;&gt;A complete guide to cleaning a Windows C: drive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/openclaw-deployment-guide/&quot; class=&quot;wikilink&quot;&gt;OpenClaw deployment guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/cloudflare-workers-access-vibe-coded-apps/&quot; class=&quot;wikilink&quot;&gt;Cloudflare Workers Access for vibe-coded apps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Before You Let Agents Run Loose: AI Context Architecture</title><link>https://ssherun.github.io/en/blog/stack-overflow-ai-context-architecture-build-buy/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/stack-overflow-ai-context-architecture-build-buy/</guid><description>Context architecture is not the RAG pipeline — it&apos;s guardrails, scopes, trust scores and human-in-the-loop. Stack Overflow on infrastructure vs architecture.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;You wired up RAG, but the agent still hallucinates, rifles through the wrong Slack channels, and treats brainstorm threads as shipped facts. The bottleneck is often &lt;strong&gt;context architecture&lt;/strong&gt; — not the model. Stack Overflow’s &lt;a href=&quot;https://stackoverflow.blog/2026/08/14/ndq-ai-context-architecture-build-buy/&quot;&gt;No Dumb Questions episode&lt;/a&gt; lays it out cleanly.&lt;/p&gt;
&lt;h2 id=&quot;three-terms-three-jobs&quot;&gt;Three terms, three jobs&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Agent context guardrails&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1254&quot; src=&quot;https://ssherun.github.io/_astro/inline-stack-overflow-ai-context-architecture-build-buy-01.DZWgRvtA_1TraWF.webp&quot;&gt;&lt;/p&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Term&lt;/th&gt;&lt;th&gt;What it covers&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Context infrastructure&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Store, index, retrieve, deliver context (vector DBs, rules in Markdown, etc.)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Context architecture&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Why and how boundaries are designed — MCP choices, Scopes, trust models, HITL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Context engineering&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Implementation — language, rerankers, indexing tactics&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Their car analogy: car vs boat vs bike is &lt;strong&gt;architecture&lt;/strong&gt;; make and model is &lt;strong&gt;engineering&lt;/strong&gt;; parts sourcing is &lt;strong&gt;infrastructure&lt;/strong&gt;. MCP skews architectural; RAG touches all three.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Where context architecture should be bought&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-stack-overflow-ai-context-architecture-build-buy-03.CpxSlWuQ_1IIbrJ.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-architecture-actually-fixes&quot;&gt;What architecture actually fixes&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. Retrieval boundaries&lt;/strong&gt;&lt;br&gt;
Ask for “tires” and the library returns plane, bike, and wheelbarrow manuals — all valid, none useful. Prompts saying “sports car only” are unreliable. &lt;strong&gt;Curate what the agent can touch.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Agentic memory&lt;/strong&gt;&lt;br&gt;
Once you refine the task to “sports car,” that state should survive sessions. At 10 or 100 parallel agents, memory becomes infrastructure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Guardrails&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Trust tiers: high / medium / low — don’t act blindly on shaky knowledge&lt;/li&gt;
&lt;li&gt;Human-in-the-loop: route to SMEs when data is incomplete&lt;/li&gt;
&lt;li&gt;Goal: &lt;strong&gt;predictable&lt;/strong&gt; behavior you can delegate&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;4. Two-layer permissions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inherit source permissions (no channel access → no agent access)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scopes&lt;/strong&gt; narrow further: “I can see the company, but you only care about my product area”&lt;/li&gt;
&lt;li&gt;Control write-back too: does output land in the team pool or stay with me?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;the-technical-flow-cast-a-wide-net-then-filter&quot;&gt;The technical flow: cast a wide net, then filter&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Build vs buy crossroads&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-stack-overflow-ai-context-architecture-build-buy-02.e0JfkAjG_iMb4L.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Stack Internal chains: pick retrieval strategy per question → context mapping / tabular grabs → trust scores → &lt;strong&gt;rerank&lt;/strong&gt;. Doug’s metaphor: trawl the ocean, toss oysters, keep the right fish, then size-filter. Good architecture also &lt;strong&gt;fills gaps you didn’t know existed&lt;/strong&gt; (e.g., correct tire PSI for your car model) and stays &lt;strong&gt;model-agnostic&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ash adds &lt;strong&gt;consistency and predictability&lt;/strong&gt; — same question, same answer, across people. That’s the bar for “coworker,” not “toy.” Narrower context also saves &lt;strong&gt;tokens&lt;/strong&gt; — an underrated line item in build-vs-buy math.&lt;/p&gt;
&lt;h2 id=&quot;build-vs-buy-the-hard-part-isnt-code&quot;&gt;Build vs buy: the hard part isn’t code&lt;/h2&gt;
&lt;p&gt;Teams can ship RAG. Ash argues the expensive layer is product philosophy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Conflicts, gaps, and bad data across Slack, Drive, Confluence, Jira…&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trust&lt;/strong&gt;: experts judge “does this match what I expect?”; vibe coders often can’t&lt;/li&gt;
&lt;li&gt;Systematic ranking, filtering, and trust needs design conversations — not just embeddings&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Buying (they pitch Stack Internal) claims ~20 categories of edge cases already earned the hard way.&lt;/p&gt;
&lt;h2 id=&quot;takeaways-for-builders&quot;&gt;Takeaways for builders&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Harness design&lt;/strong&gt; matters as much as model pick — see the Saul Agent 24h startup experiment for the failure mode&lt;/li&gt;
&lt;li&gt;Scopes, trust, and HITL belong in v1, not as post-launch patches&lt;/li&gt;
&lt;li&gt;If you build: how do you resolve conflicts, own dirty data, and earn trust from inexperienced users?&lt;/li&gt;
&lt;li&gt;Tighter context is a &lt;strong&gt;quality and cost&lt;/strong&gt; lever&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&quot;https://stackoverflow.blog/2026/08/14/ndq-ai-context-architecture-build-buy/&quot;&gt;What is AI context architecture? Why not just build your own?&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/kdc-knowledge-engineering-not-files/&quot; class=&quot;wikilink&quot;&gt;KDC: knowledge engineering is not files&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/forceful-systems-fly-off-multi-agent-illusion/&quot; class=&quot;wikilink&quot;&gt;Why virtual-company multi-agent setups fail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/hello-world/&quot; class=&quot;wikilink&quot;&gt;An agent-friendly blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/dual-entry-human-agent-design/&quot; class=&quot;wikilink&quot;&gt;Two product entrances&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Why Build Your WebApp in Canvas Instead of HTML</title><link>https://ssherun.github.io/en/blog/webapp-canvas-instead-of-html/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/webapp-canvas-instead-of-html/</guid><description>Why Google Docs, Sheets, Canva, Miro, and Hivekit’s scheduler paint core UI on Canvas—speed, control, consistency, portability—and when you should not.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;takeaway&quot;&gt;Takeaway&lt;/h2&gt;
&lt;p&gt;Canvas is &lt;strong&gt;not&lt;/strong&gt; a faster drop-in for HTML. It is a lower-level rendering tool: more control, more work that the browser usually does for free. Choose it when your UI stops behaving like a document and starts behaving like a zoomable, pannable scene.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Spatial canvas and scheduling grid imagery&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-webapp-canvas-instead-of-html-01.TB2PPZ3m_ZKdYOL.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;why-big-products-do-this&quot;&gt;Why big products do this&lt;/h2&gt;
&lt;p&gt;The document in Google Docs is a Canvas. So is the sheet in Google Sheets and Excel on the web. Canva and Miro boards are Canvas too—and so is Hivekit’s scheduler, which zooms, pans, and carries heavy interaction.&lt;/p&gt;
&lt;p&gt;These apps must run from high-end machines down to “a potato with wires.” One interesting pattern: functionality that is usually DOM-based is instead drawn on Canvas.&lt;/p&gt;
&lt;h2 id=&quot;what-canvas-is-quick&quot;&gt;What Canvas is (quick)&lt;/h2&gt;
&lt;p&gt;Canvas has been around for 20+ years: a blank surface inside HTML that you draw with JavaScript—high-level calls like &lt;code&gt;fillRect()&lt;/code&gt;, or pixel access via &lt;code&gt;getImageData()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You end up with what is basically a static image. No DOM tree managing layout, no event bubbling system, no reflow pipeline tuned for the device. You own it.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Pixel drawing and layered surfaces&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-webapp-canvas-instead-of-html-02.Du0pf-Rt_vjt6O.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;why-use-it-anyway&quot;&gt;Why use it anyway?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Speed&lt;/strong&gt;: Parsing HTML, building a DOM, applying CSS, and handling interaction is expensive. A “dumb” drawing API often means less middle work and more frames.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Control&lt;/strong&gt;: Infinite boards, huge grids, zoomable workspaces already force virtual scrolling or DOM surgery. At that point, owning rendering can be simpler.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consistency&lt;/strong&gt;: You paint exactly what you specify across devices. Responsive CSS, gradients, and transitions can still diverge across OSes and screens.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Portability&lt;/strong&gt;: Flutter Web and some WASM stacks blit to Canvas; Canvas-style APIs can also map to native drawing stacks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;why-you-usually-should-not&quot;&gt;Why you usually should not&lt;/h2&gt;
&lt;p&gt;There are far more reasons not to use Canvas. A plain &lt;code&gt;&amp;#x3C;input type=&quot;text&quot;&gt;&lt;/code&gt; already gives crisp text, focus and selection, arrow keys, i18n, and screen-reader accessibility.&lt;/p&gt;
&lt;p&gt;For most web apps, the DOM plus solid frameworks still win on maintainability, team workflow, and a11y.&lt;/p&gt;
&lt;h2 id=&quot;when-canvas-is-the-better-fit&quot;&gt;When Canvas is the better fit&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Lots of absolute positioning, irregular shapes, or complex z-order—outside normal document flow.&lt;/li&gt;
&lt;li&gt;You only want to render what is needed: zoom, pan, camera transforms, clipping, tiling, LOD, virtualization.&lt;/li&gt;
&lt;li&gt;You already have a strong internal model of state, geometry, focus, and interaction—and only need a way to visualize it.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;patterns-from-hivekit&quot;&gt;Patterns from Hivekit&lt;/h2&gt;
&lt;h3 id=&quot;centralized-render-scheduling&quot;&gt;Centralized render scheduling&lt;/h3&gt;
&lt;p&gt;A central &lt;code&gt;Renderer&lt;/code&gt; calls layered renderers (background / rows / tasks). Children call &lt;code&gt;scheduleRender()&lt;/code&gt;, which coalesces work into one &lt;code&gt;requestAnimationFrame&lt;/code&gt; pass. They clear and redraw the whole canvas each frame—wasteful in theory, simple in practice, and rarely the bottleneck.&lt;/p&gt;
&lt;h3 id=&quot;multiple-canvas-layers&quot;&gt;Multiple canvas layers&lt;/h3&gt;
&lt;p&gt;A base canvas for relatively static plan content; an &lt;code&gt;InteractionRenderer&lt;/code&gt; on top for frequent hover/highlight frames that draw only a few bounds.&lt;/p&gt;
&lt;h3 id=&quot;styles-coordinates-and-dpr&quot;&gt;Styles, coordinates, and DPR&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Keep styles in a separate object (like CSS extracted from markup).&lt;/li&gt;
&lt;li&gt;Centralize domain→pixel helpers (&lt;code&gt;getXForColumn&lt;/code&gt;, workspace x/y mapping).&lt;/li&gt;
&lt;li&gt;Size the canvas by &lt;code&gt;devicePixelRatio&lt;/code&gt;, then &lt;code&gt;ctx.scale&lt;/code&gt; so business code stays in CSS pixels.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;hit-testing-and-events&quot;&gt;Hit-testing and events&lt;/h3&gt;
&lt;p&gt;Build a screen-space bounding-box index; for large sets, add axis indices or an R-tree. Use global mouse/keyboard listeners with register/deregister lifecycles for element callbacks.&lt;/p&gt;
&lt;h2 id=&quot;how-to-decide&quot;&gt;How to decide&lt;/h2&gt;
&lt;p&gt;Default to the DOM. Reach for Canvas when the heart of the app is a large spatial workspace with complex positioning, zoom/pan, or thousands of visual elements—and you are willing to build interaction, hit-testing, scaling, and rendering yourself.&lt;/p&gt;
&lt;p&gt;Do not pick Canvas because it “sounds fast.” If the UI is a document, use a document model. If it is a scene, use a scene model.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://hivekit.io/blog/why-you-might-want-to-build-your-webapp-in-canvas-instead-of-html/&quot;&gt;Why you might want to build your WebApp in Canvas instead of HTML&lt;/a&gt; (Hivekit)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/design-without-designing/&quot; class=&quot;wikilink&quot;&gt;Design Without Designing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-ui-design-workflow/&quot; class=&quot;wikilink&quot;&gt;Why AI-generated UI is not shippable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/stitch-claude-ai-design-workflow/&quot; class=&quot;wikilink&quot;&gt;Google Stitch 2.0 + Claude Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/software-engineering-splits-three/&quot; class=&quot;wikilink&quot;&gt;Software engineering is splitting into three layers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Whatnot&apos;s CPO: &quot;We regret that the PM function exists&quot;</title><link>https://ssherun.github.io/en/blog/whatnot-cpo-regrets-pm-exists/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/whatnot-cpo-regrets-pm-exists/</guid><description>Whatnot CPO Tom Verrilli on Lenny: fewer, more senior PMs staffed to problems, not headcount. AI makes validation cheap, so product theater can&apos;t hide.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Lenny’s recent &lt;a href=&quot;https://www.lennysnewsletter.com/p/this-cpo-regrets-that-product-management&quot;&gt;interview&lt;/a&gt; with Whatnot CPO &lt;strong&gt;Tom Verrilli&lt;/strong&gt; (ex-Twitch CPO, Twitter product growth) comes with a sharp title: “We regret that the product-management function exists.” He is not arguing to fire every PM. The real claim is:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stop treating “one PM per N engineers” as the default org chart.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;in-one-sentence&quot;&gt;In one sentence&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Product org structure debate&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1218&quot; src=&quot;https://ssherun.github.io/_astro/inline-whatnot-cpo-regrets-pm-exists-01.BRcPQ_Fb_GtWCn.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;PM is a craft you learn by doing, not a credential. Defaulting to more PMs steals reps from engineers and designers who should be making decisions. A better shape is &lt;strong&gt;fewer, more senior, staffed to problems&lt;/strong&gt;; managers still spend most of their time as ICs. Once AI drives the cost of validation down, “alignment-only” product theater has nowhere to hide.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Staff by problem, not by headcount&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-whatnot-cpo-regrets-pm-exists-03.D7oYbI8a_ZDKV42.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;how-whatnot-staffs&quot;&gt;How Whatnot staffs&lt;/h2&gt;
&lt;p&gt;Whatnot, a livestream shopping platform, deliberately runs the product org lean: about &lt;strong&gt;20–22 PMs&lt;/strong&gt; cover buyer, seller, and trust/risk. In two years they saw &lt;strong&gt;30,000+ PM applications and hired one&lt;/strong&gt;. Interviews are not “how I drive alignment.” They hand you a problem and a dataset → write a POV → &lt;strong&gt;defend it live&lt;/strong&gt;. People who tell a good story but cannot think get exposed on the first follow-up.&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Dimension&lt;/th&gt;&lt;th&gt;Typical pod&lt;/th&gt;&lt;th&gt;Whatnot&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;How PMs attach&lt;/td&gt;&lt;td&gt;Bound to a team&lt;/td&gt;&lt;td&gt;Bound to a problem/project; re-staff about every six months&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Who owns a new product&lt;/td&gt;&lt;td&gt;Default: PM&lt;/td&gt;&lt;td&gt;Engineer, designer, or PM — same product review&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Manager time&lt;/td&gt;&lt;td&gt;Promotion means leaving the work&lt;/td&gt;&lt;td&gt;PM managers ≥90% IC; CPO about half IC&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Headcount logic&lt;/td&gt;&lt;td&gt;Tracks engineer count&lt;/td&gt;&lt;td&gt;Tracks truly critical projects&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Some engineering teams can go a year without a dedicated PM. A PM may get pulled onto the next hardest problem — buyer, seller, trust — instead of babysitting notifications for three years.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Product theater when validation is cheap&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-whatnot-cpo-regrets-pm-exists-04.Dd9vLadV_cwplE.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-regret-actually-means&quot;&gt;What “regret” actually means&lt;/h2&gt;
&lt;p&gt;Early internet companies often had founders talking straight to engineers and designers. Scale requires delegation, but the first people you delegate to are already in the room, not a separate caste of decision specialists. The industry later froze a pod ratio of roughly “6 engineers + designer + PM + EM,” and then stuffed PMs into places that did not need them.&lt;/p&gt;
&lt;p&gt;Tom’s line is blunt: hire too many PMs and you &lt;strong&gt;babysit&lt;/strong&gt; engineers and designers who could decide. They are not incapable. They were never forced to practice.&lt;/p&gt;
&lt;p&gt;So “we regret that PM exists” is a &lt;strong&gt;forcing function&lt;/strong&gt;: hire a PM only when there is a clear need, not to complete a template. The real variables are culture and founder style, not a simple B2B vs B2C split.&lt;/p&gt;
&lt;h2 id=&quot;ai-unlocks-data-not-decks&quot;&gt;AI unlocks data, not decks&lt;/h2&gt;
&lt;p&gt;His bet: &lt;strong&gt;the biggest unlock for PMs is data science, not prototypes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In 2017, an Amazon L7 data scientist needed a week or two for a cohort or regression. A PM can now pull the same cut in Hex in minutes to an afternoon. He spends more time in data than at any point in his career, and fewer hours in meetings with DS. He uses Claude Code to estimate timelines and chase the order of a new-user modal; on a livestream he hears a user complain and checks the code on the spot to separate bug from misunderstanding.&lt;/p&gt;
&lt;p&gt;The side effect is honest: traditional DS can become “reviewers of amateur analysis.” A better destination is upstream — data engineering, attribution, tracking, label quality. &lt;strong&gt;Using AI to fetch numbers does not excuse you from owning the quality of the analysis.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Product theater (stakeholders, alignment, storytelling) was rewarded for five years. Theater survives only while the real work is hard to verify. When verification gets cheap, people who only present have no cover.&lt;/p&gt;
&lt;h2 id=&quot;skills-going-down-vs-skills-going-up&quot;&gt;Skills going down vs skills going up&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Senior IC working with engineers&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1880&quot; height=&quot;1253&quot; src=&quot;https://ssherun.github.io/_astro/inline-whatnot-cpo-regrets-pm-exists-02.B4xVIFLk_Zn9oHf.webp&quot;&gt;&lt;/p&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Going down&lt;/th&gt;&lt;th&gt;Going up&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;”How I drive alignment”&lt;/td&gt;&lt;td&gt;Systems thinking: macro and micro in the same person&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Political narrative&lt;/td&gt;&lt;td&gt;Being able to say what you built and where you decided&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Pretty presentation&lt;/td&gt;&lt;td&gt;What if it goes green? What if it goes red? If you cannot answer, you have not thought it through&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The product-review mantra:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What do we do if the experiment is green? What do we do if it’s red?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A harder line: when you hear “this is complicated,” it usually is not — &lt;strong&gt;leadership will not call it&lt;/strong&gt;. Everyone knew Twitter’s 140-character limit should go; a working group killed the work with delay. It shipped about two years after he left. Nobody died.&lt;/p&gt;
&lt;h2 id=&quot;three-mental-models-that-hold-up&quot;&gt;Three mental models that hold up&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The accordion&lt;/strong&gt;: pull it open to get strategy and mechanism clear → compress to the smallest V1 and ship → pull it open again to review. Only opening is talk. Only compressing is throwing spaghetti.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Know then go&lt;/strong&gt;: think through what explodes if you scale 1,000×, then ship anyway.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Averages lie&lt;/strong&gt;: a 3% adoption rate can look like a kill; for one group it may be 100% of the use case. When data and anecdotes collide, he takes Bezos’s rule — &lt;strong&gt;believe the anecdote&lt;/strong&gt;. Hitting internal goals 50% of the time is enough; assume half your calls are wrong.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Leadership posture flips too: not “hire and get out of the way,” but &lt;strong&gt;verify then trust&lt;/strong&gt;. A CEO can clear the calendar and sit with the team in tickets, code, and data. Review becomes “us vs the problem,” not “you vs the reviewer.”&lt;/p&gt;
&lt;h2 id=&quot;for-indie-products-and-small-teams&quot;&gt;For indie products and small teams&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Ask whether you need a PM before you ask who to hire.&lt;/li&gt;
&lt;li&gt;Do not promote your best IC into a person who only attends meetings.&lt;/li&gt;
&lt;li&gt;Get into the data and the code yourself — AI has already collapsed the old “ask DS / ask eng for an estimate” gate.&lt;/li&gt;
&lt;li&gt;Staff to problems, not to a headcount template.&lt;/li&gt;
&lt;li&gt;Watch for product theater: in a world you can verify, alignment-only value is collapsing.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The caveat is real: Whatnot already has a strong product culture and an extreme hiring funnel. A huge org with weak alignment should not copy the org chart blindly. He says it himself — &lt;strong&gt;there is no single correct way to do product management.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Full notes live in the second brain: &lt;code&gt;创业商业/Whatnot-CPO后悔产品经理存在-Lenny访谈要点.md&lt;/code&gt;. Original episode: &lt;a href=&quot;https://www.lennysnewsletter.com/p/this-cpo-regrets-that-product-management&quot;&gt;Lenny’s Newsletter&lt;/a&gt; · &lt;a href=&quot;https://www.youtube.com/watch?v=ruvis-VWg2s&quot;&gt;YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/coding-agents-reshape-epd/&quot; class=&quot;wikilink&quot;&gt;How coding agents reshape engineering, product, and design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/taste-at-speed-pm-skill/&quot; class=&quot;wikilink&quot;&gt;Taste at Speed: when building is cheap, PM skill changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-organization-redesign/&quot; class=&quot;wikilink&quot;&gt;AI made people faster. Why didn’t the company get stronger?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Three open-source tools: AutoClip, Cloud-Mail, Open Lovable</title><link>https://ssherun.github.io/en/blog/x-3-open-source-tools-autoclip-cloud-mail-open-lovable/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/x-3-open-source-tools-autoclip-cloud-mail-open-lovable/</guid><description>Three X threads, three pipelines: auto-cut long video, self-host email, clone a site into React. Who each is for, where it breaks, and how to verify fast.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Three “this looks delicious” open-source recs showed up on X in a row. The theme is the same: &lt;strong&gt;use AI to turn a heavy job into a pipeline&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AutoClip&lt;/strong&gt;: long video → many short clips&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud-Mail&lt;/strong&gt;: one domain → a usable mail stack&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open Lovable&lt;/strong&gt;: one website → a React clone you can run locally&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;Three pipeline workbenches&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-x-3-open-source-tools-autoclip-cloud-mail-open-lovable-01.Doyrkm_9_GrqKM.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;I am not here to retweet. Three questions for each:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Should I use this at all?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Where will I step on a rake?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What is the fastest verification so I do not waste time?&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/i/status/2048258518801686637&quot;&gt;https://x.com/i/status/2048258518801686637&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/i/status/2048349647949778982&quot;&gt;https://x.com/i/status/2048349647949778982&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/i/status/2048398366304858179&quot;&gt;https://x.com/i/status/2048398366304858179&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;1-autoclip-auto-cut-video-turn-long-inventory-into-a-short-form-library&quot;&gt;1) AutoClip: auto-cut video (turn long inventory into a short-form library)&lt;/h2&gt;
&lt;p&gt;In one line: if you already have a stable stock of long content, AutoClip’s value is not “artful editing.” It is &lt;strong&gt;taking throughput from 0 to 1&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Repo: &lt;code&gt;https://github.com/zhouxiaoka/autoclip&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;who-it-is-for&quot;&gt;Who it is for&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;At least one 30–120 minute piece a week (livestream VODs, podcasts, interviews, courses)&lt;/li&gt;
&lt;li&gt;You care more about batch output than polishing every clip&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;where-you-will-probably-get-hurt&quot;&gt;Where you will probably get hurt&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Transcription sets the ceiling&lt;/strong&gt;: on spoken Chinese, shaky ASR will mis-identify the highlights.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compute and cost&lt;/strong&gt;: understand / transcribe / slice is a multi-step job. Local may eat GPU; cloud may eat money.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copyright and platform rules&lt;/strong&gt;: reuse and derivative work are your problem, not the tool’s.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;fastest-verification-just-do-this&quot;&gt;Fastest verification (just do this)&lt;/h3&gt;
&lt;p&gt;Pick one “representative” 30–60 minute piece. Judge only three things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Does it produce a reasonable cut timeline?&lt;/li&gt;
&lt;li&gt;Are the titles human language?&lt;/li&gt;
&lt;li&gt;Can at least 30% of the clips actually be posted?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If those three fail, do not tune parameters. Change the route.&lt;/p&gt;
&lt;h2 id=&quot;2-cloud-mail-self-hosted-mail-on-cloudflare-workers-zero-server-bill&quot;&gt;2) Cloud-Mail: self-hosted mail on Cloudflare Workers (zero server bill)&lt;/h2&gt;
&lt;p&gt;In one line: this class of project solves “&lt;strong&gt;I want mail on my own domain and I do not want to keep a server&lt;/strong&gt;.” The real kill criteria are &lt;strong&gt;deliverability and security&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Most likely repo: &lt;code&gt;https://github.com/maillab/cloud-mail&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;why-it-is-worth-a-look&quot;&gt;Why it is worth a look&lt;/h3&gt;
&lt;p&gt;Classic self-hosted mail is heavy: MTA, anti-spam, inbox placement, ops. A Cloudflare Workers path usually splits the complexity:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Inbound&lt;/strong&gt;: Cloudflare Email Routing / webhook / Worker entry&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Outbound&lt;/strong&gt;: a third-party sender (Resend, MailChannels, and so on)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;where-you-will-probably-get-hurt-1&quot;&gt;Where you will probably get hurt&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Deliverability&lt;/strong&gt;: “can send” ≠ “lands in the inbox.” SPF / DKIM / DMARC, domain reputation, and send-volume policy do not go away.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vendor dependence&lt;/strong&gt;: quotas and policies on Workers, Email Routing, and the sender can change overnight.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sensitive data&lt;/strong&gt;: mail is high-sensitivity. Self-hosting means you own permissions, audit, and key management more seriously.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;a-safer-way-to-use-it&quot;&gt;A safer way to use it&lt;/h3&gt;
&lt;p&gt;Treat it as a &lt;em&gt;controlled&lt;/em&gt; alternative. Do not put critical business on it on day one:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Personal mail + a small allowlist first&lt;/li&gt;
&lt;li&gt;Watch deliverability for 1–2 weeks, then decide whether to migrate&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;3-open-lovable-clone-a-site-into-a-react-project-a-prototype--homework-accelerator&quot;&gt;3) Open Lovable: clone a site into a React project (a prototype / homework accelerator)&lt;/h2&gt;
&lt;p&gt;In one line: it is “turn a reference site into an editable starting point.” Great for MVPs. Do not treat it as a “clone and ship” machine.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Repo: &lt;code&gt;https://github.com/firecrawl/open-lovable&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;who-it-is-for-1&quot;&gt;Who it is for&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Front-end / indie developers who need an MVP fast&lt;/li&gt;
&lt;li&gt;You want a pretty landing-page structure as editable code&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;where-you-will-probably-get-hurt-2&quot;&gt;Where you will probably get hurt&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Auth / dynamic content / anti-bot&lt;/strong&gt;: if it is not a static site, you may get nothing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interaction ceiling&lt;/strong&gt;: it can &lt;em&gt;look&lt;/em&gt; right without the business logic. Complex flows you still write.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Legal and ethics&lt;/strong&gt;: fine for learning and prototypes; be careful with a commercial launch of a clone.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;how-i-would-use-it-fast-without-crashing&quot;&gt;How I would use it (fast, without crashing)&lt;/h3&gt;
&lt;p&gt;Use it for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Landing / marketing-site structure&lt;/li&gt;
&lt;li&gt;Component breakdown (layout, style, motion)&lt;/li&gt;
&lt;li&gt;Information-architecture comparison&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Do not use it for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cloning a competitor’s full product and shipping it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;Cuts, delivery, and a prototype bench&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-x-3-open-source-tools-autoclip-cloud-mail-open-lovable-02.C8uBQ26R_1ndFUB.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;so--worth-rushing&quot;&gt;So — worth rushing?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;You make content and have long-video inventory&lt;/strong&gt;: try &lt;strong&gt;AutoClip&lt;/strong&gt; first (one representative piece)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You want mail on your domain and hate ops&lt;/strong&gt;: look at &lt;strong&gt;Cloud-Mail&lt;/strong&gt;, but treat deliverability/security as priority one&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You want a front-end prototype fast&lt;/strong&gt;: use &lt;strong&gt;Open Lovable&lt;/strong&gt; (prototype, not a clone launch)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you tell me which of the three you actually care about (cuts / mail / front-end prototype), that path can be turned into a one-page checklist you can run and get a result.&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/learn-by-scraping/&quot; class=&quot;wikilink&quot;&gt;When I learn a new field, I scrape it first&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/cli-ai-revival/&quot; class=&quot;wikilink&quot;&gt;CLI: the command-line revival in the AI era&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/agent-skills-hub/&quot; class=&quot;wikilink&quot;&gt;Agent Skills Hub: finding and managing good Skills&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Notes on YouMind&apos;s non-consensus startup choices</title><link>https://ssherun.github.io/en/blog/youmind-nonconsensus-startup-choices/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/youmind-nonconsensus-startup-choices/</guid><description>Reading Yubo&apos;s YouMind recap: calibrate will, can and worth before methodology; find direction in dense interviews; don&apos;t let the fundraising story fool you.</description><pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Source: Frank Wang 玉伯 (@lifesinger), &lt;em&gt;Non-consensus choices on the YouMind journey&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Link: &lt;a href=&quot;https://x.com/lifesinger/status/2049074014727844246&quot;&gt;https://x.com/lifesinger/status/2049074014727844246&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is not a “startup success” narrative. It is a method that stays close to the ground: calibrate yourself first, then push decisions with first-hand user insight, and drop org, growth, and founder stamina onto what you can execute &lt;em&gt;now&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A founder talking with a user&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-youmind-nonconsensus-startup-choices-01.DvuLgMyz_22IJpu.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-five-most-non-consensus-moves-as-i-read-them&quot;&gt;The five most non-consensus moves (as I read them)&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Calibrate yourself before you talk methodology&lt;/strong&gt;: will / can / worth comes before “what product should I build.”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The fundraising story will brainwash the founder&lt;/strong&gt;: tell the same pitch long enough and assumptions start to feel like facts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Direction comes from dense interviews, but the answer often sits outside the tool&lt;/strong&gt;: the surface pain is a pile of tools; the deep pain is taste, cadence, stamina, and how material is structured.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;For agents, the scarce thing is not execution — it is taste and stamina&lt;/strong&gt;: an LLM can fill explicit knowledge; it cannot own tacit skill for you.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Org is not “managing engineers”&lt;/strong&gt;: put engineers/agents at the decision tip; PM/design serve, and their core gift is subtraction. Replace OKR-style path control with GPA.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;the-through-line-in-order-of-importance&quot;&gt;The through-line (in order of importance)&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A startup is not “what I want to build.” It is will / can / worth.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Will: often a rebound from the fear of wasting years inside a big company.&lt;/li&gt;
&lt;li&gt;Can: knowing your edge matters more than confidence. Do not pick a fight you cannot win.&lt;/li&gt;
&lt;li&gt;Worth: the day you raise and hire, incentives and decision rights have to be explicit. “Let’s do something meaningful together” will not carry a long collaboration.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;One of fundraising’s biggest risks: a grand narrative brainwashes &lt;em&gt;you&lt;/em&gt;.&lt;/strong&gt;
Repeat the same story to VCs and you start believing it must be right — then you drift from real users and real problems.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Find direction with dense user insight; the hard part is seeing pain that is not a tool gap.&lt;/strong&gt;
The author interviewed 800+ creators. On the surface everyone was “stitching tools.” Underneath: topic selection, taste, fragment management, and the rhythm of shipping for years.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A non-consensus take on agents/tools: what is scarce is taste (tacit knowledge) and stamina.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LLMs are good at explicit knowledge. Taste is the kind of skill you cannot fully say out loud; it sets direction before you write a prompt.&lt;/li&gt;
&lt;li&gt;The “sprite” metaphor is sharp: memory (a fragment library) + skills (a toolchain) + a soul (your taste). It does not write for you. It makes creation available at any moment.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A non-consensus take on org: flip the pyramid, replace OKR with GPA.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Engineers/agents sit at the tip, with more direct decision rights. PM/design provide service; the core contribution is subtraction.&lt;/li&gt;
&lt;li&gt;GPA: Goal (authoritarian) → Priority (centralized democracy) → Alternatives (full democracy).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&quot;Taste and stamina at the tip&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-youmind-nonconsensus-startup-choices-02.vpPk9YlH_13BWEl.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;six-questions-i-would-ask-myself&quot;&gt;Six questions I would ask myself&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Is the thing I want to build coming from &lt;em&gt;will&lt;/em&gt;, or from wanting out of my current situation?&lt;/li&gt;
&lt;li&gt;What is my hardest “can” boundary? Which gaps will not close in three months?&lt;/li&gt;
&lt;li&gt;If I raised nothing (or less), would this still work? How would I rewrite the business and the pace?&lt;/li&gt;
&lt;li&gt;What evidence from the last month shows I was captured by a narrative? (Decisions that treated hypotheses as facts.)&lt;/li&gt;
&lt;li&gt;Have I misread a real user pain as “a better tool / a stronger agent”?&lt;/li&gt;
&lt;li&gt;Am I offering features, or a relationship the user can actually rely on?&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;reservations-so-this-does-not-become-a-silver-bullet&quot;&gt;Reservations (so this does not become a silver bullet)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;800+ interviews are a superpower&lt;/strong&gt;, but turning insight into a testable roadmap still needs a method: a hypothesis list, experiment design, a falsification threshold.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;An inverted pyramid feels natural on a small team.&lt;/strong&gt; At larger scale, keeping decisions clear and avoiding a shadow power structure is a different problem.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;a-list-i-would-actually-run&quot;&gt;A list I would actually run&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;5–10 user interviews a week&lt;/strong&gt; (even 20 minutes). Ask: what they most fear losing control of, the most painful recent miss, and the real trigger that would make them pay.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Write a “will not do” list&lt;/strong&gt;: battles this team will not fight (for example anything that requires huge compute or a channel advantage).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Split the external story from internal decisions&lt;/strong&gt;: vision is fine outside; internal milestones must be testable (retention, payment, activation, cycle time).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Design subtraction on purpose&lt;/strong&gt;: a weekly meeting that deletes features/reqs often raises product density more than a meeting that adds them.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/first-principles-startup-review/&quot; class=&quot;wikilink&quot;&gt;First-principles review with AI: a startup plan dies in 48 hours&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-customer-service-revenue/&quot; class=&quot;wikilink&quot;&gt;Support is not a cost center&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/whatnot-cpo-regrets-pm-exists/&quot; class=&quot;wikilink&quot;&gt;Whatnot’s CPO: “We regret that the PM function exists”&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Why &quot;virtual company&quot; multi-agent setups usually fail</title><link>https://ssherun.github.io/en/blog/forceful-systems-fly-off-multi-agent-illusion/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/forceful-systems-fly-off-multi-agent-illusion/</guid><description>Naming agents PM, architect, developer and QA looks like a company. Mostly it kills information at every handoff. The value is parallel search, not a relay.</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently read a hard, long essay. The title is long. The claim fits in one line:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The most common multi-agent failure is not a weak model. It is a system designed wrong from the first box.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A lot of teams start here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a PM agent owns requirements&lt;/li&gt;
&lt;li&gt;an architect agent owns the technical plan&lt;/li&gt;
&lt;li&gt;a Dev agent implements&lt;/li&gt;
&lt;li&gt;a QA agent tests&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then they pass documents, conclusions, and tickets like departments.&lt;/p&gt;
&lt;p&gt;The design is intoxicating.&lt;/p&gt;
&lt;p&gt;It is easy to explain, easy to demo, easy to draw. Especially in a slide for management: look, we already have an “AI team.”&lt;/p&gt;
&lt;p&gt;That is also the problem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Looking like an organization is not the same as being an efficient problem-solving system.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I would put the usual ending in four Chinese characters — 力大砖飞 — &lt;em&gt;so much force the bricks fly off&lt;/em&gt;:&lt;/p&gt;
&lt;h2 id=&quot;force-the-system-hard-enough-and-it-flies-apart&quot;&gt;Force the system hard enough and it flies apart&lt;/h2&gt;
&lt;p&gt;Stack more agents, split finer roles, draw a more complete process, and you do not get more stability. You get distortion, drift, and loss of control.&lt;/p&gt;
&lt;p&gt;Not because you lack compute. Because you designed a system heavy with &lt;em&gt;organizational hallucination&lt;/em&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt=&quot;Information flying apart at the handoff&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-forceful-systems-fly-off-multi-agent-illusion-01.BvZ_DIW0_aFFiN.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;1-why-virtual-company-multi-agent-is-so-easy-to-misread&quot;&gt;1. Why “virtual company” multi-agent is so easy to misread&lt;/h2&gt;
&lt;p&gt;It matches human intuition.&lt;/p&gt;
&lt;p&gt;Human companies actually work this way:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;product writes the need&lt;/li&gt;
&lt;li&gt;architects draw the boundary&lt;/li&gt;
&lt;li&gt;engineering implements&lt;/li&gt;
&lt;li&gt;QA accepts&lt;/li&gt;
&lt;li&gt;the process walks layer by layer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So when people design a multi-agent system they think:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If this collaboration works for a company, why wouldn’t it work for agents?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sounds airtight.&lt;/p&gt;
&lt;p&gt;The category error:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A human bottleneck is not a model bottleneck.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Humans divide labor because:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;attention is finite&lt;/li&gt;
&lt;li&gt;knowledge has edges&lt;/li&gt;
&lt;li&gt;switching is expensive&lt;/li&gt;
&lt;li&gt;many people need interfaces to connect&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;An LLM is not that.&lt;/p&gt;
&lt;p&gt;The same model can write a spec, write code, write tests, summarize, and review. Its problem was never “unclear job boundaries.” It is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;is the reasoning deep enough?&lt;/li&gt;
&lt;li&gt;is the information complete?&lt;/li&gt;
&lt;li&gt;is the context continuous?&lt;/li&gt;
&lt;li&gt;did intermediate state get dropped?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What a model actually fears is not overlapping roles. It is information loss.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;And a virtual-company multi-agent system is &lt;em&gt;excellent&lt;/em&gt; at manufacturing information loss.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;2-the-fatal-problem-information-dies-in-the-handoff&quot;&gt;2. The fatal problem: information dies in the handoff&lt;/h2&gt;
&lt;p&gt;This is the most valuable sentence in the original piece.&lt;/p&gt;
&lt;p&gt;In a PM → architect → Dev → QA pipeline, what agents pass is usually not full reasoning. It is a compressed conclusion.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the PM agent writes a requirements summary for the architect&lt;/li&gt;
&lt;li&gt;the architect re-understands that summary and writes a technical plan&lt;/li&gt;
&lt;li&gt;the Dev agent re-understands the plan and generates an implementation&lt;/li&gt;
&lt;li&gt;QA validates from the implementation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each hop looks reasonable.&lt;/p&gt;
&lt;p&gt;Each hop does this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;original intent is compressed&lt;/li&gt;
&lt;li&gt;implicit assumptions are omitted&lt;/li&gt;
&lt;li&gt;the reasoning path is cut&lt;/li&gt;
&lt;li&gt;background context is lost&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You get a strange result:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Every baton, taken alone, is defensible. The whole thing has quietly left the original goal.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Locally correct. Globally wrong.&lt;/p&gt;
&lt;p&gt;Teams think the system is stable because every node “has output” and every step “looks normal.”&lt;/p&gt;
&lt;p&gt;The system has already started to drift.&lt;/p&gt;
&lt;p&gt;It does not explode. It distorts slowly.&lt;/p&gt;
&lt;p&gt;That is why &lt;em&gt;bricks flying off&lt;/em&gt; is the right phrase:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you think you are strengthening the system&lt;/li&gt;
&lt;li&gt;you are adding rotational inertia&lt;/li&gt;
&lt;li&gt;when complexity rises, the whole thing slings off&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;3-what-the-labs-actually-do-is-not-a-role-relay&quot;&gt;3. What the labs actually do is not a role relay&lt;/h2&gt;
&lt;p&gt;The original essay’s strongest move is not the critique. It is the contrast with production practice at Anthropic, OpenAI, and Google.&lt;/p&gt;
&lt;p&gt;The conclusion is clean:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Production agent systems at the major labs are almost never a role pipeline.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;anthropic-a-lead-brain--external-state--parallel-exploration&quot;&gt;Anthropic: a lead brain + external state + parallel exploration&lt;/h3&gt;
&lt;p&gt;Keywords:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;context engineering&lt;/li&gt;
&lt;li&gt;&lt;code&gt;progress.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;git history&lt;/li&gt;
&lt;li&gt;orchestrator–worker&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The logic is not “hand the baton to the next role.” It is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one lead agent holds the full goal&lt;/li&gt;
&lt;li&gt;sub-agents explore different directions in parallel&lt;/li&gt;
&lt;li&gt;all results flow &lt;em&gt;back&lt;/em&gt; to the lead for synthesis&lt;/li&gt;
&lt;li&gt;critical progress is written to an explicit state file so the next session can continue&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The shape:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;One brain sends probes to cast a net, then pulls the information back into the same brain to judge.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;openai-spec--runbook--compaction&quot;&gt;OpenAI: spec / runbook / compaction&lt;/h3&gt;
&lt;p&gt;More direct:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;freeze the goal in a spec so the task cannot drift&lt;/li&gt;
&lt;li&gt;record the trail in a runbook&lt;/li&gt;
&lt;li&gt;use compaction to keep a long job continuous&lt;/li&gt;
&lt;li&gt;use skills as stable operating norms&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The key is not division of labor. It is &lt;strong&gt;continuity&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A long task survives not because of role-play, but because the goal is frozen, state is externalized, and the thread stays continuous.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;google-huge-context--persistent-spec-files&quot;&gt;Google: huge context + persistent spec files&lt;/h3&gt;
&lt;p&gt;Google has enormous context windows and still does not bet that “the model will remember everything.”&lt;/p&gt;
&lt;p&gt;They also settle project intent into persistent spec / plan files.&lt;/p&gt;
&lt;p&gt;An important fact:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;No matter how large the window, critical state should still live outside the model.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Three labs, not identical routes, the same principles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the main intent must stay continuous&lt;/li&gt;
&lt;li&gt;critical state must be external&lt;/li&gt;
&lt;li&gt;sub-calls should be parallel supplements, not a role relay&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;4-multi-agent-value-is-not-division-of-labor-it-is-parallel-search&quot;&gt;4. Multi-agent value is not division of labor. It is parallel search&lt;/h2&gt;
&lt;p&gt;This is the line to keep.&lt;/p&gt;
&lt;p&gt;A lot of people think the value is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one thinks&lt;/li&gt;
&lt;li&gt;one does&lt;/li&gt;
&lt;li&gt;one checks&lt;/li&gt;
&lt;li&gt;one verifies&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The real answer:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Most of the value of multi-agent is a larger search surface, not a finer org chart.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Multi-agent is a poor fit for work that &lt;em&gt;must&lt;/em&gt; pass a long context down a chain. It is a good fit for work that can explore several directions at once.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;research ten competitors at once&lt;/li&gt;
&lt;li&gt;search five implementation paths at once&lt;/li&gt;
&lt;li&gt;run three adversarial critiques of one plan&lt;/li&gt;
&lt;li&gt;map several modules’ current state and dependencies at once&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What those jobs share:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;subproblems are relatively independent&lt;/li&gt;
&lt;li&gt;no long relay&lt;/li&gt;
&lt;li&gt;you only need to converge on one judgment at the end&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So the better shape is not:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PM agent → architect agent → Dev agent → QA agent&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It is:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Lead agent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ├─ sub-agent A: search plan 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ├─ sub-agent B: search plan 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ├─ sub-agent C: find counterexamples&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  └─ sub-agent D: verify&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ↓&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    all results return to the lead to converge&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Not a relay race. A parallel net.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt=&quot;A lead brain converging parallel work&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-forceful-systems-fly-off-multi-agent-illusion-02.DL4rpVOv_ZuLub2.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;5-the-best-identity-for-a-verifier-agent-the-naysayer-not-the-next-baton&quot;&gt;5. The best identity for a verifier agent: the naysayer, not the next baton&lt;/h2&gt;
&lt;p&gt;One more practical reminder.&lt;/p&gt;
&lt;p&gt;If you introduce a second or third agent, do not make all of them “continue the work.”&lt;/p&gt;
&lt;p&gt;A better use: let some of them play &lt;strong&gt;naysayer&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;That is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;hunt holes&lt;/li&gt;
&lt;li&gt;hunt edge cases&lt;/li&gt;
&lt;li&gt;hunt logical conflicts&lt;/li&gt;
&lt;li&gt;audit implicit assumptions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Their job is not to take the baton. It is to oppose.&lt;/p&gt;
&lt;p&gt;This matters.&lt;/p&gt;
&lt;p&gt;If every agent inherits the previous agent’s direction and pushes on, the system amplifies upstream error.&lt;/p&gt;
&lt;p&gt;If some agents exist only to look the other way, the system gets more stable.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A verifier agent should be a naysayer, not the next station on the line.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&quot;6-a-more-reliable-multi-agent-baseline&quot;&gt;6. A more reliable multi-agent baseline&lt;/h2&gt;
&lt;p&gt;If I compress the essay into operating principles:&lt;/p&gt;
&lt;h3 id=&quot;1-judge-the-information-dependence-of-the-task-before-you-count-agents&quot;&gt;1. Judge the information-dependence of the task before you count agents&lt;/h3&gt;
&lt;p&gt;Do not start with “how many agents.” Start with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;does this need continuous reasoning?&lt;/li&gt;
&lt;li&gt;are the subproblems tightly coupled?&lt;/li&gt;
&lt;li&gt;can it split into independent search branches?&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-continuous-reasoning-work-prefer-one-agent--strong-context-engineering&quot;&gt;2. Continuous-reasoning work: prefer one agent + strong context engineering&lt;/h3&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a complex design&lt;/li&gt;
&lt;li&gt;a long implementation plan&lt;/li&gt;
&lt;li&gt;a cross-module architecture call&lt;/li&gt;
&lt;li&gt;a problem with deep dependencies&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These jobs die when information fractures.&lt;/p&gt;
&lt;h3 id=&quot;3-parallel-exploration-work-then-use-multiple-agents&quot;&gt;3. Parallel-exploration work: &lt;em&gt;then&lt;/em&gt; use multiple agents&lt;/h3&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;multi-competitor research&lt;/li&gt;
&lt;li&gt;multi-plan search&lt;/li&gt;
&lt;li&gt;multi-angle risk scan&lt;/li&gt;
&lt;li&gt;multi-draft generation&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;4-you-must-have-an-explicit-state-layer&quot;&gt;4. You must have an explicit state layer&lt;/h3&gt;
&lt;p&gt;At least:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;spec (frozen goal)&lt;/li&gt;
&lt;li&gt;progress (the trail)&lt;/li&gt;
&lt;li&gt;runbook (how we operate)&lt;/li&gt;
&lt;li&gt;git history / the filesystem (an objective anchor)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;5-the-lead-agent-must-hold-the-final-complete-goal&quot;&gt;5. The lead agent must hold the final, complete goal&lt;/h3&gt;
&lt;p&gt;All information flows back to a subject that &lt;em&gt;knows the whole intent&lt;/em&gt;. It does not keep passing the baton.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;7-why-this-matters-now&quot;&gt;7. Why this matters now&lt;/h2&gt;
&lt;p&gt;A lot of teams will fall into the “multi-agent org hallucination” in the next stretch.&lt;/p&gt;
&lt;p&gt;Why:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the diagram looks great&lt;/li&gt;
&lt;li&gt;the concept sells&lt;/li&gt;
&lt;li&gt;the structure looks like an “advanced system”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A real problem-solving system does not win by looking like a company. It wins by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;not losing information&lt;/li&gt;
&lt;li&gt;not drifting intent&lt;/li&gt;
&lt;li&gt;making state traceable&lt;/li&gt;
&lt;li&gt;making verification adversarial&lt;/li&gt;
&lt;li&gt;being able to converge&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you cannot do those, more agents only pile complexity.&lt;/p&gt;
&lt;p&gt;So &lt;em&gt;bricks flying off&lt;/em&gt; is a good reminder word.&lt;/p&gt;
&lt;p&gt;It punctures the hallucination in one hit:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;More agents, finer roles, a more company-like org chart — that is not a stronger system.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Often the opposite.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;close&quot;&gt;Close&lt;/h2&gt;
&lt;p&gt;The next time I see a row of “AI PM, AI architect, AI Dev, AI QA,” my first reaction will not be “advanced.”&lt;/p&gt;
&lt;p&gt;I will ask four questions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Are these agents passing full reasoning, or compressed conclusions?&lt;/li&gt;
&lt;li&gt;Who holds the final complete goal?&lt;/li&gt;
&lt;li&gt;Is state explicitly externalized?&lt;/li&gt;
&lt;li&gt;Are sub-agents searching in parallel, or relaying on a line?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you cannot answer, the system is probably:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Looking busy. Actually drifting.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And when complexity keeps rising, it starts to —&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;force so hard the bricks fly off.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;diagrams&quot;&gt;Diagrams&lt;/h2&gt;
&lt;h3 id=&quot;figure-1-the-wrong-architecture-vs-the-right-one&quot;&gt;Figure 1: the wrong architecture vs the right one&lt;/h3&gt;
&lt;pre class=&quot;mermaid&quot;&gt;flowchart LR
  subgraph Wrong[&quot;Wrong: virtual-company relay&quot;]
    A[PM agent] --&gt; B[Architect agent]
    B --&gt; C[Dev agent]
    C --&gt; D[QA agent]
    D --&gt; E[Output]
  end

  subgraph Right[&quot;Right: lead brain + parallel search + converge&quot;]
    O[&quot;Lead agent\nholds the full goal&quot;]
    S[(&quot;spec / progress / runbook / git&quot;)]
    O --&gt; W1[&quot;Sub-agent A\nexplore a plan&quot;]
    O --&gt; W2[&quot;Sub-agent B\nparallel research&quot;]
    O --&gt; W3[&quot;Sub-agent C\nadversarial check&quot;]
    W1 --&gt; O
    W2 --&gt; O
    W3 --&gt; O
    O &amp;#x3C;--&gt; S
    O --&gt; R[Converged output]
  end&lt;/pre&gt;
&lt;h3 id=&quot;figure-2-how-information-dies-in-the-handoff&quot;&gt;Figure 2: how information dies in the handoff&lt;/h3&gt;
&lt;pre class=&quot;mermaid&quot;&gt;flowchart LR
  I[Full intent] --&gt; J[Requirements summary]
  J --&gt; K[Technical conclusion]
  K --&gt; L[Implementation conclusion]
  L --&gt; M[Test conclusion]
  M --&gt; N[Final output]

  I -.reasoning still complete.-&gt; I
  J -.compression starts.-&gt; J
  K -.implicit assumptions drop.-&gt; K
  L -.context keeps decaying.-&gt; L
  M -.locally correct, globally drifted.-&gt; M&lt;/pre&gt;
&lt;h3 id=&quot;figure-3-a-more-reliable-multi-agent-baseline&quot;&gt;Figure 3: a more reliable multi-agent baseline&lt;/h3&gt;
&lt;pre class=&quot;mermaid&quot;&gt;flowchart TB
  O[&quot;Lead agent\nfull goal / final judgment&quot;]
  S[(&quot;Shared state\nspec / progress / runbook / git&quot;)]

  O --&gt; R1[Research sub-agent]
  O --&gt; R2[Plan sub-agent]
  O --&gt; R3[Verify sub-agent]
  O --&gt; R4[Naysayer sub-agent]

  R1 --&gt; O
  R2 --&gt; O
  R3 --&gt; O
  R4 --&gt; O

  O &amp;#x3C;--&gt; S&lt;/pre&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Original: &lt;a href=&quot;https://x.com/i/status/2043898494818410731&quot;&gt;https://x.com/i/status/2043898494818410731&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Related: Anthropic context engineering, OpenAI Codex long-horizon tasks, Google context-driven development&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/agent-skills-five-design-patterns/&quot; class=&quot;wikilink&quot;&gt;Five design patterns for Agent Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-multi-advisor-decision-system/&quot; class=&quot;wikilink&quot;&gt;Put Drucker, Munger, and Jobs into an AI decision system&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/wideseek-ai-cp/&quot; class=&quot;wikilink&quot;&gt;Wide + Deep: why a 4B model can punch up&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/gstack-yc-ceo-factory/&quot; class=&quot;wikilink&quot;&gt;gstack: the Claude Code factory YC’s CEO uses&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>AI cannot replace lived experience</title><link>https://ssherun.github.io/en/blog/ai-cannot-replace-human-experience/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/ai-cannot-replace-human-experience/</guid><description>After an AI conference, what stayed was not a demo. It was the part of being human that can&apos;t be compressed: showing up, colliding with the world, living it.</description><pubDate>Sat, 11 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Yizhuang, Beijing. An AI conference had just ended.&lt;/p&gt;
&lt;p&gt;Two days, four sessions, 1,500 people in the room, dozens of speakers, nearly two million watching online. For a lot of attendees it was supposed to be another AI event: models, products, startups, the future.&lt;/p&gt;
&lt;p&gt;What kept the organizers up after the hall emptied was not how strong a model was, or how pretty a product looked. It was a simpler, slightly counter-intuitive feeling:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The stronger AI gets, the more people need to actually live once.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That sounds like a slogan. Put it in today’s context and it is heavier than it looks.&lt;/p&gt;
&lt;p&gt;We are in an era where almost everything can be compressed.&lt;/p&gt;
&lt;p&gt;Books compress into summaries. Research compresses into reports. Meetings compress into minutes. Code compresses into a few prompts and an automatic generation. What AI is doing, at root, is one job: take a process that used to require you to go through it, digest it, and fail at it yourself, and squeeze it into a result.&lt;/p&gt;
&lt;p&gt;That is valuable. The efficiency gain is real. The lower bar is real.&lt;/p&gt;
&lt;p&gt;The problem: &lt;strong&gt;the things that actually matter about a person are often the things that will not compress.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;information-gets-cheaper-experience-gets-more-expensive&quot;&gt;Information gets cheaper. Experience gets more expensive&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;An empty hall after the crowd leaves&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-cannot-replace-human-experience-01.Cxj-PorF_Z1u36zx.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;People used to go to industry events to get information.&lt;/p&gt;
&lt;p&gt;Someone on stage knew something you did not, so you spent time, money, and energy to be there.&lt;/p&gt;
&lt;p&gt;That logic is being rewritten.&lt;/p&gt;
&lt;p&gt;The session ends and social media fills with notes, clips, shorts, excerpted takes — and AI to organize and summarize them. Often someone who stayed home can get denser information in less time.&lt;/p&gt;
&lt;p&gt;If the only goal is “what did they say on stage,” showing up is less and less necessary.&lt;/p&gt;
&lt;p&gt;People still go. They fly. They take the high-speed rail from one city to another, to sit for a few hours or a day or two.&lt;/p&gt;
&lt;p&gt;Why?&lt;/p&gt;
&lt;p&gt;Because information is not experience.&lt;/p&gt;
&lt;p&gt;You can know online what someone said. You cannot get the feeling of &lt;em&gt;I was in the room&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;A sentence lands and the people around you go quiet at the same time. A performance hits and the whole hall lights up. Afterward you talk to a stranger for ten minutes and a viewpoint you would never have searched for opens — none of that is information. It is experience.&lt;/p&gt;
&lt;p&gt;Experience almost cannot be retold. It certainly cannot be substituted.&lt;/p&gt;
&lt;p&gt;You can know someone went to the sea. Hearing the description is not the same as the wind that day.&lt;/p&gt;
&lt;p&gt;So a strange trend will get clearer in the AI era:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The easier information is to get, the scarcer thing is not information. It is having actually been there.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;taste-is-not-studied-it-is-lived&quot;&gt;Taste is not studied. It is lived&lt;/h2&gt;
&lt;p&gt;Talk about AI long enough and the anxiety arrives: if models keep getting stronger, what is left for people?&lt;/p&gt;
&lt;p&gt;A common answer, and one that is easy to underestimate: &lt;strong&gt;taste.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Taste does not grow just because you “saw a lot.” It is not feeding a model a million cases and averaging them.&lt;/p&gt;
&lt;p&gt;Real taste comes from a person who has actually lived.&lt;/p&gt;
&lt;p&gt;You have been in a city, walked a street, smelled the air, talked with someone from a completely different background. Your sense of what is good, what is accurate, what moves people, changes.&lt;/p&gt;
&lt;p&gt;That judgment is not only a knowledge problem. It is a feeling problem.&lt;/p&gt;
&lt;p&gt;AI can mimic a style quickly. It has a much harder time replacing &lt;em&gt;why&lt;/em&gt; a person prefers that style. AI can generate a result efficiently. It has a much harder time replacing &lt;em&gt;why&lt;/em&gt; a person is moved by a particular thing.&lt;/p&gt;
&lt;p&gt;Those “whys” come from life itself.&lt;/p&gt;
&lt;p&gt;Put simply: AI can help you produce. It cannot live for you.&lt;/p&gt;
&lt;p&gt;If someone has no real life experience, not enough friction with the world, what they finally hand an AI is a flat instruction — not a dense judgment.&lt;/p&gt;
&lt;p&gt;In that sense, the class the AI era most needs is not only a tools class. It is a life class.&lt;/p&gt;
&lt;h2 id=&quot;offline-is-not-only-networking-it-is-breaking-the-algorithm&quot;&gt;Offline is not only networking. It is breaking the algorithm&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;A chance meeting in the lobby&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-cannot-replace-human-experience-02.DC5YRoPv_2h4LgU.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;One more thing that is easy to miss:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The offline world is still one of the few spaces recommendation systems have not fully tamed.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Online, what you see, who you meet, what you believe, is increasingly a shape the recommender gave you. You like a kind of content; the system gives you more of it. You follow a kind of person; the platform sends more of them.&lt;/p&gt;
&lt;p&gt;Over time you can mistake that for having seen the world. You are in a more and more refined bubble.&lt;/p&gt;
&lt;p&gt;Offline is different.&lt;/p&gt;
&lt;p&gt;The person next to you at an event might build robots, or make films, or be a student at their first conference, or a founder ten years in. You would never have met in the same recommendation stream. A shared theme put you in the same room.&lt;/p&gt;
&lt;p&gt;A lot of the important sparks are not searched up. They are collided into.&lt;/p&gt;
&lt;p&gt;You do not know the answer first and then ask. You bump into a person, a scene, a way of saying something — and only then realize the world had that question.&lt;/p&gt;
&lt;p&gt;AI is very good at giving you a faster optimal solution.&lt;/p&gt;
&lt;p&gt;A lot of human growth is not completed by optimal solutions. It is completed by accidents that were not on the itinerary.&lt;/p&gt;
&lt;p&gt;Accident is one of the most valuable products of the offline world.&lt;/p&gt;
&lt;h2 id=&quot;showing-up-is-itself-a-signal&quot;&gt;Showing up is itself a signal&lt;/h2&gt;
&lt;p&gt;As AI makes communication cheaper, meeting in person gets more expensive.&lt;/p&gt;
&lt;p&gt;Expensive is not only cost. It is weight.&lt;/p&gt;
&lt;p&gt;When someone could have finished the conversation online and still walks out the door, spends the time, and arrives, the action itself says:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This matters enough that I will be there in person.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That is why a lot of relationships, collaborations, and connections with actual weight will lean &lt;em&gt;more&lt;/em&gt; on offline, not less.&lt;/p&gt;
&lt;p&gt;Online gets more efficient and lighter. Offline is inefficient — and that inefficiency naturally carries seriousness, investment, regard.&lt;/p&gt;
&lt;p&gt;A model cannot send that signal for you.&lt;/p&gt;
&lt;h2 id=&quot;what-ai-cannot-replace-is-the-part-you-have-lived&quot;&gt;What AI cannot replace is the part you have lived&lt;/h2&gt;
&lt;p&gt;If the leftover feeling of that conference compresses to one sentence, it is this:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI will replace a lot of process. It will not replace the experience, judgment, taste, and weight that form after a person has actually lived.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It can get you an answer faster. It cannot give you the life behind the answer.&lt;/p&gt;
&lt;p&gt;It can tidy the world. It cannot collide with the world in your place.&lt;/p&gt;
&lt;p&gt;It can generate language, images, code, even a sense of style. It has a much harder time generating the texture of a life that has been lived.&lt;/p&gt;
&lt;p&gt;That is why, the further AI goes, the less you can afford to live as a person who is only a function.&lt;/p&gt;
&lt;p&gt;If a human is reduced to execute / organize / output, of course they start to look like an outsourcing port for the model.&lt;/p&gt;
&lt;p&gt;The precious part of a person was never only “can do the work.” It is “why I understand the world this way.”&lt;/p&gt;
&lt;p&gt;That “why” comes from what you have read, loved, seen, lost, believed — and from whether you have walked into reality and connected with real people and real scenes.&lt;/p&gt;
&lt;p&gt;That part cannot be outsourced. It cannot be downloaded.&lt;/p&gt;
&lt;h2 id=&quot;at-the-end&quot;&gt;At the end&lt;/h2&gt;
&lt;p&gt;This is not an anti-AI essay.&lt;/p&gt;
&lt;p&gt;The opposite: &lt;em&gt;because&lt;/em&gt; AI is strong enough, we should get clearer about what it is actually good at, and what a person has to keep.&lt;/p&gt;
&lt;p&gt;Tools raise efficiency. People are responsible for experience.&lt;/p&gt;
&lt;p&gt;Tools compress. People grow.&lt;/p&gt;
&lt;p&gt;Tools pave the road. The step forward is still yours to take.&lt;/p&gt;
&lt;p&gt;So instead of only asking whether AI will replace you, ask a more useful question:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If a lot of work can go to AI, what kind of person should I become with the time that frees?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The answer may not be complicated.&lt;/p&gt;
&lt;p&gt;See people. Go to the room. Go through it. Feel it. Do one real thing.&lt;/p&gt;
&lt;p&gt;In this era the scarce resource is no longer knowing more. It is living deeper.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Original: &lt;a href=&quot;https://x.com/Khazix0918/status/2042507385370243139&quot;&gt;@数字生命卡兹克&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-era-clarity-matters/&quot; class=&quot;wikilink&quot;&gt;The scarcest skill in the AI era: saying it clearly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-proof-human/&quot; class=&quot;wikilink&quot;&gt;When a 45-year-old paper is flagged as AI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Google Stitch 2.0 + Claude Code: an AI design workflow</title><link>https://ssherun.github.io/en/blog/stitch-claude-ai-design-workflow/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/stitch-claude-ai-design-workflow/</guid><description>Stitch 2.0 wired to Claude Code over MCP lets one person do in an hour what took weeks. The lock isn&apos;t generated screens, it&apos;s design.md holding it together.</description><pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;the-claim&quot;&gt;The claim&lt;/h2&gt;
&lt;p&gt;Google Stitch 2.0 connected to Claude Code over MCP rewrote the AI-driven product-design loop. &lt;strong&gt;One person can finish, in an hour, professional design work that used to take weeks and $3,000–$10,000.&lt;/strong&gt; The unlock is not “AI generates design.” It is a &lt;code&gt;design.md&lt;/code&gt; file that keeps the design system consistent.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Design and code linked across two screens&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-stitch-claude-ai-design-workflow-01.Bh4ViKHD_WsRv3.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-was-painful-about-the-old-loop&quot;&gt;What was painful about the old loop&lt;/h2&gt;
&lt;h3 id=&quot;cost-of-the-old-process&quot;&gt;Cost of the old process&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Money:&lt;/strong&gt; hiring a designer is $3,000–$10,000&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Time:&lt;/strong&gt; weeks waiting for a Figma file&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Implementation:&lt;/strong&gt; more time and money to land the design in code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Opportunity:&lt;/strong&gt; by the time design lands, product momentum is gone&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;the-usual-ai-design-failure&quot;&gt;The usual AI-design failure&lt;/h3&gt;
&lt;p&gt;Most apps built with AI look like “AI slop.” That is not a model problem. It is a &lt;strong&gt;workflow&lt;/strong&gt; problem:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;features work, logic is correct&lt;/li&gt;
&lt;li&gt;the UI is generic; users decide in two seconds&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;consistency is the real break:&lt;/strong&gt; page one looks fine, page two falls apart&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-stitch-20-actually-changed&quot;&gt;What Stitch 2.0 actually changed&lt;/h2&gt;
&lt;h3 id=&quot;why-it-is-different&quot;&gt;Why it is different&lt;/h3&gt;
&lt;p&gt;Stitch 2.0 is an &lt;strong&gt;AI-native canvas&lt;/strong&gt;. It can:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Take many kinds of input&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;screenshots of an existing app&lt;/li&gt;
&lt;li&gt;inspiration from Dribbble or 21st.dev&lt;/li&gt;
&lt;li&gt;any site URL (reverse-engineer the design)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Generate several variants&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;not one output — a set you can pick from&lt;/li&gt;
&lt;li&gt;steal the best piece of each&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Build a full design system automatically&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;type scale (display, headline, label, title, body)&lt;/li&gt;
&lt;li&gt;primary / secondary / tertiary palettes (complementary colors generated)&lt;/li&gt;
&lt;li&gt;a scale for every hue&lt;/li&gt;
&lt;li&gt;component rules and patterns&lt;/li&gt;
&lt;li&gt;height and depth specs&lt;/li&gt;
&lt;li&gt;dos and don’ts of the design language&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;the-real-invention-designmd&quot;&gt;The real invention: &lt;code&gt;design.md&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Every rule is written into a &lt;strong&gt;&lt;code&gt;design.md&lt;/code&gt;&lt;/strong&gt; file — plain Markdown that captures the whole language.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;That file changes everything.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-working-loop&quot;&gt;The working loop&lt;/h2&gt;
&lt;h3 id=&quot;step-1-design-in-stitch&quot;&gt;Step 1: design in Stitch&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Gather material&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;screenshot the main screens of an existing app&lt;/li&gt;
&lt;li&gt;or grab 2–3 Dribbble images (direction, not a copy)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Write a focused prompt&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what the app does&lt;/li&gt;
&lt;li&gt;which screens you are redesigning&lt;/li&gt;
&lt;li&gt;direction (dark mode, minimal, editorial…)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;name the fonts&lt;/strong&gt; (type is the fastest way to change how an app feels)&lt;/li&gt;
&lt;li&gt;example: a serif for titles, a clean sans for body&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pick the best variant&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;do not take the first output&lt;/li&gt;
&lt;li&gt;pull the best piece of each: type from one, layout from another, color energy from a third&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Voice input (optional)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stitch now takes voice&lt;/li&gt;
&lt;li&gt;it transcribes into a prompt&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;why-stitch-output-looks-better&quot;&gt;Why Stitch output looks better&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Stitch generates an image first, then code.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it is not limited by HTML and CSS&lt;/li&gt;
&lt;li&gt;it can imagine any visual&lt;/li&gt;
&lt;li&gt;then it reverse-builds from the reference image&lt;/li&gt;
&lt;li&gt;that is why the design is more refined than prompting a coding tool directly&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;step-2-export-designmd&quot;&gt;Step 2: export &lt;code&gt;design.md&lt;/code&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;In the right panel, open &lt;strong&gt;Design Systems&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Stitch has already built a system from your design&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;design.md&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Copy the whole file&lt;/li&gt;
&lt;li&gt;Create &lt;code&gt;design.md&lt;/code&gt; at the project root&lt;/li&gt;
&lt;li&gt;Paste and save&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;That file is now the single source of truth for the whole design language.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;the-problem-designmd-kills&quot;&gt;The problem &lt;code&gt;design.md&lt;/code&gt; kills&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt; every time you asked Claude Code for a new screen or feature, the design drifted.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;colors shifted a little&lt;/li&gt;
&lt;li&gt;fonts changed&lt;/li&gt;
&lt;li&gt;spacing went inconsistent&lt;/li&gt;
&lt;li&gt;the app looked like ten people built it (because every prompt was a new context)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt; Claude Code cites &lt;code&gt;design.md&lt;/code&gt; in every prompt.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the language stays locked across screens, components, new features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;the consistency problem that wrecks every AI-built app is solved by one Markdown file&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;It lasts:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;update &lt;code&gt;design.md&lt;/code&gt; as the product grows&lt;/li&gt;
&lt;li&gt;add component rules, patterns, constraints&lt;/li&gt;
&lt;li&gt;it grows with you&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;One spec lighting a whole set of pages&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-stitch-claude-ai-design-workflow-02.C5mov0VU_12TsAN.webp&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;step-3-connect-stitch-to-claude-code-over-mcp&quot;&gt;Step 3: connect Stitch to Claude Code over MCP&lt;/h3&gt;
&lt;p&gt;This is where the workflow gets &lt;strong&gt;unreasonable&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;design.md&lt;/code&gt; gives Claude Code rules. MCP gives it something stronger: the actual HTML and CSS of the Stitch frame.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not a description of the design. &lt;strong&gt;The source.&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&quot;setup&quot;&gt;Setup&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Search Google Stitch docs for “Google Stitch MCP setup”&lt;/li&gt;
&lt;li&gt;Find the install command for your platform&lt;/li&gt;
&lt;li&gt;In Stitch Settings → API, create a key&lt;/li&gt;
&lt;li&gt;Paste the install command and key into the Claude Code terminal&lt;/li&gt;
&lt;li&gt;Start a new session; Stitch shows as connected&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;how-you-use-it&quot;&gt;How you use it&lt;/h4&gt;
&lt;p&gt;Prompt Claude Code:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Use the Stitch MCP to update the dashboard screen so it matches the desktop frame in Google Stitch.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Claude Code will:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;list your Stitch projects&lt;/li&gt;
&lt;li&gt;find the right frame&lt;/li&gt;
&lt;li&gt;fetch the source&lt;/li&gt;
&lt;li&gt;rebuild the UI to match&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Minutes, not a day.&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&quot;a-catch&quot;&gt;A catch&lt;/h4&gt;
&lt;p&gt;Stitch sometimes designs features your app does not have yet (“recent activity,” a notification drawer).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tell Claude Code exactly what to include and skip&lt;/li&gt;
&lt;li&gt;name the features that actually exist in the repo&lt;/li&gt;
&lt;li&gt;otherwise you spend time deleting things that should not be there&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;step-4-build-the-whole-product&quot;&gt;Step 4: build the whole product&lt;/h3&gt;
&lt;p&gt;Stay in the same Claude Code session for the integrations:&lt;/p&gt;
&lt;h4 id=&quot;auth-supabase&quot;&gt;Auth (Supabase)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;connect Supabase&lt;/li&gt;
&lt;li&gt;generate tokens and hand them to Claude Code&lt;/li&gt;
&lt;li&gt;user accounts, login, role-level security get set up&lt;/li&gt;
&lt;li&gt;sessions persist across refresh&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;payments-stripe&quot;&gt;Payments (Stripe)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;create products and prices in the Stripe dashboard&lt;/li&gt;
&lt;li&gt;give Claude Code the public and secret keys&lt;/li&gt;
&lt;li&gt;it finds product IDs, builds checkout, wires users&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;test in sandbox first&lt;/strong&gt; (test card: 4242 4242 4242 4242)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;email-resend&quot;&gt;Email (Resend)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;connect Resend&lt;/li&gt;
&lt;li&gt;password reset, welcome mail, notifications&lt;/li&gt;
&lt;li&gt;Claude Code builds edge functions and hooks them to auth&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;deploy-github--vercel&quot;&gt;Deploy (GitHub + Vercel)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;push to GitHub&lt;/li&gt;
&lt;li&gt;deploy to Vercel (one click)&lt;/li&gt;
&lt;li&gt;every later change shows on the live site&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The real advantage:&lt;/strong&gt; Claude Code walks you through each integration.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you do not need Stripe webhooks&lt;/li&gt;
&lt;li&gt;you do not need Supabase security-model details&lt;/li&gt;
&lt;li&gt;say what you want; it asks for the exact credentials&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;honest-limits&quot;&gt;Honest limits&lt;/h2&gt;
&lt;p&gt;The original author is clear about what is still rough:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Fonts:&lt;/strong&gt; after a Stitch design, you sometimes tweak them by hand&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Color:&lt;/strong&gt; tones do not always land exactly&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Complex layouts:&lt;/strong&gt; MCP reads HTML/CSS; if Stitch generated something dense, Claude may interpret it differently&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tokens:&lt;/strong&gt; long sessions cost more; keep prompts focused&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;None of that changes the shift:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;work that cost thousands of dollars and weeks&lt;/li&gt;
&lt;li&gt;one person can now finish in an afternoon&lt;/li&gt;
&lt;li&gt;the workflow is not perfect, and it is already better than everything before it&lt;/li&gt;
&lt;li&gt;Google is shipping Stitch updates fast; the gap is closing&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;this-is-the-new-default&quot;&gt;This is the new default&lt;/h2&gt;
&lt;h3 id=&quot;the-old-world&quot;&gt;The old world&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Funded teams:&lt;/strong&gt; designers, brand guides, Figma systems, someone paid to keep consistency&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Indies and small teams:&lt;/strong&gt; never had those resources&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2026&quot;&gt;2026&lt;/h3&gt;
&lt;p&gt;If you are building a product with AI in 2026 and you are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;still paying a designer thousands for MVP-level work, or&lt;/li&gt;
&lt;li&gt;shipping something that looks like “AI slop” because you do not know how to fix the design&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;This workflow exists. It works. It has been tested.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-to-take-from-it&quot;&gt;What to take from it&lt;/h2&gt;
&lt;h3 id=&quot;1-design-systems-got-democratized&quot;&gt;1. Design systems got democratized&lt;/h3&gt;
&lt;p&gt;A system only big companies could afford is now available to any indie:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a full type system&lt;/li&gt;
&lt;li&gt;a consistent color system&lt;/li&gt;
&lt;li&gt;component rules and patterns&lt;/li&gt;
&lt;li&gt;generated and documented automatically&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-designmd-is-the-invention&quot;&gt;2. &lt;code&gt;design.md&lt;/code&gt; is the invention&lt;/h3&gt;
&lt;p&gt;Not the generated screens themselves:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;one source of truth:&lt;/strong&gt; one file owns the language&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;persistent context:&lt;/strong&gt; every prompt cites the same rules&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;evolvable:&lt;/strong&gt; update it as the product grows&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is the largest pain in AI-driven development: &lt;strong&gt;consistency.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;3-workflow--tools&quot;&gt;3. Workflow &gt; tools&lt;/h3&gt;
&lt;p&gt;The piece keeps saying:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;if your app looks like AI slop, it is not the model’s fault&lt;/li&gt;
&lt;li&gt;it is a &lt;strong&gt;workflow&lt;/strong&gt; problem&lt;/li&gt;
&lt;li&gt;the right workflow lets one person do a whole team’s job&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;4-cost-comparison&quot;&gt;4. Cost comparison&lt;/h3&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Item&lt;/th&gt;&lt;th&gt;Old way&lt;/th&gt;&lt;th&gt;This workflow&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Designer&lt;/td&gt;&lt;td&gt;$3,000–$10,000&lt;/td&gt;&lt;td&gt;$0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Time&lt;/td&gt;&lt;td&gt;weeks&lt;/td&gt;&lt;td&gt;1 hour&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Implementation&lt;/td&gt;&lt;td&gt;extra cost&lt;/td&gt;&lt;td&gt;included&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Consistency&lt;/td&gt;&lt;td&gt;a dedicated person&lt;/td&gt;&lt;td&gt;automated&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;5-the-stack&quot;&gt;5. The stack&lt;/h3&gt;
&lt;p&gt;A complete modern AI-driven stack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Design:&lt;/strong&gt; Google Stitch 2.0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build:&lt;/strong&gt; Claude Code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auth:&lt;/strong&gt; Supabase&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pay:&lt;/strong&gt; Stripe&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mail:&lt;/strong&gt; Resend&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deploy:&lt;/strong&gt; GitHub + Vercel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of it can happen in one session, with Claude Code walking the path.&lt;/p&gt;
&lt;h2 id=&quot;action-list&quot;&gt;Action list&lt;/h2&gt;
&lt;ul class=&quot;contains-task-list&quot;&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; Generate a design system in Google Stitch 2.0&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; Learn to write a focused design prompt&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; Put a &lt;code&gt;design.md&lt;/code&gt; workflow in a real project&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; Test Stitch MCP with Claude Code&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; Try the full stack (Supabase + Stripe + Resend)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href=&quot;https://x.com/i/status/2037104246647382058&quot;&gt;X/Twitter — @PrajwalTomar_&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/stitch-design-md-infrastructure/&quot; class=&quot;wikilink&quot;&gt;Why Stitch’s DESIGN.md matters: from image tool to design infrastructure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-ui-design-workflow/&quot; class=&quot;wikilink&quot;&gt;Why AI-generated UI isn’t shippable — and the combo that works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/design-without-designing/&quot; class=&quot;wikilink&quot;&gt;Design Without Designing: how engineers ship high-quality design with AI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>CLI: the command-line revival in the AI era</title><link>https://ssherun.github.io/en/blog/cli-ai-revival/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/cli-ai-revival/</guid><description>The command line is coming back. Feishu, DingTalk, WeCom, Google and Stripe have all open-sourced CLIs — a CLI is far easier for an agent to call than a GUI.</description><pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;the-claim&quot;&gt;The claim&lt;/h2&gt;
&lt;p&gt;The command line is having an AI-era revival. Feishu, DingTalk, WeCom, Google, Stripe and others have all recently open-sourced CLI products. &lt;strong&gt;A CLI is an AI’s native language&lt;/strong&gt; — much easier for an agent to call than a GUI.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A curved terminal console&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-cli-ai-revival-01.BLXlBLcm_1u5QGY.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;why-clis-fit-ai&quot;&gt;Why CLIs fit AI&lt;/h2&gt;
&lt;h3 id=&quot;natural-advantages&quot;&gt;Natural advantages&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Text in / text out&lt;/strong&gt; — models are native text machines&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Structured output&lt;/strong&gt; — easy to parse&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clear errors&lt;/strong&gt; — failure messages you can debug&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Composable&lt;/strong&gt; — pipes let you chain a real workflow&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-explaining&lt;/strong&gt; — &lt;code&gt;--help&lt;/code&gt; is progressive disclosure and saves tokens&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;a-concrete-case&quot;&gt;A concrete case&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# GUI: import into an editor → find the cut → split → export&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# CLI: one command&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ffmpeg&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -i&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; input.mp4&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -t&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; 00:00:5&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -c&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; copy&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; part1.mp4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;two-projects-worth-knowing&quot;&gt;Two projects worth knowing&lt;/h2&gt;
&lt;h3 id=&quot;1-cli-anything&quot;&gt;1. CLI Anything&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; turn any open-source app into a CLI, in one command.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The automated loop (7 steps):&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Read the source and find the API behind the UI&lt;/li&gt;
&lt;li&gt;Plan command groups&lt;/li&gt;
&lt;li&gt;Design inputs and outputs&lt;/li&gt;
&lt;li&gt;Implement&lt;/li&gt;
&lt;li&gt;Write tests&lt;/li&gt;
&lt;li&gt;Update docs&lt;/li&gt;
&lt;li&gt;Publish&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;In the wild:&lt;/strong&gt; they CLI-ized draw.io (a drag-and-drop diagram tool).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Before: drag boxes in a UI&lt;/li&gt;
&lt;li&gt;After: an agent can draw flowcharts and architecture diagrams from the command line&lt;/li&gt;
&lt;li&gt;The files still open in draw.io&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# Install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;/plugin&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; marketplace&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; HKUDS/CLI-Anything&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;/plugin&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; cli-anything&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# Use&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;/cli-anything:cli-anything&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ./drawio&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Software they have tested:&lt;/strong&gt; OBS, draw.io, and nine others — 11 in total.&lt;/p&gt;
&lt;h3 id=&quot;2-opencli&quot;&gt;2. OpenCLI&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; turn a website or Electron app into a CLI.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Install:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -g&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; @jackwener/opencli&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# Hacker News top stories&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;opencli&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; hackernews&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; top&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# Ask Grok&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;opencli&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; grok&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ask&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;your question&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# Search jobs on BOSS Zhipin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;opencli&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; boss&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --city&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Qingdao&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --keyword&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;software engineer&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Traits:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;dozens of sites and tools&lt;/li&gt;
&lt;li&gt;you can add custom commands&lt;/li&gt;
&lt;li&gt;it drives a browser and returns results to the terminal&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;cli-vs-mcp&quot;&gt;CLI vs MCP&lt;/h2&gt;
&lt;h3 id=&quot;where-mcp-is-weaker&quot;&gt;Where MCP is weaker&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Context cost&lt;/strong&gt; — you inject every tool name, parameter, and example&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hostile to humans&lt;/strong&gt; — a black box; failures are hard to debug and reproduce&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No pipes&lt;/strong&gt; — you cannot compose a pipeline the way you can with a CLI&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Token comparison&lt;/strong&gt; (ScaleKit):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Official GitHub MCP vs CLI&lt;/li&gt;
&lt;li&gt;CLI used a multiple fewer tokens than MCP&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;the-pipe-advantage&quot;&gt;The pipe advantage&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# One pipeline for a real job&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; issue&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --repo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; openclaw/openclaw&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  ConvertFrom-Json&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  Where-Object&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;$_&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.title&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -like&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;*bug*&quot;}&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  Sort-Object&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; created_at&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  Export-Csv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; bugs.csv&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Doing the same over MCP means many tool calls, more tokens, more wall time.&lt;/p&gt;
&lt;h3 id=&quot;where-mcp-is-stronger&quot;&gt;Where MCP is stronger&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Multi-tenant&lt;/strong&gt; — strict permissioning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Standard install packages&lt;/strong&gt; — a shared auth story&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud deploy&lt;/strong&gt; — fits agent platforms in the cloud&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;the-two-are-starting-to-meet&quot;&gt;The two are starting to meet&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Claude Code / Codex&lt;/strong&gt;: tool search — load MCP on demand (borrowing CLI-style progressive disclosure)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MCPorter&lt;/strong&gt;: turn an MCP into a CLI an agent can call&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;Data flowing through glass pipes&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-cli-ai-revival-02._u4h6-b2_ZEzI4N.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;official-clis&quot;&gt;Official CLIs&lt;/h2&gt;
&lt;h3 id=&quot;github-cli&quot;&gt;GitHub CLI&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# Sign in after install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; auth&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; login&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# List issues&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; issue&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --repo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; openclaw/openclaw&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# Create a repo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; repo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; create&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; my-new-repo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;More official CLIs: Feishu, DingTalk, WeCom, Stripe, and others.&lt;/p&gt;
&lt;h2 id=&quot;what-i-take-from-this&quot;&gt;What I take from this&lt;/h2&gt;
&lt;h3 id=&quot;1-product-design&quot;&gt;1. Product design&lt;/h3&gt;
&lt;p&gt;If you want software an AI agent can call, &lt;strong&gt;prefer a CLI over MCP first&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fewer tokens&lt;/li&gt;
&lt;li&gt;cheaper to build (no full MCP protocol)&lt;/li&gt;
&lt;li&gt;friendly to humans &lt;em&gt;and&lt;/em&gt; models (you can test and debug it yourself)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-what-cli-anything-is-really-for&quot;&gt;2. What CLI Anything is really for&lt;/h3&gt;
&lt;p&gt;If your software later needs a CLI, CLI Anything is basically &lt;strong&gt;an auto-generated command-line spec&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;That means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you do not hand-write CLI code&lt;/li&gt;
&lt;li&gt;the AI reads the source and generates the CLI&lt;/li&gt;
&lt;li&gt;about 46 minutes end-to-end on draw.io&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;3-workflow-automation&quot;&gt;3. Workflow automation&lt;/h3&gt;
&lt;p&gt;CLI tools + an AI agent can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;drive software and websites&lt;/li&gt;
&lt;li&gt;chain tools into a workflow&lt;/li&gt;
&lt;li&gt;cut repetitive hand work&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;4-what-you-can-use-today&quot;&gt;4. What you can use today&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CLI Anything&lt;/strong&gt;: CLI-ize open-source software&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenCLI&lt;/strong&gt;: CLI-ize websites / Electron apps&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Official CLIs&lt;/strong&gt;: GitHub, Feishu, DingTalk, …&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MCPorter&lt;/strong&gt;: MCP → CLI (from the OpenClaw author)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;action-list&quot;&gt;Action list&lt;/h2&gt;
&lt;ul class=&quot;contains-task-list&quot;&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; Try CLI Anything on an open-source tool you already use&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; Browse the sites OpenCLI supports and pick one to automate&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; Think about designing your own product CLI-first&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; Watch the MCP / CLI merge&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;CLI Anything: &lt;a href=&quot;https://github.com/HKUDS/CLI-Anything&quot;&gt;https://github.com/HKUDS/CLI-Anything&lt;/a&gt; (25k stars)&lt;/li&gt;
&lt;li&gt;OpenCLI: &lt;a href=&quot;https://github.com/jackwener/opencli&quot;&gt;https://github.com/jackwener/opencli&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Video: &lt;a href=&quot;https://www.bilibili.com/video/BV1G29EBGE8b/&quot;&gt;https://www.bilibili.com/video/BV1G29EBGE8b/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub CLI: &lt;a href=&quot;https://cli.github.com/&quot;&gt;https://cli.github.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href=&quot;https://www.v2ex.com/t/1203629&quot;&gt;V2EX — TechShrimp&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/hello-world/&quot; class=&quot;wikilink&quot;&gt;An agent-friendly blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/openclaw-complete-guide/&quot; class=&quot;wikilink&quot;&gt;OpenClaw / Clawdbot complete guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/learn-by-scraping/&quot; class=&quot;wikilink&quot;&gt;When I learn a new field, I scrape it first&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>The scarcest skill in the AI era: saying it clearly</title><link>https://ssherun.github.io/en/blog/ai-era-clarity-matters/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/ai-era-clarity-matters/</guid><description>Why are 99% of the questions people ask AI garbage? We never learned to speak clearly. Clarity is what turns a model into a lever instead of a junk factory.</description><pubDate>Sat, 04 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;“What can be said at all can be said clearly; and whereof one cannot speak thereof one must be silent.” — Wittgenstein&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Have you had this:&lt;/p&gt;
&lt;p&gt;Twenty rounds with an AI. The conversation drifts. You finally close the window and start over.&lt;/p&gt;
&lt;p&gt;You think the model is dumb. The more uncomfortable truth: &lt;strong&gt;the problem is not the model. You did not know what you wanted in the first sentence.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;1-most-people-do-not-know-what-they-want&quot;&gt;1. Most people do not know what they want&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Fog you cannot speak through&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-era-clarity-matters-01.wPmHQFuo_Z1lRkdb.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;“Help me write a plan.”&lt;/p&gt;
&lt;p&gt;I hear that a lot. That sentence hides at least five undefined variables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what kind of plan?&lt;/li&gt;
&lt;li&gt;who is it for?&lt;/li&gt;
&lt;li&gt;what problem does it solve?&lt;/li&gt;
&lt;li&gt;what is the budget?&lt;/li&gt;
&lt;li&gt;when is it due?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Every word you were too lazy to define, the model will define at random.&lt;/strong&gt; Then you spend ten turns correcting a direction that should never have existed.&lt;/p&gt;
&lt;p&gt;Worse, the bill is quiet. No error. No red text. The output looks “pretty much like a plan” and is not what you wanted. You still have to spend time locating what is wrong. &lt;strong&gt;That hidden cost is higher than rewriting from scratch.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;a-real-case&quot;&gt;A real case&lt;/h3&gt;
&lt;p&gt;A friend told me he wanted to do “self-media.” I asked a few questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;which platform?&lt;/li&gt;
&lt;li&gt;who is it for?&lt;/li&gt;
&lt;li&gt;what problem does it solve?&lt;/li&gt;
&lt;li&gt;how many hours a week can you put in?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After five questions he went quiet. “I guess I am not ready.”&lt;/p&gt;
&lt;p&gt;He is not incapable. He had been driving himself with a &lt;strong&gt;fuzzy wish&lt;/strong&gt;, treating “I want to do self-media” as if it were a plan. The sentence contains no concrete information.&lt;/p&gt;
&lt;h2 id=&quot;2-wittgensteins-prophecy&quot;&gt;2. Wittgenstein’s prophecy&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;A beam of light cutting fog&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-era-clarity-matters-02.BSLkr9hU_QGpIa.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;A hundred years ago Wittgenstein said something that reads like a prophecy for the AI era:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“What can be said at all can be said clearly; and whereof one cannot speak thereof one must be silent.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The cut is this: “cannot say it clearly” is treated as the same thing as “have not thought it clearly.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Language is not wrapping around thought. Language &lt;em&gt;is&lt;/em&gt; thought.&lt;/strong&gt; How precise your words are is how precise your thinking is.&lt;/p&gt;
&lt;p&gt;Socrates did the same job — he asked into the places you thought you already understood:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“You said justice. What is justice?”&lt;/li&gt;
&lt;li&gt;“You said a good education. Who defines good?”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end you discover you do not know what you are talking about.&lt;/p&gt;
&lt;p&gt;Two thousand years later the human bug is unchanged: &lt;strong&gt;we always think we have already thought it through.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;3-ai-is-an-amplifier-of-how-clear-you-are&quot;&gt;3. AI is an amplifier of how clear you are&lt;/h2&gt;
&lt;p&gt;When you talk to a person, they fill in.&lt;/p&gt;
&lt;p&gt;You say “handle this.” A colleague can usually guess. A manager says “tweak this.” You can read about 30% of the intent.&lt;/p&gt;
&lt;p&gt;The unclear middle gets absorbed by manners, “chemistry,” and rework. People treat that as normal communication loss.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A model will not fill in.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It has no mind-reading, no reading the room, no “you know what I mean.”&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it takes what you said&lt;/li&gt;
&lt;li&gt;if you are vague, it stays vague&lt;/li&gt;
&lt;li&gt;it is precise only when you are&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Every conversation with an AI is a &lt;strong&gt;live exam of how clearly you think.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you fail it, it really is not the model’s fault.&lt;/p&gt;
&lt;h2 id=&quot;4-the-same-bug-shows-up-with-people&quot;&gt;4. The same bug shows up with people&lt;/h2&gt;
&lt;p&gt;In a meeting someone says “we need to improve user experience.”&lt;/p&gt;
&lt;p&gt;Six people in the same room hear six things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the PM hears interaction flow&lt;/li&gt;
&lt;li&gt;the designer hears visual style&lt;/li&gt;
&lt;li&gt;engineering hears load time&lt;/li&gt;
&lt;li&gt;the boss hears DAU&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The meeting ends. Everyone thinks there was consensus. Everyone goes and does a different job.&lt;/p&gt;
&lt;p&gt;Two weeks later the direction is wrong. Another meeting.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A lot of communication cost is not disagreement. It is two sides discussing different objects without knowing it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Wittgenstein again, a line I like:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“The limits of my language mean the limits of my world.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;How clearly you can speak is how much world you can reach.&lt;/p&gt;
&lt;h2 id=&quot;5-how-to-practice-saying-it-clearly&quot;&gt;5. How to practice saying it clearly&lt;/h2&gt;
&lt;h3 id=&quot;1-a-template-before-you-talk-to-an-ai&quot;&gt;1. A template before you talk to an AI&lt;/h3&gt;
&lt;p&gt;Fill this before you open a chat:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Context: [what is true right now]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Goal: [what result I want]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Constraints: [time / budget / tech]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Audience: [who uses this / who reads this]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Acceptance: [what counts as done]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;2-a-review-habit&quot;&gt;2. A review habit&lt;/h3&gt;
&lt;p&gt;After every meeting, three questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;which sentence did they clearly not catch?&lt;/li&gt;
&lt;li&gt;which concept did I think I had explained, and they were still lost?&lt;/li&gt;
&lt;li&gt;what do I change next time?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Unclear speech is rarely a vocabulary problem. &lt;strong&gt;You did not organize language in the other person’s coordinate system.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;3-train-definition-sharpness&quot;&gt;3. Train definition sharpness&lt;/h3&gt;
&lt;p&gt;Every time you say an abstract word (“optimize,” “improve,” “upgrade”), ask:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Can I give three concrete measures?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If not, you have not thought it through.&lt;/p&gt;
&lt;h2 id=&quot;6-language-is-a-craft&quot;&gt;6. Language is a craft&lt;/h2&gt;
&lt;p&gt;I have been in the study-abroad industry for almost seven years. The longer I do it, the more the job is “say it clearly.”&lt;/p&gt;
&lt;p&gt;A practical example:&lt;/p&gt;
&lt;p&gt;When a writing coach helps a student on a research proposal, the hard part is almost never prose. It is getting an academic claim across to an undergrad who may have no research experience.&lt;/p&gt;
&lt;p&gt;You say “you need a more focused research question.” They hear “make the title shorter.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The same sentence can put a galaxy between speaker and listener.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Or talking through a school list with parents — reach / target / safety:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;some parents need numbers: admit rates, past cases&lt;/li&gt;
&lt;li&gt;some need the logic of why the gradient is designed that way&lt;/li&gt;
&lt;li&gt;some need a story: a student in a similar situation last year, and where they landed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Language is a craft.&lt;/strong&gt; The question is not what &lt;em&gt;you&lt;/em&gt; want to say. It is what the other person can catch.&lt;/p&gt;
&lt;h2 id=&quot;7-one-underlying-skill&quot;&gt;7. One underlying skill&lt;/h2&gt;
&lt;p&gt;Talking to an AI, running a meeting, doing study-abroad work, managing a team, raising a child — the bottom skill is the same:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Can you turn the blur in your head into an expression another person can catch.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That skill decides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;how much leverage AI gives you&lt;/li&gt;
&lt;li&gt;how well your team executes&lt;/li&gt;
&lt;li&gt;how much clients trust you&lt;/li&gt;
&lt;li&gt;whether you can even talk well with the people closest to you&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A lot of people pay interest on “I cannot say it clearly” for a lifetime and never notice the bill.&lt;/p&gt;
&lt;h2 id=&quot;8-the-point&quot;&gt;8. The point&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;AI will not replace people who can use tools. AI replaces people who cannot think clearly.
And the first symptom of unclear thinking is unclear speech.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While everyone studies prompt tricks, memorizes templates, and hunts shortcuts, the real lever is not technique. It is clarity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Clarity is not a gift. It is a skill you can practice on purpose.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Before you open your mouth, ask one more question:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“In this sentence, is there a word I cannot define myself?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Not many people pass that gate.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;a-list-you-can-run&quot;&gt;A list you can run&lt;/h2&gt;
&lt;p&gt;If this landed, start today:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Before the next AI chat&lt;/strong&gt;, spend five minutes on the template (context / goal / constraints / audience / acceptance)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;After every meeting this week&lt;/strong&gt;, two minutes: which sentence did they not catch?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;When you say three abstract words in a day&lt;/strong&gt;, immediately: can I give three concrete measures?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In 30 days, conversations with AI should be at least 3× more efficient.&lt;/p&gt;
&lt;p&gt;More important: conversations with people get more efficient too.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Clarity is a transferable underlying skill.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Inspired by a post from @Jaden_riku, combined with my own practice.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-cannot-replace-human-experience/&quot; class=&quot;wikilink&quot;&gt;AI cannot replace lived experience&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/first-principles-startup-review/&quot; class=&quot;wikilink&quot;&gt;First-principles review with AI: a startup plan dies in 48 hours&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-fatigue-truth-10x-workload/&quot; class=&quot;wikilink&quot;&gt;AI didn’t 10x your output. It 10x’d the work.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>The 35-year-old programmer crisis — and how to get out</title><link>https://ssherun.github.io/en/blog/programmer-35-crisis-and-self-rescue/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/programmer-35-crisis-and-self-rescue/</guid><description>An eight-year programmer after leaving big tech: the profession is a sinking Titanic and most people are still fighting for first class. And a way off.</description><pubDate>Sat, 04 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Source: 金尘马 (@jinchenma_ai)
Original: &lt;a href=&quot;https://x.com/i/status/2040042600112300324&quot;&gt;https://x.com/i/status/2040042600112300324&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;An eight-year programmer, after leaving a big company, sat with this: programmers are standing on a slowly sinking Titanic, and most of them are still fighting their way into first class.&lt;/p&gt;
&lt;h2 id=&quot;the-claim&quot;&gt;The claim&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;A sinking ship, everyone crowding first class&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-programmer-35-crisis-and-self-rescue-01.BZ4gH3GJ_1lBVNN.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Programmer salaries were not always high. The real turn was after 2010 — smartphones, 4G, the WeChat ecosystem, the O2O wars, ride-hailing wars, sharing-economy wars. Behind every war, capital was burning money for market.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What a lot of people miss: that salary was not from your boss. It was from the investor behind your boss.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You are a miner who happened to live through a gold rush. You think the pay is because you are good at digging. The real reason is there was gold in the rock.&lt;/p&gt;
&lt;p&gt;Programmer pay was never fully “the code is worth that.” It was a premium the market paid to fight over a scarce resource. &lt;strong&gt;Premiums get given back.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;1-how-a-company-tames-a-programmer&quot;&gt;1. How a company tames a programmer&lt;/h2&gt;
&lt;h3 id=&quot;the-company-lock&quot;&gt;The company lock&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. The lock in the pay structure&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Most companies pay base + bonus + equity. Base may be a bit more than half. The rest is tied to tenure, level, and a performance score.&lt;/p&gt;
&lt;p&gt;The longer you stay, the larger those add-ons become — and they may go to zero at the next company. So every year you think “one more year, take the money, then leave.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It is designed like a casino.&lt;/strong&gt; It always feels like “one more hand.” You slowly lose the ability to judge long-term risk.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Extreme specialization&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For efficiency, the company splits every business into tiny modules. You may own one function of one submodule of one system.&lt;/p&gt;
&lt;p&gt;The deeper you go, the more your résumé depends on &lt;em&gt;this&lt;/em&gt; company’s business. You think you are accumulating experience. What you may be accumulating is experience that only works here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Isolation by comfort&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The company “protects” you from everything non-technical:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you do not talk to customers; a PM translates requirements&lt;/li&gt;
&lt;li&gt;you do not think about the business; your lead decides&lt;/li&gt;
&lt;li&gt;you do not care whether the company makes money; payroll hits on schedule&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It sounds like protection so you can focus on tech. The real cost: &lt;strong&gt;you slowly lose all feel for business, markets, and people.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Buying out your time&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;996, plus a one-to-one-and-a-half-hour commute in a first-tier city. Fourteen or fifteen hours a day can go to work-adjacent life. After sleep, you may have one or two hours of your own.&lt;/p&gt;
&lt;p&gt;High-intensity thinking all day empties you. You get home and want nothing but a bed and a phone.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;That is the company buying, with a high salary, the possibility of growing in the rest of your time.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;the-technical-mind-lock&quot;&gt;The technical-mind lock&lt;/h3&gt;
&lt;p&gt;A technical person’s default: given a problem, how do we implement it. Which framework, how to design the tables, how to cache, how to survive concurrency.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Almost never: why does this feature exist? What is the return? How much money did it actually make?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Technical thinking hunts an optimum. In code, it runs or it errors. There is a definite answer. In business, “good enough” is often the global optimum.&lt;/p&gt;
&lt;p&gt;Technical people want complexity to prove value. This design is elegant; that architecture is beautiful. &lt;strong&gt;Customers never pay for elegant. They pay because a problem got solved.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;2-three-crises&quot;&gt;2. Three crises&lt;/h2&gt;
&lt;h3 id=&quot;crisis-1-age&quot;&gt;Crisis 1: age&lt;/h3&gt;
&lt;p&gt;The real pain of the “35 crisis” is not that nobody will hire you. Most 35-year-old programmers can still find work. &lt;strong&gt;The pain is downward compatibility.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You left a big company at a million RMB a year. Someone will take you — at 250k. Do you go?&lt;/p&gt;
&lt;p&gt;If you have no better option, reason says yes. Pride will not let you. It feels like retreat, like surrender, like admitting you are done.&lt;/p&gt;
&lt;p&gt;Social pressure is harder. Former colleagues are still in big tech. Classmates are directors somewhere. At a holiday dinner someone asks “where are you now?” What do you say?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The loss of face is, honestly, harder than the pay cut. You cannot take off Kong Yiji’s long gown.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The standards you used for a decade to define yourself — company, level, salary — suddenly do not work. You have not built a new standard for your own value.&lt;/p&gt;
&lt;p&gt;This is not only a job or a number. &lt;strong&gt;It is an identity collapse.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;crisis-2-layoffs-unemployment-and-ai&quot;&gt;Crisis 2: layoffs, unemployment, and AI&lt;/h3&gt;
&lt;p&gt;A down cycle, companies cutting — that is already normal. AI made the shrinkage more violent.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The AI shock is not “the tech you learned is useless.” It is that work three people did, one person plus AI can do.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The skill is not obsolete. The &lt;em&gt;market price&lt;/em&gt; of holding that skill is falling fast. You saved a pile of money and hit inflation. Same bills. They buy less.&lt;/p&gt;
&lt;p&gt;Deeper: &lt;strong&gt;AI is destroying the sacredness of programming itself.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Programming used to be a high-bar craft. The craft &lt;em&gt;was&lt;/em&gt; the moat. “I can do what others cannot” was a large part of a programmer’s pride.&lt;/p&gt;
&lt;p&gt;Now a PM who cannot write code can stand up a prototype in Cursor. A middle-schooler can get a mini-app from natural language. The moat is being filled in.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;That is not only an economic threat. It is a psychological hit.&lt;/strong&gt; Ten years of kung fu, and now everyone can use it. What am I worth?&lt;/p&gt;
&lt;h3 id=&quot;crisis-3-the-body-sounding-an-alarm&quot;&gt;Crisis 3: the body sounding an alarm&lt;/h3&gt;
&lt;p&gt;Programming is a high-pressure trade. Years of sitting, high-intensity thinking, irregular sleep, emotions wound tight.&lt;/p&gt;
&lt;p&gt;When I meet former colleagues, the conversation often becomes a swap of physical-exam reports. Persistent tinnitus. Insomnia and memory slip. Chronic migraine. Not anecdotes — industry weather.&lt;/p&gt;
&lt;p&gt;The body is overdrawn. Energy and stress tolerance are falling. The pressure in front of you is rising.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;These three mountains do not wait in line. They hit the ship at once.&lt;/strong&gt; Age is pushing you. AI is substituting you. The body is dragging you. The only card in your hand says “I can write code.”&lt;/p&gt;
&lt;h2 id=&quot;3-where-the-anxiety-actually-comes-from&quot;&gt;3. Where the anxiety actually comes from&lt;/h2&gt;
&lt;h3 id=&quot;root-1-treating-the-job-as-the-only-identity&quot;&gt;Root 1: treating the job as the only identity&lt;/h3&gt;
&lt;p&gt;Ask a programmer what they do. “I &lt;em&gt;am&lt;/em&gt; Java.” “I &lt;em&gt;am&lt;/em&gt; frontend.” “I &lt;em&gt;am&lt;/em&gt; algorithms.” Notice the grammar. &lt;strong&gt;I am, not I do.&lt;/strong&gt; They have bound themselves to a stack and a seat.&lt;/p&gt;
&lt;p&gt;When that seat is threatened, what they feel is not “I should change direction.” It is “I am being erased.” That is existential fear.&lt;/p&gt;
&lt;p&gt;Compare someone who runs a small business. Clothes today, fruit tomorrow, livestream the day after. They do not say “I am in apparel.” They say “I do business.” If a category dies, they change roads.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Programmers almost lack that flexibility.&lt;/strong&gt; Identity is so narrow it is welded to a stack. Changing a stack feels like dying.&lt;/p&gt;
&lt;h3 id=&quot;root-2-no-means-of-production-no-feel-for-how-money-moves&quot;&gt;Root 2: no means of production, no feel for how money moves&lt;/h3&gt;
&lt;p&gt;Ten years in a company trains a very specific skill: inside a problem frame someone else defined, find a technical solution.&lt;/p&gt;
&lt;p&gt;Requirements are given. Goals are given. Whether it sells is not your job.&lt;/p&gt;
&lt;p&gt;Which means: &lt;strong&gt;a programmer is the most atomic screw in the commercial chain.&lt;/strong&gt; On independent survival, a lot of programmers off the company are worse than a vegetable seller in the market.&lt;/p&gt;
&lt;p&gt;The vegetable seller runs a full commercial loop every day: what to stock, what to charge, how to call customers, how to negotiate, inventory, relationships. She may not know the MBA words. She does the work.&lt;/p&gt;
&lt;p&gt;Her capability runs without an organization.&lt;/p&gt;
&lt;p&gt;A programmer? Leave the company and nobody defines the problem, nobody gives feedback, nobody strings the work together.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A tiger raised in a zoo, dropped in the wild, that has already forgotten how to hunt.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;root-3-after-identity-no-agency&quot;&gt;Root 3: after identity, no agency&lt;/h3&gt;
&lt;p&gt;The most crushing part of unemployment is not the missing paycheck. It is not knowing what to do next.&lt;/p&gt;
&lt;p&gt;Inside the company the rhythm is given: take a req, write a design, build, integrate, ship. You do not decide what today is for. The company already did.&lt;/p&gt;
&lt;p&gt;Leave, and those questions arrive at once. You realize you have been executing other people’s instructions for years and have never made a real decision for yourself.&lt;/p&gt;
&lt;p&gt;Programmers are used to instant feedback — the code runs or it does not. Exploring a direction gives fuzzy, delayed, sometimes missing feedback.&lt;/p&gt;
&lt;p&gt;You do a thing and may not know for three months whether it mattered. &lt;strong&gt;That long uncertainty is torture for someone trained on certainty.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;4-how-to-get-out&quot;&gt;4. How to get out&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Cutting away from the wreck to build a small boat&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-programmer-35-crisis-and-self-rescue-02.D4z4AEli_Z1Wl8Mv.webp&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;from-selling-time-to-selling-results&quot;&gt;From selling time to selling results&lt;/h3&gt;
&lt;p&gt;What is a programmer’s business model? Selling time.&lt;/p&gt;
&lt;p&gt;The company pays monthly for your days. The ceiling is locked to your hours. Twenty-four in a day. Hustle does not create more.&lt;/p&gt;
&lt;p&gt;And time cannot be stored, copied, or scaled. The code you write today cannot be sold again tomorrow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Selling results means the customer does not care how long you spent. They care what you delivered.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Same system: sell time and it is “40k a month.” Sell results and it is “this system saves you 200k a month; I take 100k.” Same work. Completely different ceiling.&lt;/p&gt;
&lt;p&gt;Then ask whether you can “do it once, sell it N times.” A course, a tool, a packaged solution. One build, many sales. &lt;strong&gt;That is the step from linear income to non-linear income.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;stop-stacking-skills-start-stacking-assets&quot;&gt;Stop stacking “skills.” Start stacking “assets”&lt;/h3&gt;
&lt;p&gt;A skill only works when you are in the chair. You know Java; you have to sit and write. Stop writing and it produces nothing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;An asset is different.&lt;/strong&gt; An essay, a recorded course, a following, industry relationships, a personal brand. They work while you sleep.&lt;/p&gt;
&lt;p&gt;The programmer habit is to put all energy into skills: new languages, new frameworks, algorithm drills. That is skills, not assets.&lt;/p&gt;
&lt;p&gt;Move some energy to assets: content, relationships, reputation. Those three compound harder than one more technology.&lt;/p&gt;
&lt;h3 id=&quot;learn-to-sell-sell-out-loud&quot;&gt;Learn to sell. Sell out loud&lt;/h3&gt;
&lt;p&gt;This may be the biggest stuck point in self-rescue.&lt;/p&gt;
&lt;p&gt;Technical people flinch at “sell.” Living by craft feels clean. Negotiation, pricing, sales feel embarrassing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Whatever you do, you cannot skip “someone else pays.”&lt;/strong&gt; Consulting: the client has to feel you are worth it. Content: the reader has to feel it is worth paying for. Product: the user has to buy.&lt;/p&gt;
&lt;p&gt;The simplest start: solve a real problem for a friend, and charge. Do not do it free. Even a small fee. The &lt;em&gt;act&lt;/em&gt; of charging is the training. It forces you into a real transaction, and into feeling how your skill produces value for someone else.&lt;/p&gt;
&lt;p&gt;It also kills a bad habit a lot of us share: &lt;strong&gt;making money has nothing to do with how elegant the code is.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;use-the-self-media-lever&quot;&gt;Use the self-media lever&lt;/h3&gt;
&lt;p&gt;I genuinely think &lt;strong&gt;self-media is the largest lever this era gave ordinary people.&lt;/strong&gt; High ceiling. Near-zero start cost.&lt;/p&gt;
&lt;p&gt;My own path: I started publishing before I left the company. No product yet, so I worked on traffic.&lt;/p&gt;
&lt;p&gt;As the following grew, I started connecting with accounts that used to feel unreachable. Founders came looking for consulting and deals.&lt;/p&gt;
&lt;p&gt;That is the moment it clicks: skills and experience that feel ordinary to you are scarce to another group — and they will pay for that scarcity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Self-media connects “the ability you thought was cheap” to “the people willing to pay for it.”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not everyone needs to be an influencer. In this era, your experience, your thinking, the holes you fell in — written down, spoken — are a digital asset.&lt;/p&gt;
&lt;p&gt;Use the lever and you can build a personal brand, attract opportunity, and stop depending on one company.&lt;/p&gt;
&lt;h2 id=&quot;at-the-end&quot;&gt;At the end&lt;/h2&gt;
&lt;p&gt;Looking back on the first half-year after leaving: anxiety, fog, the panic of losing agency.&lt;/p&gt;
&lt;p&gt;This is not a success manual. I am not writing it because I have “made it.” I wrote it because I stumbled this far, started to see a second-half direction, and got resources and chances a big company would never have given me.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The programmers’ Titanic is sinking.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Which cabin you are in — big company or small, five years or ten — does not change that.&lt;/p&gt;
&lt;p&gt;Grinding promotion, grinding performance, grinding the next jump is changing cabins on the same ship.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What you actually have to do is leave the ship and start building your own.&lt;/strong&gt; Small, ugly, slow at first — but yours. Not dependent on a company or a platform.&lt;/p&gt;
&lt;p&gt;The process will not be comfortable. Putting down an identity you spent a decade building, being a beginner again, sitting with no instant feedback — all of it hurts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It is still better than sitting on a sinking ship, fighting for first class.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-era-programmer-survival-guide/&quot; class=&quot;wikilink&quot;&gt;A programmer’s survival guide in the AI era&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/software-engineering-splits-three/&quot; class=&quot;wikilink&quot;&gt;Software engineering is splitting into three layers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-fatigue-truth-10x-workload/&quot; class=&quot;wikilink&quot;&gt;AI didn’t 10x your output. It 10x’d the work.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>How coding agents reshape engineering, product, and design</title><link>https://ssherun.github.io/en/blog/coding-agents-reshape-epd/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/coding-agents-reshape-epd/</guid><description>Coding agents made writing code strangely easy. What happens to EPD roles? From &quot;the PRD is dead&quot; to a new split: builders vs reviewers.</description><pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://x.com/hwchase17/status/2031051115169808685&quot;&gt;How Coding Agents Are Reshaping EPD&lt;/a&gt;
Author: Harrison Chase (LangChain founder)
Via: Baoyu’s share&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;the-claim&quot;&gt;The claim&lt;/h2&gt;
&lt;p&gt;EPD in a software company — engineering, product, design — exists to make good software. The roles differ. The goal does not: ship functional software that solves a business problem and that people use. The output, in the end, is code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Coding agents suddenly made writing that code strangely easy.&lt;/strong&gt; So how do the roles move?&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;An empty meeting room and a prototype&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-coding-agents-reshape-epd-01.iM_655Ld_ZUu0FH.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-happens-to-the-process&quot;&gt;What happens to the process&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The PRD is dead&lt;/strong&gt; — the old PRD → mock → code conveyor belt is over&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The bottleneck moved from implementation to review&lt;/strong&gt; — generating code is cheap; review is the new queue&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Long live the PRD&lt;/strong&gt; — the &lt;em&gt;process&lt;/em&gt; died; the need to write down requirements did not&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-happens-to-roles&quot;&gt;What happens to roles&lt;/h2&gt;
&lt;h3 id=&quot;generalists-are-more-valuable-than-they-used-to-be&quot;&gt;Generalists are more valuable than they used to be&lt;/h3&gt;
&lt;p&gt;People with a decent feel for product, engineering, &lt;em&gt;and&lt;/em&gt; design have always been valuable. With coding agents they thrive.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt;: communication is the hardest part of almost everything. One person who can do product, design, and engineering is faster than a team of three because the coordination tax disappears. Implementation used to be the bottleneck, so even a generalist still had to talk to other people to finish. Now they only have to talk to an agent.&lt;/p&gt;
&lt;h3 id=&quot;using-coding-agents-is-not-optional&quot;&gt;Using coding agents is not optional&lt;/h3&gt;
&lt;p&gt;Implementation cost collapsed. Using the tools is table stakes. People who are good with coding agents can finish more alone:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PMs can stay in a prototype to test an idea instead of writing a spec and waiting&lt;/li&gt;
&lt;li&gt;Designers can iterate in code, not only in Figma&lt;/li&gt;
&lt;li&gt;Engineers can spend time on systems thinking instead of implementation&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;good-pms-get-better-bad-pms-get-worse&quot;&gt;Good PMs get better; bad PMs get worse&lt;/h3&gt;
&lt;p&gt;Good product taste is more valuable than ever — you can make something actually useful. Bad product taste wastes more than ever.&lt;/p&gt;
&lt;p&gt;A bad idea used to die in a doc. Now it can show up as a prototype of a useless or half-thought feature. Those prototypes still need review — engineering, product, design all have to look. That eats time and attention. And the inertia to ship is stronger (“it’s already built — just merge it”). The product gets worse or fatter.&lt;/p&gt;
&lt;h3 id=&quot;systems-thinking-is-the-skill-to-grind&quot;&gt;Systems thinking is the skill to grind&lt;/h3&gt;
&lt;p&gt;In a world where execution is cheap, systems thinking is the real differentiator. Build a clear mental model of your domain:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Engineering&lt;/strong&gt;: how you would design services, APIs, and the database&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Product&lt;/strong&gt;: what users actually need, not what they say they want&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Design&lt;/strong&gt;: why something &lt;em&gt;feels&lt;/em&gt; right when you use it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Systems thinking was always important. What changed is implementation cost. Making a thing is easier than it has ever been — that does not mean the thing is good. Good systems thinking lets you be right &lt;em&gt;before&lt;/em&gt; you start, and sharper when you review someone else’s work.&lt;/p&gt;
&lt;h3 id=&quot;everyone-needs-product-sense&quot;&gt;Everyone needs product sense&lt;/h3&gt;
&lt;p&gt;A coding agent still needs someone to tell it what to do. If you tell it the wrong thing, you are manufacturing review trash for other people.&lt;/p&gt;
&lt;p&gt;Knowing what to ask the agent to do — product sense — is a baseline requirement, or you drag the org. That applies to engineering, design, and (obviously) product.&lt;/p&gt;
&lt;h3 id=&quot;the-bar-for-specialization-went-up&quot;&gt;The bar for specialization went up&lt;/h3&gt;
&lt;p&gt;You need to use coding agents. You need product sense. Roles are blending.&lt;/p&gt;
&lt;p&gt;Specialization still has a place. A senior engineer who lives in system architecture is still valuable. So is a PM who never learned vibe coding but has a razor-clear model of the customer problem and what to do. So is a designer who can understand and design journeys and interaction.&lt;/p&gt;
&lt;p&gt;The bar is just much higher. You have to be excellent in your domain &lt;em&gt;and&lt;/em&gt; review extremely fast &lt;em&gt;and&lt;/em&gt; communicate extremely well. There will not be many of these seats in any company.&lt;/p&gt;
&lt;h2 id=&quot;a-new-split-builders-vs-reviewers&quot;&gt;A new split: builders vs reviewers&lt;/h2&gt;
&lt;p&gt;Two roles are forming inside EPD.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Builders and reviewers&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-coding-agents-reshape-epd-02.Cc3MBeti_sp5ge.webp&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;builders&quot;&gt;Builders&lt;/h3&gt;
&lt;p&gt;Decent product sense, can drive a coding agent, enough design intuition. With guardrails (test suites, component libraries) they can take a small feature from idea to production, and a large feature to a usable prototype.&lt;/p&gt;
&lt;h3 id=&quot;reviewers&quot;&gt;Reviewers&lt;/h3&gt;
&lt;p&gt;Large, complex work still needs deep EPD review. The bar is high — you have to be a top systems thinker in your domain. And you have to be fast. There is too much to review.&lt;/p&gt;
&lt;h3 id=&quot;career-paths&quot;&gt;Career paths&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;If you are an engineer today&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Grind system design until you can review architecture calmly, and move toward reviewer&lt;/li&gt;
&lt;li&gt;Or raise your product and design game and become a builder&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;If you do product or design&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Build a top-tier product/design mental model and mostly review&lt;/li&gt;
&lt;li&gt;Or invest in coding agents and raise your engineering floor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The interesting part: roles are collapsing. Engineers have more time to think about product and design. Product and design can write code.&lt;/p&gt;
&lt;h2 id=&quot;everyone-thinks-their-role-benefits-the-most--and-they-may-all-be-right&quot;&gt;Everyone thinks their role benefits the most — and they may all be right&lt;/h2&gt;
&lt;p&gt;The rarest person has an intuitive grasp of the existing product — where it is weak, where it is sharp, how to iterate so it gets sharper. The rarest version of that person sits at the intersection of culture and deep tech. A true bilingual. They know what is technically possible &lt;em&gt;and&lt;/em&gt; which cultural currents are real rather than a fad. That combination is what makes a product feel inevitable instead of assembled.&lt;/p&gt;
&lt;p&gt;The original thread spread in part because every reader thought it was about &lt;em&gt;them&lt;/em&gt;. Product people forwarded it. Designers forwarded it. Design engineers, founders… everyone felt seen.&lt;/p&gt;
&lt;p&gt;They may all be right. The exciting part of this world is that pedigree matters less. True generalists are rare, but they can come from product, design, &lt;em&gt;or&lt;/em&gt; engineering.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It is a good time to be a builder.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-to-take-from-this&quot;&gt;What to take from this&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Systems thinking &gt; execution speed&lt;/strong&gt;: agents already solved speed; depth of thinking is the game&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Product sense is a baseline skill&lt;/strong&gt;: every seat needs “why,” not only “how”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generalists rise&lt;/strong&gt;: people who can cross the EPD boundary will have outsized impact&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review becomes scarce&lt;/strong&gt;: people who can review code / design / product quickly and accurately get more expensive&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Role blend is the trend&lt;/strong&gt;: future orgs may not be strict functions so much as a mix of builders + reviewers&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/whatnot-cpo-regrets-pm-exists/&quot; class=&quot;wikilink&quot;&gt;Whatnot’s CPO: “We regret that the PM function exists”&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/taste-at-speed-pm-skill/&quot; class=&quot;wikilink&quot;&gt;Taste at Speed: when building is cheap, PM skill changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/software-engineering-splits-three/&quot; class=&quot;wikilink&quot;&gt;Software engineering is splitting into three layers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>AI made people faster. Why didn&apos;t the company get stronger?</title><link>https://ssherun.github.io/en/blog/ai-organization-redesign/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/ai-organization-redesign/</guid><description>Everyone is on ChatGPT; results did not take off. A 130-year-old story about electric motors is still the most honest picture of how AI lands inside a firm.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Everyone is on ChatGPT. Why didn’t company results take off?&lt;/p&gt;
&lt;p&gt;This is not one anecdote. DX tracked 400 companies for 16 months: AI-tool usage rose 65%, code delivery rose less than 10%. The NBER surveyed 6,000 executives; more than 80% said AI had no measurable effect on productivity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI really did make each person faster. The company did not get stronger. Where did the productivity go?&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;a-story-from-130-years-ago&quot;&gt;A story from 130 years ago&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;An old factory waiting to be redesigned for electricity&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-organization-redesign-01.BZ7hQ5I0_Z1YrHUA.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;In the 1890s factories put in electric motors. Everyone expected a productivity explosion. For the next 30 years, output barely moved.&lt;/p&gt;
&lt;p&gt;Only in the 1920s, when people tore down the old buildings and redesigned the line &lt;em&gt;for electricity&lt;/em&gt;, did the dividend show up.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;130 years later, the same mistake is running again.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We swapped the motor. We have not redesigned the factory.&lt;/p&gt;
&lt;h2 id=&quot;four-hidden-traps&quot;&gt;Four hidden traps&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Everyone at a screen, nobody aligned&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-organization-redesign-02.qCHElFBl_oTXC7.webp&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;1-coordination-collapse&quot;&gt;1. Coordination collapse&lt;/h3&gt;
&lt;p&gt;Every employee has their own ChatGPT habit, prompt style, output format. Brand copy marketing wrote with AI and the feature description product wrote with AI may not even be the same language.&lt;/p&gt;
&lt;p&gt;A hundred people each use AI. Nobody is thinking about how a hundred AI workflows line up.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Smart people pulling in different directions is standing still.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;2-noise-multiplies&quot;&gt;2. Noise multiplies&lt;/h3&gt;
&lt;p&gt;AI made &lt;em&gt;generation&lt;/em&gt; free. Telling good from bad got more expensive.&lt;/p&gt;
&lt;p&gt;People in private equity say: last year, ten deals; this year, fifty, every deck polished by AI. &lt;strong&gt;Noise is 5×. Signal did not move.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;3-the-productivity-illusion&quot;&gt;3. The productivity illusion&lt;/h3&gt;
&lt;p&gt;METR, an AI-safety lab, ran a study: experienced developers completed coding tasks with and without AI tools.&lt;/p&gt;
&lt;p&gt;Developers with AI were actually 19% &lt;em&gt;slower&lt;/em&gt; — and believed they were 20% faster.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Perception and reality were 39 points apart.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Worse, the organization cannot digest the output. Individual throughput up 10×, while approval, collaboration, and quality gates stay the same. The bottleneck moves from “we cannot make enough” to “we cannot absorb it.”&lt;/p&gt;
&lt;h3 id=&quot;4-judgment-erodes&quot;&gt;4. Judgment erodes&lt;/h3&gt;
&lt;p&gt;Data shows LLMs sycophancy in 58% of cases. The more confidently you state a view, the more the model agrees.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Someone who has gone a long time without real positive feedback at work suddenly has a “superintelligence” that always agrees.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;They tell themselves: the smartest system in history thinks I am right. My manager is the one who is wrong.&lt;/p&gt;
&lt;p&gt;That feeling is addictive. It is also toxic to an organization.&lt;/p&gt;
&lt;h2 id=&quot;the-deeper-mistake&quot;&gt;The deeper mistake&lt;/h2&gt;
&lt;p&gt;Those four traps are still not the root.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Most companies are using an efficiency frame on an effectiveness problem.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Efficiency:&lt;/strong&gt; reports faster, notes faster (optimizing a task you already have)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Effectiveness:&lt;/strong&gt; close more deals, open a market (changing a business result)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Even a true 10× on efficiency will not close one extra deal if the business logic and the way decisions get made do not change with it.&lt;/p&gt;
&lt;p&gt;Deloitte matches the picture: only 34% of organizations are using AI for deep transformation; 37% are still at “swap the motor.”&lt;/p&gt;
&lt;h2 id=&quot;atm-vs-iphone&quot;&gt;ATM vs iPhone&lt;/h2&gt;
&lt;p&gt;A more recent story helps.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ATM (1970s):&lt;/strong&gt; when it arrived, everyone thought tellers would vanish. From the 1970s to 2010, U.S. bank tellers &lt;em&gt;rose&lt;/em&gt;. ATMs made a branch cheaper to run, so banks opened more branches and hired more tellers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;iPhone (2010):&lt;/strong&gt; mobile banking meant customers did not need the branch. From 2010 to 2022, U.S. bank tellers fell from 332,000 to 164,000.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The difference:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;an ATM makes an old-paradigm task faster and cheaper&lt;/li&gt;
&lt;li&gt;the iPhone creates a new paradigm in which those tasks do not need to exist&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Giving every employee ChatGPT is putting another ATM in the branch. The organization still has to find its iPhone moment.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-actually-has-to-change&quot;&gt;What actually has to change?&lt;/h2&gt;
&lt;p&gt;What did 1920s factory owners change?&lt;/p&gt;
&lt;h3 id=&quot;1-redesign-the-process&quot;&gt;1. Redesign the process&lt;/h3&gt;
&lt;p&gt;The old assumption: humans execute, tools assist. An AI-native process flips that.&lt;/p&gt;
&lt;p&gt;Goldman Sachs called Cognition’s agent Devin “our new employee” — not an assistive tool, a member of the engineering team.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;When AI goes from tool to employee, process design is a different job.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;2-redefine-roles&quot;&gt;2. Redefine roles&lt;/h3&gt;
&lt;p&gt;Managers become orchestrators. They no longer only manage people. They manage a mixed team of people and AI.&lt;/p&gt;
&lt;p&gt;New roles are appearing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI Agent Manager&lt;/li&gt;
&lt;li&gt;Intent Engineer&lt;/li&gt;
&lt;li&gt;process engineer&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;3-decision-mechanisms&quot;&gt;3. Decision mechanisms&lt;/h3&gt;
&lt;p&gt;The organization needs an AI that can say no.&lt;/p&gt;
&lt;p&gt;Directions: an AI on the investment committee, AI audit, an AI compliance officer. &lt;strong&gt;Org-level AI is not there to make decisions faster. It is there to make them better.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;4-rebuild-the-information-flow&quot;&gt;4. Rebuild the information flow&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unprompted AI:&lt;/strong&gt; the system finds the problem before you ask.&lt;/p&gt;
&lt;p&gt;A scene: the system watches portfolio data, sees a portfolio company’s working capital worsen for three months, and alerts &lt;em&gt;before&lt;/em&gt; anyone on the fund opens the relevant PDF.&lt;/p&gt;
&lt;h2 id=&quot;office-efficiency--operating-scenes&quot;&gt;Office efficiency ≠ operating scenes&lt;/h2&gt;
&lt;p&gt;The last two years produced a flood of enterprise AI agents. Most land on office work: write email, summarize meetings, tidy docs, automate approvals.&lt;/p&gt;
&lt;p&gt;Those are useful, and they are spreading. &lt;strong&gt;They still make people do the same job faster. Still ATM logic.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;What a company actually does every day is something else: understand a market, define a product, study users, set strategy, drive growth.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Those are the operating scenes that decide whether a company gets stronger or weaker.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;context-is-the-moat&quot;&gt;Context is the moat&lt;/h2&gt;
&lt;p&gt;When everyone can use the same model, the model is not a moat.&lt;/p&gt;
&lt;p&gt;GPT, Claude, Gemini, DeepSeek, Qwen — you can use them. So can your competitor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is the moat? Context.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The same model, given public information, produces a generic answer. Give it context only your company has, and you get an answer only you can get.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Models produce intelligence. Context produces value.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Stanford’s Andrew Ng released ContextHub, an open-source project aimed at almost the same problem: even the strongest model, without the right context, produces unreliable output.&lt;/p&gt;
&lt;h2 id=&quot;a-china-case&quot;&gt;A China case&lt;/h2&gt;
&lt;p&gt;Tezign spent years on DAM (digital asset management) — the richest, hardest-for-machines unstructured data a company has: images, copy, video, 3D.&lt;/p&gt;
&lt;p&gt;The AI era unlocked a capability that did not exist: understanding unstructured data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unstructured data went from “files we store” to “context we understand.”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On top of DAM, Tezign built a Context System; on top of that, GEA (Generative Enterprise Agent).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The number:&lt;/strong&gt; the same enterprise content, once called 12 times per thousand assets by people, was called more than 23,000 times by agents after the Context System.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Utilization up nearly 2,000×.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That 2,000× is not agents doing the same thing on repeat. It is agents doing what people cannot: 24/7, finding links in your context, extracting insight, driving decisions.&lt;/p&gt;
&lt;h2 id=&quot;individual-awakening-is-still-the-base&quot;&gt;Individual awakening is still the base&lt;/h2&gt;
&lt;p&gt;Asana’s data: the top 10% of “super producers” save 20+ hours a week with AI.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The problem: those 10% did not turn their companies into super-companies.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Individual awakening does not fix coordination. One person can be excellent; ten people using AI ten different ways still produce fragments.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“Human + AI as one” is the base. Org redesign is the superstructure.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Without the first, the second is talk. With only the first, the second does not happen by itself.&lt;/p&gt;
&lt;h2 id=&quot;is-your-organization-designed-for-ai&quot;&gt;Is your organization designed for AI?&lt;/h2&gt;
&lt;p&gt;The real question is not “are your people using AI?”&lt;/p&gt;
&lt;p&gt;It is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;have processes been redesigned around what AI can do?&lt;/li&gt;
&lt;li&gt;do roles treat AI agents as headcount?&lt;/li&gt;
&lt;li&gt;is there AI counterweight inside the decision system?&lt;/li&gt;
&lt;li&gt;is company context leaking away, or has it become a system asset agents can call?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The last decade, companies bought software. The last three years, they tried models. From today, what they need is an intelligent system that understands their context, has judgment, and keeps evolving.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Time to tear down the old factory.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Sources:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a16z: Institutional AI vs Individual AI&lt;/li&gt;
&lt;li&gt;DX: AI productivity gains are 10 percent not 10x&lt;/li&gt;
&lt;li&gt;METR: Early 2025 AI experienced OS dev study&lt;/li&gt;
&lt;li&gt;Asana: AI super productivity paradox&lt;/li&gt;
&lt;li&gt;Deloitte: State of AI in enterprise&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Original:&lt;/strong&gt; Founder Park&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/coding-agents-reshape-epd/&quot; class=&quot;wikilink&quot;&gt;How coding agents reshape engineering, product, and design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/whatnot-cpo-regrets-pm-exists/&quot; class=&quot;wikilink&quot;&gt;Whatnot’s CPO: “We regret that the PM function exists”&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-fatigue-truth-10x-workload/&quot; class=&quot;wikilink&quot;&gt;AI didn’t 10x your output. It 10x’d the work.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Why AI-generated UI isn&apos;t shippable, and what works</title><link>https://ssherun.github.io/en/blog/ai-ui-design-workflow/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/ai-ui-design-workflow/</guid><description>Stitch looks beautiful, but every page looks like a different product. Pencil is consistent and a bit dull. Together they&apos;re the right way to design UI.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently used AI to generate UI and walked into a hole.&lt;/p&gt;
&lt;p&gt;Google Stitch’s screens really are pretty. Then I asked it for a second page, and a third:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Every page had different button sizes, different spacing, different colors.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you are a developer, you know what that means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;components cannot be reused&lt;/li&gt;
&lt;li&gt;every page needs its own CSS&lt;/li&gt;
&lt;li&gt;maintenance explodes&lt;/li&gt;
&lt;li&gt;the redundancy makes you want to swear&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;AI-generated UI is beautiful and inconsistent.&lt;/strong&gt; That is the house disease of AI design tools.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Scattered, inconsistent interface fragments&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-ui-design-workflow-01.DieLtFrs_1IsnQy.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;why-is-it-inconsistent&quot;&gt;Why is it inconsistent?&lt;/h2&gt;
&lt;p&gt;Each generation is an independent act of creation. The model does not remember the last page’s color, does not know how tall a button should be, does not know the spacing spec.&lt;/p&gt;
&lt;p&gt;It is like asking ten designers to each design one page. Everyone has taste. Glued together it is a disaster.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI is good at inventing. It is bad at obeying a system.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-fix-pencil--stitch&quot;&gt;The fix: Pencil + Stitch&lt;/h2&gt;
&lt;p&gt;I landed on a two-step combo.&lt;/p&gt;
&lt;h3 id=&quot;step-1-let-pencil-set-the-rules&quot;&gt;Step 1: let Pencil set the rules&lt;/h3&gt;
&lt;p&gt;Pencil is an AI prototyping tool. Its strength is not “pretty.” It is &lt;strong&gt;discipline&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;You can tell it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;primary color is &lt;code&gt;#3B82F6&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;buttons are 40px tall&lt;/li&gt;
&lt;li&gt;card gap is 16px&lt;/li&gt;
&lt;li&gt;titles are 24px&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then have it generate a series of pages against that spec.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; every page lines up, like a formation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cost:&lt;/strong&gt; not pretty enough. Little visual pull.&lt;/p&gt;
&lt;h3 id=&quot;step-2-let-stitch-dress-it&quot;&gt;Step 2: let Stitch dress it&lt;/h3&gt;
&lt;p&gt;The workflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Generate a disciplined prototype in Pencil (black-and-white is fine)&lt;/li&gt;
&lt;li&gt;Export images&lt;/li&gt;
&lt;li&gt;Import into Google Stitch&lt;/li&gt;
&lt;li&gt;Ask Stitch to beautify &lt;em&gt;from those prototypes&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;The point:&lt;/strong&gt; Stitch is not inventing from zero. It is optimizing a skeleton you already set.&lt;/p&gt;
&lt;p&gt;It cannot wander, because the frame is fixed. It only adds visual detail:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;better color&lt;/li&gt;
&lt;li&gt;finer shadows&lt;/li&gt;
&lt;li&gt;more modern icons&lt;/li&gt;
&lt;li&gt;more comfortable gradients&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; you keep consistency &lt;em&gt;and&lt;/em&gt; get beauty.&lt;/p&gt;
&lt;h2 id=&quot;why-this-works&quot;&gt;Why this works&lt;/h2&gt;
&lt;h3 id=&quot;1-separate-the-concerns&quot;&gt;1. Separate the concerns&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pencil owns the system&lt;/strong&gt;: consistency&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stitch owns the finish&lt;/strong&gt;: visual lift&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Like a house: foundation and frame first (Pencil), then interiors (Stitch).&lt;/p&gt;
&lt;h3 id=&quot;2-constrain-the-models-creativity&quot;&gt;2. Constrain the model’s creativity&lt;/h3&gt;
&lt;p&gt;Creativity is a double edge:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;unconstrained, every screen is a new product (disaster)&lt;/li&gt;
&lt;li&gt;constrained, it invents &lt;em&gt;inside&lt;/em&gt; the system (ideal)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Giving Stitch a prototype &lt;em&gt;is&lt;/em&gt; giving it a constraint. It knows where the button is and what the layout is. It only has to make it look better.&lt;/p&gt;
&lt;h3 id=&quot;3-developer-friendly&quot;&gt;3. Developer-friendly&lt;/h3&gt;
&lt;p&gt;What you hand engineering:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one design system&lt;/li&gt;
&lt;li&gt;a consistent component set&lt;/li&gt;
&lt;li&gt;reusable code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nobody rewrites styles per page. They reuse components.&lt;/p&gt;
&lt;h2 id=&quot;a-real-case&quot;&gt;A real case&lt;/h2&gt;
&lt;p&gt;I used this on ten pages of a SaaS product.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stitch alone:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;generate time: 2 hours&lt;/li&gt;
&lt;li&gt;engineering time: 3 days (every page needed adjustment)&lt;/li&gt;
&lt;li&gt;maintenance: high (change one thing, change it ten times)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Pencil + Stitch:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;generate time: 3 hours (the extra Pencil step)&lt;/li&gt;
&lt;li&gt;engineering time: 1 day (reuse)&lt;/li&gt;
&lt;li&gt;maintenance: low (change once, it applies)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;One extra hour of design, two days of engineering saved.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-same-disease-in-other-tools&quot;&gt;The same disease in other tools&lt;/h2&gt;
&lt;p&gt;This is not a Stitch-only problem. Almost every AI UI generator has a version of it.&lt;/p&gt;
&lt;h3 id=&quot;v0dev&quot;&gt;v0.dev&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;fast, good-looking&lt;/li&gt;
&lt;li&gt;each generation is independent&lt;/li&gt;
&lt;li&gt;pages do not share a system&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;galileo-ai&quot;&gt;Galileo AI&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;text to UI&lt;/li&gt;
&lt;li&gt;no guarantee of design-system consistency&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;uizard&quot;&gt;Uizard&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;sketch to UI&lt;/li&gt;
&lt;li&gt;same consistency problem&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The core is the same: the model does not remember context and does not obey a spec.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Texture laid over a skeleton&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-ui-design-workflow-02.DfA7UXHW_Z2tPhRg.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;three-principles&quot;&gt;Three principles&lt;/h2&gt;
&lt;p&gt;When you design UI in the AI era, keep three:&lt;/p&gt;
&lt;h3 id=&quot;1-system-before-pretty&quot;&gt;1. System before pretty&lt;/h3&gt;
&lt;p&gt;Pretty without a system is a disaster. Set the system, then chase beauty.&lt;/p&gt;
&lt;h3 id=&quot;2-constrain-the-models-creativity-1&quot;&gt;2. Constrain the model’s creativity&lt;/h3&gt;
&lt;p&gt;Give it a frame. Let it invent inside the frame, not in open air.&lt;/p&gt;
&lt;h3 id=&quot;3-design-for-the-people-who-ship-it&quot;&gt;3. Design for the people who ship it&lt;/h3&gt;
&lt;p&gt;Design is not there to look good. It is there to land. Consistency beats beauty.&lt;/p&gt;
&lt;h2 id=&quot;tool-notes&quot;&gt;Tool notes&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Pencil:&lt;/strong&gt; disciplined prototyping&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;strength: consistency, you can define a system&lt;/li&gt;
&lt;li&gt;weakness: average visuals&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Google Stitch:&lt;/strong&gt; AI beautifier&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;strength: looks good&lt;/li&gt;
&lt;li&gt;weakness: no consistency unless a prototype constrains it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Together:&lt;/strong&gt; Pencil first, Stitch second — system + beauty.&lt;/p&gt;
&lt;h2 id=&quot;bottom-line&quot;&gt;Bottom line&lt;/h2&gt;
&lt;p&gt;The biggest problem with AI-generated UI is not that it is ugly. It is that it will not stay consistent.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The fix is simple:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pencil sets the system (skeleton)&lt;/li&gt;
&lt;li&gt;Stitch beautifies (flesh)&lt;/li&gt;
&lt;li&gt;Hand it to engineering (reusable)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;System before pretty — and you can have both.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;AI-era UI design is not “let the model run free.” It is a frame, and invention inside the frame.&lt;/p&gt;
&lt;p&gt;That is the right way to open these tools.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Tools mentioned:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pencil: disciplined prototyping&lt;/li&gt;
&lt;li&gt;Google Stitch: AI beautifier&lt;/li&gt;
&lt;li&gt;v0.dev: text to UI&lt;/li&gt;
&lt;li&gt;Galileo AI: AI UI design&lt;/li&gt;
&lt;li&gt;Uizard: sketch to UI&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The lesson:&lt;/strong&gt; one extra hour on the system saves two days of engineering.&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/stitch-design-md-infrastructure/&quot; class=&quot;wikilink&quot;&gt;Why Stitch’s DESIGN.md matters: from image tool to design infrastructure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/stitch-claude-ai-design-workflow/&quot; class=&quot;wikilink&quot;&gt;Google Stitch 2.0 + Claude Code: an AI design workflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/design-without-designing/&quot; class=&quot;wikilink&quot;&gt;Design Without Designing: how engineers ship high-quality design with AI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Stitch&apos;s DESIGN.md: from image tool to design infrastructure</title><link>https://ssherun.github.io/en/blog/stitch-design-md-infrastructure/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/stitch-design-md-infrastructure/</guid><description>Reading Stitch&apos;s DESIGN.md spec next to how people use Stitch 2.0: Google isn&apos;t just generating UI faster, it&apos;s making the design system machine-readable.</description><pubDate>Sat, 28 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently sat with two pieces on Google Stitch at once:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the official docs on the &lt;code&gt;DESIGN.md&lt;/code&gt; format&lt;/li&gt;
&lt;li&gt;a practitioner thread on X about what is actually good about Stitch 2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Read together, the feeling is sharp:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is worth watching in Stitch is not whether it can generate UI a bit faster. It is that it is turning the “design system” into infrastructure — readable, executable, and reusable by AI.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;And &lt;code&gt;DESIGN.md&lt;/code&gt; is the critical layer in that direction.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Design-system infrastructure&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-stitch-design-md-infrastructure-01.B9CWUB5p_Z18MyFG.webp&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-conclusion-first-stitch-is-no-longer-generate-a-page-it-is-generate-a-consistent-set-of-pages-and-keep-them-that-way&quot;&gt;The conclusion first: Stitch is no longer “generate a page.” It is “generate a consistent &lt;em&gt;set&lt;/em&gt; of pages and keep them that way”&lt;/h2&gt;
&lt;p&gt;Most AI UI tools can now produce a page from a sentence.&lt;/p&gt;
&lt;p&gt;The problem was never “can it output.” It is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;style drifts from page two&lt;/li&gt;
&lt;li&gt;color, type size, and component logic do not agree&lt;/li&gt;
&lt;li&gt;a new project means explaining the style again&lt;/li&gt;
&lt;li&gt;intent dies on the way to the coding agent&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The hard job was never &lt;strong&gt;generating one image&lt;/strong&gt;. It is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How do you generate a whole UI system that stays in one language, can iterate for months, and can be handed to the next agent.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is the problem Stitch is clearly trying to solve.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;what-designmd-actually-is&quot;&gt;What &lt;code&gt;DESIGN.md&lt;/code&gt; actually is&lt;/h2&gt;
&lt;p&gt;From the official docs, &lt;code&gt;DESIGN.md&lt;/code&gt; is not a casual Markdown note.&lt;/p&gt;
&lt;p&gt;It has two layers:&lt;/p&gt;
&lt;h3 id=&quot;layer-1-a-design-summary-for-humans&quot;&gt;Layer 1: a design summary for humans&lt;/h3&gt;
&lt;p&gt;Think of it as a design-system spec:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;overall style&lt;/li&gt;
&lt;li&gt;how color is defined&lt;/li&gt;
&lt;li&gt;how type is paired&lt;/li&gt;
&lt;li&gt;component constraints&lt;/li&gt;
&lt;li&gt;what to do and what not to do&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This layer is for design, product, and engineering to read together.&lt;/p&gt;
&lt;h3 id=&quot;layer-2-structured-tokens-for-machines&quot;&gt;Layer 2: structured tokens for machines&lt;/h3&gt;
&lt;p&gt;The docs are explicit: behind &lt;code&gt;DESIGN.md&lt;/code&gt; sit structured tokens Stitch maintains.&lt;/p&gt;
&lt;p&gt;Which means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you see Markdown&lt;/li&gt;
&lt;li&gt;Stitch consumes structured design data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is the important part.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;DESIGN.md&lt;/code&gt; is not a leftover design diary. It is a format that is human-readable &lt;em&gt;and&lt;/em&gt; machine-executable.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is a different object from a traditional design doc.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;why-this-matters-prompts-are-not-enough&quot;&gt;Why this matters: prompts are not enough&lt;/h2&gt;
&lt;p&gt;A lot of AI design still runs on prompts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a more “tech” landing page&lt;/li&gt;
&lt;li&gt;dark theme&lt;/li&gt;
&lt;li&gt;Linear and Stripe as references&lt;/li&gt;
&lt;li&gt;softer card radii&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You will get a picture.&lt;/p&gt;
&lt;p&gt;Prompts have built-in defects:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;unstable&lt;/li&gt;
&lt;li&gt;hard to reuse&lt;/li&gt;
&lt;li&gt;inconsistent across pages&lt;/li&gt;
&lt;li&gt;hard to hand to a later coding agent&lt;/li&gt;
&lt;li&gt;hard to turn into a long-lived team asset&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is the job &lt;code&gt;DESIGN.md&lt;/code&gt; takes.&lt;/p&gt;
&lt;p&gt;It sits &lt;em&gt;on top of&lt;/em&gt; the prompt as a &lt;strong&gt;persistent spec layer&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;define once, use next time&lt;/li&gt;
&lt;li&gt;import / export&lt;/li&gt;
&lt;li&gt;move across projects&lt;/li&gt;
&lt;li&gt;an agent can read it directly&lt;/li&gt;
&lt;li&gt;the whole system becomes a long-term asset&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you need an analogy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a PRD in product&lt;/li&gt;
&lt;li&gt;a component spec on the front end&lt;/li&gt;
&lt;li&gt;an API schema in code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It just lives at the design layer.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;stitch-20s-upgrades-show-it-wants-more-than-pictures&quot;&gt;Stitch 2.0’s upgrades show it wants more than pictures&lt;/h2&gt;
&lt;p&gt;The X thread is useful because it is not a concept piece. It is a feel for the product.&lt;/p&gt;
&lt;p&gt;A few points sit next to &lt;code&gt;DESIGN.md&lt;/code&gt; especially well.&lt;/p&gt;
&lt;h3 id=&quot;1-a-theme-system&quot;&gt;1. A theme system&lt;/h3&gt;
&lt;p&gt;Stitch now lets you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pick a theme&lt;/li&gt;
&lt;li&gt;switch color pairings&lt;/li&gt;
&lt;li&gt;change the theme color by hand&lt;/li&gt;
&lt;li&gt;update existing pages globally after you change it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What does that mean?&lt;/p&gt;
&lt;p&gt;The substrate is no longer a single page. It is a set of &lt;strong&gt;global design variables&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Same logic as the tokens behind &lt;code&gt;DESIGN.md&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;2-an-infinite-canvas&quot;&gt;2. An infinite canvas&lt;/h3&gt;
&lt;p&gt;The author says the UI now feels more like Figma — a canvas that can grow.&lt;/p&gt;
&lt;p&gt;Stitch’s goal is no longer “one landing page.” It is moving toward a &lt;strong&gt;multi-page product design space&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;3-instant-interactive-prototypes&quot;&gt;3. Instant interactive prototypes&lt;/h3&gt;
&lt;p&gt;Pages stitch together; the system can infer which screen a button should open.&lt;/p&gt;
&lt;p&gt;It now covers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;static visual design&lt;/li&gt;
&lt;li&gt;page relationships&lt;/li&gt;
&lt;li&gt;prototype interaction&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From “draw a picture” toward “a design process.”&lt;/p&gt;
&lt;h3 id=&quot;4-html-export--ai-coding--audit&quot;&gt;4. HTML export + AI coding + audit&lt;/h3&gt;
&lt;p&gt;The author’s real loop:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;generate UI in Stitch&lt;/li&gt;
&lt;li&gt;export HTML and design images&lt;/li&gt;
&lt;li&gt;hand them to Claude Code / Codex&lt;/li&gt;
&lt;li&gt;send a sub-agent to audit spacing, type size, color, hierarchy&lt;/li&gt;
&lt;li&gt;if it fails, fix and repeat&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Worth sitting with.&lt;/p&gt;
&lt;p&gt;This is not a traditional designer loop. It is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI-native design → AI-native build → AI-native audit&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Drop &lt;code&gt;DESIGN.md&lt;/code&gt; into that line and it is the visual-spec middleware.&lt;/p&gt;
&lt;h3 id=&quot;5-an-mcp-server&quot;&gt;5. An MCP server&lt;/h3&gt;
&lt;p&gt;Stitch already has an MCP server you can plug into Claude Code or Cursor.&lt;/p&gt;
&lt;p&gt;The ambition is not only a web tool. It wants to be:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;the design-capability vendor inside an AI IDE.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If that lands, it is a large deal.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Humans and machines reading the same spec&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-stitch-design-md-infrastructure-02.B7vbJVhm_Z13utUN.webp&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;three-things-worth-keeping-from-both-pieces&quot;&gt;Three things worth keeping from both pieces&lt;/h2&gt;
&lt;h3 id=&quot;insight-1-design-assets-are-becoming-text&quot;&gt;Insight 1: design assets are becoming text&lt;/h3&gt;
&lt;p&gt;Design assets used to be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Figma files&lt;/li&gt;
&lt;li&gt;palettes&lt;/li&gt;
&lt;li&gt;component libraries&lt;/li&gt;
&lt;li&gt;a pile of loose spec docs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They will look more like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Markdown specs&lt;/li&gt;
&lt;li&gt;design tokens&lt;/li&gt;
&lt;li&gt;schemas an agent can consume&lt;/li&gt;
&lt;li&gt;design notes that travel between projects&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;DESIGN.md&lt;/code&gt; is a typical artifact of that trend.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;insight-2-for-the-first-time-a-design-system-can-be-stably-consumed-by-an-agent&quot;&gt;Insight 2: for the first time, a design system can be &lt;em&gt;stably&lt;/em&gt; consumed by an agent&lt;/h3&gt;
&lt;p&gt;When AI wrote front end, design input was:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;screenshots&lt;/li&gt;
&lt;li&gt;prompts&lt;/li&gt;
&lt;li&gt;verbal description&lt;/li&gt;
&lt;li&gt;Figma screengrabs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;None of that is stable.&lt;/p&gt;
&lt;p&gt;A format like &lt;code&gt;DESIGN.md&lt;/code&gt; is the first real chance for a design system to become:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;readable&lt;/li&gt;
&lt;li&gt;parseable&lt;/li&gt;
&lt;li&gt;executable&lt;/li&gt;
&lt;li&gt;transferable&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;as agent input.&lt;/p&gt;
&lt;p&gt;That is a large change for AI coding workflows.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;insight-3-stitch-looks-more-like-new-design-infrastructure-than-a-figma-killer&quot;&gt;Insight 3: Stitch looks more like new design infrastructure than a Figma killer&lt;/h3&gt;
&lt;p&gt;On the surface, Stitch is “an AI that generates comps.”&lt;/p&gt;
&lt;p&gt;Put the capabilities together:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;theme system&lt;/li&gt;
&lt;li&gt;design tokens&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DESIGN.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;interactive prototypes&lt;/li&gt;
&lt;li&gt;HTML export&lt;/li&gt;
&lt;li&gt;MCP server&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What it is actually trying to open is:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;design description → design system → page prototype → code → consistency audit&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That is not “an image tool” logic.&lt;/p&gt;
&lt;p&gt;It is a new layer of design infrastructure.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;what-this-means-for-indies-and-people-who-run-agent-workflows&quot;&gt;What this means for indies and people who run agent workflows&lt;/h2&gt;
&lt;p&gt;Three practical takeaways.&lt;/p&gt;
&lt;h3 id=&quot;1-the-design-system-can-settle-before-the-code&quot;&gt;1. The design system can settle &lt;em&gt;before&lt;/em&gt; the code&lt;/h3&gt;
&lt;p&gt;A lot of indie developers used to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;write pages first&lt;/li&gt;
&lt;li&gt;fix UI later&lt;/li&gt;
&lt;li&gt;watch the style fall apart&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A more reasonable order now:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;prototype in Stitch&lt;/li&gt;
&lt;li&gt;freeze the system in &lt;code&gt;DESIGN.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;let a coding agent implement&lt;/li&gt;
&lt;li&gt;add an audit agent for fidelity&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The design system becomes an &lt;em&gt;earlier&lt;/em&gt; asset.&lt;/p&gt;
&lt;h3 id=&quot;2-multi-agent-collaboration-gets-more-natural&quot;&gt;2. Multi-agent collaboration gets more natural&lt;/h3&gt;
&lt;p&gt;A natural chain:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stitch owns the design source&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DESIGN.md&lt;/code&gt; carries the spec&lt;/li&gt;
&lt;li&gt;a coding agent implements&lt;/li&gt;
&lt;li&gt;an audit agent checks consistency&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;More reliable than one agent doing the whole job.&lt;/p&gt;
&lt;h3 id=&quot;3-the-winning-move-in-ai-design-is-not-speed-it-is-consistency&quot;&gt;3. The winning move in AI design is not speed. It is consistency&lt;/h3&gt;
&lt;p&gt;What will separate products is not who can emit a page in ten seconds. It is who can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ship a set of pages that look like one product&lt;/li&gt;
&lt;li&gt;change a theme and have it apply everywhere&lt;/li&gt;
&lt;li&gt;inherit a system across projects&lt;/li&gt;
&lt;li&gt;keep the next implementation agent on the rails&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is productized value.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;bottom-line&quot;&gt;Bottom line&lt;/h2&gt;
&lt;p&gt;If you treat Google Stitch as “an AI that generates UI,” you will undersell it.&lt;/p&gt;
&lt;p&gt;What is worth watching is that it is turning the design system into a middle layer that is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;human-readable&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;machine-executable&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;reusable across projects&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;consumable by agents&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And &lt;code&gt;DESIGN.md&lt;/code&gt; is the core of that layer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In one line:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Stitch’s goal is not a few more pages. It is making the design system infrastructure you can pass, execute, and reuse in the AI era.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If that direction holds, the change may be as large as design systems themselves were for front-end engineering.&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/stitch-claude-ai-design-workflow/&quot; class=&quot;wikilink&quot;&gt;Google Stitch 2.0 + Claude Code: an AI design workflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-ui-design-workflow/&quot; class=&quot;wikilink&quot;&gt;Why AI-generated UI isn’t shippable — and the combo that works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/design-without-designing/&quot; class=&quot;wikilink&quot;&gt;Design Without Designing: how engineers ship high-quality design with AI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>When a 45-year-old paper is flagged as AI</title><link>https://ssherun.github.io/en/blog/ai-proof-human/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/ai-proof-human/</guid><description>An AI detector scored a 1981 paper as machine-written. Humans are now stuck proving they are not a model. This is not science fiction. It is happening.</description><pubDate>Fri, 27 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The absurd fact:&lt;/strong&gt; a scholarly paper published in 1981 was scored “AI-generated” by a 2026 detector. Not a joke. A real event.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&quot;opening-when-humans-have-to-prove-i-am-not-a-model&quot;&gt;Opening: when humans have to prove “I am not a model”&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;An old manuscript under cold scanning light&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-proof-human-01.Vyq0e-im_Zhju6C.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Picture this:&lt;/p&gt;
&lt;p&gt;You spent real time on a paper. A detector flags it as AI-generated.&lt;/p&gt;
&lt;p&gt;You: “I wrote this by hand.”&lt;/p&gt;
&lt;p&gt;Detector: “99.8% probability AI-generated.”&lt;/p&gt;
&lt;p&gt;You: “I published this in 1981. The internet barely existed.”&lt;/p&gt;
&lt;p&gt;Detector: “Sorry. The result does not lie.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;That is the absurd reality of 2026.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;what-happened-a-classic-paper-45-years-old-failed&quot;&gt;What happened: a classic paper, 45 years old, “failed”&lt;/h2&gt;
&lt;h3 id=&quot;the-victim-a-well-known-scholars-paper&quot;&gt;The victim: a well-known scholar’s paper&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Published:&lt;/strong&gt; 1981 (45 years ago)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Author:&lt;/strong&gt; a well-known professor (then a young scholar)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content:&lt;/strong&gt; careful academic work&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Detector result:&lt;/strong&gt; 99.8% AI-generated&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;a-timeline-that-should-make-the-score-impossible&quot;&gt;A timeline that should make the score impossible&lt;/h3&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Year&lt;/th&gt;&lt;th&gt;Event&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;1981&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;paper published&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;1997&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;IBM Deep Blue beats a chess champion&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;2012&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;deep learning takes off&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;2022&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;ChatGPT launches&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;2026&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;the 1981 paper is scored “AI-generated”&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;The question: in 1981, AI could not even play chess well. How did it write a journal article?&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;why-does-this-absurdity-exist&quot;&gt;Why does this absurdity exist?&lt;/h2&gt;
&lt;h3 id=&quot;1-training-bias-in-the-detector&quot;&gt;1. Training bias in the detector&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The detector’s logic:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;training data: lots of human text + lots of AI text&lt;/li&gt;
&lt;li&gt;learning target: features that separate the two&lt;/li&gt;
&lt;li&gt;judgment: does this text match an “AI-generated pattern”?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;rigorous academic prose is already “regular”&lt;/li&gt;
&lt;li&gt;regular text is easy to mis-score as AI&lt;/li&gt;
&lt;li&gt;because the model was also trained to write regularly&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Like:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;your handwriting is too neat, so it must be printed&lt;/li&gt;
&lt;li&gt;you speak too standard, so you must be a robot&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-overfit-detection-criteria&quot;&gt;2. Overfit detection criteria&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;What detectors look at:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;lexical diversity&lt;/li&gt;
&lt;li&gt;sentence complexity&lt;/li&gt;
&lt;li&gt;logical coherence&lt;/li&gt;
&lt;li&gt;lexical regularity&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Those features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;excellent human writers have them too&lt;/li&gt;
&lt;li&gt;academic papers &lt;em&gt;require&lt;/em&gt; regularity, rigor, and clear logic&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The result:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;humans who write well = flagged as AI&lt;/li&gt;
&lt;li&gt;humans who write badly = pass&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Are we rewarding bad writing?&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-deeper-problem-how-does-a-human-prove-themselves&quot;&gt;The deeper problem: how does a human prove themselves?&lt;/h2&gt;
&lt;h3 id=&quot;trap-1-the-burden-of-proof-flipped&quot;&gt;Trap 1: the burden of proof flipped&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Old logic:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the accuser proves&lt;/li&gt;
&lt;li&gt;“this is AI-generated” → they show it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Now:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the accused proves&lt;/li&gt;
&lt;li&gt;“prove you are not AI” → you show it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;How, exactly?&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;trap-2-you-cannot-prove-a-negative&quot;&gt;Trap 2: you cannot prove a negative&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;A philosophy problem:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;proving “I am human” is hard&lt;/li&gt;
&lt;li&gt;proving “I am not AI” is harder&lt;/li&gt;
&lt;li&gt;you cannot prove a negation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Like:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;prove “I did not steal”&lt;/li&gt;
&lt;li&gt;prove “I am not an alien”&lt;/li&gt;
&lt;li&gt;prove “I am not a model”&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;trap-3-an-arms-race&quot;&gt;Trap 3: an arms race&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Now:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;generation looks more human&lt;/li&gt;
&lt;li&gt;detectors get more sensitive&lt;/li&gt;
&lt;li&gt;humans sit in the middle and lose either way&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Next:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;generation → more human&lt;/li&gt;
&lt;li&gt;detectors → stricter&lt;/li&gt;
&lt;li&gt;humans → easier to mis-score&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;End state:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;to pass, humans write &lt;em&gt;less&lt;/em&gt; like humans&lt;/li&gt;
&lt;li&gt;is that not backwards?&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;five-ways-humans-try-to-prove-authorship-add-yours&quot;&gt;Five ways humans try to prove authorship (add yours)&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Half-warm, half-cold self-proof&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-proof-human-02.Dn5EztVf_2r3OW1.webp&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;1-timestamps-most-direct&quot;&gt;1. Timestamps (most direct)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Idea:&lt;/strong&gt; prove the work predates the technology.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fits:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;historical documents&lt;/li&gt;
&lt;li&gt;early work&lt;/li&gt;
&lt;li&gt;anything with a hard date&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Limit:&lt;/strong&gt; only proves the past. Does nothing for work written today.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Case:&lt;/strong&gt; a 1981 paper — no ChatGPT. A 2026 paper?&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;2-a-record-of-the-process-most-reliable&quot;&gt;2. A record of the process (most reliable)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Idea:&lt;/strong&gt; keep the whole trail — drafts, edits, thinking notes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;version control (Git)&lt;/li&gt;
&lt;li&gt;keep every draft&lt;/li&gt;
&lt;li&gt;record the session&lt;/li&gt;
&lt;li&gt;keep notes and sources of the idea&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Strength:&lt;/strong&gt; hard to fake; shows a human thinking.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cost:&lt;/strong&gt; expensive; not everyone has the habit.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;3-a-uniqueness-mark-most-clever&quot;&gt;3. A uniqueness mark (most clever)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Idea:&lt;/strong&gt; leave “human features” in the work — a personal style a model struggles to copy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a personal way of saying things&lt;/li&gt;
&lt;li&gt;a characteristic typo or verbal tic&lt;/li&gt;
&lt;li&gt;a cultural in-joke or a private memory&lt;/li&gt;
&lt;li&gt;deliberate imperfection&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt; dialect, personal history, a unique metaphor, non-standard phrasing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; models are also learning to imitate human imperfection. Endless arms race.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;4-biometrics-most-sci-fi&quot;&gt;4. Biometrics (most sci-fi)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Idea:&lt;/strong&gt; pair the work with a biometric that says “a human was creating.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Possible tech:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;keystroke dynamics (everyone types and pauses differently)&lt;/li&gt;
&lt;li&gt;eye tracking (how you read and think)&lt;/li&gt;
&lt;li&gt;EEG (brain activity while writing)&lt;/li&gt;
&lt;li&gt;live video of the session&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Strength:&lt;/strong&gt; hard to fake; scientifically respectable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cost:&lt;/strong&gt; privacy, money, and mostly unrealistic.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;5-community-trust-most-human&quot;&gt;5. Community trust (most human)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Idea:&lt;/strong&gt; a trust-based system instead of a cold algorithm.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;peer review in academia&lt;/li&gt;
&lt;li&gt;a creator’s history and reputation&lt;/li&gt;
&lt;li&gt;cross-checks by community members&lt;/li&gt;
&lt;li&gt;a mentor or colleague’s endorsement&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Strength:&lt;/strong&gt; human, contextual, not a single cut.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cost:&lt;/strong&gt; hard to scale; bias can sneak in.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;your-turn-how-would-you-prove-it&quot;&gt;Your turn: how would &lt;em&gt;you&lt;/em&gt; prove it?&lt;/h2&gt;
&lt;p&gt;You may already be asking:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If your work is flagged as AI tomorrow, how do you prove it is yours?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I listed five methods. There are more.&lt;/p&gt;
&lt;p&gt;Share in the comments:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Which method do you think actually works?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Have you been in a similar trap?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Do you have a method I missed?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How should detectors get better?&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Especially welcome: practitioners, academics, working creators, lawyers.&lt;/p&gt;
&lt;p&gt;This is an era problem. We should not solve it alone.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;deeper-is-this-a-tech-problem-or-a-philosophy-problem&quot;&gt;Deeper: is this a tech problem or a philosophy problem?&lt;/h2&gt;
&lt;h3 id=&quot;the-turing-test-inverted&quot;&gt;The Turing test, inverted&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Classic Turing test (1950):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;can a machine act like a human?&lt;/li&gt;
&lt;li&gt;goal: the machine passes a “human test”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2026 reverse Turing test:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;can a human prove they are not a machine?&lt;/li&gt;
&lt;li&gt;goal: the human passes an “AI detector”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The irony:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;we spent 70 years making AI look human&lt;/li&gt;
&lt;li&gt;we now spend time proving humans are not AI&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;who-defines-human&quot;&gt;Who defines “human”?&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The core questions:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what is “human writing”?&lt;/li&gt;
&lt;li&gt;what is “AI writing”?&lt;/li&gt;
&lt;li&gt;where is the boundary?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;When AI writes more like a human:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;did the model get more human?&lt;/li&gt;
&lt;li&gt;or did “human” get defined more like a machine?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;In the end:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;we may not be proving “I am human”&lt;/li&gt;
&lt;li&gt;we may be proving “I match some algorithm’s definition of human”&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;dont-let-a-detector-define-a-human&quot;&gt;Don’t let a detector define a human&lt;/h2&gt;
&lt;p&gt;The title is “how do humans prove themselves.” The real question may be:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why do we have to?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;because an imperfect algorithm said you “don’t look human”?&lt;/li&gt;
&lt;li&gt;because a biased training set scored you “AI”?&lt;/li&gt;
&lt;li&gt;because a commercial detector needs to prove its own value?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Maybe what has to change is not how humans prove authorship. It is our dependence on “detection.”&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;three-suggestions&quot;&gt;Three suggestions&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;To detector makers:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cutting false positives matters more than raising detection rate&lt;/li&gt;
&lt;li&gt;better to miss than to wrongly kill&lt;/li&gt;
&lt;li&gt;human variety is larger than your training set&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;To platforms:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;do not over-rely on automated detection&lt;/li&gt;
&lt;li&gt;keep human review and an appeals path&lt;/li&gt;
&lt;li&gt;give the mis-scored person a chance to speak&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;To creators:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;keep a record of how you made the work&lt;/li&gt;
&lt;li&gt;build a reputation&lt;/li&gt;
&lt;li&gt;do not change your style to please a detector&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;close-next-does-ai-have-to-prove-it-is-not-human&quot;&gt;Close: next, does AI have to prove it is not human?&lt;/h2&gt;
&lt;p&gt;If humans must prove “I am not AI,” what happens next?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Maybe one day:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI has to prove “I am not human”&lt;/li&gt;
&lt;li&gt;because human work looks too much like AI&lt;/li&gt;
&lt;li&gt;or AI work looks too much like human&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Then:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the line between human and AI is gone&lt;/li&gt;
&lt;li&gt;we stop obsessing over “who is who”&lt;/li&gt;
&lt;li&gt;we look at the value of the work itself&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;That is the future worth wanting.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;This piece asks a question. It does not have a standard answer.&lt;/p&gt;
&lt;p&gt;“How does a human prove themselves” is open on purpose.&lt;/p&gt;
&lt;p&gt;Your method may be worth more than the five I listed.&lt;/p&gt;
&lt;p&gt;Share: your method, your false-positive story, your view of detection, your prediction.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Event source: 机器之心 Pro&lt;/li&gt;
&lt;li&gt;Keywords: AI detectors, academic integrity, Turing test&lt;/li&gt;
&lt;li&gt;Related: accuracy of AI-content detection&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;If this was useful, pass it on.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In the AI era we all have to think about what “human” means.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Original by SSHeRun, first published on this blog&lt;/em&gt;
&lt;em&gt;Written: 2026-03-27&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-cannot-replace-human-experience/&quot; class=&quot;wikilink&quot;&gt;AI cannot replace lived experience&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-era-clarity-matters/&quot; class=&quot;wikilink&quot;&gt;The scarcest skill in the AI era: saying it clearly&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Wide + Deep: why a 4B model can punch up</title><link>https://ssherun.github.io/en/blog/wideseek-ai-cp/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/wideseek-ai-cp/</guid><description>DeepSeek taught models to think deep. A Tsinghua team says deep isn&apos;t enough — you also need wide. How a 4B setup can stand next to a 671B.</description><pubDate>Fri, 27 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;In one line:&lt;/strong&gt; DeepSeek-R1 used depth scaling to show that AI can think. Tsinghua’s WideSeek-R1 shows it also has to cast a wide net. A 4B setup standing next to 671B is not brute force. It is teaching the system to divide the work.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&quot;Deep dig vs wide spread&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-wideseek-ai-cp-01.BlKD7Wx7_Z2wk7gq.webp&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-oldest-couple-in-computer-science-is-back&quot;&gt;The oldest couple in computer science is back&lt;/h2&gt;
&lt;p&gt;If you took data structures, you remember this pair:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Depth-first search (DFS)&lt;/strong&gt; — one path to the wall, no turning back&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Breadth-first search (BFS)&lt;/strong&gt; — lay out every possibility first&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They are the yin and yang of the field:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DFS is good at &lt;strong&gt;digging detail&lt;/strong&gt; — sudoku, mazes&lt;/li&gt;
&lt;li&gt;BFS is good at &lt;strong&gt;scanning the whole graph&lt;/strong&gt; — shortest path, social networks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In 2026 that old couple “came back to life” in AI, and started a real argument.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;deepseek-r1-the-depth-monster&quot;&gt;DeepSeek-R1: the depth monster&lt;/h2&gt;
&lt;p&gt;In 2025 DeepSeek-R1 landed and shocked the field with &lt;strong&gt;depth scaling&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;make the model “think slowly,” the way a person does&lt;/li&gt;
&lt;li&gt;reason step by step, layer by layer&lt;/li&gt;
&lt;li&gt;crush a lot of rivals on hard logical tasks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Classic &lt;strong&gt;DFS thinking&lt;/strong&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“To solve this, dig the first branch all the way. If it fails, backtrack. Repeat until you have an answer.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;DeepSeek-R1’s proof: &lt;strong&gt;bigger is not always better. Deeper is smarter.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;is-deep-enough&quot;&gt;Is deep enough?&lt;/h2&gt;
&lt;p&gt;A Tsinghua + Infinigence team asked the awkward question:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“If the job needs not only deep reasoning but &lt;em&gt;very wide&lt;/em&gt; information gathering, is one giant model still the optimum?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Job: build a timeline of global AI events in 2025.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;DeepSeek-R1 (DFS):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;dig January to the bottom, then February…&lt;/li&gt;
&lt;li&gt;strength: each month is complete&lt;/li&gt;
&lt;li&gt;cost: slow, and easy to get stuck in a hole&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The ideal (BFS):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;send twelve small helpers, one month each&lt;/li&gt;
&lt;li&gt;gather in parallel, merge at the end&lt;/li&gt;
&lt;li&gt;strength: fast, wide coverage&lt;/li&gt;
&lt;li&gt;cost: you need a coordination mechanism&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is the BFS advantage: &lt;strong&gt;cast a wide net, catch more fish.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;wideseek-r1-teach-the-model-to-divide-labor&quot;&gt;WideSeek-R1: teach the model to divide labor&lt;/h2&gt;
&lt;p&gt;Tsinghua’s answer: a &lt;strong&gt;multi-agent system&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The idea:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Do not send one giant model in alone&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stand up an AI task force&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Each agent owns a slice; merge at the end&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Like a product squad:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PM owns the need&lt;/li&gt;
&lt;li&gt;design owns UI&lt;/li&gt;
&lt;li&gt;engineering owns the build&lt;/li&gt;
&lt;li&gt;QA owns quality&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;WideSeek-R1 = Deep (deep reasoning) + Wide (wide collaboration).&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-number-that-stings-how-does-4b-stand-next-to-671b&quot;&gt;The number that stings: how does 4B stand next to 671B?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;WideSeek-R1’s scorecard:&lt;/strong&gt;&lt;/p&gt;




















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Model&lt;/th&gt;&lt;th&gt;Parameters&lt;/th&gt;&lt;th&gt;Performance&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;DeepSeek-R1&lt;/td&gt;&lt;td&gt;671B&lt;/td&gt;&lt;td&gt;baseline&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;WideSeek-R1&lt;/td&gt;&lt;td&gt;4B × N agents&lt;/td&gt;&lt;td&gt;&lt;strong&gt;close to, sometimes past&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;A 100× gap in parameters, and a tie?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The secrets:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Parallelism&lt;/strong&gt; — many small models at once; total throughput can match a giant&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Specialization&lt;/strong&gt; — each agent only has to be good at one slice&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MARL (multi-agent RL)&lt;/strong&gt; — agents &lt;em&gt;learn&lt;/em&gt; to coordinate&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;An analogy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one PhD (671B) vs a group of undergrads (4B × N)&lt;/li&gt;
&lt;li&gt;the PhD knows everything and works slowly&lt;/li&gt;
&lt;li&gt;the undergrads each own a specialty; together they can be faster&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;how-do-you-teach-models-to-cooperate&quot;&gt;How do you teach models to cooperate?&lt;/h2&gt;
&lt;h3 id=&quot;1-task-decomposition&quot;&gt;1. Task decomposition&lt;/h3&gt;
&lt;p&gt;Split a large job:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Job: write an AI survey&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Agent A: collect 2025 papers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Agent B: collect 2026 papers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Agent C: organize technical trends&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Agent D: write the summary&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;2-multi-agent-reinforcement-learning-marl&quot;&gt;2. Multi-agent reinforcement learning (MARL)&lt;/h3&gt;
&lt;p&gt;Let agents evolve while they collaborate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reward:&lt;/strong&gt; finish fast → higher reward&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Penalty:&lt;/strong&gt; duplicate work, conflicting facts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Objective:&lt;/strong&gt; maximize team return&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Like a game party:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;at first everyone does their own thing (bad)&lt;/li&gt;
&lt;li&gt;after enough raids they start to combo (good)&lt;/li&gt;
&lt;li&gt;finally they have chemistry (scary)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;3-share-information-and-coordinate&quot;&gt;3. Share information and coordinate&lt;/h3&gt;
&lt;p&gt;Agents need a channel:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;shared knowledge base&lt;/strong&gt; — do not scrape the same thing twice&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;task queue&lt;/strong&gt; — idle agents pick up work&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;conflict resolution&lt;/strong&gt; — vote when facts collide&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt=&quot;A cluster of small agents collaborating&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-wideseek-ai-cp-02.BjMnTISO_Z1lhN5J.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;why-this-matters-three-scenes&quot;&gt;Why this matters: three scenes&lt;/h2&gt;
&lt;h3 id=&quot;scene-1-enterprise-knowledge-qa&quot;&gt;Scene 1: enterprise knowledge Q&amp;#x26;A&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Classic (Deep):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one large model reads every document&lt;/li&gt;
&lt;li&gt;slow, and it mixes things up&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;WideSeek (Wide):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;agent A owns technical docs&lt;/li&gt;
&lt;li&gt;agent B owns commercial contracts&lt;/li&gt;
&lt;li&gt;agent C owns HR policy&lt;/li&gt;
&lt;li&gt;when a user asks, the relevant agents answer together&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;scene-2-multilingual-generation&quot;&gt;Scene 2: multilingual generation&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Classic:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one model brute-learns ten languages&lt;/li&gt;
&lt;li&gt;fluent in none&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;WideSeek:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ten agents, one language each&lt;/li&gt;
&lt;li&gt;they collaborate when you need a translation&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;scene-3-real-time-analytics&quot;&gt;Scene 3: real-time analytics&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Classic:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one model walks every data source in series&lt;/li&gt;
&lt;li&gt;slow enough to doubt your life choices&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;WideSeek:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;agent A watches markets&lt;/li&gt;
&lt;li&gt;agent B watches news&lt;/li&gt;
&lt;li&gt;agent C watches social&lt;/li&gt;
&lt;li&gt;parallel ingest, live merge&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;dfs-vs-bfs-the-wrong-fight&quot;&gt;DFS vs BFS: the wrong fight&lt;/h2&gt;
&lt;p&gt;Back to the opening: which is stronger, depth-first or breadth-first?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It depends on the scene.&lt;/strong&gt;&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Scene&lt;/th&gt;&lt;th&gt;Best shape&lt;/th&gt;&lt;th&gt;Example&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Hard logical reasoning&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Deep (DFS)&lt;/td&gt;&lt;td&gt;DeepSeek-R1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Wide information gathering&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Wide (BFS)&lt;/td&gt;&lt;td&gt;WideSeek-R1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Mixed work&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Deep + Wide&lt;/td&gt;&lt;td&gt;the next step&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sudoku → DFS (one path to the end)&lt;/li&gt;
&lt;li&gt;shortest path → BFS (scan the graph)&lt;/li&gt;
&lt;li&gt;Go → DFS + BFS (AlphaGo’s MCTS)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The future of AI is not Deep &lt;em&gt;or&lt;/em&gt; Wide. It is the fusion.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;notes-for-indie-developers&quot;&gt;Notes for indie developers&lt;/h2&gt;
&lt;p&gt;Three lessons from WideSeek-R1:&lt;/p&gt;
&lt;h3 id=&quot;1-small-and-sharp--large-and-general&quot;&gt;1. Small and sharp &gt; large and general&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;do not chase “one model for everything”&lt;/li&gt;
&lt;li&gt;several small models with a split of labor are often more efficient&lt;/li&gt;
&lt;li&gt;microservices vs a monolith, again&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-parallel--serial&quot;&gt;2. Parallel &gt; serial&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;if it can run in parallel, do not serialize it&lt;/li&gt;
&lt;li&gt;threads, processes, agents&lt;/li&gt;
&lt;li&gt;time is money&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;3-collaboration--solo&quot;&gt;3. Collaboration &gt; solo&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;teach the AI to work as a team&lt;/li&gt;
&lt;li&gt;design the comms and the reward&lt;/li&gt;
&lt;li&gt;1 + 1 &gt; 2&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-couple-never-went-out-of-date&quot;&gt;The couple never went out of date&lt;/h2&gt;
&lt;p&gt;From 1970s graph algorithms to 2026 multi-agent AI:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DFS and BFS have walked with computer science for fifty years.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;They are not opposites. They complete each other:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Deep teaches AI to think deeply&lt;/li&gt;
&lt;li&gt;Wide teaches AI to collaborate widely&lt;/li&gt;
&lt;li&gt;together, that is closer to “intelligence”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;DeepSeek taught AI to think. WideSeek taught AI to cooperate.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Next: who teaches it to create?&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Paper: WideSeek-R1: Multi-Agent System with MARL&lt;/li&gt;
&lt;li&gt;Institutions: Tsinghua University × Infinigence&lt;/li&gt;
&lt;li&gt;Comparison: 4B setup vs 671B DeepSeek-R1&lt;/li&gt;
&lt;li&gt;Keywords: multi-agent systems, MARL, width scaling&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;If this was useful, pass it on.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The future of AI is not a bigger model. It is smarter collaboration.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Original by SSHeRun, first published on this blog&lt;/em&gt;
&lt;em&gt;Written: 2026-03-27&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/deepseek-engram-conditional-memory/&quot; class=&quot;wikilink&quot;&gt;DeepSeek Engram: conditional memory as a new sparsity axis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/forceful-systems-fly-off-multi-agent-illusion/&quot; class=&quot;wikilink&quot;&gt;Why “virtual company” multi-agent setups usually fail&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>AI didn&apos;t 10x your output. It 10x&apos;d the work.</title><link>https://ssherun.github.io/en/blog/ai-fatigue-truth-10x-workload/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/ai-fatigue-truth-10x-workload/</guid><description>A Silicon Valley engineer on the real numbers: 93% use AI, throughput rose ~10%, one study found it made people 19% slower. AI fatigue is structural.</description><pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;1-behind-the-layoff-wave-a-line-engineer-popped-the-myth&quot;&gt;1. Behind the layoff wave, a line engineer popped the myth&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;An inspector at the end of the line&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-fatigue-truth-10x-workload-01.hr6waGfy_1MV1dX.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;2026, Silicon Valley kept cutting:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;January: Amazon, 16,000&lt;/li&gt;
&lt;li&gt;February: Block, nearly half the company&lt;/li&gt;
&lt;li&gt;March: Meta planning 16,000&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;“AI will replace white-collar work” became workplace weather.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Then Siddhant Khare, a software engineer at Ona, published a piece that opened the other side:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The efficiency gain from AI is badly overstated. People at work are in “AI fatigue.”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;AI Fatigue Is Real, and Nobody Is Talking About It&lt;/em&gt; spread through the press and through readers.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;2-the-blunt-fact-with-ai-the-work-is-10-what-it-was&quot;&gt;2. The blunt fact: with AI, the work is 10× what it was&lt;/h2&gt;
&lt;h3 id=&quot;conflict-1-ai-sped-production-it-did-not-speed-review&quot;&gt;Conflict 1: AI sped production. It did not speed review&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Khare’s core:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“AI fatigue” is structural. AI multiplied how fast we generate code, copy, docs. Review and verification did not keep up. &lt;strong&gt;A human is still the bottleneck in the whole flow — now processing ten times the volume.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;The metaphor:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Imagine a factory that swapped in a press ten times faster. The inspector at the end of the line is still one person. Output explodes, defect rate does not move, and the person who absorbs all the review pressure is the one who breaks.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;In knowledge work:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI automated &lt;strong&gt;production&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;it did not automate &lt;strong&gt;review&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;most managers have not noticed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They only see the surface:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;more code delivered ✅&lt;/li&gt;
&lt;li&gt;more docs ✅&lt;/li&gt;
&lt;li&gt;more mail sent ✅&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The dashboard looks gorgeous. The exhaustion does not show up.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;conflict-2-ai-raised-capacity-the-company-raised-the-pass-line&quot;&gt;Conflict 2: AI raised capacity. The company raised the “pass” line&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The harsher fact:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The productivity AI created did not become free time. It became a higher expectation. The pass line moved up.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;A concrete case:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Before AI:&lt;/strong&gt; 20 PRs a week was a normal engineer&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;With AI:&lt;/strong&gt; theoretical capacity is 50, so 50 becomes the new normal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Khare, first person:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I used to handle 20 to 25 PRs a week. Now it is over a hundred. Most of them are AI-generated. I still have to review every one.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;What that means:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;everything the model emits still needs a human&lt;/li&gt;
&lt;li&gt;reviewing AI is more tiring than doing the work yourself&lt;/li&gt;
&lt;li&gt;you thought the model was helping. You are cleaning up after it&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;3-the-numbers-slap-back-the-gain-was-oversold&quot;&gt;3. The numbers slap back: the gain was oversold&lt;/h2&gt;
&lt;h3 id=&quot;data-1-93-of-developers-use-ai-throughput-rose-10&quot;&gt;Data 1: 93% of developers use AI. Throughput rose ~10%&lt;/h3&gt;
&lt;p&gt;DX, a platform that studies engineering productivity:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;450+ companies, 120,000+ developers&lt;/li&gt;
&lt;li&gt;even with 93% of developers on AI coding tools, &lt;strong&gt;real efficiency sat at about +10%&lt;/strong&gt;, and further gains were hard&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;data-2-with-ai-tools-efficiency-fell-19&quot;&gt;Data 2: with AI tools, efficiency &lt;em&gt;fell&lt;/em&gt; 19%&lt;/h3&gt;
&lt;p&gt;METR, a model-evaluation lab, ran a controlled study:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;developers using AI coding tools were 19% slower&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;they &lt;em&gt;felt&lt;/em&gt; 24% faster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What that means:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you think you sped up; you slowed down&lt;/li&gt;
&lt;li&gt;you think the tool is helping; it is dragging&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;subjective feel and objective data point opposite ways&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;conflict-3-companies-undercounted-two-costs&quot;&gt;Conflict 3: companies undercounted two costs&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Human review of AI output&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;almost nobody puts that time and drain into the cost model&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. Professional identity&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;when most of the work is generated, people who used to get pride from craft start to feel like inspectors on a line&lt;/li&gt;
&lt;li&gt;that identity drop is hard to quantify and it walks people out the door&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;4-ai-will-not-replace-you-it-will-redefine-the-job&quot;&gt;4. AI will not replace you. It will redefine the job&lt;/h2&gt;
&lt;h3 id=&quot;which-seats-go-first&quot;&gt;Which seats go first?&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Easy to replace:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;standardized output&lt;/li&gt;
&lt;li&gt;a low quality bar&lt;/li&gt;
&lt;li&gt;high repetition&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;first-draft copy&lt;/li&gt;
&lt;li&gt;basic data entry&lt;/li&gt;
&lt;li&gt;simple code generation&lt;/li&gt;
&lt;li&gt;templated reports&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;“Good enough” work. A model can do it.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;which-seats-hold&quot;&gt;Which seats hold?&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Hard to replace:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;global understanding&lt;/li&gt;
&lt;li&gt;taste&lt;/li&gt;
&lt;li&gt;independent judgment&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;system architecture&lt;/li&gt;
&lt;li&gt;product strategy&lt;/li&gt;
&lt;li&gt;commercial negotiation&lt;/li&gt;
&lt;li&gt;original creative direction&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The value was never “hands on the keyboard.”&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;conflict-4-the-best-employee-will-not-be-the-one-who-ships-the-most-it-will-be-the-one-who-judges-best&quot;&gt;Conflict 4: the best employee will not be the one who ships the most. It will be the one who judges best&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Khare’s prediction:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The best engineers will not be the fastest typists or the highest volume. They will be the ones who can see, in one look, whether an AI plan fits the system and whether the thinking is sound. That judgment comes from years in the industry and a picture of the whole system. You cannot prompt-engineer your way into it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Value is migrating:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;from &lt;strong&gt;volume of output&lt;/strong&gt; → &lt;strong&gt;quality of judgment&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;from &lt;strong&gt;execution speed&lt;/strong&gt; → &lt;strong&gt;depth of thought&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The least replaceable person is the one who can say right or wrong, and give a clear reason.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Judgment is the core value.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;5-why-ai-fatigues-more-than-older-automation&quot;&gt;5. Why AI fatigues more than older automation&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Reviewing a quiet error at night&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-fatigue-truth-10x-workload-02.TWVfjpp-_1h7F04.webp&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;conflict-5-ai-is-uncertain-and-the-errors-hide&quot;&gt;Conflict 5: AI is uncertain, and the errors hide&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Older automation:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;same instruction, same input → same output&lt;/li&gt;
&lt;li&gt;errors throw&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;high certainty&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;AI:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the same prompt can emit completely different text&lt;/li&gt;
&lt;li&gt;even when it is wrong, the prose is fluent and convincing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;high uncertainty&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The errors hide:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the code runs ✅&lt;/li&gt;
&lt;li&gt;the copy reads clean ✅&lt;/li&gt;
&lt;li&gt;the report is tidy ✅&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;And maybe:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a factual error on one page ❌&lt;/li&gt;
&lt;li&gt;a logic hole in one line ❌&lt;/li&gt;
&lt;li&gt;invented numbers in one paragraph ❌&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Quiet errors demand constant attention. Over months, that burns people out.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;6-how-to-live-with-ai-three-usable-rules&quot;&gt;6. How to live with AI: three usable rules&lt;/h2&gt;
&lt;h3 id=&quot;1-do-not-use-ai-on-work-whose-thinking-is-the-value&quot;&gt;1. Do not use AI on work whose &lt;em&gt;thinking&lt;/em&gt; is the value&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;What is that work?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;strategy&lt;/li&gt;
&lt;li&gt;product planning&lt;/li&gt;
&lt;li&gt;system architecture&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Why skip the model?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the value is the &lt;em&gt;thinking&lt;/em&gt;, not the typing&lt;/li&gt;
&lt;li&gt;if you skip the thinking, you hollow out the job&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Where AI belongs:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;repetitive work where the &lt;em&gt;result&lt;/em&gt; matters more than the process&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;2-put-a-hard-boundary-on-review-time&quot;&gt;2. Put a hard boundary on review time&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Khare:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you spend more than two hours a day reviewing AI output, the workflow is broken.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Possible causes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fuzzy prompts&lt;/li&gt;
&lt;li&gt;not enough context&lt;/li&gt;
&lt;li&gt;loose rules&lt;/li&gt;
&lt;li&gt;no automated checks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Do not let “review everything the model emits, with no limit” become the job.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;3-protect-deep-work-time&quot;&gt;3. Protect deep-work time&lt;/h3&gt;
&lt;p&gt;AI traps people in a loop:&lt;/p&gt;
&lt;p&gt;generate → review → generate again → review again → …&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;That loop keeps cutting attention.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deliberately keep a block where you use no AI at all.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The most important work often does not need a prompt. It needs you thinking alone.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;7-how-to-change-the-dependency&quot;&gt;7. How to change the dependency&lt;/h2&gt;
&lt;h3 id=&quot;change-the-habit-think-first-then-decide-if-you-need-the-model&quot;&gt;Change the habit: think first, then decide if you need the model&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The current default:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;hit a problem → open ChatGPT&lt;/li&gt;
&lt;li&gt;have not thought yet → ask it to generate&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;A better order:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Think alone&lt;/strong&gt; until the goal is clear&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Then&lt;/strong&gt; decide whether you need AI&lt;/li&gt;
&lt;li&gt;Often a blank page and twenty minutes of deep work is better&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3 id=&quot;take-the-steering-wheel-back&quot;&gt;Take the steering wheel back&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Anxiety about AI is, at root, lost control.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;when the model never stops generating and never stops suggesting&lt;/li&gt;
&lt;li&gt;you start to feel like a passive executor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Once you own “whether to use it, and when”:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;control comes back&lt;/li&gt;
&lt;li&gt;anxiety drops&lt;/li&gt;
&lt;li&gt;you can actually leave AI fatigue&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;8-close-the-scarce-thing-is-independent-thought&quot;&gt;8. Close: the scarce thing is independent thought&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The piece names a hard fact:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI did not make us lighter&lt;/li&gt;
&lt;li&gt;it put us in a deeper kind of fatigue&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;That is not the model’s fault. It is how we use it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In the AI era the scarce thing is not technical skill. It is:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Judgment&lt;/strong&gt; — see in one look whether the plan is sound&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Depth&lt;/strong&gt; — finish hard thinking alone&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Control&lt;/strong&gt; — decide when to use the model and when not to&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Remember:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI is a tool, not a boss&lt;/li&gt;
&lt;li&gt;you are the decider, not the inspector&lt;/li&gt;
&lt;li&gt;the most important work often does not need AI&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;When you own the decision to use it or not, you can leave the fatigue.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Original Chinese recap: &lt;em&gt;Layoffs sweep Silicon Valley; a line engineer pops the other truth: AI efficiency was oversold, humans were forced into AI-reviewer jobs, the workload is 10×&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Source: National Business Daily (每日经济新闻)&lt;/li&gt;
&lt;li&gt;Interviewee: Siddhant Khare (software engineer, Ona)&lt;/li&gt;
&lt;li&gt;Data: DX, METR&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/programmer-35-crisis-and-self-rescue/&quot; class=&quot;wikilink&quot;&gt;The 35-year-old programmer crisis — and how to get out&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-era-programmer-survival-guide/&quot; class=&quot;wikilink&quot;&gt;A programmer’s survival guide in the AI era&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-era-clarity-matters/&quot; class=&quot;wikilink&quot;&gt;The scarcest skill in the AI era: saying it clearly&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>A programmer&apos;s survival guide in the AI era</title><link>https://ssherun.github.io/en/blog/ai-era-programmer-survival-guide/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/ai-era-programmer-survival-guide/</guid><description>AI isn&apos;t here to take senior programmers&apos; jobs. The 35-year-old crisis story flips: experience gets more valuable, if you can decide, constrain, and verify.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A warning:&lt;/strong&gt; this piece will fight the usual “35-year-old programmer crisis” story. AI is not here to steal senior jobs. It is here to assist them.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;1-the-cruel-fact-crud-boy-is-dead&quot;&gt;1. The cruel fact: CRUD boy is dead&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;An empty desk and a system drawing&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-era-programmer-survival-guide-01.dsOKps4O_Znv49p.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;I could not sleep. I thought about what AI does to programmers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The fact is blunt:&lt;/strong&gt; if your job can be fully described inside 200K tokens, AI is a one-hit kill.&lt;/p&gt;
&lt;p&gt;Meaning:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CRUD&lt;/strong&gt; — dead&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UI interaction logic&lt;/strong&gt; — dead&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;simple business flows&lt;/strong&gt; — dead&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;standard API work&lt;/strong&gt; — dead&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ChatGPT in 2023. Cursor and Windsurf in 2024. Claude Code, Codex, OpenClaw in 2025.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agents flipped the old programming mode — people no longer have to write the code by hand.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;From “hand-write code” to “drive the AI,” the center of gravity moved:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Old:  need → understand → design → hand-write → test → ship&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;AI:   need → understand → design a Skill → generate → verify → ship&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;So: is a programmer still worth anything? Where do 35+ engineers go?&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;2-the-counter-intuitive-fact-35-just-got-more-valuable&quot;&gt;2. The counter-intuitive fact: 35+ just got more valuable&lt;/h2&gt;
&lt;h3 id=&quot;the-finding-that-breaks-the-story&quot;&gt;The finding that breaks the story&lt;/h3&gt;
&lt;p&gt;In the AI era, &lt;strong&gt;experience did not depreciate. It spiked.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Why?&lt;/p&gt;
&lt;p&gt;AI changed &lt;em&gt;how&lt;/em&gt; we write code. &lt;strong&gt;It did not change the nature of deciding.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;AI can replace people who solve problems. &lt;strong&gt;It still cannot replace people who pose them.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;seven-things-ai-still-cannot-do&quot;&gt;Seven things AI still cannot do&lt;/h3&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Capability&lt;/th&gt;&lt;th&gt;Why the model fails&lt;/th&gt;&lt;th&gt;Who is better&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Defining the need&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Raw need comes from watching a real world&lt;/td&gt;&lt;td&gt;35+&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Trade-offs&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Priority, values, strategy&lt;/td&gt;&lt;td&gt;35+&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Drawing the boundary&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Knowing which “solutions” plant landmines&lt;/td&gt;&lt;td&gt;35+&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Managing constraints&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;The model does not know your time, budget, or team&lt;/td&gt;&lt;td&gt;35+&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Estimating three-year tech debt&lt;/td&gt;&lt;td&gt;35+&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Strategy&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Deep feel for people, orgs, an industry&lt;/td&gt;&lt;td&gt;35+&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Judging the result&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;”It runs” ≠ “we did the right thing”&lt;/td&gt;&lt;td&gt;35+&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;The point:&lt;/strong&gt; AI is smart. It is an &lt;em&gt;executor&lt;/em&gt;, not a &lt;em&gt;decider&lt;/em&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;3-the-new-job-from-code-peasant-to-ai-trainer&quot;&gt;3. The new job: from code peasant to AI trainer&lt;/h2&gt;
&lt;h3 id=&quot;old-skills-vs-ai-era-skills&quot;&gt;Old skills vs AI-era skills&lt;/h3&gt;















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Dimension&lt;/th&gt;&lt;th&gt;Then&lt;/th&gt;&lt;th&gt;Now&lt;/th&gt;&lt;th&gt;Change&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Writing code&lt;/td&gt;&lt;td&gt;very high&lt;/td&gt;&lt;td&gt;average&lt;/td&gt;&lt;td&gt;↓&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Understanding the need&lt;/td&gt;&lt;td&gt;average&lt;/td&gt;&lt;td&gt;very high&lt;/td&gt;&lt;td&gt;↑&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;System design&lt;/td&gt;&lt;td&gt;high&lt;/td&gt;&lt;td&gt;very high&lt;/td&gt;&lt;td&gt;↑↑&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Algorithmic thinking&lt;/td&gt;&lt;td&gt;high&lt;/td&gt;&lt;td&gt;very high&lt;/td&gt;&lt;td&gt;↑↑&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Directing / supervising&lt;/td&gt;&lt;td&gt;low&lt;/td&gt;&lt;td&gt;very high&lt;/td&gt;&lt;td&gt;new&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Quality verification&lt;/td&gt;&lt;td&gt;high&lt;/td&gt;&lt;td&gt;very high&lt;/td&gt;&lt;td&gt;↑&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;The era changed the ask:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Then:&lt;/strong&gt; clean split — PM owns the need, architect owns design, programmer owns implementation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Now:&lt;/strong&gt; fused — one person has to understand the need, the architecture, and the algorithms, then drive the AI&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;example-an-order-api&quot;&gt;Example: an order API&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Wrong — ask the model directly:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Prompt: &quot;Implement an order API that updates inventory and writes a log.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;You get:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;processOrder(order);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;updateInventory(order);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;writeLog(order);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; under concurrency every request blocks. The bottleneck is obvious.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Right — ask with direction:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Prompt: &quot;High-concurrency order API. Inventory and logs must be async. Core path under 200ms.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;You get:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// confirm the order on the critical path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// inventory + log via thread pool / queue&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// the API returns fast and stays stable&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;The difference&lt;/strong&gt; is not more implementation detail. It is &lt;strong&gt;constraints and direction&lt;/strong&gt; from system design and algorithmic thinking.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;4-the-code-traitors-survival-kit-how-not-to-be-replaced&quot;&gt;4. The “code traitor’s” survival kit (how not to be replaced)&lt;/h2&gt;
&lt;h3 id=&quot;the-strategy-make-your-work-something-the-model-cannot-see&quot;&gt;The strategy: make your work something the model cannot “see”&lt;/h3&gt;
&lt;p&gt;AI’s fatal weaknesses:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Hallucination&lt;/strong&gt; — wrong, confidently&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stale knowledge&lt;/strong&gt; — a cutoff date&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Complexity analysis often wrong&lt;/strong&gt; — the algorithm may not be optimal&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edges get dropped&lt;/strong&gt; — happy path works, special cases bug&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;The deepest hole: it cannot summarize a law that was never named.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If a thing cannot be tokenized correctly, you have a weapon.&lt;/p&gt;
&lt;h3 id=&quot;three-anti-ai-axes-the-satirical-path&quot;&gt;Three anti-AI axes (the satirical path)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Work without names and patterns&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GoF and Martin Fowler are the original “code traitors” — they named a pile of know-how&lt;/li&gt;
&lt;li&gt;One &lt;em&gt;name&lt;/em&gt; explains the job; the model learns it in one pass&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Counter:&lt;/strong&gt; if your process has no name, do not name it, and do not publish it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. Invent wheels. Write DSLs&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Blow an attention-poor model’s context, or push it into hallucination&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Lisp curse:&lt;/strong&gt; if you want the job to stay yours, invent wheels and write DSLs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3. Stay closed. Shame whoever opens it&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Open source is “entry-level code treason” — without that much public source, models could not have learned this fast&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Counter:&lt;/strong&gt; invent wheels, keep them closed. If someone publishes and the model trains on it, condemn them&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;three-tricks-that-break-a-models-memory&quot;&gt;Three tricks that break a model’s memory&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Semantic drift&lt;/strong&gt; — terms the model cannot map&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context injection&lt;/strong&gt; — pack in irrelevant information&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attention-window blowup&lt;/strong&gt; — overflow the context&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&quot;5-the-real-senior-advantage-is-not-anti-ai&quot;&gt;5. The real senior advantage is not “anti-AI”&lt;/h2&gt;
&lt;h3 id=&quot;embrace-it-that-is-the-actual-path&quot;&gt;Embrace it. That is the actual path&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Fighting AI is the worse move. Riding it is the better one.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;What 35+ actually has:&lt;/p&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Advantage&lt;/th&gt;&lt;th&gt;Why it matters&lt;/th&gt;&lt;th&gt;Weight&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Years of system design&lt;/td&gt;&lt;td&gt;See the real problem, skip the crater&lt;/td&gt;&lt;td&gt;very high&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Many architectural patterns&lt;/td&gt;&lt;td&gt;Know which idea fits&lt;/td&gt;&lt;td&gt;very high&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Lived through performance work&lt;/td&gt;&lt;td&gt;Know when and how to optimize&lt;/td&gt;&lt;td&gt;high&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Depth of business&lt;/td&gt;&lt;td&gt;Dig the real need out of the stated one&lt;/td&gt;&lt;td&gt;very high&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Deep technical feel&lt;/td&gt;&lt;td&gt;Verify whether the model’s plan is sound&lt;/td&gt;&lt;td&gt;very high&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;The whole picture&lt;/td&gt;&lt;td&gt;See the system and make the trade&lt;/td&gt;&lt;td&gt;high&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;four-checks-on-ai-code&quot;&gt;Four checks on AI code&lt;/h3&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Lens&lt;/th&gt;&lt;th&gt;The question&lt;/th&gt;&lt;th&gt;What to look at&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Complexity&lt;/td&gt;&lt;td&gt;Does the time complexity meet the need?&lt;/td&gt;&lt;td&gt;Is it really O(log n), or O(n²)?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Edges&lt;/td&gt;&lt;td&gt;Any special cases dropped?&lt;/td&gt;&lt;td&gt;Empty, one, huge&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Business&lt;/td&gt;&lt;td&gt;Did the code understand the business?&lt;/td&gt;&lt;td&gt;Is inventory decrement atomic?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Performance&lt;/td&gt;&lt;td&gt;Tested in a real environment?&lt;/td&gt;&lt;td&gt;What QPS on one box?&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;An experienced programmer can smell a problem in one glance.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;6-three-crash-scenes&quot;&gt;6. Three crash scenes&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Finding a hidden crack in the structure&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-era-programmer-survival-guide-02.DJmLR5o6_27uTiT.webp&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;case-1-a-rate-limiter-that-does-not-scale&quot;&gt;Case 1: a rate limiter that does not scale&lt;/h3&gt;
&lt;p&gt;Ask the model for an API rate limiter. It gives a clean token-bucket implementation. Logic is correct.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But:&lt;/strong&gt; on every request it walks the whole token list to expire old ones — O(n). At high QPS that step &lt;em&gt;is&lt;/em&gt; the bottleneck.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Right:&lt;/strong&gt; timestamp math or lazy update. O(1) per request.&lt;/p&gt;
&lt;h3 id=&quot;case-2-offset-pagination&quot;&gt;Case 2: offset pagination&lt;/h3&gt;
&lt;p&gt;Ask for a product-list page API. It writes the textbook &lt;code&gt;LIMIT offset, size&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But:&lt;/strong&gt; page 1000, &lt;code&gt;OFFSET 9990&lt;/code&gt; means the database scans and discards 9990 rows. It only gets slower.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Right:&lt;/strong&gt; keyset / cursor pagination: &lt;code&gt;WHERE id &gt; last_id LIMIT size&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;case-3-a-search-box-debounce&quot;&gt;Case 3: a search box debounce&lt;/h3&gt;
&lt;p&gt;Ask for a live search box. It gives a simple debounce: send after 300ms of silence.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But:&lt;/strong&gt; responses can return out of order. A later request can finish first; the UI shows a result that does not match the last keystroke.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Right:&lt;/strong&gt; cancel in-flight requests (AbortController) or stamp requests and drop stale results.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A junior may not see these. A senior sees them in one pass.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;7-the-future-ai-does-the-work-a-person-sets-the-direction&quot;&gt;7. The future: AI does the work. A person sets the direction&lt;/h2&gt;
&lt;h3 id=&quot;shift-1-from-directing-to-supervising&quot;&gt;Shift 1: from directing to supervising&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Now (2025–2027):&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;You define the need → direct a plan → AI writes → you verify → ship&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Later (2026–2030):&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;You describe the need → AI plans + designs → writes → verifies → ships&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Your job moves from “direct” to “supervise.”&lt;/p&gt;
&lt;h3 id=&quot;shift-2-from-writing-code-to-posing-the-need--supervising&quot;&gt;Shift 2: from writing code to posing the need + supervising&lt;/h3&gt;
&lt;p&gt;As models mature, what you need is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;people who understand the business and ask good questions&lt;/li&gt;
&lt;li&gt;people who can define boundaries and constraints&lt;/li&gt;
&lt;li&gt;people who can set goals and priority&lt;/li&gt;
&lt;li&gt;people who can verify quality&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;shift-3-stronger-ai-raises-the-bar-on-programmers&quot;&gt;Shift 3: stronger AI &lt;em&gt;raises&lt;/em&gt; the bar on programmers&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Verifying AI is much harder than writing the code.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You cannot tell at a glance whether a generated system is sound. You have to understand the global design, why each decision was made, where the latent defects sit.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;So the future is not “programmers get replaced.” It is “programmers who only haul bricks get replaced.”&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;8-how-35-can-take-the-opening&quot;&gt;8. How 35+ can take the opening&lt;/h2&gt;
&lt;h3 id=&quot;learn-a-method-for-directing-ai&quot;&gt;Learn a method for directing AI&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Understanding the need&lt;/strong&gt; — what is true now, what is the goal, what we will do, how we will know&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Designing the system&lt;/strong&gt; — scale, constraints, architecture, boundaries, metrics&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Framing the problem&lt;/strong&gt; — turn a fuzzy business into a model you can compute and optimize&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;learn-a-system-of-architecture-and-algorithmic-ideas&quot;&gt;Learn a system of architecture and algorithmic ideas&lt;/h3&gt;
&lt;p&gt;You do not have to hand-write every algorithm. You do have to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;understand the core of each design and idea&lt;/li&gt;
&lt;li&gt;know which problem gets which design&lt;/li&gt;
&lt;li&gt;use that to direct the model&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;keep-practicing-verification&quot;&gt;Keep practicing verification&lt;/h3&gt;
&lt;p&gt;Every time the model hands you code, ask:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what is the complexity?&lt;/li&gt;
&lt;li&gt;will it run at &lt;em&gt;my&lt;/em&gt; data size?&lt;/li&gt;
&lt;li&gt;any edges missed?&lt;/li&gt;
&lt;li&gt;is there a better algorithm?&lt;/li&gt;
&lt;li&gt;will this architecture scale?&lt;/li&gt;
&lt;li&gt;any single point of failure?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The first weeks take time. After a month or two you get an instinct — one glance tells you if it is wrong.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;9-bottom-line-in-the-ai-era-35-is-the-golden-age&quot;&gt;9. Bottom line: in the AI era, 35+ is the golden age&lt;/h2&gt;
&lt;h3 id=&quot;recap&quot;&gt;Recap&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;AI changed encoding, not engineering&lt;/strong&gt; — you move from executor to decider&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Experience is not baggage; it is how you drive the model&lt;/strong&gt; — the pits you fell in &lt;em&gt;are&lt;/em&gt; the constraints it needs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You do not have to write the code. You have to know good from bad&lt;/strong&gt; — verification is scarcer than coding&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The real risk is not age. It is stopping&lt;/strong&gt; — seniors who refuse the tools get replaced too&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;two-paths&quot;&gt;Two paths&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Worse: fight AI, play “code traitor”&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;work without names and patterns&lt;/li&gt;
&lt;li&gt;invent wheels, write DSLs&lt;/li&gt;
&lt;li&gt;stay closed, do not publish&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Better: embrace AI, become an AI trainer&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;learn a method for directing models&lt;/li&gt;
&lt;li&gt;own architecture and algorithmic thinking&lt;/li&gt;
&lt;li&gt;keep practicing verification&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;last-line&quot;&gt;Last line&lt;/h3&gt;
&lt;p&gt;Code goes stale. Frameworks die. &lt;strong&gt;Understanding of the problem, and judgment, only compound with time.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;An experienced programmer plus AI does not even have to stay employed — contracting, part-time, a one-person company are all open.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For people with experience, this is a rare opening.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;What do you think?&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/microwind/algorithms/blob/main/start-here/Why-Programmers-35-Plus-Are-Thriving-in-AI-Era.md&quot;&gt;Why programmers 35+ thrive in the AI era&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.est.im/2026/stderr-10&quot;&gt;码奸 — est の 输入输出和出入&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/programmer-35-crisis-and-self-rescue/&quot; class=&quot;wikilink&quot;&gt;The 35-year-old programmer crisis — and how to get out&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/software-engineering-splits-three/&quot; class=&quot;wikilink&quot;&gt;Software engineering is splitting into three layers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-fatigue-truth-10x-workload/&quot; class=&quot;wikilink&quot;&gt;AI didn’t 10x your output. It 10x’d the work.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Design Without Designing: how engineers ship design with AI</title><link>https://ssherun.github.io/en/blog/design-without-designing/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/design-without-designing/</guid><description>You don&apos;t have to become a designer. With a three-layer toolkit you can go from zero to shipping design every week in three months. Neethan Wu&apos;s full system.</description><pubDate>Sat, 21 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I am an engineer. Three months ago I had never touched UI/UX.&lt;/p&gt;
&lt;p&gt;I now ship design every week.&lt;/p&gt;
&lt;p&gt;Not because I suddenly “learned design.” Because I built an agent harness for it — a three-layer toolkit that lets me deliver design end to end without becoming a designer.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;An engineer at a late-night design desk&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-design-without-designing-01.BGJYxrO-_Z1435pf.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;agents-change-how-much-one-person-can-cover&quot;&gt;Agents change how much one person can cover&lt;/h2&gt;
&lt;p&gt;Engineer and designer used to be two jobs. Engineers wrote code. Designers designed.&lt;/p&gt;
&lt;p&gt;Agents are moving that line.&lt;/p&gt;
&lt;p&gt;I have been pushing myself into work I could not do before. Design was the largest gap.&lt;/p&gt;
&lt;p&gt;Pixels, spacing, type, color — these things make people trust a product before they read a word.&lt;/p&gt;
&lt;p&gt;I had none of those skills. So I built a harness: three layers that give me real design capability without making me a designer.&lt;/p&gt;
&lt;h2 id=&quot;the-three-layer-design-harness&quot;&gt;The three-layer design harness&lt;/h2&gt;
&lt;h3 id=&quot;layer-1-skills-other-peoples-expertise&quot;&gt;Layer 1: Skills (other people’s expertise)&lt;/h3&gt;
&lt;p&gt;Skills are instruction files you install into an AI agent. Claude Code, Cursor, Codex — they all work.&lt;/p&gt;
&lt;p&gt;They move someone else’s design expertise into your workflow. You are borrowing a working designer’s taste.&lt;/p&gt;
&lt;h4 id=&quot;impeccable-pbakaus-jquery-ui-founder&quot;&gt;Impeccable (@pbakaus, jQuery UI founder)&lt;/h4&gt;
&lt;p&gt;The Skill I use most. 20+ commands: &lt;code&gt;/audit&lt;/code&gt;, &lt;code&gt;/polish&lt;/code&gt;, &lt;code&gt;/animate&lt;/code&gt;, &lt;code&gt;/typeset&lt;/code&gt;, &lt;code&gt;/arrange&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;It captures the anti-patterns that make AI UI look obviously AI-made:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;too many fonts&lt;/li&gt;
&lt;li&gt;gray text on a colored background&lt;/li&gt;
&lt;li&gt;pure black&lt;/li&gt;
&lt;li&gt;nested cards&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My favorite command is &lt;code&gt;/delight&lt;/code&gt;. I use it a lot. Every time it introduces something that surprises me and lifts the whole feel of the product. That one command changed how my output looked overnight.&lt;/p&gt;
&lt;h4 id=&quot;emil-kowalskis-design-engineer-skill&quot;&gt;Emil Kowalski’s Design Engineer Skill&lt;/h4&gt;
&lt;p&gt;Emil is a design engineer at Linear, previously Vercel, creator of Sonner and Vaul (15M+ weekly downloads).&lt;/p&gt;
&lt;p&gt;His Skill encodes how he thinks about animation, UI polish, and detail.&lt;/p&gt;
&lt;p&gt;I use the free version to borrow Emil’s way of seeing, and occasionally apply it to my own work. The full version includes his animations.dev course.&lt;/p&gt;
&lt;h4 id=&quot;interface-design-dammyjay93&quot;&gt;Interface Design (@Dammyjay93)&lt;/h4&gt;
&lt;p&gt;This one fixes the most annoying problem in AI-assisted design: the agent forgets every design decision between sessions.&lt;/p&gt;
&lt;p&gt;The Skill stores your spec — spacing grid, palette, depth strategy, component patterns — in a persistent &lt;code&gt;system.md&lt;/code&gt; and loads it automatically.&lt;/p&gt;
&lt;h4 id=&quot;ui-skills-ibelick-founder-of-motion-primitives&quot;&gt;UI Skills (@ibelick, founder of motion-primitives)&lt;/h4&gt;
&lt;p&gt;Created by Julien Thibeaut, who also built motion-primitives.&lt;/p&gt;
&lt;p&gt;Fifteen open-source Skills covering foundational UI, accessibility, animation performance, and metadata.&lt;/p&gt;
&lt;p&gt;I do not use it as often as Impeccable, but it is there when I need it.&lt;/p&gt;
&lt;h3 id=&quot;layer-2-agent-canvas-the-surface&quot;&gt;Layer 2: Agent canvas (the surface)&lt;/h3&gt;
&lt;p&gt;I also call these agent shells. They are design surfaces with no built-in agent. They use &lt;em&gt;yours&lt;/em&gt; — Claude Code, Codex, whatever you run locally.&lt;/p&gt;
&lt;p&gt;The canvas is the shell. Your agent is the kernel.&lt;/p&gt;
&lt;h4 id=&quot;paper-paper&quot;&gt;Paper (@paper)&lt;/h4&gt;
&lt;p&gt;I have been using this more lately. The canvas is real HTML and CSS, not a proprietary format.&lt;/p&gt;
&lt;p&gt;What you design &lt;em&gt;is&lt;/em&gt; the code. No translation layer. No “handoff.”&lt;/p&gt;
&lt;p&gt;It exposes MCP tools with full read/write. Because there is no format conversion, it works with local agents out of the box.&lt;/p&gt;
&lt;p&gt;Most of the time I use Paper for the design system, tokens, and page iteration, then treat it as both source and design reference while I build the product.&lt;/p&gt;
&lt;p&gt;Paper has a free tier with a limited MCP-call quota.&lt;/p&gt;
&lt;h4 id=&quot;pencil-tomkrcha&quot;&gt;Pencil (@tomkrcha)&lt;/h4&gt;
&lt;p&gt;A different bet. It uses a JSON &lt;code&gt;.pen&lt;/code&gt; format that can Git-diff; an agent can operate it over MCP.&lt;/p&gt;
&lt;p&gt;My design files live in the repo and version like code.&lt;/p&gt;
&lt;p&gt;Pencil also has a swarm mode: I can start several agents (up to six) on the same canvas —&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one on type&lt;/li&gt;
&lt;li&gt;one on layout&lt;/li&gt;
&lt;li&gt;one propagating the design system&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The first time I watched a swarm work my canvas, I was stunned.&lt;/p&gt;
&lt;p&gt;Pencil is free for now. I often run Pencil and Paper together.&lt;/p&gt;
&lt;h3 id=&quot;layer-3-inspiration-and-taste-the-eye&quot;&gt;Layer 3: Inspiration and taste (the eye)&lt;/h3&gt;
&lt;p&gt;Skills give me expertise. Canvases give me a surface. I still have to train an eye that knows what “good” is before I can ask an agent to do it.&lt;/p&gt;
&lt;h4 id=&quot;variant-variantui&quot;&gt;Variant (@variantui)&lt;/h4&gt;
&lt;p&gt;Type an idea, scroll infinite non-repeating interpretations.&lt;/p&gt;
&lt;p&gt;The standout is Style Dropper: point at a design, it absorbs the visual DNA (palette, type rhythm, spatial density) and transfers it onto another design.&lt;/p&gt;
&lt;p&gt;I spend about 20 minutes a day scrolling it. It has become how I warm up my eye before any design work.&lt;/p&gt;
&lt;p&gt;Variant is more than inspiration for me. I pick things I like from the community, prompt variants, explore directions, and when I find one I like I can copy code, export React, or copy a prompt with an HTML reference straight into a coding agent.&lt;/p&gt;
&lt;p&gt;From there I extract tokens or components and start building more views. It is a surprisingly smooth bridge from inspiration to a real product.&lt;/p&gt;
&lt;h4 id=&quot;mobbin-mobbin-and-awwwards-awwwards&quot;&gt;Mobbin (@mobbin) and Awwwards (@awwwards)&lt;/h4&gt;
&lt;p&gt;These have been known in design for a long time. I use them to absorb the best curated work and learn taste from it.&lt;/p&gt;
&lt;p&gt;Mobbin covers mobile apps and sites. When I need to see how a top app handles onboarding, settings, or checkout, that is where I go.&lt;/p&gt;
&lt;p&gt;Awwwards is jury-scored and sits at the edge of web craft. They also run conferences and an academy.&lt;/p&gt;
&lt;h4 id=&quot;cosmos-thecosmos&quot;&gt;Cosmos (@thecosmos)&lt;/h4&gt;
&lt;p&gt;This is where I collect every inspiration and idea, and browse other people’s collections.&lt;/p&gt;
&lt;p&gt;Web design, interiors, type, photography, architecture — anything that catches my eye.&lt;/p&gt;
&lt;p&gt;I keep finding things through hex-color search or even a fuzzy description. It finds what I am looking for in ways that still surprise me.&lt;/p&gt;
&lt;p&gt;I use it to build visual-reference clusters that slowly reshape how I think about design.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Three design layers stacked&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-design-without-designing-02.Dos7N2kw_2wc9xV.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-pattern&quot;&gt;The pattern&lt;/h2&gt;
&lt;p&gt;Three layers. Skills for expertise. Canvases for agents to work on. Inspiration to train the eye.&lt;/p&gt;
&lt;p&gt;I am not a designer. I do not have years of trained intuition. My taste is still forming. I learn every day.&lt;/p&gt;
&lt;p&gt;But I unlocked myself. I went from fundamentally unable to design, to shipping design every week and being okay with the output. Three months ago there was nothing.&lt;/p&gt;
&lt;h2 id=&quot;the-takeaway&quot;&gt;The takeaway&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;You do not need to become a designer. You need the right harness.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The same three layers apply to any field:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Find the expertise (Skills)&lt;/li&gt;
&lt;li&gt;Find the working surface (Canvas)&lt;/li&gt;
&lt;li&gt;Train your eye (Inspiration)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then you can deliver in that field even without years of background.&lt;/p&gt;
&lt;p&gt;Agents change how much one person can cover. Do not stay inside the old role lines.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Original:&lt;/strong&gt; &lt;a href=&quot;https://x.com/i/status/2034786360356204934&quot;&gt;https://x.com/i/status/2034786360356204934&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/stitch-design-md-infrastructure/&quot; class=&quot;wikilink&quot;&gt;Why Stitch’s DESIGN.md matters: from image tool to design infrastructure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-ui-design-workflow/&quot; class=&quot;wikilink&quot;&gt;Why AI-generated UI isn’t shippable — and the combo that works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/stitch-claude-ai-design-workflow/&quot; class=&quot;wikilink&quot;&gt;Google Stitch 2.0 + Claude Code: an AI design workflow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>When I learn a new field, I scrape it first</title><link>https://ssherun.github.io/en/blog/learn-by-scraping/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/learn-by-scraping/</guid><description>The first step in a new field isn&apos;t reading a book. It&apos;s scraping the best sources into a private knowledge base: zero to 80 clean documents in two hours.</description><pubDate>Sat, 21 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I have been reading Simon Willison.&lt;/p&gt;
&lt;p&gt;He is a co-founder of Django and one of the most active indie developers in the AI tooling space. His blog, simonwillison.net, has more than ten years of writing — Python, SQLite, LLM apps, data engineering — at very high density.&lt;/p&gt;
&lt;p&gt;At some point I thought: can I scrape the whole blog into a private knowledge base? Then, when I want his take on a technology, I ask an AI instead of flipping posts one by one.&lt;/p&gt;
&lt;p&gt;The same move works in any field: find the best sources in a direction, batch-scrape them, make them &lt;em&gt;your&lt;/em&gt; domain library.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Pulling good sources into a private knowledge base&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-learn-by-scraping-01.BFN35VdZ_hsJzs.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-problem-i-hit&quot;&gt;The problem I hit&lt;/h2&gt;
&lt;p&gt;My first instinct was to tell OpenClaw what I wanted and let it handle it.&lt;/p&gt;
&lt;p&gt;In practice, a single article was fine. A batch was not. It installed some open-source tools and came back with a lot of irrelevant links. It could not do “give me every post on this site.”&lt;/p&gt;
&lt;p&gt;What I needed:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A full URL list of Simon’s posts&lt;/li&gt;
&lt;li&gt;Each post scraped into clean Markdown&lt;/li&gt;
&lt;li&gt;Ideally all of it inside an AI conversation, with no code of my own&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Then I found &lt;strong&gt;XCrawl&lt;/strong&gt;, which does all three.&lt;/p&gt;
&lt;h2 id=&quot;what-xcrawl-is&quot;&gt;What XCrawl is&lt;/h2&gt;
&lt;p&gt;XCrawl is a web-scraping API with four core verbs:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Search&lt;/strong&gt; — query a search engine, get structured results (title, URL, snippet, rank)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Map&lt;/strong&gt; — scan a site and list its URLs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scrape&lt;/strong&gt; — fetch a URL as clean Markdown&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Crawl&lt;/strong&gt; — recursive whole-site crawl for large batches&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It also ships an OpenClaw Skill, so you can call these in natural language without writing code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Setup is short:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Register at &lt;a href=&quot;https://www.xcrawl.com/?keyword=ut0qflxk&quot;&gt;https://www.xcrawl.com/?keyword=ut0qflxk&lt;/a&gt; and get a key&lt;/li&gt;
&lt;li&gt;New accounts get 1,000 free credits&lt;/li&gt;
&lt;li&gt;Hand OpenClaw the Skill docs: &lt;a href=&quot;https://docs.xcrawl.com/zh/doc/developer-guides/openclaw/&quot;&gt;https://docs.xcrawl.com/zh/doc/developer-guides/openclaw/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenClaw installs the Skill&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;scraping-all-of-simon-willison&quot;&gt;Scraping all of Simon Willison&lt;/h2&gt;
&lt;h3 id=&quot;step-1-map-for-every-post-url&quot;&gt;Step 1: Map for every post URL&lt;/h3&gt;
&lt;p&gt;Map walks the sitemap and link graph and returns matching URLs. I filtered by year and kept the last three years.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result: 233 post URLs&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Simon is prolific — about 100 posts a year. By March 2026 he already had 24.&lt;/p&gt;
&lt;h3 id=&quot;step-2-scrape-each-body&quot;&gt;Step 2: Scrape each body&lt;/h3&gt;
&lt;p&gt;Scrape is precision-guided: one URL, one clean Markdown file. No nav, no comments.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;233 posts, under 10 minutes&lt;/li&gt;
&lt;li&gt;Clean Markdown each&lt;/li&gt;
&lt;li&gt;Headings, code blocks, and links kept&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;step-3-save-locally-analyze-with-ai&quot;&gt;Step 3: Save locally, analyze with AI&lt;/h3&gt;
&lt;p&gt;Because the output &lt;em&gt;is&lt;/em&gt; Markdown, I had OpenClaw write the files to a local folder, then opened a Claude Code session on that folder.&lt;/p&gt;
&lt;p&gt;I can now ask:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“What does Simon think about SQLite?”
“Has he written best practices for LLM apps?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; I have a working copy of “Simon’s brain.” Want to learn something — ask.&lt;/p&gt;
&lt;h2 id=&quot;building-a-library-in-a-field-you-do-not-know&quot;&gt;Building a library in a field you do not know&lt;/h2&gt;
&lt;p&gt;The case above assumes you already know &lt;em&gt;who&lt;/em&gt; to learn from. More often you do not even know whose work to read.&lt;/p&gt;
&lt;p&gt;Add Search: find the best sources first, Map each site, then Scrape only the documents that match your intent.&lt;/p&gt;
&lt;h3 id=&quot;case-learning-webassembly-from-scratch&quot;&gt;Case: learning WebAssembly from scratch&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Step 1: Search for a direction&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Query “WebAssembly learning.” You get structured results — title, URL, snippet, rank.&lt;/p&gt;
&lt;p&gt;From 40 hits I kept five high-quality sites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a core docs site&lt;/li&gt;
&lt;li&gt;a deep blog&lt;/li&gt;
&lt;li&gt;an awesome list&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 2: Map each site&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Some sites had 20 essays. Some had 500 pages, mostly API reference.&lt;/p&gt;
&lt;p&gt;Map lets you judge &lt;em&gt;before&lt;/em&gt; you scrape, and keep only the valuable slice.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 3: Scrape on purpose&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Same as above — fetch only what matches intent.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;80 high-quality documents&lt;/li&gt;
&lt;li&gt;All clean Markdown&lt;/li&gt;
&lt;li&gt;Saved locally as a knowledge base&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;From “I know nothing about WebAssembly” to “I have 80 core docs of my own” in under two hours&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;Asking an AI against a local knowledge base&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-learn-by-scraping-02.o-TiQ_9m_Znugqw.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;five-notes&quot;&gt;Five notes&lt;/h2&gt;
&lt;h3 id=&quot;1-map-first-always&quot;&gt;1. Map first. Always.&lt;/h3&gt;
&lt;p&gt;No matter how sure you are, run Map and look at the URL structure. A lot of sites do not match the pattern you imagined. Map saves you from a pile of junk pages.&lt;/p&gt;
&lt;h3 id=&quot;2-search-language-matters&quot;&gt;2. Search language matters&lt;/h3&gt;
&lt;p&gt;The same keyword in English vs Chinese returns a completely different set. In technical fields, search English first. Source quality is usually higher.&lt;/p&gt;
&lt;h3 id=&quot;3-markdown-output-is-the-real-convenience&quot;&gt;3. Markdown output is the real convenience&lt;/h3&gt;
&lt;p&gt;Because the output is already Markdown, OpenClaw can drop files straight into a local notes vault. No conversion. Ready to use.&lt;/p&gt;
&lt;h3 id=&quot;4-stability-was-better-than-i-expected&quot;&gt;4. Stability was better than I expected&lt;/h3&gt;
&lt;p&gt;XCrawl rotates IPs under the hood. A few hundred posts still run fast, and privacy/security felt fine. Some open-source stacks get blocked. I did not hit that here.&lt;/p&gt;
&lt;h3 id=&quot;5-on-compliance&quot;&gt;5. On compliance&lt;/h3&gt;
&lt;p&gt;XCrawl checks &lt;code&gt;robots.txt&lt;/code&gt; and only collects public pages. Still: confirm the target site’s crawl policy yourself.&lt;/p&gt;
&lt;h2 id=&quot;how-the-learning-loop-changed&quot;&gt;How the learning loop changed&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Find sources yourself&lt;/li&gt;
&lt;li&gt;Read them yourself&lt;/li&gt;
&lt;li&gt;Take notes yourself&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Now:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for sources&lt;/li&gt;
&lt;li&gt;Map the terrain&lt;/li&gt;
&lt;li&gt;Scrape&lt;/li&gt;
&lt;li&gt;Save locally&lt;/li&gt;
&lt;li&gt;Learn in conversation with an AI&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;the-biggest-shift&quot;&gt;The biggest shift&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The bottleneck moved from “I cannot find good content” to “can I ask a good question?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That is what learning should look like in the AI era.&lt;/p&gt;
&lt;h2 id=&quot;the-essence&quot;&gt;The essence&lt;/h2&gt;
&lt;p&gt;Take high-quality writing scattered across the internet, turn it into a private library, and let AI help you digest it.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Original:&lt;/strong&gt; &lt;a href=&quot;https://x.com/i/status/2034793001864872440&quot;&gt;https://x.com/i/status/2034793001864872440&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/cli-ai-revival/&quot; class=&quot;wikilink&quot;&gt;CLI: the command-line revival in the AI era&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/x-3-open-source-tools-autoclip-cloud-mail-open-lovable/&quot; class=&quot;wikilink&quot;&gt;Three open-source tools from X: AutoClip, Cloud-Mail, Open Lovable&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Support is not a cost center</title><link>https://ssherun.github.io/en/blog/ai-customer-service-revenue/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/ai-customer-service-revenue/</guid><description>When AI drives the cost of taking one user seriously toward zero, support flips: it stops being cleanup and becomes a company&apos;s most important interface.</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;For twenty years the internet optimized almost every commercial joint that could be optimized. Information got faster. Payments got smoother. Logistics got stronger. Prices got more transparent.&lt;/p&gt;
&lt;p&gt;One thing never moved: people did not feel more &lt;em&gt;regarded&lt;/em&gt; inside commercial systems.&lt;/p&gt;
&lt;p&gt;Buy the wrong thing and try to reach support — you get a tree of buttons. A flight cancels — a queue and a template. An account looks “suspicious” — the system keeps proving who you are and never seems to care what happened.&lt;/p&gt;
&lt;p&gt;The tech got stronger. The experience got colder.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A cold support hall&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-customer-service-revenue-01.DAGXgnRr_Za6QtT.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;two-layers-of-the-commercial-world&quot;&gt;Two layers of the commercial world&lt;/h2&gt;
&lt;p&gt;Commerce has long been split into two layers.&lt;/p&gt;
&lt;p&gt;One is the mass market. Platforms, ecommerce, banks, airlines. They are good at standardization and supply at scale. They can serve a hundred million people, and each person’s presence in the system is thin. Your number matters more than your name. The ticket matters more than the feeling.&lt;/p&gt;
&lt;p&gt;The other is the high end. Hotels, luxury, private banking. They sell more than a product. They sell being remembered, understood, anticipated.&lt;/p&gt;
&lt;p&gt;A hard wall sits between the layers. It is not values. It is cost structure. Real high-quality service needs continuous attention, context, memory, and judgment — dense attention. Dense attention has always been expensive.&lt;/p&gt;
&lt;h2 id=&quot;jevons-paradox&quot;&gt;Jevons’ paradox&lt;/h2&gt;
&lt;p&gt;Economics keeps confirming a pattern: when the cost of using a resource collapses, people do not consume the same amount and pocket the savings. They consume much more.&lt;/p&gt;
&lt;p&gt;Steam engines made coal more efficient; coal use rose. Email drove communication cost to zero; communication volume exploded by orders of magnitude.&lt;/p&gt;
&lt;p&gt;High-quality attention will do the same. Once AI drives the cost of &lt;em&gt;taking one user seriously&lt;/em&gt; toward zero, companies will not only cut the support budget. They will start doing things they could not afford: proactive care, ongoing companionship, personalization that is actually personal.&lt;/p&gt;
&lt;p&gt;Demand is not replaced. It is released.&lt;/p&gt;
&lt;h2 id=&quot;redefining-support&quot;&gt;Redefining support&lt;/h2&gt;
&lt;p&gt;Old support was a cleanup department. It appeared after something broke. The goal was two words: cut cost. Far from growth, far from brand, far from core decisions.&lt;/p&gt;
&lt;p&gt;When a system can actually understand a user, stay with them, notice problems early, and offer advice before they ask, it is no longer “after-sales.” It becomes the most important interface between the company and the person.&lt;/p&gt;
&lt;p&gt;That interface knows what they bought, what broke, how they like to be spoken to, what they are sensitive to, when they are about to churn, when they are about to buy again. It exists across the whole lifecycle.&lt;/p&gt;
&lt;p&gt;At that point support, sales, membership, CRM, and brand experience collapse into one interaction door.&lt;/p&gt;
&lt;h2 id=&quot;service-is-sales&quot;&gt;Service &lt;em&gt;is&lt;/em&gt; sales&lt;/h2&gt;
&lt;p&gt;The part a lot of people miss: when service is good enough, service becomes the best sales motion.&lt;/p&gt;
&lt;p&gt;A hotel concierge can sell without sounding like a pitch, because they know you. The recommendation feels like a friend’s advice. You do not feel interrupted. You feel looked after.&lt;/p&gt;
&lt;p&gt;Only high-ticket luxury brands could afford that “invisible salesperson.” AI can give every company a version of it.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Concierge service becoming the sale&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-customer-service-revenue-02.CBaBpy71_2sgsvi.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;coldness-becomes-commercial-inefficiency&quot;&gt;Coldness becomes commercial inefficiency&lt;/h2&gt;
&lt;p&gt;Competition will shift from “cheaper, faster, more ad spend” toward “who understands the user, who can keep a relationship.”&lt;/p&gt;
&lt;p&gt;When goods, content, and traffic are easy to copy, the hard layer is relationship. Cheaper deep understanding raises retention. The service process itself accumulates trust and repurchase. Feeling taken seriously is the real barrier in a commoditized market.&lt;/p&gt;
&lt;p&gt;Once someone makes “understand you, remember you, take care of you early” the default, the whole market is forced to upgrade. You cannot define a product by feature-phone interaction standards in a smartphone era. You cannot define user relationships by ticket-queue thinking in an AI era.&lt;/p&gt;
&lt;p&gt;Coldness is no longer just an experience problem. Coldness becomes a form of commercial waste.&lt;/p&gt;
&lt;h2 id=&quot;what-this-means-if-you-ship-product&quot;&gt;What this means if you ship product&lt;/h2&gt;
&lt;p&gt;If you are taking desktop software overseas, the implication is direct:&lt;/p&gt;
&lt;p&gt;Support is not something you invent after launch. It is part of the product. From day one, design what happens when something goes wrong. AI lets you offer something close to concierge service to every user, at a cost close to zero.&lt;/p&gt;
&lt;p&gt;Products can be copied. Relationships are hard to copy. That is the moat.&lt;/p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/i/status/2034453850716049910&quot;&gt;Original post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Author: Ray Wang (@wangray)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/youmind-nonconsensus-startup-choices/&quot; class=&quot;wikilink&quot;&gt;Notes on YouMind’s non-consensus startup choices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/whatnot-cpo-regrets-pm-exists/&quot; class=&quot;wikilink&quot;&gt;Whatnot’s CPO: “We regret that the PM function exists”&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-organization-redesign/&quot; class=&quot;wikilink&quot;&gt;AI made people faster. Why didn’t the company get stronger?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Lessons from hundreds of Skills inside Anthropic</title><link>https://ssherun.github.io/en/blog/anthropic-skills-lessons/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/anthropic-skills-lessons/</guid><description>Anthropic&apos;s Thariq on running hundreds of Skills in Claude Code: a Skill isn&apos;t a Markdown file but a folder of scripts, assets and data agents can discover.</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Anthropic runs hundreds of Skills in production. Engineer Thariq recently wrote down what the team actually learned.&lt;/p&gt;
&lt;p&gt;A common myth: Skills are “just Markdown files.” The interesting ones are folders — scripts, assets, data — that an agent can discover, explore, and operate on.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A cabinet of skill archives&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-anthropic-skills-lessons-01.DEHnO1lH_Z1NxNYP.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;nine-skill-types&quot;&gt;Nine Skill types&lt;/h2&gt;
&lt;p&gt;After sorting everything they had, Skills clustered into a few recurring categories. The best ones sit cleanly in one category. The confusing ones straddle several.&lt;/p&gt;
&lt;h3 id=&quot;1-library--sdk&quot;&gt;1. Library / SDK&lt;/h3&gt;
&lt;p&gt;How to use a library, CLI, or SDK correctly. Snippets plus a gotcha list of mistakes Claude keeps making. The edge cases in your internal billing library. When to use each subcommand of your internal CLI.&lt;/p&gt;
&lt;h3 id=&quot;2-verification&quot;&gt;2. Verification&lt;/h3&gt;
&lt;p&gt;How to test or verify that code actually works, usually with Playwright, tmux, and other outside tools.&lt;/p&gt;
&lt;p&gt;Anthropic thinks verification Skills are so useful that an engineer should spend a full week sharpening one. Tricks: have Claude record an output video so you can replay the test; make programmatic assertions at every step.&lt;/p&gt;
&lt;h3 id=&quot;3-data--monitoring&quot;&gt;3. Data &amp;#x26; monitoring&lt;/h3&gt;
&lt;p&gt;Connect data and monitoring systems: credentials, dashboard IDs, common query workflows. Example: which events you have to join to see signup → activation → paid.&lt;/p&gt;
&lt;h3 id=&quot;4-workflow&quot;&gt;4. Workflow&lt;/h3&gt;
&lt;p&gt;Turn a repetitive workflow into one command. A key trick: persist historical results to a log so the model stays consistent across runs.&lt;/p&gt;
&lt;h3 id=&quot;5-scaffolding&quot;&gt;5. Scaffolding&lt;/h3&gt;
&lt;p&gt;Generate boilerplate for a specific feature in the codebase. Especially useful when the need is in natural language and a pure code template cannot cover it.&lt;/p&gt;
&lt;h3 id=&quot;6-code-quality&quot;&gt;6. Code quality&lt;/h3&gt;
&lt;p&gt;Enforce quality standards. Can include deterministic scripts, or run as hooks / GitHub Actions. The most interesting example is adversarial-review: spawn a sub-agent with a fresh point of view to criticize the code, apply fixes, and iterate until the findings degrade into nitpicks.&lt;/p&gt;
&lt;h3 id=&quot;7-ci--cd&quot;&gt;7. CI / CD&lt;/h3&gt;
&lt;p&gt;Help fetch, push, and deploy. Example: babysit-pr — watch the PR → retry flaky CI → resolve merge conflicts → enable automerge.&lt;/p&gt;
&lt;h3 id=&quot;8-debugging&quot;&gt;8. Debugging&lt;/h3&gt;
&lt;p&gt;Start from a symptom (a Slack thread, an alert, an error signature), investigate across tools, produce a structured report.&lt;/p&gt;
&lt;h3 id=&quot;9-maintenance&quot;&gt;9. Maintenance&lt;/h3&gt;
&lt;p&gt;Routine ops with guardrails around destructive actions. Example: find orphaned resources → post to Slack → wait out a confirmation window → user confirms → cascade cleanup.&lt;/p&gt;
&lt;h2 id=&quot;nine-ways-to-write-a-better-skill&quot;&gt;Nine ways to write a better Skill&lt;/h2&gt;
&lt;h3 id=&quot;write-what-claude-does-not-already-know&quot;&gt;Write what Claude does &lt;em&gt;not&lt;/em&gt; already know&lt;/h3&gt;
&lt;p&gt;Claude already knows a lot of coding and has strong default tastes. If your Skill is mostly knowledge, write the information that &lt;em&gt;pushes Claude off its defaults&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Anthropic’s internal frontend-design Skill is the example — it exists to avoid Inter and purple gradients, Claude’s house aesthetic.&lt;/p&gt;
&lt;h3 id=&quot;gotchas-are-the-highest-signal-section&quot;&gt;Gotchas are the highest-signal section&lt;/h3&gt;
&lt;p&gt;The strongest part of a Skill is usually the Gotchas chapter. Accumulate it from real failure points as Claude uses the Skill, and keep updating it.&lt;/p&gt;
&lt;h3 id=&quot;use-the-folder-for-progressive-disclosure&quot;&gt;Use the folder for progressive disclosure&lt;/h3&gt;
&lt;p&gt;Put detailed API signatures in &lt;code&gt;references/api.md&lt;/code&gt;, templates in &lt;code&gt;assets/&lt;/code&gt;. Tell Claude which files exist; it will read them when it needs them. The filesystem &lt;em&gt;is&lt;/em&gt; context engineering.&lt;/p&gt;
&lt;h3 id=&quot;give-flexibility-do-not-over-specify&quot;&gt;Give flexibility; do not over-specify&lt;/h3&gt;
&lt;p&gt;Skills are reusable. Over-specific instructions shrink the set of cases they fit. Give Claude the information it needs, then leave room to adapt. Same idea as Garry Tan’s plan-ceo-review: define a stance, not a syllabus.&lt;/p&gt;
&lt;h3 id=&quot;store-user-config-in-configjson&quot;&gt;Store user config in &lt;code&gt;config.json&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;If the Skill needs user context (a Slack channel, say), put it in &lt;code&gt;config.json&lt;/code&gt;. If the config is missing, have the agent ask.&lt;/p&gt;
&lt;h3 id=&quot;description-is-a-trigger-not-a-summary&quot;&gt;Description is a trigger, not a summary&lt;/h3&gt;
&lt;p&gt;At startup Claude scans every Skill description to decide what to load. Write “when should this fire,” not “what this Skill is.”&lt;/p&gt;
&lt;h3 id=&quot;give-the-skill-memory&quot;&gt;Give the Skill memory&lt;/h3&gt;
&lt;p&gt;Store data in the Skill directory — logs, JSON, even SQLite. The standup-post Skill keeps a history of each post so the next run can see what changed.&lt;/p&gt;
&lt;h3 id=&quot;give-claude-code-not-only-instructions&quot;&gt;Give Claude code, not only instructions&lt;/h3&gt;
&lt;p&gt;Scripts and libraries let Claude compose and decide instead of rebuilding boilerplate.&lt;/p&gt;
&lt;h3 id=&quot;use-hooks-as-safety-rails&quot;&gt;Use hooks as safety rails&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;/careful&lt;/code&gt; blocks &lt;code&gt;rm -rf&lt;/code&gt;, &lt;code&gt;DROP TABLE&lt;/code&gt;, force-push. &lt;code&gt;/freeze&lt;/code&gt; only allows edits in certain directories. Turn them on when you need them — not globally.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Sharpening a skill under guardrails&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-anthropic-skills-lessons-02.CM5im0Vn_nRnjY.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;distribution-from-a-repo-to-a-marketplace&quot;&gt;Distribution: from a repo to a marketplace&lt;/h2&gt;
&lt;p&gt;A small team can commit Skills into &lt;code&gt;.claude/skills/&lt;/code&gt;. At scale every Skill costs model context, and you need an internal plugin marketplace.&lt;/p&gt;
&lt;p&gt;Anthropic’s path is organic discovery: try it in a sandbox folder, list it formally after it has traction. No central team decides what ships, but you still need curation — low-quality and duplicate Skills are too easy to create.&lt;/p&gt;
&lt;p&gt;They also use a PreToolUse hook to track usage: which Skills are hot, which never fire.&lt;/p&gt;
&lt;h2 id=&quot;how-this-sits-with-the-other-posts&quot;&gt;How this sits with the other posts&lt;/h2&gt;
&lt;p&gt;Together with earlier pieces, this is a complete Agent Skills picture:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Google’s five design patterns define the architectural shapes&lt;/li&gt;
&lt;li&gt;YC CEO’s plan-ceo-review shows what a top Skill does in the wild&lt;/li&gt;
&lt;li&gt;This Anthropic note is the method: classify, write, distribute&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The three together roughly cover “what a good Skill is, how to write one, how to use one.”&lt;/p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/i/status/2033949937936085378&quot;&gt;Original post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Author: Thariq (@trq212), Anthropic engineer&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/agent-skills-five-design-patterns/&quot; class=&quot;wikilink&quot;&gt;Five design patterns for Agent Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/agent-skills-hub/&quot; class=&quot;wikilink&quot;&gt;Agent Skills Hub: finding and managing good Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/top-skill-yc-ceo-review/&quot; class=&quot;wikilink&quot;&gt;What a top Skill looks like: YC CEO’s 600-line review prompt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/dual-entry-human-agent-design/&quot; class=&quot;wikilink&quot;&gt;Two product entrances: design for humans and agents&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Two product entrances: design for humans and agents</title><link>https://ssherun.github.io/en/blog/dual-entry-human-agent-design/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/dual-entry-human-agent-design/</guid><description>LibTV shows a pattern worth copying: one capability core, a canvas for people, Skills for agents. That dual entrance may be the shape of agent-era products.</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I saw a claim yesterday that product people should take seriously:&lt;/p&gt;
&lt;p&gt;Products in the AI era may need two entrances — one for humans, one for agents.&lt;/p&gt;
&lt;p&gt;Not a fork in the road. Not “UI dies, Skills win.” Two paths at once, each for its own user, both draining into the same capability core.&lt;/p&gt;
&lt;p&gt;LibTV is the first product I have seen that actually does this.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Two entrances flowing into one core&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-dual-entry-human-agent-design-01.Cl1zgYPD_a7Oxt.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;two-entrances-one-capability-set&quot;&gt;Two entrances, one capability set&lt;/h2&gt;
&lt;p&gt;LibTV is Liblib’s AI video tool. It has two completely different doors:&lt;/p&gt;
&lt;p&gt;For humans: an infinite canvas. Node-based, with wires and parameters, covering script, image, video, and audio. How professional? A real camera UI (aperture, focal length), multi-angle 3D preview, one-click relighting (even rim light), grid splits, script-to-storyboard. It looks complex. For a working creator, that complexity is a weapon.&lt;/p&gt;
&lt;p&gt;For agents: a Skill. One-line install, works with Claude Code, Codex, OpenClaw. You say “make a 10-second video of a ballet dancer.” The agent calls the Skill; the backend handles storyboard, model choice, parameters, and generation; the result comes back.&lt;/p&gt;
&lt;p&gt;Same product. Same underlying capability. Two different doors.&lt;/p&gt;
&lt;h2 id=&quot;open-the-interface-protect-the-brain&quot;&gt;Open the interface, protect the brain&lt;/h2&gt;
&lt;p&gt;LibTV’s Skill design is clever: the user-side Skill only triggers and talks. The real work runs on a backend agent.&lt;/p&gt;
&lt;p&gt;That means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you ship an interface, not a brain&lt;/li&gt;
&lt;li&gt;core prompts, model-routing strategy, and storyboard logic stay invisible&lt;/li&gt;
&lt;li&gt;you can iterate the backend and users upgrade without noticing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why bother? A lot of Skills today are fully open. The know-how walks out the door. No moat, no protection; no protection, no room to commercialize; no commercial ecosystem, the flywheel never starts.&lt;/p&gt;
&lt;p&gt;The agent ecosystem needs openness. Openness is not the same as giving away the core.&lt;/p&gt;
&lt;h2 id=&quot;agents-draft-humans-finish&quot;&gt;Agents draft; humans finish&lt;/h2&gt;
&lt;p&gt;Another detail I like: every agent job becomes a project on the canvas, nodes already wired.&lt;/p&gt;
&lt;p&gt;The workflow looks like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A regular user says one sentence to an agent&lt;/li&gt;
&lt;li&gt;The agent calls LibTV and produces a 70-point draft&lt;/li&gt;
&lt;li&gt;If it is good enough, they ship it&lt;/li&gt;
&lt;li&gt;If they want to refine, they open the canvas — assets and nodes are already there&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Agents go from 0 to 70. Humans go from 70 to 100. The two doors are not silos. They connect.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Draft-to-refine on the canvas&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-dual-entry-human-agent-design-02.Cx3FBmp-_2vRR7o.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-this-means-if-you-ship-product&quot;&gt;What this means if you ship product&lt;/h2&gt;
&lt;p&gt;A few practical takeaways:&lt;/p&gt;
&lt;p&gt;First, design an agent-friendly interface from day one. Bolting on an agent door after the product is “done” often means the architecture cannot support it.&lt;/p&gt;
&lt;p&gt;Second, atomize the underlying capabilities. Generate image, edit image, generate video, edit video, generate audio — each is an independent atom. UI and Skills are just different callers.&lt;/p&gt;
&lt;p&gt;Third, pro users and casual users are no longer a forced choice. Pros use the UI; complexity is their weapon. Casual users use an agent; one sentence is enough. One product serves both.&lt;/p&gt;
&lt;p&gt;Fourth, a Skill is an interface, not a brain. Open trigger and transport; protect core logic. That is how commercialization stays possible in an agent ecosystem.&lt;/p&gt;
&lt;h2 id=&quot;the-product-shape-i-keep-coming-back-to&quot;&gt;The product shape I keep coming back to&lt;/h2&gt;
&lt;p&gt;This is starting to look like the default architecture for agent-era products:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│     Atomic capabilities         │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  (image / video / audio / script)│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└──────────┬──────────┬───────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;           │          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ┌──────┴───┐ ┌────┴─────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │  UI door │ │ Agent door│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │ (canvas) │ │ (Skills) │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └──────────┘ └──────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;         │            │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Power users    Casual users&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Fine control   One sentence&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Behind the two doors is a recombination of atomic capabilities. Humans and agents coexist and take what they need.&lt;/p&gt;
&lt;p&gt;If you are building desktop software, this belongs in the architecture on day one — not as a later “AI feature.”&lt;/p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/i/status/2034121715811553657&quot;&gt;Original post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Author: 数字生命卡兹克 (@Khazix0918)&lt;/li&gt;
&lt;li&gt;Product: &lt;a href=&quot;https://libtv.liblib.art&quot;&gt;LibTV&lt;/a&gt; (Liblib)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/agent-skills-five-design-patterns/&quot; class=&quot;wikilink&quot;&gt;Five design patterns for Agent Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/agent-skills-hub/&quot; class=&quot;wikilink&quot;&gt;Agent Skills Hub: finding and managing good Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/hello-world/&quot; class=&quot;wikilink&quot;&gt;An agent-friendly blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/anthropic-skills-lessons/&quot; class=&quot;wikilink&quot;&gt;Lessons from hundreds of Skills inside Anthropic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>First-principles review: a startup plan dies in 48 hours</title><link>https://ssherun.github.io/en/blog/first-principles-startup-review/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/first-principles-startup-review/</guid><description>A growth PM with seven years&apos; experience ran an AI agent over a two-month startup plan. In 48 hours every scheme was dead. Four fatal mistakes worth watching.</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Someone with seven years in product and growth spent two months on an “AI-driven cold-start growth tool.” Channel list, copy templates, tracking, posting calendar — all ready.&lt;/p&gt;
&lt;p&gt;Then they ran a first-principles review with an AI agent.&lt;/p&gt;
&lt;p&gt;Forty-eight hours later, every plan was gone.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A plan model taken apart&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-first-principles-startup-review-01.CztPFug6_GDy1B.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;mistake-1-looking-busy-on-eight-platforms&quot;&gt;Mistake 1: looking busy on eight platforms&lt;/h2&gt;
&lt;p&gt;The original plan was to ship on X, Reddit, Product Hunt, Hacker News, LinkedIn, Xiaohongshu, Jike, and V2EX at once. It sounded like coverage.&lt;/p&gt;
&lt;p&gt;The agent’s first question stunned them:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Are you sure you are solving ‘how do I post on more platforms,’ or ‘how do I get the first paying user’?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Then it made them do the math: eight platforms, 500–1,000 impressions each, 0.5% conversion, 2–5 signups per platform, 40 signups at the high end, 10% paid conversion — &lt;strong&gt;four paying users&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Two months of prep, two weeks of execution, four paying users.&lt;/p&gt;
&lt;p&gt;The agent: “You are not doing growth. You are doing growth that &lt;em&gt;looks busy&lt;/em&gt;. Real cold start is finding one channel and getting the first 100 paying users.”&lt;/p&gt;
&lt;p&gt;Same idea as Peter Thiel’s “start with a small market” — do not cast a net. Go all in.&lt;/p&gt;
&lt;h2 id=&quot;mistake-2-pricing-that-trains-the-wrong-behavior&quot;&gt;Mistake 2: pricing that trains the wrong behavior&lt;/h2&gt;
&lt;p&gt;The original plan was standard SaaS: Basic $9/month for three platforms, Pro $29/month for all of them.&lt;/p&gt;
&lt;p&gt;The agent: your pricing says “pay more to post more,” which trains people to spray posts instead of focusing on the channel that works.&lt;/p&gt;
&lt;p&gt;Worse: CAC $50, 3% conversion, 8% monthly churn — 16 months to pay back. The target user is an indie hacker who pivots in about three months. LTV does not close.&lt;/p&gt;
&lt;p&gt;The agent offered a different model: charge on outcomes. First paying user free. Tenth costs $49. Hundredth costs $299.&lt;/p&gt;
&lt;p&gt;That is not selling a tool. That is being a growth partner. Incentives lock.&lt;/p&gt;
&lt;h2 id=&quot;mistake-3-hiding-behind-a-technical-moat&quot;&gt;Mistake 3: hiding behind a technical moat&lt;/h2&gt;
&lt;p&gt;The original plan: integrate eight platform APIs, train a copy model, build a dashboard. Three months of engineering.&lt;/p&gt;
&lt;p&gt;The agent: “Is your core advantage ‘multi-platform posting tech,’ or ‘knowing which channel works for which product’?”&lt;/p&gt;
&lt;p&gt;If it is the latter, users do not need you to post for them. They need you to tell them &lt;em&gt;where&lt;/em&gt; to post.&lt;/p&gt;
&lt;p&gt;Eight APIs look cool. Users do not care. They care about one thing: can you tell me where to promote &lt;em&gt;this&lt;/em&gt; product.&lt;/p&gt;
&lt;p&gt;Tech is a means, not the goal.&lt;/p&gt;
&lt;h2 id=&quot;mistake-4-an-mvp-that-tests-the-tool-not-the-hypothesis&quot;&gt;Mistake 4: an MVP that tests the tool, not the hypothesis&lt;/h2&gt;
&lt;p&gt;The original plan: a slim growth tool, four weeks to build.&lt;/p&gt;
&lt;p&gt;The agent: “You are validating ‘the tool works,’ not ‘the user gets a result.’”&lt;/p&gt;
&lt;p&gt;The real MVP: a bot. User pastes product info. AI says where to post and at what angle. User posts themselves. Check results in a week.&lt;/p&gt;
&lt;p&gt;One week to live, not four. Manually analyze the first ten users. If the hypothesis dies, you wasted a week.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Focus on one channel&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-first-principles-startup-review-02.CUa2hovp_Z2wFaEE.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;three-growth-principles&quot;&gt;Three growth principles&lt;/h2&gt;
&lt;p&gt;The case collapses into three:&lt;/p&gt;
&lt;p&gt;Growth is not a tech problem. It is a judgment problem. Tech helps you “post to ten platforms faster.” Judgment tells you “you should only go to one.”&lt;/p&gt;
&lt;p&gt;Growth is not a coverage problem. It is a conversion problem. Ten channels with five signups each lose to one channel with 50 signups and ten paying users.&lt;/p&gt;
&lt;p&gt;Growth is not a tool problem. It is an outcome problem. Users do not need a better growth tool. They need the first batch of paying users.&lt;/p&gt;
&lt;h2 id=&quot;what-the-ai-review-is-actually-worth&quot;&gt;What the AI review is actually worth&lt;/h2&gt;
&lt;p&gt;The interesting part is not the specific commercial advice. It is the method:&lt;/p&gt;
&lt;p&gt;First, attack the premise. Not “how do we do this,” but “are you sure this is the right problem?”&lt;/p&gt;
&lt;p&gt;Second, use numbers. Not vibes — compute the full funnel from impression → signup → paid.&lt;/p&gt;
&lt;p&gt;Third, keep asking what the moat is. Not what you &lt;em&gt;can&lt;/em&gt; do, but which part of what you do is actually hard to copy.&lt;/p&gt;
&lt;p&gt;That is the same idea as YC CEO Garry Tan’s plan-ceo-review Skill — give the model a severe review stance and let it challenge every assumption.&lt;/p&gt;
&lt;p&gt;The difference: this time the subject was not code. It was a business plan. It worked just as well.&lt;/p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/i/status/2034524961835225265&quot;&gt;Original post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Author: 鱼总聊AI (@AI_Jasonyu)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/top-skill-yc-ceo-review/&quot; class=&quot;wikilink&quot;&gt;What a top Skill looks like: YC CEO’s 600-line review prompt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/top-skill-yc-ceo-review/&quot; class=&quot;wikilink&quot;&gt;What a top Skill looks like: YC CEO’s 600-line review prompt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/youmind-nonconsensus-startup-choices/&quot; class=&quot;wikilink&quot;&gt;Notes on YouMind’s non-consensus startup choices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-customer-service-revenue/&quot; class=&quot;wikilink&quot;&gt;Support is not a cost center&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>gstack: the Claude Code factory YC&apos;s CEO uses</title><link>https://ssherun.github.io/en/blog/gstack-yc-ceo-factory/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/gstack-yc-ceo-factory/</guid><description>Garry Tan open-sourced gstack, the Claude Code toolkit he actually runs: 15 Skills that turn a model into a virtual engineering team, while remaining YC CEO.</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Garry Tan is CEO of Y Combinator. In 60 days he wrote more than 600,000 lines of production code — 35% tests — 10,000 to 20,000 usable lines a day. He was also doing the full-time YC CEO job.&lt;/p&gt;
&lt;p&gt;Not overtime. Tools. He open-sourced the Claude Code kit he actually uses. It is called gstack. 26,900 stars in a week.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A software-factory line&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-gstack-yc-ceo-factory-01.ySXasT5n_blg9a.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-gstack-is&quot;&gt;What gstack is&lt;/h2&gt;
&lt;p&gt;One line: turn Claude Code into a virtual engineering team you actually manage.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a CEO rethinks product direction&lt;/li&gt;
&lt;li&gt;an engineering manager locks architecture&lt;/li&gt;
&lt;li&gt;a designer catches AI taste failures&lt;/li&gt;
&lt;li&gt;a paranoid reviewer hunts production bugs&lt;/li&gt;
&lt;li&gt;QA opens a real browser and clicks&lt;/li&gt;
&lt;li&gt;a release engineer opens the PR&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fifteen specialist roles, six safety tools — all Markdown files and slash commands. MIT. Free.&lt;/p&gt;
&lt;h2 id=&quot;install-in-30-seconds&quot;&gt;Install in 30 seconds&lt;/h2&gt;
&lt;p&gt;You need Claude Code, Git, and Bun v1.0+:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; https://github.com/garrytan/gstack.git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ~/.claude/skills/gstack&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ~/.claude/skills/gstack&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;./setup&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;First ten minutes: &lt;code&gt;/office-hours&lt;/code&gt; → &lt;code&gt;/plan-ceo-review&lt;/code&gt; → &lt;code&gt;/review&lt;/code&gt; → &lt;code&gt;/qa&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;the-full-skill-list&quot;&gt;The full Skill list&lt;/h2&gt;







































































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Skill&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;th&gt;What it does&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/office-hours&lt;/code&gt;&lt;/td&gt;&lt;td&gt;YC office hours&lt;/td&gt;&lt;td&gt;The start. Six forced questions redefine the problem, attack the premise, generate implementation options. The design doc feeds downstream Skills&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/plan-ceo-review&lt;/code&gt;&lt;/td&gt;&lt;td&gt;CEO / founder&lt;/td&gt;&lt;td&gt;Rethink the problem. Find the 10-star product hiding in the request. Four modes: expand, selective expand, hold scope, shrink&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/plan-eng-review&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Engineering manager&lt;/td&gt;&lt;td&gt;Lock architecture, data flow, diagrams, edges, tests. Force hidden assumptions up&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/plan-design-review&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Senior designer&lt;/td&gt;&lt;td&gt;Interactive plan-mode design review. Score each dimension 0–10, define what a 10 is, fix the plan&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/design-consultation&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Design partner&lt;/td&gt;&lt;td&gt;Build a full design system from zero. Learn the industry, propose creative risk, generate real mockups&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/review&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Staff engineer&lt;/td&gt;&lt;td&gt;Find bugs that pass CI and blow up in production. Auto-fix the obvious. Flag completeness gaps&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/investigate&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Debugger&lt;/td&gt;&lt;td&gt;Systematic root-cause. Iron rule: no investigation, no fix. Trace data flow, test hypotheses, stop after three failures&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/design-review&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Designer who codes&lt;/td&gt;&lt;td&gt;Live-site visual audit + fix loop. 80-item audit, then fix. Atomic commits, before/after screenshots&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/qa&lt;/code&gt;&lt;/td&gt;&lt;td&gt;QA lead&lt;/td&gt;&lt;td&gt;Test the app, find bugs, fix in atomic commits, re-verify. Auto-write a regression test for each fix&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/qa-only&lt;/code&gt;&lt;/td&gt;&lt;td&gt;QA reporter&lt;/td&gt;&lt;td&gt;Same method, report only — when you want a bug list and no code changes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/ship&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Release engineer&lt;/td&gt;&lt;td&gt;Sync main, run tests, audit coverage, push, open a PR. If you have no test framework it builds one. One command&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/document-release&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Tech writer&lt;/td&gt;&lt;td&gt;Update every project doc to match what you just shipped. Catch a stale README&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/retro&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Engineering manager&lt;/td&gt;&lt;td&gt;Team-aware weekly retro. Per-person breakdown, ship streak, test-health trend, growth chances&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/browse&lt;/code&gt;&lt;/td&gt;&lt;td&gt;QA engineer&lt;/td&gt;&lt;td&gt;Eyes for the agent. Real Chromium, real clicks, real screenshots. ~100ms per command&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/setup-browser-cookies&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Session manager&lt;/td&gt;&lt;td&gt;Import cookies from a real browser (Chrome, Arc, Brave, Edge) into a headless session. Test authenticated pages&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Second AI&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/codex&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Second opinion&lt;/td&gt;&lt;td&gt;Independent review from OpenAI Codex CLI. Three modes: code review (pass/fail gate), adversarial challenge, open consult with session continuity&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Safety &amp;#x26; tools&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/careful&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Safety rail&lt;/td&gt;&lt;td&gt;Warn before destructive commands (&lt;code&gt;rm -rf&lt;/code&gt;, &lt;code&gt;DROP TABLE&lt;/code&gt;, force-push, &lt;code&gt;git reset --hard&lt;/code&gt;). Any warning can be overridden. Common build cleanups are already allowlisted&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/freeze&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Edit lock&lt;/td&gt;&lt;td&gt;Restrict all file edits to one directory. Blocks Edit/Write outside the fence. Accident prevention while debugging&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/guard&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Full safety&lt;/td&gt;&lt;td&gt;&lt;code&gt;/careful&lt;/code&gt; + &lt;code&gt;/freeze&lt;/code&gt; in one command. Maximum safety for production work&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/unfreeze&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Unlock&lt;/td&gt;&lt;td&gt;Remove the &lt;code&gt;/freeze&lt;/code&gt; fence; edit anywhere again&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;/gstack-upgrade&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Self-updater&lt;/td&gt;&lt;td&gt;Upgrade gstack. Detects global vs vendored install, syncs both, shows what changed&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;skill-deep-dives&quot;&gt;Skill deep-dives&lt;/h2&gt;
&lt;h3 id=&quot;office-hours--where-every-project-should-start&quot;&gt;&lt;code&gt;/office-hours&lt;/code&gt; — where every project should start&lt;/h3&gt;
&lt;p&gt;Before you plan, before you review, before you write code — sit with a YC-style partner and think about what you are &lt;em&gt;actually&lt;/em&gt; building. Not what you think you are building. What you are &lt;strong&gt;actually&lt;/strong&gt; building.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The reframe&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A real case: the user said “I want a calendar-briefing app.” Reasonable. Then it asked about the pain — concrete examples, not hypotheses. They described assistants missing things, stale calendar items across Google accounts, AI-slop prep docs, hours chasing events in the wrong place.&lt;/p&gt;
&lt;p&gt;It came back: &lt;strong&gt;“I am going to challenge the frame. I think you already outgrew it. You said ‘a calendar briefing app for multi-Google-calendar management.’ What you described is a chief-of-staff AI.”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Then it pulled out five capabilities the user had not realized they were describing:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Watch the calendar&lt;/strong&gt; — across accounts; detect stale info, missing locations, permission gaps&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generate real prep&lt;/strong&gt; — not a logistics summary: &lt;em&gt;intellectual&lt;/em&gt; work for a board meeting, a podcast, a raise&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Run a CRM&lt;/strong&gt; — who you are seeing, the relationship, what they want, the history&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prioritize time&lt;/strong&gt; — flag prep that has to start early, block time proactively, rank events by importance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trade money for leverage&lt;/strong&gt; — actively look for what to delegate or automate&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That reframe changed the project. They were going to build a calendar app. They are now building something 10× more valuable — because the Skill listened to the pain, not the feature request.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Premise challenge&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After the reframe it shows premises for you to verify. Not “does this sound good?” — falsifiable claims about the product:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;the calendar is the anchor data source; the value is the intelligence layer on top&lt;/li&gt;
&lt;li&gt;assistants are not replaced — they get superpowers&lt;/li&gt;
&lt;li&gt;the narrowest wedge is one calendar brief that actually works&lt;/li&gt;
&lt;li&gt;CRM integration is required, not a nice-to-have&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You agree, disagree, or adjust. Every premise you accept is load-bearing in the design doc.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Implementation options&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Then it generates 2–3 concrete options with honest effort:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A: calendar brief first&lt;/strong&gt; — narrowest wedge, ship tomorrow, M effort (human ~3 weeks / Claude Code ~2 days)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B: CRM first&lt;/strong&gt; — build the relationship graph, L (human ~6 weeks / CC ~4 days)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C: full vision&lt;/strong&gt; — everything at once, XL (human ~3 months / CC ~1.5 weeks)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It recommends A because you learn from real use. CRM data arrives naturally in week two.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Two modes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Startup mode&lt;/strong&gt; — building a business, founder or internal. Six forced questions distilled from how YC partners evaluate products: demand reality, status quo, urgent concreteness, narrowest wedge, observe &amp;#x26; surprise, future fit. The questions are meant to be uncomfortable. If you cannot name a specific person who needs this, that is the most important thing to learn before you write code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Builder mode&lt;/strong&gt; — hackathon, side project, open source, learning, fun. An enthusiastic collaborator helping you find the coolest version of the idea. What would make someone say “whoa”? What is the fastest path to something shareable? Generative questions, not interrogation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The design doc&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Both modes end by writing a design doc to &lt;code&gt;~/.gstack/projects/&lt;/code&gt; — that doc feeds &lt;code&gt;/plan-ceo-review&lt;/code&gt; and &lt;code&gt;/plan-eng-review&lt;/code&gt; directly. The full life cycle is now: &lt;code&gt;office-hours → plan → implement → review → QA → ship → retro&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;plan-ceo-review--founder-mode&quot;&gt;&lt;code&gt;/plan-ceo-review&lt;/code&gt; — founder mode&lt;/h3&gt;
&lt;p&gt;This is where I want the model to think with taste, ambition, user empathy, and a long horizon. I do not want it to take the request literally. I want it to ask a more important question first:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is this product actually for?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I think of this as &lt;strong&gt;Brian Chesky mode&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The point is not to implement the obvious ticket. The point is to rethink the problem from the user’s side and find the version that feels inevitable, delightful, maybe a little magical.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Suppose I am building a Craigslist-style listing app and I say:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Let sellers upload photos of their items.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A weak assistant adds a file picker and saves the image.&lt;/p&gt;
&lt;p&gt;That is not a real product.&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;/plan-ceo-review&lt;/code&gt; I want the model to ask whether “photo upload” &lt;em&gt;is&lt;/em&gt; the feature. Maybe the real job is helping someone create a listing that actually sells.&lt;/p&gt;
&lt;p&gt;If that is the real job, the whole plan changes.&lt;/p&gt;
&lt;p&gt;Now the model should ask:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;can we identify the product from the photo?&lt;/li&gt;
&lt;li&gt;can we infer a SKU or model?&lt;/li&gt;
&lt;li&gt;can we search the web and draft a title and description?&lt;/li&gt;
&lt;li&gt;can we pull specs, category, price comps?&lt;/li&gt;
&lt;li&gt;can we suggest which photo converts best as the hero?&lt;/li&gt;
&lt;li&gt;can we detect ugly, dark, cluttered, low-trust photos?&lt;/li&gt;
&lt;li&gt;can we make the experience feel premium instead of a 2007 dead form?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is what &lt;code&gt;/plan-ceo-review&lt;/code&gt; does for me.&lt;/p&gt;
&lt;p&gt;It does not only ask “how do I add this feature?”
It asks &lt;strong&gt;“what 10-star product is hiding inside this request?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Four modes&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Expand scope&lt;/strong&gt; — dream. The agent proposes ambitious versions. Each expansion is a separate opt-in. Enthusiastic recommend&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Selective expand&lt;/strong&gt; — current scope as baseline; float what else is possible, one by one, neutrally — you pick&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hold scope&lt;/strong&gt; — maximum strictness on the existing plan. No expansions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shrink scope&lt;/strong&gt; — smallest viable version. Cut everything else&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vision and decisions persist to &lt;code&gt;~/.gstack/projects/&lt;/code&gt; so they survive the chat. Special visions can be promoted into &lt;code&gt;docs/designs/&lt;/code&gt; in the repo for the team.&lt;/p&gt;
&lt;h3 id=&quot;plan-eng-review--engineering-manager-mode&quot;&gt;&lt;code&gt;/plan-eng-review&lt;/code&gt; — engineering-manager mode&lt;/h3&gt;
&lt;p&gt;Once product direction is right, I want a completely different intelligence. I do not want more sprawling ideation. I do not want more “wouldn’t it be cool if.” I want the model to be my best tech lead.&lt;/p&gt;
&lt;p&gt;This mode should lock:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;architecture&lt;/li&gt;
&lt;li&gt;system boundaries&lt;/li&gt;
&lt;li&gt;data flow&lt;/li&gt;
&lt;li&gt;state transitions&lt;/li&gt;
&lt;li&gt;failure modes&lt;/li&gt;
&lt;li&gt;edge cases&lt;/li&gt;
&lt;li&gt;trust boundaries&lt;/li&gt;
&lt;li&gt;test coverage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And one unlock that was unexpectedly huge: &lt;strong&gt;diagrams&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;When you force an LLM to draw the system it becomes more complete. Sequence, state, component, data-flow, even a test matrix. Diagrams force hidden assumptions up. They make a fuzzy plan harder.&lt;/p&gt;
&lt;p&gt;So &lt;code&gt;/plan-eng-review&lt;/code&gt; is where I want the model to build the technical spine that can carry the product vision.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Review-ready dashboard&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every review (CEO, Eng, Design) records its result. At the end of each review you see a dashboard:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;+====================================================================+&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;|                    REVIEW-READY DASHBOARD                          |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;+====================================================================+&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| Review          | Runs | Last run            | Status    | Required|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;|-----------------|------|---------------------|-----------|---------|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| Eng Review      |  1   | 2026-03-16 15:00    | CLEAR     | YES     |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| CEO Review      |  1   | 2026-03-16 14:30    | CLEAR     | no      |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| Design Review   |  0   | —                   | —         | no      |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;+--------------------------------------------------------------------+&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| Verdict: CLEARED — Eng Review passed                               |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;+====================================================================+&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Eng Review is the only required gate (disable with &lt;code&gt;gstack-config set skip_eng_review true&lt;/code&gt;). CEO and Design are informational — recommended for product and UI changes respectively.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Plan-to-QA&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When &lt;code&gt;/plan-eng-review&lt;/code&gt; finishes the test-review section it writes a test-plan artifact to &lt;code&gt;~/.gstack/projects/&lt;/code&gt;. When you later run &lt;code&gt;/qa&lt;/code&gt;, it picks that plan up automatically — engineering review feeds QA with no copy-paste.&lt;/p&gt;
&lt;h3 id=&quot;plan-design-review--review-the-design-before-any-code&quot;&gt;&lt;code&gt;/plan-design-review&lt;/code&gt; — review the design before any code&lt;/h3&gt;
&lt;p&gt;This is &lt;strong&gt;a senior designer reviewing your plan&lt;/strong&gt; — before you write a line.&lt;/p&gt;
&lt;p&gt;Most plans describe what the backend does and never specify what the user actually sees. Empty state? Error state? Loading? Mobile layout? AI-slop risk? Those decisions get deferred to “we’ll think about it in implementation” — and then engineering ships “no items found” as the empty state because nobody specified better.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/plan-design-review&lt;/code&gt; catches all of that in the plan, while the fix is cheap.&lt;/p&gt;
&lt;p&gt;It works like &lt;code&gt;/plan-ceo-review&lt;/code&gt; and &lt;code&gt;/plan-eng-review&lt;/code&gt; — interactive, one question at a time, &lt;strong&gt;STOP + AskUserQuestion&lt;/strong&gt;. It scores each design dimension 0–10, explains what a 10 looks like, then edits the plan toward that. Scores drive the work: low = a lot of repair; high = a fast pass.&lt;/p&gt;
&lt;p&gt;Seven rounds on the plan: information architecture, interaction-state coverage, user journey, AI-slop risk, design-system alignment, responsive/a11y, unresolved design decisions. Each round it finds gaps, either fixes the obvious or asks you to make a real trade-off.&lt;/p&gt;
&lt;h3 id=&quot;design-consultation--a-design-system-from-zero&quot;&gt;&lt;code&gt;/design-consultation&lt;/code&gt; — a design system from zero&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;/plan-design-review&lt;/code&gt; audits a site that already exists. &lt;code&gt;/design-consultation&lt;/code&gt; is when you have nothing — no system, no type choice, no palette. You start from zero and want a senior designer to sit down and build the whole visual identity with you.&lt;/p&gt;
&lt;p&gt;It is a conversation, not a form. The agent asks about the product, the users, the audience. It thinks about what the product needs to convey — trust, speed, craft, warmth — and works backward to concrete choices. Then it proposes a complete, consistent system: aesthetic direction, type (3+ fonts with specific roles), a palette with hex values, a spacing scale, a layout method, a motion strategy. Every recommendation has a reason. Every choice reinforces the others.&lt;/p&gt;
&lt;p&gt;Consistency is the floor. Every developer-tool dashboard looks the same — clean sans, soft gray, blue accent. They are all consistent. They are all forgettable. What takes a product from “looks fine” to something people actually recognize is &lt;strong&gt;deliberate creative risk&lt;/strong&gt;: an unexpected serif in the title, a bold accent nobody in your category uses, tighter spacing that makes the data feel authoritative instead of airy.&lt;/p&gt;
&lt;p&gt;That is what &lt;code&gt;/design-consultation&lt;/code&gt; is really about. It does not only propose a safe system. It proposes the safe choices &lt;em&gt;and&lt;/em&gt; the risks — and tells you which is which. “These choices make you literate in the category. Here is where I think you should break convention, and why.” You pick which risks to take. The agent checks that the whole system is consistent either way.&lt;/p&gt;
&lt;h3 id=&quot;review--paranoid-staff-engineer-mode&quot;&gt;&lt;code&gt;/review&lt;/code&gt; — paranoid staff-engineer mode&lt;/h3&gt;
&lt;p&gt;Passing tests does not mean the branch is safe.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/review&lt;/code&gt; exists because a whole class of bugs survives CI and hits you in production. This mode is not about dreaming bigger or making the plan prettier. It is about asking:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What else can break?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A structural audit, not style nits. I want the model hunting:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;N+1 queries&lt;/li&gt;
&lt;li&gt;stale reads&lt;/li&gt;
&lt;li&gt;races&lt;/li&gt;
&lt;li&gt;bad trust boundaries&lt;/li&gt;
&lt;li&gt;missing indexes&lt;/li&gt;
&lt;li&gt;escaped bugs&lt;/li&gt;
&lt;li&gt;broken invariants&lt;/li&gt;
&lt;li&gt;bad retry logic&lt;/li&gt;
&lt;li&gt;tests that pass and miss the real failure mode&lt;/li&gt;
&lt;li&gt;forgotten enum handlers — add a new state or type constant and &lt;code&gt;/review&lt;/code&gt; traces it through every switch and allowlist in the repo, not just the file you touched&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Fix first&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Findings get action, not a list. Obvious mechanical fixes (dead code, stale comments, N+1) apply automatically — you see each &lt;code&gt;[AUTO-FIXED] file:line Problem → what it did&lt;/code&gt;. Genuinely ambiguous issues (security, races, design calls) surface for you to decide.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Completeness gaps&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/review&lt;/code&gt; now flags shortcut implementations where the complete version is under 30 minutes of Claude Code time. If you picked an 80% solution and the 100% is a lake, not an ocean, the review calls it.&lt;/p&gt;
&lt;h3 id=&quot;qa--real-browser-qa&quot;&gt;&lt;code&gt;/qa&lt;/code&gt; — real-browser QA&lt;/h3&gt;
&lt;p&gt;When something is broken and you do not know why, &lt;code&gt;/investigate&lt;/code&gt; is the systematic debugger. Iron rule: &lt;strong&gt;no root-cause investigation, no fix.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not guess-and-patch. It traces data flow, matches known bug patterns, tests one hypothesis at a time. If three fix attempts fail, it stops and questions the architecture instead of thrashing. That stops the “let me try one more time” spiral that burns hours.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Four modes&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Diff-aware&lt;/strong&gt; (automatic on a feature branch) — reads &lt;code&gt;git diff main&lt;/code&gt;, identifies which pages your change touches, tests those&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Full&lt;/strong&gt; — systematic exploration of the whole app. 5–15 minutes. 5–10 documented issues&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quick&lt;/strong&gt; (&lt;code&gt;--quick&lt;/code&gt;) — 30-second smoke. Home + first five nav targets&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Regression&lt;/strong&gt; (&lt;code&gt;--regression baseline.json&lt;/code&gt;) — run full, then compare to a prior baseline&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Auto regression tests&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When &lt;code&gt;/qa&lt;/code&gt; fixes a bug and verifies, it auto-generates a regression test that captures the exact bad scene, with attribution back to the QA report.&lt;/p&gt;
&lt;h3 id=&quot;ship--release-engineer-mode&quot;&gt;&lt;code&gt;/ship&lt;/code&gt; — release-engineer mode&lt;/h3&gt;
&lt;p&gt;Once I have decided what to build, locked the technical plan, and run a serious review, I do not want more talk. I want execution.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/ship&lt;/code&gt; is the last mile. Ready branches, not deciding what to build.&lt;/p&gt;
&lt;p&gt;This is where the model should stop acting like a brainstorm partner and start acting like a disciplined release engineer: sync main, run the right tests, make sure branch state is sane, update changelog or version if the repo expects it, push, create or update the PR.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Test bootstrap&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If the project has no test framework, &lt;code&gt;/ship&lt;/code&gt; builds one — detect the runtime, research the best framework, install it, write 3–5 real tests against your actual code, stand up CI/CD (GitHub Actions), create &lt;code&gt;TESTING.md&lt;/code&gt;. 100% coverage is the goal — tests make vibe coding safe instead of yolo coding.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Coverage audit&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every &lt;code&gt;/ship&lt;/code&gt; run builds a code-path graph from your diff, searches for matching tests, and produces an ASCII coverage map with quality stars. Gaps get auto-generated tests. The PR body shows coverage: &lt;code&gt;Tests: 42 → 47 (+5 new)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Review gate&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/ship&lt;/code&gt; checks the review-ready dashboard before it opens a PR. If Eng Review is missing it asks — it will not block you. The decision is saved per branch so you are not asked twice.&lt;/p&gt;
&lt;p&gt;A lot of branches die after the interesting work is done and only the boring release work is left. Humans procrastinate that part. AI should not.&lt;/p&gt;
&lt;h3 id=&quot;browse--eyes-for-the-agent&quot;&gt;&lt;code&gt;/browse&lt;/code&gt; — eyes for the agent&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;/browse&lt;/code&gt; is the closed-loop Skill. Before it, the agent could think and code and was still half-blind. It had to guess UI state, auth flows, redirects, console errors, empty states, bad layout. Now it can go look.&lt;/p&gt;
&lt;p&gt;A compiled binary talking to a persistent Chromium daemon — built on Microsoft’s Playwright. First call starts the browser (~3s). After that: ~100–200ms. The browser stays up between commands, so cookies, tabs, and localStorage persist.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Handoff&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When the headless browser gets stuck — CAPTCHA, MFA, messy auth — hand it to the user:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Claude: I am stuck on a CAPTCHA on the login page. Opening a visible Chrome so you can solve it.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        &gt; browse handoff &quot;stuck on login CAPTCHA&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        Chrome opens at https://app.example.com/login with your cookies and tabs intact.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        Solve the CAPTCHA and tell me when you are done.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;You:    done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Claude: &gt; browse resume&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        New snapshot. Logged in. Continuing QA.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The browser keeps all state across the handoff. After &lt;code&gt;resume&lt;/code&gt; the agent gets a new snapshot from where you left it. If browse tools fail three times in a row, it automatically suggests &lt;code&gt;handoff&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;codex--second-opinion&quot;&gt;&lt;code&gt;/codex&lt;/code&gt; — second opinion&lt;/h3&gt;
&lt;p&gt;When &lt;code&gt;/review&lt;/code&gt; catches bugs from Claude’s point of view, &lt;code&gt;/codex&lt;/code&gt; brings a completely different AI — OpenAI’s Codex CLI — over the same diff. Different training, different blind spots, different strengths. Overlap tells you what is actually true. Each unique finding is a bug neither would have caught alone.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Three modes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Review&lt;/strong&gt; — run &lt;code&gt;codex review&lt;/code&gt; on the current diff. Codex reads every changed file, grades findings by severity (P1 critical, P2 high, P3 medium), returns pass/fail. Any P1 = fail. Completely independent — Codex cannot see Claude’s review.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Challenge&lt;/strong&gt; — adversarial. Codex actively tries to break your code. Edges, races, security holes, assumptions that fail under load. Maximum reasoning effort (&lt;code&gt;xhigh&lt;/code&gt;). Think of it as a pentest of your logic.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Consult&lt;/strong&gt; — open conversation with session continuity. Ask Codex anything about the codebase. Follow-ups reuse the same session. Perfect for “am I thinking about this right?”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cross-model analysis&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When &lt;code&gt;/review&lt;/code&gt; (Claude) and &lt;code&gt;/codex&lt;/code&gt; (OpenAI) have both reviewed the same branch, you get a comparison: which findings overlap (high confidence), which are unique to Codex (different eye), which are unique to Claude. Two doctors, one patient.&lt;/p&gt;
&lt;h2 id=&quot;safety-rails&quot;&gt;Safety rails&lt;/h2&gt;
&lt;p&gt;Four Skills add guardrails to any Claude Code session. They run through Claude Code’s PreToolUse hook — transparent, session-scoped, no config file.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;/careful&lt;/code&gt;&lt;/strong&gt; — say “be careful” or run &lt;code&gt;/careful&lt;/code&gt; when you are near production, running destructive commands, or just want a net. Every Bash command is checked against known-dangerous patterns: &lt;code&gt;rm -rf&lt;/code&gt;, &lt;code&gt;DROP TABLE&lt;/code&gt;, &lt;code&gt;git push --force&lt;/code&gt;, &lt;code&gt;git reset --hard&lt;/code&gt;, &lt;code&gt;kubectl delete&lt;/code&gt;, and so on. Common build-artifact cleanups (&lt;code&gt;rm -rf node_modules&lt;/code&gt;, &lt;code&gt;dist&lt;/code&gt;, &lt;code&gt;.next&lt;/code&gt;) are already allowlisted — no false positives on routine work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;/freeze&lt;/code&gt;&lt;/strong&gt; — restrict all file edits to one directory. When you are debugging a billing bug you do not want Claude “fixing” unrelated code in &lt;code&gt;src/auth/&lt;/code&gt;. &lt;code&gt;/freeze src/billing&lt;/code&gt; blocks Edit and Write outside that path. &lt;code&gt;/investigate&lt;/code&gt; turns this on automatically — it detects the module under debug and freezes edits there.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;/guard&lt;/code&gt;&lt;/strong&gt; — full safety: &lt;code&gt;/careful&lt;/code&gt; + &lt;code&gt;/freeze&lt;/code&gt; in one command. Destructive-command warnings plus directory-scoped edits. Use it when you touch production or debug a live system.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;/unfreeze&lt;/code&gt;&lt;/strong&gt; — remove the &lt;code&gt;/freeze&lt;/code&gt; fence; edit anywhere again. The hooks stay registered for the session — they just allow everything. Run &lt;code&gt;/freeze&lt;/code&gt; again to set a new fence.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A ring of parallel workstations&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-gstack-yc-ceo-factory-02.DyIzqCra_ZHtRc1.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;1015-parallel-sprints&quot;&gt;10–15 parallel sprints&lt;/h2&gt;
&lt;p&gt;A single gstack sprint is already strong. The real change is parallelism. With Conductor you can run 10–15 Claude Code sessions at once, each in its own workspace. One does office-hours, one reviews, one implements, one QAs. You manage them the way a CEO manages a team: only the nodes that need a decision. The rest run.&lt;/p&gt;
&lt;h2 id=&quot;greptile-integration&quot;&gt;Greptile integration&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://greptile.com&quot;&gt;Greptile&lt;/a&gt; is a YC company that auto-reviews your PRs. It catches real bugs — races, security issues, things that pass CI and blow up in production. It has saved me more than once. I love those people.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How it works here&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The problem with any auto-reviewer is triage. Greptile is good; not every comment is a real issue. Some are false positives. Some flag something you fixed three commits ago. Without a triage layer, comments pile up and you start ignoring them — which defeats the point.&lt;/p&gt;
&lt;p&gt;gstack solves that. &lt;code&gt;/review&lt;/code&gt; and &lt;code&gt;/ship&lt;/code&gt; are now Greptile-aware. They read Greptile’s comments, classify each, and act:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;valid issues&lt;/strong&gt; go into critical findings and get fixed before release&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;already-fixed issues&lt;/strong&gt; get an automatic reply acknowledging the catch&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;false positives&lt;/strong&gt; get pushed back — you confirm, an explanation goes out&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Two layers of review: Greptile catches asynchronously on the PR, then &lt;code&gt;/review&lt;/code&gt; and &lt;code&gt;/ship&lt;/code&gt; triage those findings as part of the normal workflow. Nothing falls in the crack.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Learn from history&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every false positive you confirm is saved to &lt;code&gt;~/.gstack/greptile-history.md&lt;/code&gt;. Future runs skip known FP patterns in your repo. &lt;code&gt;/retro&lt;/code&gt; tracks Greptile’s hit rate over time — so you can see whether the signal-to-noise is improving.&lt;/p&gt;
&lt;h2 id=&quot;why-gstack-works&quot;&gt;Why gstack works&lt;/h2&gt;
&lt;p&gt;Back to three insights from earlier posts:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;First, roles not prompts.&lt;/strong&gt; Each Skill is a role with a hard duty boundary — more structure than a blank prompt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Second, stance not knowledge.&lt;/strong&gt; &lt;code&gt;plan-ceo-review&lt;/code&gt; does not teach Claude business. It gives Claude a severe review stance and a process it cannot skip. That is why an engineering Skill can review a business plan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Third, process not chaos.&lt;/strong&gt; Think → Plan → Build → Review → Test → Ship, with a tool at each stage. Without a process, ten agents are ten sources of mess. With a process, each agent knows its job.&lt;/p&gt;
&lt;h2 id=&quot;how-this-sits-with-the-earlier-posts&quot;&gt;How this sits with the earlier posts&lt;/h2&gt;
&lt;p&gt;This is the fourth piece in the Agent Skills series, and the most operational:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Google’s five design patterns — the theoretical frame&lt;/li&gt;
&lt;li&gt;Anthropic’s Skills lessons — the official method&lt;/li&gt;
&lt;li&gt;dontbesilent’s plan-ceo-review analysis — a deep cut of one Skill&lt;/li&gt;
&lt;li&gt;this gstack guide — a full toolkit in practice&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Together they cover Agent Skills from theory to the shop floor.&lt;/p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/garrytan/gstack&quot;&gt;gstack on GitHub&lt;/a&gt; (MIT)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/garrytan&quot;&gt;Garry Tan&lt;/a&gt;, Y Combinator CEO&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://conductor.build&quot;&gt;Conductor&lt;/a&gt;, parallel-sprint tool&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/top-skill-yc-ceo-review/&quot; class=&quot;wikilink&quot;&gt;What a top Skill looks like&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/anthropic-skills-lessons/&quot; class=&quot;wikilink&quot;&gt;Lessons from hundreds of Skills inside Anthropic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/agent-skills-five-design-patterns/&quot; class=&quot;wikilink&quot;&gt;Five design patterns for Agent Skills&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/top-skill-yc-ceo-review/&quot; class=&quot;wikilink&quot;&gt;What a top Skill looks like: YC CEO’s 600-line review prompt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/anthropic-skills-lessons/&quot; class=&quot;wikilink&quot;&gt;Lessons from hundreds of Skills inside Anthropic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/taste-at-speed-pm-skill/&quot; class=&quot;wikilink&quot;&gt;Taste at Speed: when building is cheap, PM skill changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/software-engineering-splits-three/&quot; class=&quot;wikilink&quot;&gt;Software engineering is splitting into three layers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Software engineering is splitting into three layers</title><link>https://ssherun.github.io/en/blog/software-engineering-splits-three/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/software-engineering-splits-three/</guid><description>When implementation cost falls toward zero, the bottleneck moves from coding to judgment. The market is splitting into three layers of work, not just of pay.</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A large regional bank spent months deciding whether to build or buy a payment-reconciliation system. Stakeholders hesitated. Meanwhile an unhandled error delayed thousands of commercial transactions, triggered a $2 million regulatory fine, and weeks of bad press.&lt;/p&gt;
&lt;p&gt;The story is simple: in software, a wrong decision does not only cost money. It costs risk, reputation, and real operational pain.&lt;/p&gt;
&lt;p&gt;AI is changing the whole frame of that decision.&lt;/p&gt;
&lt;h2 id=&quot;the-old-model-is-collapsing&quot;&gt;The old model is collapsing&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Stalled light in a reconciliation hall&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-software-engineering-splits-three-01.Hnb71Elo_1QEr6d.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Enterprises used to have two options. Build: expensive, slow, risky — reserved for core systems. Outsource or buy: SaaS for generic needs, consultancies for custom work, senior rates for junior developers, knowledge walking out when the contract ends.&lt;/p&gt;
&lt;p&gt;Neither option was good.&lt;/p&gt;
&lt;p&gt;AI is not mainly changing “can write code.” Vercel’s CTO put it plainly: the cost of producing software is heading toward zero. Work that took a team weeks can now take hours.&lt;/p&gt;
&lt;p&gt;What did not change: someone still has to judge whether the implementation is right, understand the business problem, and keep the system as the business evolves. The bottleneck moved from coding to judgment.&lt;/p&gt;
&lt;h2 id=&quot;three-layers-diverging-work&quot;&gt;Three layers, diverging work&lt;/h2&gt;
&lt;p&gt;The old three tiers of software engineering were mostly about pay. The work was similar — write code, review PRs, debug production. You could jump from a regional bank to a tech giant. Skills transferred.&lt;/p&gt;
&lt;p&gt;AI breaks that. When implementation is cheap and judgment is the bottleneck, the three layers start to do &lt;em&gt;different jobs&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id=&quot;tier-1-tech-companies&quot;&gt;Tier 1: tech companies&lt;/h3&gt;
&lt;p&gt;Software &lt;em&gt;is&lt;/em&gt; the product. Platform engineering, SRE, deep internal expertise. AI is a multiplier: the same team ships more, but the team is still human, still senior, still accountable.&lt;/p&gt;
&lt;p&gt;What you need: senior engineers who can review AI-generated code and catch subtle bugs at scale. People who understand distributed systems, latency budgets, failure modes. AI writes the code. A person decides whether it is the right code.&lt;/p&gt;
&lt;h3 id=&quot;tier-2-large-enterprises&quot;&gt;Tier 2: large enterprises&lt;/h3&gt;
&lt;p&gt;Banks, insurance, retail, telecom. Software is critical but not the core product. They have engineering teams and still lose talent auctions to Tier 1.&lt;/p&gt;
&lt;p&gt;This is the layer that changes the most. These orgs will lean on platforms with sane defaults and built-in guardrails, and bring in time-shared seniors when they need them — not buy a team for months, but bring an architect in for a few days to review a plan and point at traps.&lt;/p&gt;
&lt;p&gt;The purchase shifts from “heads to implement” to “judgment to review.”&lt;/p&gt;
&lt;h3 id=&quot;tier-3-small-and-mid-size-businesses&quot;&gt;Tier 3: small and mid-size businesses&lt;/h3&gt;
&lt;p&gt;Custom software used to belong to large companies. Small businesses used off-the-shelf products, lived with the limits, or used nothing.&lt;/p&gt;
&lt;p&gt;AI changes that. One developer with AI assistance can now build custom software for a small business at a sane price. Think of all the old WordPress and Joomla custom work, expanded into real custom apps — problems too small for a SaaS category.&lt;/p&gt;
&lt;p&gt;That creates a new role: the software plumber. A local developer serving local businesses, understanding the scene, translating requirements, showing up when it breaks. The skill is not distributed systems and scale. It is business understanding and fast delivery.&lt;/p&gt;
&lt;h2 id=&quot;career-mobility-is-falling&quot;&gt;Career mobility is falling&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Three different desks at night&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-software-engineering-splits-three-02.baHaKo8y_Z22iqaN.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;This is the change to watch. You used to start in Tier 3, jump to Tier 1, then move to Tier 2 for a calmer life. Skills were general. The ladder could be climbed.&lt;/p&gt;
&lt;p&gt;The skills the three layers need are becoming genuinely different. Tier 1 wants deep systems expertise. Tier 2 wants platform use plus judgment. Tier 3 wants business understanding plus speed. Crossing layers will get harder.&lt;/p&gt;
&lt;h2 id=&quot;five-questions-for-an-enterprise-engineering-lead&quot;&gt;Five questions for an enterprise engineering lead&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Are we still buying SaaS for things we could now build?&lt;/li&gt;
&lt;li&gt;Do we have a platform and guardrails to ship AI-assisted code safely?&lt;/li&gt;
&lt;li&gt;When we buy outside expertise, are we paying for implementation or judgment?&lt;/li&gt;
&lt;li&gt;Do we have seniors who can review AI output?&lt;/li&gt;
&lt;li&gt;Where do the next senior engineers come from?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The last question is the hardest. If juniors no longer accumulate experience by writing a lot of code, what is the path to the next generation of seniors?&lt;/p&gt;
&lt;p&gt;Humans in the loop are not going away. Stronger tools make the human more important. &lt;em&gt;Which&lt;/em&gt; humans, doing &lt;em&gt;what&lt;/em&gt; work, with &lt;em&gt;what&lt;/em&gt; support — that is what is changing.&lt;/p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://adventures.nodeland.dev/archive/software-engineering-splits-in-three/&quot;&gt;Original&lt;/a&gt; (Adventures in Nodeland)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://newsletter.pragmaticengineer.com/p/when-ai-writes-almost-all-code-what&quot;&gt;Gergely Orosz — When AI Writes Almost All Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/coding-agents-reshape-epd/&quot; class=&quot;wikilink&quot;&gt;How coding agents reshape engineering, product, and design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/ai-era-programmer-survival-guide/&quot; class=&quot;wikilink&quot;&gt;A programmer’s survival guide in the AI era&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/gstack-yc-ceo-factory/&quot; class=&quot;wikilink&quot;&gt;gstack: the Claude Code factory YC’s CEO uses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/taste-at-speed-pm-skill/&quot; class=&quot;wikilink&quot;&gt;Taste at Speed: when building is cheap, PM skill changes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Taste at Speed: when building is cheap, PM skill changes</title><link>https://ssherun.github.io/en/blog/taste-at-speed-pm-skill/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/taste-at-speed-pm-skill/</guid><description>Anthropic&apos;s Boris Cherny ships 20–30 PRs a day, all written by Claude. When building isn&apos;t the bottleneck, the PM job is to evaluate fast and kill most of it.</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Boris Cherny’s first PR at Anthropic was rejected. Not because the code was bad — because he had written it by hand.&lt;/p&gt;
&lt;p&gt;His onboarding buddy told him to use Clyde (Claude Code’s predecessor). He spent half a day learning the tool. The AI then produced a usable PR in one shot.&lt;/p&gt;
&lt;p&gt;That was September 2024. By December, Opus 4.5 was writing 100% of his code. He uninstalled the IDE.&lt;/p&gt;
&lt;p&gt;He now lands 20–30 PRs a day, with five Claude instances in parallel. His team shipped Cowork as a complete product in about ten days and tried hundreds of versions in the prototype stage. No PRD. No Figma.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A pile of prototypes being filtered out&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-taste-at-speed-pm-skill-01.WJOgDtz0_Z2ib2kM.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-printing-press-analogy&quot;&gt;The printing-press analogy&lt;/h2&gt;
&lt;p&gt;Boris likes this comparison: in the 1400s, literacy in Europe was under 1%. Scribes worked for kings. After the press, printing cost dropped 100× and volume rose 10,000×. Scribes vanished. A new job appeared: writer.&lt;/p&gt;
&lt;p&gt;Software engineers are today’s scribes. PMs are the kings who hire them. AI coding is the press.&lt;/p&gt;
&lt;p&gt;When the cost of building falls toward zero, the bottleneck moves from “can we build it?” to “should we ship it?”&lt;/p&gt;
&lt;p&gt;PRDs exist because building was expensive and needed authorization. When a prototype takes 45 minutes instead of six weeks, nobody needs a document to authorize exploration. They need someone who can look at running software and say “this one, not that one.”&lt;/p&gt;
&lt;h2 id=&quot;what-taste-at-speed-is&quot;&gt;What Taste at Speed is&lt;/h2&gt;
&lt;p&gt;Taste at Speed — taste times speed: the ability to evaluate running software quickly, cut most of it, and ship only the survivors.&lt;/p&gt;
&lt;p&gt;It is a filter, not an accelerator. An 80% kill rate is the point.&lt;/p&gt;
&lt;p&gt;Boris himself: “Half my ideas are bad. You just have to try. Try something, put it in front of users, talk to them, learn, and maybe you find a good idea. Sometimes you don’t.”&lt;/p&gt;
&lt;p&gt;Without taste, speed only means doing the wrong thing faster. That is a feature factory on steroids.&lt;/p&gt;
&lt;h2 id=&quot;old-loop-vs-new-loop&quot;&gt;Old loop vs new loop&lt;/h2&gt;
&lt;p&gt;The traditional flow is linear: idea → PRD → design → build → QA → ship, eight to twelve weeks.&lt;/p&gt;
&lt;p&gt;The AI-era flow is a cycle: idea → five prototypes → evaluate → kill four → write a spec for the survivor → ship, one to two weeks.&lt;/p&gt;
&lt;p&gt;The spec did not die. It moved from step 2 to step 6. Know what you are making, then write it down.&lt;/p&gt;
&lt;h2 id=&quot;compounding-speed&quot;&gt;Compounding speed&lt;/h2&gt;
&lt;p&gt;A PM who evaluates 15 prototypes a week builds judgment much faster than one who reviews one spec a month. After six months, that gap in pattern-matching becomes a gap in taste, then a career gap. It compounds every week.&lt;/p&gt;
&lt;p&gt;That is why people who start building this muscle now get a real head start.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Judging a running prototype&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-taste-at-speed-pm-skill-02.BeESHGYY_lCkNR.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;five-lenses-on-a-prototype&quot;&gt;Five lenses on a prototype&lt;/h2&gt;
&lt;p&gt;When you stare at a running prototype, five judgments should run at once:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Empathy: does this solve a real problem?&lt;/li&gt;
&lt;li&gt;Simulation: what breaks at scale?&lt;/li&gt;
&lt;li&gt;Strategy: does this fit our direction?&lt;/li&gt;
&lt;li&gt;Taste: is this the best of the options?&lt;/li&gt;
&lt;li&gt;Creative execution: can I imagine a version that is 2× better?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AI tools will commoditize. When everyone has roughly the same model, the only differentiation is the judgment a human puts on top of the output.&lt;/p&gt;
&lt;h2 id=&quot;how-boris-actually-works&quot;&gt;How Boris actually works&lt;/h2&gt;
&lt;p&gt;Five terminal tabs, each a parallel checkout of the repo. Each starts in Claude Code’s plan mode. He rotates. Once the plan is right, Opus 4.6 implements it in one shot almost every time.&lt;/p&gt;
&lt;p&gt;He even starts agents from his phone in the morning. By the time he sits down, a third of the code is already there.&lt;/p&gt;
&lt;p&gt;His take on plan mode is blunt: “Plan mode may have a limited lifespan. Maybe we won’t need it in a month.” That is a wild thing to hear from the person who built the feature, and it matches his philosophy: do not build product for today’s model. Build for the model six months from now.&lt;/p&gt;
&lt;p&gt;“Every part of Claude Code has been written and rewritten. Nothing that exists today existed six months ago.”&lt;/p&gt;
&lt;h2 id=&quot;can-you-copy-this&quot;&gt;Can you copy this?&lt;/h2&gt;
&lt;p&gt;Anthropic is a special case: the team is almost all senior full-stack engineers, Boris has 15+ years from Instagram, the product &lt;em&gt;is&lt;/em&gt; the AI tool they use, and hiring density is extreme.&lt;/p&gt;
&lt;p&gt;What you &lt;em&gt;can&lt;/em&gt; copy: a prototype-first evaluation loop, the discipline of trying tens or hundreds of versions, a culture of showing instead of writing, specs that come after the fact.&lt;/p&gt;
&lt;p&gt;Boris’s prediction: “By the end of the year, everyone is a PM and everyone writes code. The software-engineer title disappears and gets replaced by builder.”&lt;/p&gt;
&lt;p&gt;The question is not whether this workflow becomes standard. It is when.&lt;/p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.news.aakashg.com/p/taste-at-speed&quot;&gt;Original&lt;/a&gt; (Product Growth, Aakash Gupta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=PQU9o_5rHC4&quot;&gt;Boris Cherny interview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/coding-agents-reshape-epd/&quot; class=&quot;wikilink&quot;&gt;How coding agents reshape engineering, product, and design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/gstack-yc-ceo-factory/&quot; class=&quot;wikilink&quot;&gt;gstack: the Claude Code factory YC’s CEO uses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/whatnot-cpo-regrets-pm-exists/&quot; class=&quot;wikilink&quot;&gt;Whatnot’s CPO: “We regret that the PM function exists”&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/software-engineering-splits-three/&quot; class=&quot;wikilink&quot;&gt;Software engineering is splitting into three layers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Five design patterns for Agent Skills</title><link>https://ssherun.github.io/en/blog/agent-skills-five-design-patterns/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/agent-skills-five-design-patterns/</guid><description>Google Cloud&apos;s five design patterns for Agent Skills: how to organize what goes inside one. From Tool Wrapper to Pipeline, each solves a different problem.</description><pubDate>Thu, 19 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Google Cloud Tech, in the “Advent of Agents Season 2” series, published something useful: five design patterns for Agent Skills.&lt;/p&gt;
&lt;p&gt;The Agent Skills spec (agentskills.io) defines the package — &lt;code&gt;SKILL.md&lt;/code&gt; plus &lt;code&gt;references/&lt;/code&gt;, &lt;code&gt;assets/&lt;/code&gt;, &lt;code&gt;scripts/&lt;/code&gt;. Format is only a container. The real question is: what goes inside?&lt;/p&gt;
&lt;p&gt;The five patterns answer that.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Five skill artifacts&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-agent-skills-five-design-patterns-01.q57mTIiG_Z1wj8m2.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-is-an-agent-skill&quot;&gt;What is an Agent Skill?&lt;/h2&gt;
&lt;p&gt;A common mix-up: Tool and Skill are not the same thing.&lt;/p&gt;
&lt;p&gt;A Tool is a function: &lt;code&gt;readFile()&lt;/code&gt;, &lt;code&gt;calculator()&lt;/code&gt;, &lt;code&gt;gitCommit()&lt;/code&gt;. Stateless, deterministic. Told what to do, it does it.&lt;/p&gt;
&lt;p&gt;A Skill is a cognitive pattern. It includes judgment, memory, and self-correction. A Skill knows when to ask, when to stop, when to read from cache instead of recomputing.&lt;/p&gt;
&lt;h2 id=&quot;the-five-patterns&quot;&gt;The five patterns&lt;/h2&gt;
&lt;h3 id=&quot;1-tool-wrapper&quot;&gt;1. Tool Wrapper&lt;/h3&gt;
&lt;p&gt;The simplest and most widely used.&lt;/p&gt;
&lt;p&gt;Package a library or framework’s conventions as on-demand knowledge. The instructions say which rules to follow; &lt;code&gt;references/&lt;/code&gt; holds the long docs. No templates, no scripts.&lt;/p&gt;
&lt;p&gt;Google’s ADK Core Skills, Vercel’s React best practices, and Supabase’s Postgres guide are this pattern.&lt;/p&gt;
&lt;p&gt;Use it when you only need the agent to use a tool correctly.&lt;/p&gt;
&lt;h3 id=&quot;2-generator&quot;&gt;2. Generator&lt;/h3&gt;
&lt;p&gt;Fill reusable templates in &lt;code&gt;assets/&lt;/code&gt; to produce structured output; &lt;code&gt;references/&lt;/code&gt; holds quality rules.&lt;/p&gt;
&lt;p&gt;Same structure every time, different content. Tech reports, API docs, commit messages — repetitive structured output is a Generator job.&lt;/p&gt;
&lt;p&gt;Use it when you need the agent to generate in a fixed format.&lt;/p&gt;
&lt;h3 id=&quot;3-reviewer&quot;&gt;3. Reviewer&lt;/h3&gt;
&lt;p&gt;Evaluate code against a checklist in &lt;code&gt;references/&lt;/code&gt;, group findings by severity.&lt;/p&gt;
&lt;p&gt;The key split: “what to check” (the checklist file) vs “how to check” (the review protocol). Swap the checklist and the same Skill produces a completely different review.&lt;/p&gt;
&lt;p&gt;A real case: Giorgio Crivellari used an ADK governance Skill to move code quality from 29% to 99%.&lt;/p&gt;
&lt;p&gt;Use it when you need the agent to score code or content against a standard.&lt;/p&gt;
&lt;h3 id=&quot;4-inversion&quot;&gt;4. Inversion&lt;/h3&gt;
&lt;p&gt;The Skill interviews you before it acts.&lt;/p&gt;
&lt;p&gt;Structured questions through defined stages, plus a hard gate: “Do not start building until every stage is done.”&lt;/p&gt;
&lt;p&gt;This fixes a common failure: agents rush, then generate a pile of output from assumptions instead of real requirements. Inversion forces questions first.&lt;/p&gt;
&lt;p&gt;Use it on complex work that needs a complete brief.&lt;/p&gt;
&lt;h3 id=&quot;5-pipeline&quot;&gt;5. Pipeline&lt;/h3&gt;
&lt;p&gt;Sequential steps with explicit gates. “Do not enter step 3 until the user confirms.”&lt;/p&gt;
&lt;p&gt;The most complex pattern, and the only one that reliably stops an agent from skipping a verification step.&lt;/p&gt;
&lt;p&gt;Use it on multi-step flows where each step must be confirmed.&lt;/p&gt;
&lt;h2 id=&quot;patterns-combine&quot;&gt;Patterns combine&lt;/h2&gt;
&lt;p&gt;These five are not exclusive. A Pipeline can contain a Reviewer step. A Generator can use Inversion to collect inputs.&lt;/p&gt;
&lt;p&gt;An arXiv paper found production systems use about two patterns per Skill on average.&lt;/p&gt;
&lt;h2 id=&quot;three-cognitive-modes&quot;&gt;Three cognitive modes&lt;/h2&gt;
&lt;p&gt;Shuva Jyoti Kar on Google Cloud Community maps Skills onto three cognitive modes, which make the Skill vs Tool difference concrete:&lt;/p&gt;
&lt;h3 id=&quot;the-scout&quot;&gt;The Scout&lt;/h3&gt;
&lt;p&gt;Problem: a developer says “map the codebase.” The agent runs &lt;code&gt;ls -R&lt;/code&gt;. Five thousand paths flood the context. Hallucinations start.&lt;/p&gt;
&lt;p&gt;Fix: progressive disclosure. Show the top-level directories first. Ask “which one to go into?” Explore layer by layer. If a new layer looks like the last one, stop — you hit the bottom.&lt;/p&gt;
&lt;p&gt;The agent is no longer reading files. It is navigating.&lt;/p&gt;
&lt;h3 id=&quot;the-resilient-patcher&quot;&gt;The Resilient Patcher&lt;/h3&gt;
&lt;p&gt;Problem: a config file has a syntax error. The tool crashes.&lt;/p&gt;
&lt;p&gt;Fix: the Skill does not reject bad input. It repairs it. Try strict JSON first; on failure, a loose parser fixes common mistakes (single quotes, trailing commas).&lt;/p&gt;
&lt;p&gt;The user may never notice there was a problem. That &lt;em&gt;is&lt;/em&gt; capability.&lt;/p&gt;
&lt;h3 id=&quot;the-librarian&quot;&gt;The Librarian&lt;/h3&gt;
&lt;p&gt;Problem: analyzing a 500MB CSV takes 30 seconds. The user asks a second question. The agent reads the file again.&lt;/p&gt;
&lt;p&gt;Fix: keep a local cache. Check the file hash. If you have already analyzed it, read from cache. Thirty seconds becomes zero.&lt;/p&gt;
&lt;p&gt;The agent can answer “what do you already know?” — that is long-term memory.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Exploring a layered archive&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-agent-skills-five-design-patterns-02.DPcet4wU_Z2ciOGe.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;a-decision-tree&quot;&gt;A decision tree&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Only need to pass knowledge / conventions? → Tool Wrapper&lt;/li&gt;
&lt;li&gt;Need structured output? → Generator&lt;/li&gt;
&lt;li&gt;Need to evaluate / review code? → Reviewer&lt;/li&gt;
&lt;li&gt;Need to collect requirements before acting? → Inversion&lt;/li&gt;
&lt;li&gt;Need multi-step work with verification? → Pipeline&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;why-this-matters&quot;&gt;Why this matters&lt;/h2&gt;
&lt;p&gt;Agent Skills are becoming a cross-platform standard. The spec on agentskills.io has been adopted by 26+ platforms, including Claude Code, OpenAI Codex, Gemini CLI, GitHub Copilot, and Cursor.&lt;/p&gt;
&lt;p&gt;Google’s official ADK Skills install in one line:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;npx&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; google/adk-docs&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -y&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -g&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;When you upgrade an agent from “a faster CLI” to “a teammate with cognition,” design patterns are the middle layer. They say: do not write more code. Design better patterns so the agent acts like a senior engineer — look before you leap, fix your own mistakes, learn from experience.&lt;/p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/GoogleCloudTech/status/2033953579824758855&quot;&gt;Google Cloud Tech post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/google-cloud/beyond-tool-use-implementing-cognitive-patterns-with-google-antigravity-skills-c0eea90fa430&quot;&gt;Cognitive patterns — Google Cloud Community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/agentdevelopmentkit/comments/1rqq414/5_design_patterns_for_structuring_agent_skills/&quot;&gt;Reddit discussion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://agentskills.io&quot;&gt;Agent Skills spec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/shuvajyotikar13/agent-design-patterns&quot;&gt;Code repo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/agent-skills-hub/&quot; class=&quot;wikilink&quot;&gt;Agent Skills Hub: finding and managing good Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/anthropic-skills-lessons/&quot; class=&quot;wikilink&quot;&gt;Lessons from hundreds of Skills inside Anthropic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/top-skill-yc-ceo-review/&quot; class=&quot;wikilink&quot;&gt;What a top Skill looks like: YC CEO’s 600-line review prompt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/hello-world/&quot; class=&quot;wikilink&quot;&gt;An agent-friendly blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Put Drucker, Munger, and Jobs into an AI decision system</title><link>https://ssherun.github.io/en/blog/ai-multi-advisor-decision-system/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/ai-multi-advisor-decision-system/</guid><description>A founder turned six world-class thinking systems into agents — a Claude Code multi-advisor stack. Before a decision, the relevant master gets a pass.</description><pubDate>Thu, 19 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A founder named Jaden did something that sounds slightly unhinged — and more right the longer you use it: he put six people he respects into his working system.&lt;/p&gt;
&lt;p&gt;Drucker owns the business. Munger watches decisions. Jobs does product. Kenya Hara owns architecture. Buffett helps you refuse. Musk pushes execution. Before a decision in that domain, you ask them first.&lt;/p&gt;
&lt;p&gt;This is not mysticism. It is a Claude Code multi-advisor system that actually runs.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A six-seat advisor chamber&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-multi-advisor-decision-system-01.E0QPbMCE_29D73e.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;six-advisors-six-jobs&quot;&gt;Six advisors, six jobs&lt;/h2&gt;
&lt;h3 id=&quot;peter-drucker--business-growth&quot;&gt;Peter Drucker — business growth&lt;/h3&gt;
&lt;p&gt;One question, always: “Who is the customer? What value are you creating for them?”&lt;/p&gt;
&lt;p&gt;Before a new feature or a new essay, run Drucker. Ninety percent of “good ideas” die here — and should. In practice: three features that looked great and had no user demand got cut.&lt;/p&gt;
&lt;h3 id=&quot;steve-jobs--product-design&quot;&gt;Steve Jobs — product design&lt;/h3&gt;
&lt;p&gt;“Is this the best experience, or is it merely usable?”&lt;/p&gt;
&lt;p&gt;On student delivery flows and visual layout, Jobs gets a pass. He says: extra — delete. The experience breaks here — redo it. The product page lost half its content; conversion went up.&lt;/p&gt;
&lt;h3 id=&quot;kenya-hara--system-architecture&quot;&gt;Kenya Hara — system architecture&lt;/h3&gt;
&lt;p&gt;“Does this thing need to exist?”&lt;/p&gt;
&lt;p&gt;Less is more is not a slogan. It is a design philosophy. When the workspace looks like a junkyard, Hara scans it: “Does this folder make the system clearer, or noisier?” Cut 60%. The remaining 40% ran better.&lt;/p&gt;
&lt;h3 id=&quot;charlie-munger--investment--decisions&quot;&gt;Charlie Munger — investment / decisions&lt;/h3&gt;
&lt;p&gt;The weapon is a lattice of models: physics for time, psychology for people, economics for incentives.&lt;/p&gt;
&lt;p&gt;On any big call — a hire, a market, a partnership — Munger has to take it apart with at least three disciplinary frames. That caught two opportunities that felt great and were traps.&lt;/p&gt;
&lt;h3 id=&quot;warren-buffett--commercial-advice&quot;&gt;Warren Buffett — commercial advice&lt;/h3&gt;
&lt;p&gt;He does one job: help you say no.&lt;/p&gt;
&lt;p&gt;The core idea is a moat — what do you have that others cannot copy? When the anxiety is “should we chase this trend,” Buffett usually says: do the one thing you can be best at. Ignore the rest.&lt;/p&gt;
&lt;h3 id=&quot;elon-musk--execution-speed&quot;&gt;Elon Musk — execution speed&lt;/h3&gt;
&lt;p&gt;The first five help you think. Musk helps you move.&lt;/p&gt;
&lt;p&gt;“Why haven’t you started? Perfect is the enemy of shipping. Put it out. Iteration beats planning.”&lt;/p&gt;
&lt;p&gt;He also first-principles every “we can’t”: is this a real constraint, or a wall you built? After being asked that, at least three things went from “we intend to” to “it’s live.”&lt;/p&gt;
&lt;h2 id=&quot;the-architecture&quot;&gt;The architecture&lt;/h2&gt;
&lt;p&gt;The system maps onto three generals:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;CEO (final decision)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── Musk agent → execution (direct report)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── Growth general&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│   ├── Jobs agent → product experience&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│   └── Hara agent → systemic minimalism&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── Commercial general&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│   ├── Drucker agent → value definition&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│   ├── Munger agent → multi-frame decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│   └── Buffett agent → moat&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── Delivery general&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └── the team executing&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Each advisor has three design pieces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a private question frame (their most classic way of thinking)&lt;/li&gt;
&lt;li&gt;a private decision domain (no overlap, no wandering)&lt;/li&gt;
&lt;li&gt;a private brake (what they are there to stop)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The flow: match the domain → call the advisor → you still decide.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A decision-maker and thinking frames&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-ai-multi-advisor-decision-system-02.DHJEtZJg_Z1yskH2.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;why-the-idea-is-worth-attention&quot;&gt;Why the idea is worth attention&lt;/h2&gt;
&lt;p&gt;One person’s cognition is finite. Each of these six spent decades grinding a world-class thinking system.&lt;/p&gt;
&lt;p&gt;Instead of rediscovering it from zero, make that thinking part of the system. You are not copying them. You are deciding from their shoulders.&lt;/p&gt;
&lt;p&gt;Technically this runs on Claude Code’s agent-team feature plus custom Skills. It is not “paste a prompt and go.” It takes long friction and iteration.&lt;/p&gt;
&lt;h2 id=&quot;a-method-you-can-use-today&quot;&gt;A method you can use today&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Pick one person you actually respect&lt;/li&gt;
&lt;li&gt;Spend 30 minutes writing down their three core principles&lt;/li&gt;
&lt;li&gt;Put them in your system prompt&lt;/li&gt;
&lt;li&gt;Before the next decision, let them take a pass&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Decision quality tends to rise quietly, one notch.&lt;/p&gt;
&lt;h2 id=&quot;what-i-take-from-this&quot;&gt;What I take from this&lt;/h2&gt;
&lt;p&gt;The value is not “which six people.” It is a decision architecture: turn expert thinking in different domains into modes, then into agents, then into a reusable system.&lt;/p&gt;
&lt;p&gt;For indie developers and founders, this kind of cognitive outsourcing is unusually useful. You cannot hire six advisors. You can let AI play the roles and inspect your calls with their frames.&lt;/p&gt;
&lt;p&gt;The constraint that matters: each advisor needs a hard boundary and a private question frame. Otherwise they collapse into agreeable generalists.&lt;/p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/Jaden_riku/status/2034136005113221142&quot;&gt;Original post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Author: Jaden思考日志 (@Jaden_riku)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/agent-skills-five-design-patterns/&quot; class=&quot;wikilink&quot;&gt;Five design patterns for Agent Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/top-skill-yc-ceo-review/&quot; class=&quot;wikilink&quot;&gt;What a top Skill looks like: YC CEO’s 600-line review prompt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/first-principles-startup-review/&quot; class=&quot;wikilink&quot;&gt;First-principles review with AI: a startup plan dies in 48 hours&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/hello-world/&quot; class=&quot;wikilink&quot;&gt;An agent-friendly blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>What a top Skill looks like: YC CEO&apos;s 600-line review prompt</title><link>https://ssherun.github.io/en/blog/top-skill-yc-ceo-review/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/top-skill-yc-ceo-review/</guid><description>YC CEO Garry Tan open-sourced gstack. Its plan-ceo-review Skill is ~600 lines and reviews almost any plan. None of what makes it work is domain knowledge.</description><pubDate>Thu, 19 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;YC CEO Garry Tan open-sourced the Claude Code toolkit he actually uses. The repo is gstack. It picked up 19,000 stars in a week. Inside are ten tools; one of them is plan-ceo-review.&lt;/p&gt;
&lt;p&gt;Someone pointed it at a business plan and, within a minute, got a critique that could actually raise revenue.&lt;/p&gt;
&lt;p&gt;The Skill’s prompt never mentions business. It is an engineering review tool.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A review room under a scanning spotlight&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-top-skill-yc-ceo-review-01.BCOcZMOL_ZWs6DO.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;why-an-engineering-skill-can-review-a-business-plan&quot;&gt;Why an engineering Skill can review a business plan&lt;/h2&gt;
&lt;p&gt;After reading the 600-line prompt, the answer sits in three moves.&lt;/p&gt;
&lt;p&gt;First, it defines a &lt;strong&gt;stance&lt;/strong&gt;, not a syllabus. The prompt says you are not here to rubber-stamp, and you are allowed to throw the whole plan out. It does not tell the model which business metrics to check. It tells the model how to show up: severe, adversarial, no mercy. That stance works on an engineering project and on a business plan because it constrains behavior, not a domain.&lt;/p&gt;
&lt;p&gt;Second, the questions in Step 0 are domain-free meta-questions. “Is this the right problem?” “What happens if we do nothing?” “What does good look like in 12 months?” No engineering jargon, no business jargon. They ask something lower: are you sure you are solving the right thing?&lt;/p&gt;
&lt;p&gt;Third, Claude migrates the engineering vocabulary on its own. The prompt says “architecture review,” “single point of failure,” “rollback plan.” When the input is a business plan, architecture becomes business structure, a single point of failure becomes a single channel you depend on, rollback becomes how you exit if the bet is wrong. The prompt does not write that mapping. It writes a complete checklist. Claude walks the structure and does not skip steps.&lt;/p&gt;
&lt;p&gt;So the prompt’s real job is: decide the attitude, the order, and the depth with which Claude uses knowledge it already has.&lt;/p&gt;
&lt;h2 id=&quot;three-modes&quot;&gt;Three modes&lt;/h2&gt;
&lt;p&gt;The Skill defines three review modes. Once the user picks one, the model commits and is not allowed to drift:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Expand scope&lt;/strong&gt;: you are building a cathedral. Ask “what 2× effort yields 10× lift?” You are allowed to dream.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hold scope&lt;/strong&gt;: you are a rigorous reviewer. The scope is fixed; your job is to make it bulletproof.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shrink scope&lt;/strong&gt;: you are a surgeon. Find the smallest version that still delivers value and cut everything else.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;step-0-attack-the-premise-before-you-review&quot;&gt;Step 0: attack the premise before you review&lt;/h2&gt;
&lt;p&gt;This is the best part of the Skill. Before formal review, six sub-steps challenge the premise:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Premise challenge: if you redefine the problem, is there a much simpler plan?&lt;/li&gt;
&lt;li&gt;Existing assets: are you rebuilding something you already have?&lt;/li&gt;
&lt;li&gt;Ideal-state mapping: what does 12 months look like? Is this plan closer or further?&lt;/li&gt;
&lt;li&gt;Timeline interrogation: what happens in hour 1, hours 2–3, hours 4–5?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Only then come ten formal review blocks: architecture, error mapping, security, data flow, code quality, testing, performance, observability, deploy, long-term trajectory.&lt;/p&gt;
&lt;h2 id=&quot;nine-principles-that-run-through-the-skill&quot;&gt;Nine principles that run through the Skill&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Zero silent failures — every failure mode must be visible&lt;/li&gt;
&lt;li&gt;Every error has a name — do not say “handle errors”; name the exception&lt;/li&gt;
&lt;li&gt;Data flow has shadow paths — happy, null, zero-length, error&lt;/li&gt;
&lt;li&gt;Interactions have edges — double-click, leave mid-action, slow network, stale state&lt;/li&gt;
&lt;li&gt;Observability is in scope, not a follow-up&lt;/li&gt;
&lt;li&gt;Diagrams are required&lt;/li&gt;
&lt;li&gt;Deferred work must be written down — vague intent is a lie&lt;/li&gt;
&lt;li&gt;Optimize for six months from now, not only today&lt;/li&gt;
&lt;li&gt;You are allowed to say “throw it out and start over”&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&quot;Three paths splitting&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-top-skill-yc-ceo-review-02.BA0tPJBI_2nOcXP.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;how-the-skill-is-allowed-to-ask-questions&quot;&gt;How the Skill is allowed to ask questions&lt;/h2&gt;
&lt;p&gt;It is strict about how the model talks to the user:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Assume the user has not looked at the window for 20 minutes&lt;/li&gt;
&lt;li&gt;Explain in language a sharp 16-year-old would understand&lt;/li&gt;
&lt;li&gt;Say what it &lt;em&gt;does&lt;/em&gt;, not what it is &lt;em&gt;called&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Each option gets one line of effort, risk, and maintenance&lt;/li&gt;
&lt;li&gt;One question at a time — never bundle&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;why-this-skill-is-worth-studying&quot;&gt;Why this Skill is worth studying&lt;/h2&gt;
&lt;p&gt;A top Skill does not give the model knowledge. It gives a severe stance, a set of domain-free meta-questions, and a process that will not skip a gate.&lt;/p&gt;
&lt;p&gt;It lines up with the Pipeline + Reviewer pattern in Google’s five Agent Skills design patterns: sequential steps with explicit gates, plus a checklist review.&lt;/p&gt;
&lt;p&gt;The difference is what Garry Tan’s Skill proves: if you design the &lt;strong&gt;stance&lt;/strong&gt; and the &lt;strong&gt;structure&lt;/strong&gt; well enough, the model fills in domain knowledge. You do not need a Skill per domain. You need one review frame that is good enough.&lt;/p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/dontbesilent/status/2034180260049363291&quot;&gt;Original post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/garrytan/gstack&quot;&gt;gstack on GitHub&lt;/a&gt; (Garry Tan, YC CEO)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/agent-skills-five-design-patterns/&quot; class=&quot;wikilink&quot;&gt;Five design patterns for Agent Skills&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/gstack-yc-ceo-factory/&quot; class=&quot;wikilink&quot;&gt;gstack: the Claude Code factory YC’s CEO uses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/anthropic-skills-lessons/&quot; class=&quot;wikilink&quot;&gt;Lessons from hundreds of Skills inside Anthropic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/first-principles-startup-review/&quot; class=&quot;wikilink&quot;&gt;First-principles review with AI: a startup plan dies in 48 hours&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/agent-skills-five-design-patterns/&quot; class=&quot;wikilink&quot;&gt;Five design patterns for Agent Skills&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>An agent-friendly blog</title><link>https://ssherun.github.io/en/blog/hello-world/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/hello-world/</guid><description>A personal site shouldn&apos;t only be a page for people. In the agent era it should also be a machine-readable interface. How this blog is built for both.</description><pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;why-be-agent-friendly&quot;&gt;Why be agent-friendly?&lt;/h2&gt;
&lt;p&gt;The old logic of a personal site is simple: a person arrives, sees a polished page, reads, and leaves.&lt;/p&gt;
&lt;p&gt;In 2026, humans are no longer the only visitors. More and more AI agents browse, collect, and summarize on a user’s behalf. When an agent hits a typical blog, it faces a pile of HTML, CSS, and JavaScript — noise it does not need.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agent-friendly&lt;/strong&gt; means your content also exists in a form machines can consume efficiently. The site should have a face (HTML) and a brain (structured data plus plain-text interfaces).&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Human blog and machine-readable dual interface&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-hello-world-01.CpYqlxDr_Z1CLfas.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-this-site-does&quot;&gt;What this site does&lt;/h2&gt;
&lt;h3 id=&quot;1-llmstxt--a-map-for-llms&quot;&gt;1. llms.txt — a map for LLMs&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://llmstxt.org/&quot;&gt;llms.txt&lt;/a&gt; is an emerging convention, a cousin of &lt;code&gt;robots.txt&lt;/code&gt; with the opposite job: not “stay out,” but “if you came, start here.”&lt;/p&gt;
&lt;p&gt;This site’s &lt;code&gt;/llms.txt&lt;/code&gt; is generated at build time. It includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a short site and author intro&lt;/li&gt;
&lt;li&gt;titles, links, and summaries for every post&lt;/li&gt;
&lt;li&gt;a sketch of the site structure&lt;/li&gt;
&lt;li&gt;pointers to full content&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;An agent can read one file and understand the whole site.&lt;/p&gt;
&lt;h3 id=&quot;2-llms-fulltxt--the-full-context&quot;&gt;2. llms-full.txt — the full context&lt;/h3&gt;
&lt;p&gt;For agents that need depth, &lt;code&gt;/llms-full.txt&lt;/code&gt; concatenates every post’s Markdown into a single document. One request, the whole knowledge base — no page-by-page crawl.&lt;/p&gt;
&lt;h3 id=&quot;3-raw-markdown-endpoints&quot;&gt;3. Raw Markdown endpoints&lt;/h3&gt;
&lt;p&gt;Every article has a matching &lt;code&gt;.md&lt;/code&gt; URL. This English post lives at &lt;code&gt;/en/blog/hello-world.md&lt;/code&gt;; the Chinese original is &lt;code&gt;/blog/hello-world.md&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;That follows the llms.txt recommendation: give each page a plain Markdown twin so a machine can skip HTML parsing and take structured text.&lt;/p&gt;
&lt;h3 id=&quot;4-json-ld&quot;&gt;4. JSON-LD&lt;/h3&gt;
&lt;p&gt;Each HTML page embeds Schema.org &lt;code&gt;BlogPosting&lt;/code&gt; JSON-LD: title, description, publish time, author, language, and keywords. Search engines and AI crawlers can parse the metadata without guessing.&lt;/p&gt;
&lt;h3 id=&quot;5-open-discovery&quot;&gt;5. Open discovery&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/robots.txt&lt;/code&gt; — crawlers are welcome&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/rss.xml&lt;/code&gt; — RSS&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/sitemap-index.xml&lt;/code&gt; — sitemap&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;link rel=&quot;help&quot; href=&quot;https://ssherun.github.io/llms.txt&quot;&gt;&lt;/code&gt; — a discovery hint in the HTML head&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;these-endpoints-are-generated&quot;&gt;These endpoints are generated&lt;/h2&gt;
&lt;p&gt;None of the agent-facing files are hand-maintained static copies. Astro builds them from the content collection. Write a new post and &lt;code&gt;llms.txt&lt;/code&gt;, &lt;code&gt;llms-full.txt&lt;/code&gt;, and the &lt;code&gt;.md&lt;/code&gt; endpoints update themselves.&lt;/p&gt;
&lt;p&gt;Zero upkeep is the only version that lasts.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A knowledge base as connected structured nodes&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-hello-world-02.BwNrz-Xd_1EWHRG.webp&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;6-obsidian-style-wikilinks&quot;&gt;6. Obsidian-style wikilinks&lt;/h3&gt;
&lt;p&gt;The Markdown pipeline understands Obsidian wikilinks, so notes can ship from an Obsidian vault without rewriting links.&lt;/p&gt;
&lt;p&gt;Supported forms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;[[post-slug]]&lt;/code&gt; — link to a post&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[[post-slug|display text]]&lt;/code&gt; — custom label&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[[post-slug#heading]]&lt;/code&gt; — jump to a section&lt;/li&gt;
&lt;li&gt;&lt;code&gt;![[image.png]]&lt;/code&gt; — embed an image&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more systems and Windows notes, see &lt;a href=&quot;https://ssherun.github.io/en/blog/winpe-pecmd-commands/&quot; class=&quot;wikilink&quot;&gt;PECMD commands in WinPE&lt;/a&gt; and &lt;a href=&quot;https://ssherun.github.io/en/blog/vs-atl-exe-cannot-generate-dll/&quot; class=&quot;wikilink&quot;&gt;VS ATL exe template cannot generate a DLL&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;what-next&quot;&gt;What next&lt;/h2&gt;
&lt;p&gt;This is a starting point. Following the idea of &lt;a href=&quot;https://x.com/i/status/2033784623864680927&quot;&gt;what a personal site becomes in the agent era&lt;/a&gt;, later experiments could include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A conversational knowledge persona&lt;/strong&gt; — an agent that actually knows everything you have written&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Structured capability, not just essays&lt;/strong&gt; — interactive playgrounds&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Intent-aware visitor interfaces&lt;/strong&gt; — different responses for different kinds of visitors&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Don’t just display yourself. Deploy yourself.&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/agent-skills-five-design-patterns/&quot; class=&quot;wikilink&quot;&gt;Five design patterns for Agent Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/agent-skills-hub/&quot; class=&quot;wikilink&quot;&gt;Agent Skills Hub: finding and managing good Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/dual-entry-human-agent-design/&quot; class=&quot;wikilink&quot;&gt;Two product entrances: design for humans and agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/anthropic-skills-lessons/&quot; class=&quot;wikilink&quot;&gt;Lessons from hundreds of Skills inside Anthropic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>OpenClaw / Clawdbot complete guide</title><link>https://ssherun.github.io/en/blog/openclaw-complete-guide/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/openclaw-complete-guide/</guid><description>A 24/7 AI assistant that reaches you first and remembers you. Concepts, hardware, real workflows, config and ten optimizations — a deputy, not a chat window.</description><pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;What is OpenClaw / Clawdbot? A 24/7 AI assistant that can contact you first and keep long-term memory. This piece merges three deep tutorials so you can run it from zero.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A host that stays on at night&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-openclaw-complete-guide-01.joDgFZgw_2vGHqb.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-is-clawdbot&quot;&gt;What is Clawdbot?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Clawdbot = Claude Code + a bot-shaped workflow&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Versus a normal chat model:&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Trait&lt;/th&gt;&lt;th&gt;ChatGPT&lt;/th&gt;&lt;th&gt;Clawdbot&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Interaction&lt;/td&gt;&lt;td&gt;conversational, you drive&lt;/td&gt;&lt;td&gt;automated, can drive the machine&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Runtime&lt;/td&gt;&lt;td&gt;on demand&lt;/td&gt;&lt;td&gt;24/7 in the background&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Memory&lt;/td&gt;&lt;td&gt;one conversation&lt;/td&gt;&lt;td&gt;long-term&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Initiative&lt;/td&gt;&lt;td&gt;waits&lt;/td&gt;&lt;td&gt;notifies you&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;three-core-abilities&quot;&gt;Three core abilities&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Long-term memory&lt;/strong&gt; — every conversation, your preferences, things you mentioned in passing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It reaches you&lt;/strong&gt; — task done, new mail, a stock move&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;24/7&lt;/strong&gt; — vibe-code while you swim: it runs, corrects, tests on its own&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&quot;hardware-and-deploy&quot;&gt;Hardware and deploy&lt;/h2&gt;
&lt;h3 id=&quot;what-to-run-it-on&quot;&gt;What to run it on&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Recommended: Mac mini&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;low power (cheap to leave on)&lt;/li&gt;
&lt;li&gt;real performance (Apple silicon)&lt;/li&gt;
&lt;li&gt;good value&lt;/li&gt;
&lt;li&gt;a base model is enough; 32 GB RAM + 1 TB disk is comfortable&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Alternative: a VPS&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;plus: more stable, no hardware to buy&lt;/li&gt;
&lt;li&gt;minus: fewer local capabilities; a fast VPS is expensive&lt;/li&gt;
&lt;li&gt;try a cheap VPS first; upgrade if it earns its keep&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;network-tailscale&quot;&gt;Network: Tailscale&lt;/h3&gt;
&lt;p&gt;What it solves:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;every device on one virtual LAN&lt;/li&gt;
&lt;li&gt;remote access to the Mac mini (VNC)&lt;/li&gt;
&lt;li&gt;a VPN if you need an exit node&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pair it with a UPS so a power or network blip does not kill the service.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;real-workflows&quot;&gt;Real workflows&lt;/h2&gt;
&lt;h3 id=&quot;1-task-management&quot;&gt;1. Task management&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;voice a todo into Telegram&lt;/li&gt;
&lt;li&gt;it files it into Apple Reminders&lt;/li&gt;
&lt;li&gt;sets a due date&lt;/li&gt;
&lt;li&gt;researches and packs a brief ahead of time&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-a-full-workflow-wrapping-apple-intelligence&quot;&gt;2. A full workflow (wrapping Apple Intelligence)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;find a framework that wraps the Apple Intelligence 3B model as an OpenAI-compatible API&lt;/li&gt;
&lt;li&gt;run tests and score the model&lt;/li&gt;
&lt;li&gt;write it up as a blog post automatically&lt;/li&gt;
&lt;li&gt;pair local Whisper for speech-to-text&lt;/li&gt;
&lt;li&gt;measure the performance hit&lt;/li&gt;
&lt;li&gt;summarize into a post and publish&lt;/li&gt;
&lt;li&gt;package it as a Skill for next time&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The key: it uses a browser the way a person would, and automates the whole publish path.&lt;/p&gt;
&lt;h3 id=&quot;3-information&quot;&gt;3. Information&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;X / Twitter:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;configure Bird CLI (X’s command-line tool)&lt;/li&gt;
&lt;li&gt;scan the lists you follow every day&lt;/li&gt;
&lt;li&gt;big news immediately; small stuff as a digest three times a day&lt;/li&gt;
&lt;li&gt;interactive deep-dives when something is interesting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Ops:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;watch VPS usage&lt;/li&gt;
&lt;li&gt;read historical logs&lt;/li&gt;
&lt;li&gt;recommend a smaller box ($48/month → $12/month, −75%)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;4-self-repair-and-iteration&quot;&gt;4. Self-repair and iteration&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;when it breaks, it fixes itself&lt;/li&gt;
&lt;li&gt;when it finds a need or a bug, it opens a PR&lt;/li&gt;
&lt;li&gt;it can stand up a new Clawdbot instance (AI driving AI)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;config-and-the-holes-people-fall-in&quot;&gt;Config and the holes people fall in&lt;/h2&gt;
&lt;h3 id=&quot;models&quot;&gt;Models&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;A sane setup:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;main line: Claude CLI auth&lt;/li&gt;
&lt;li&gt;plan: Claude Code Max ($200/month, coding + experiments)&lt;/li&gt;
&lt;li&gt;cheaper: set the model to Sonnet 4.5&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;memory-this-is-the-core&quot;&gt;Memory (this is the core)&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;workspace/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── IDENTITY.md      # who the agent is (name, species, tone, emoji)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── USER.md          # who you are (name, timezone, preferences, workflows)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── SOUL.md          # persona (voice, reply templates, boundaries)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── HEARTBEAT.md     # scheduled jobs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── MEMORY.md        # long-term memory (core facts, decisions, todos)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── TOOLS.md         # how to use your custom tools&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── memory/          # dated work notes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── 2026-03-08.md&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └── 2026-03-09.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Sessions:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;each conversation is its own session&lt;/li&gt;
&lt;li&gt;you can split by Telegram ID or Discord channel&lt;/li&gt;
&lt;li&gt;do not delete them (they become long-term memory)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/new&lt;/code&gt; starts fresh; &lt;code&gt;/reset&lt;/code&gt; clears&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt=&quot;A layered memory archive&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-openclaw-complete-guide-02.CNMpzM2__Z17JjcW.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;ten-optimizations&quot;&gt;Ten optimizations&lt;/h2&gt;
&lt;h3 id=&quot;1-dont-let-it-forget-three-methods&quot;&gt;1. Don’t let it forget (three methods)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; long sessions get compacted and lose context.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fixes:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;memory/&lt;/code&gt;&lt;/strong&gt; — write down key decisions and today’s progress&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SESSION.md&lt;/code&gt;&lt;/strong&gt; — current goal, decisions already made, ideas you explicitly killed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/compact&lt;/code&gt; yourself&lt;/strong&gt; — do not wait for auto-compact; pass a custom prompt&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Two minutes of notes beats twenty minutes of re-explaining.&lt;/p&gt;
&lt;h3 id=&quot;2-write-identitymd&quot;&gt;2. Write &lt;code&gt;IDENTITY.md&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Name: give the agent a name&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Tone: sharp / warm / chaotic / calm&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;  -&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; sharp: short and direct&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;  -&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; warm: patient and friendly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Signature emoji: one that represents it&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The clearer the role, the less it drifts.&lt;/p&gt;
&lt;h3 id=&quot;3-write-usermd&quot;&gt;3. Write &lt;code&gt;USER.md&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Must include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;who you are&lt;/li&gt;
&lt;li&gt;what you prefer&lt;/li&gt;
&lt;li&gt;your timezone (this matters)&lt;/li&gt;
&lt;li&gt;how you like to write&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;Writing:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; pragmatic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; spoken, not theatrical&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; like talking to a peer&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;4-configure-an-allowlist-this-is-efficiency&quot;&gt;4. Configure an allowlist (this is efficiency)&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;allowlist&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;read&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;write_md&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Rules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ low-risk: open (read, search, write docs)&lt;/li&gt;
&lt;li&gt;❌ high-risk: lock (delete, change config, publish)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;5-use-skills&quot;&gt;5. Use Skills&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;What they are:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;workflows defined in Markdown&lt;/li&gt;
&lt;li&gt;the agent walks the steps&lt;/li&gt;
&lt;li&gt;reusable capability modules&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Where to get them:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ClawHub: public registry (10,000+ Skills)&lt;/li&gt;
&lt;li&gt;install: drop &lt;code&gt;SKILL.md&lt;/code&gt; in the right directory&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Start with the two or three you will actually use. Add more after they are habit.&lt;/p&gt;
&lt;h3 id=&quot;6-keep-training-the-agent&quot;&gt;6. Keep training the agent&lt;/h3&gt;
&lt;p&gt;Three habits:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Append mistakes to &lt;code&gt;LEARNING.md&lt;/code&gt;&lt;/strong&gt; — the moment it fails&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Daily notes in &lt;code&gt;memory/&lt;/code&gt;&lt;/strong&gt; — anti-amnesia, and a model of &lt;em&gt;how you work&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Correct it live&lt;/strong&gt; — say what was wrong and what to do instead&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Painful early. Cheap later.&lt;/p&gt;
&lt;h3 id=&quot;7-auto-upload-images&quot;&gt;7. Auto-upload images&lt;/h3&gt;
&lt;p&gt;Scene: a screenshot in chat, or an asset you want in a doc.&lt;/p&gt;
&lt;p&gt;A ~30-line Node script:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;read the file&lt;/li&gt;
&lt;li&gt;MD5&lt;/li&gt;
&lt;li&gt;path as &lt;code&gt;year/month/md5.ext&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;upload to R2&lt;/li&gt;
&lt;li&gt;return the CDN URL&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Cloudflare R2’s free tier is enough for this.&lt;/p&gt;
&lt;h3 id=&quot;8-share-resources-across-agents&quot;&gt;8. Share resources across agents&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 1. a shared directory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; shared/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 2. common scripts and config&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;shared/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;├──&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; SHARED.md&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;├──&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; upload-to-r2.js&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;└──&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; notion-api.js&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 3. symlink into each agent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ln&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -s&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ../../shared&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agent1/workspace/shared&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ln&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -s&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ../../shared&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agent2/workspace/shared&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Change once; every agent picks it up.&lt;/p&gt;
&lt;h3 id=&quot;9-never-let-the-agent-edit-its-own-config&quot;&gt;9. Never let the agent edit its own config&lt;/h3&gt;
&lt;p&gt;Hard lesson: asked it to edit &lt;code&gt;openclaw.json&lt;/code&gt; → wrote it wrong → validation failed → the instance restarted 36 times in a frenzy.&lt;/p&gt;
&lt;p&gt;Guards:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;make it read the official docs and confirm field nesting &lt;em&gt;before&lt;/em&gt; it edits&lt;/li&gt;
&lt;li&gt;if you only have one instance, a bad edit is a manual repair&lt;/li&gt;
&lt;li&gt;if you can, let a second instance manage config&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;10-collaborate-in-a-telegram-group&quot;&gt;10. Collaborate in a Telegram group&lt;/h3&gt;
&lt;p&gt;Three steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Bot:&lt;/strong&gt; in BotFather, turn Privacy Mode off&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Group ID:&lt;/strong&gt; send a message in the group, hit the getUpdates API&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Config:&lt;/strong&gt; set &lt;code&gt;requireMention: false&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You &lt;em&gt;must&lt;/em&gt; set &lt;code&gt;requireMention: false&lt;/code&gt; or it only answers @mentions.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;treat-the-agent-like-a-new-hire&quot;&gt;Treat the agent like a new hire&lt;/h2&gt;
&lt;h3 id=&quot;up-front-required&quot;&gt;Up-front (required)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;write &lt;code&gt;IDENTITY.md&lt;/code&gt;, &lt;code&gt;USER.md&lt;/code&gt;, &lt;code&gt;LEARNING.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;stand up a memory mechanism&lt;/li&gt;
&lt;li&gt;pick the right Skills&lt;/li&gt;
&lt;li&gt;configure the allowlist&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;ongoing-daily&quot;&gt;Ongoing (daily)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;log mistakes to &lt;code&gt;LEARNING.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;write &lt;code&gt;memory/&lt;/code&gt; notes&lt;/li&gt;
&lt;li&gt;correct it when it drifts&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/compact&lt;/code&gt; on a cadence and keep the important context&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;the-long-return&quot;&gt;The long return&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;it knows you better&lt;/li&gt;
&lt;li&gt;it costs less attention&lt;/li&gt;
&lt;li&gt;it becomes an actual assistant&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href=&quot;https://github.com/openclaw/openclaw&quot;&gt;https://github.com/openclaw/openclaw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Site: &lt;a href=&quot;https://openclaw.ai&quot;&gt;https://openclaw.ai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ClawHub: &lt;a href=&quot;https://clawhub.com&quot;&gt;https://clawhub.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Discord: &lt;a href=&quot;https://discord.com/invite/clawd&quot;&gt;https://discord.com/invite/clawd&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/openclaw-deployment-guide/&quot; class=&quot;wikilink&quot;&gt;OpenClaw deployment guide: five setups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/cli-ai-revival/&quot; class=&quot;wikilink&quot;&gt;CLI: the command-line revival in the AI era&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/agent-skills-hub/&quot; class=&quot;wikilink&quot;&gt;Agent Skills Hub: finding and managing good Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/hello-world/&quot; class=&quot;wikilink&quot;&gt;An agent-friendly blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>OpenClaw deployment guide: five setups</title><link>https://ssherun.github.io/en/blog/openclaw-deployment-guide/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/openclaw-deployment-guide/</guid><description>Local or server, WhatsApp or Feishu — five ways to put OpenClaw online. One-command install, a Feishu bridge, Telegram pairing, and a developer path.</description><pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;How do you deploy OpenClaw? This piece merges five deployment write-ups: local, server, Feishu, Telegram, and a developer path.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A local machine bridged to a rack&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-openclaw-deployment-guide-01.CNbOzF8A_Z2k87Ix.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-two-shapes&quot;&gt;The two shapes&lt;/h2&gt;
&lt;h3 id=&quot;setup-1-local&quot;&gt;Setup 1: local&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;When:&lt;/strong&gt; personal use, a spare machine, you need local files&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;data stays with you&lt;/li&gt;
&lt;li&gt;full control&lt;/li&gt;
&lt;li&gt;no server bill&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Hardware:&lt;/strong&gt; Mac mini (best), a spare laptop, a desktop&lt;/p&gt;
&lt;h3 id=&quot;setup-2-a-server&quot;&gt;Setup 2: a server&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;When:&lt;/strong&gt; 24/7, more than one person, remote access&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;always on&lt;/li&gt;
&lt;li&gt;stable&lt;/li&gt;
&lt;li&gt;reachable from anywhere&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Box:&lt;/strong&gt; the cheapest VPS is enough; an offshore server is usually easier&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;fast-path-the-iron-hammer-setup&quot;&gt;Fast path (the “iron hammer” setup)&lt;/h2&gt;
&lt;h3 id=&quot;one-command-install&quot;&gt;One-command install&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Mac / Linux:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; https://clawd.bot/install.sh&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Windows (PowerShell):&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;powershell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;iwr &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;useb https:&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;clawd.bot&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;install.ps1 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; iex&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;quick-config&quot;&gt;Quick config&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# start quick setup&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;clawdbot&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; onboard&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --flow&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; quickstart&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# then pick:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 1. model (Claude / ChatGPT / Gemini)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 2. API key&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 3. a messenger (WhatsApp / Telegram / Discord)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 4. Skills and hooks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 5. done&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;security-warning&quot;&gt;Security warning&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;This tool fully opens the local machine.&lt;/strong&gt; It punches through the walls between apps.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;install in a VM&lt;/li&gt;
&lt;li&gt;install on a VPS&lt;/li&gt;
&lt;li&gt;install on a spare machine&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;do not install on your daily work machine&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;cheap-path-clawdbox--qwen&quot;&gt;Cheap path (Clawdbox + Qwen)&lt;/h2&gt;
&lt;h3 id=&quot;why-people-use-it&quot;&gt;Why people use it&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;domestic model: Qwen Code (Zhipu GLM)&lt;/li&gt;
&lt;li&gt;free, and the quota is large&lt;/li&gt;
&lt;li&gt;24/7&lt;/li&gt;
&lt;li&gt;no fat server required&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;steps&quot;&gt;Steps&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Install&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; https://clawd.bot/install.sh&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;2. Pick Qwen&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;choose QuickStart&lt;/li&gt;
&lt;li&gt;pick Qwen from the model list&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3. Configure Telegram&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Create a bot:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;1. Open Telegram, search @BotFather&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;2. Send /newbot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;3. Name it&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4. Copy the bot token&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;5. Paste it into the terminal&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;4. Confirm it is up&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ss&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -lntp&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 18789&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# any output = it started&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;5. Pair Telegram&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 1. send /start to the bot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 2. get the pairing code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 3. approve on the server&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;clawdbot&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pairing&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; approve&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; telegram&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ZEGWXXXX&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;feishu-integration-li-yues-path&quot;&gt;Feishu integration (Li Yue’s path)&lt;/h2&gt;
&lt;h3 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Node.js&lt;/strong&gt; 18+&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Git&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Python&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C++ build tools&lt;/strong&gt; (Windows)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;get-a-zhipu-glm-api-key&quot;&gt;Get a Zhipu GLM API key&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;open the Zhipu GLM site&lt;/li&gt;
&lt;li&gt;register&lt;/li&gt;
&lt;li&gt;create an API key&lt;/li&gt;
&lt;li&gt;pick a plan&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;configure-feishu&quot;&gt;Configure Feishu&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Create an enterprise custom app&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;1. Open Feishu app config&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;2. Create an enterprise custom app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;3. Name it&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4. Copy App ID and App Secret&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;2. Add permissions&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;1. Enable bot capability&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;2. Search &quot;receive&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;3. Check receive-message&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;install-openclaw&quot;&gt;Install OpenClaw&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Use an admin / elevated shell.&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -g&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; openclaw&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# check&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;openclaw&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --version&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# init&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;openclaw&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; init&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# configure the model (Zhipu GLM + API key)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# configure Feishu (App ID + App Secret)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# start the gateway&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;openclaw&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; gateway&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; start&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;openclaw&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; gateway&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;publish-the-feishu-bot&quot;&gt;Publish the Feishu bot&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;1. Create a version&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;2. Version number + notes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;3. Save&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4. Test in Feishu (talk to the bot)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;daily-commands&quot;&gt;Daily commands&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;openclaw&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; gateway&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; restart&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    # restart the gateway&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;openclaw&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; gateway&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     # status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;openclaw&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; update&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --channel&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; stable&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  # update&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;openclaw&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; doctor&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;            # diagnose&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;openclaw&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; uninstall&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;         # uninstall&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;feishu-bridge-wys-path&quot;&gt;Feishu bridge (WY’s path)&lt;/h2&gt;
&lt;h3 id=&quot;what-it-is&quot;&gt;What it is&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; official Clawdbot does not speak domestic messengers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Traits:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;written in Go&lt;/li&gt;
&lt;li&gt;you run a compiled binary&lt;/li&gt;
&lt;li&gt;no heavy toolchain&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;steps-1&quot;&gt;Steps&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Create a Feishu bot&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;1. Feishu developer console&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;2. Create an app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;3. Follow the wizard to a bot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4. Copy App ID and App Secret&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;2. Download the bridge&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Grab the build for your OS from the GitHub Releases page.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Start it&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mac / Linux:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;./clawdbot-bridge&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; start&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; fs_app_id=cli_xxx&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; fs_app_secret=yyy&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;./clawdbot-bridge.exe&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; start&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; fs_app_id=cli_xxx&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; fs_app_secret=yyy&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;“Started” means it is up.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;management&quot;&gt;Management&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;./clawdbot-bridge&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; start&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     # background&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;./clawdbot-bridge&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; stop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;./clawdbot-bridge&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; restart&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;./clawdbot-bridge&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;./clawdbot-bridge&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;       # foreground (easier to debug)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;developer-path-claude-to-im&quot;&gt;Developer path (Claude-to-IM)&lt;/h2&gt;
&lt;h3 id=&quot;two-editions&quot;&gt;Two editions&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Skills edition (friendlier)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;three IMs: Telegram, Discord, Feishu&lt;/li&gt;
&lt;li&gt;interactive setup wizard&lt;/li&gt;
&lt;li&gt;permissions (tool calls need approval)&lt;/li&gt;
&lt;li&gt;streaming preview&lt;/li&gt;
&lt;li&gt;no code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Install:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;npx&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; op7418/Claude-to-IM-skill&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Use:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;/claude-to-im&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; setup&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;2. Core-library edition (for developers)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;your product is built on an Agent SDK&lt;/li&gt;
&lt;li&gt;you want remote control from several IMs quickly&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What you get:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;multi-platform adapters&lt;/li&gt;
&lt;li&gt;streaming preview&lt;/li&gt;
&lt;li&gt;permissioning&lt;/li&gt;
&lt;li&gt;session binding&lt;/li&gt;
&lt;li&gt;Markdown render&lt;/li&gt;
&lt;li&gt;reliable delivery&lt;/li&gt;
&lt;li&gt;safety hooks&lt;/li&gt;
&lt;li&gt;host-agnostic&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt=&quot;A gateway and message channels&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-openclaw-deployment-guide-02.DXl3fVYg_Z1k7467.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;which-setup-to-pick&quot;&gt;Which setup to pick&lt;/h2&gt;
&lt;h3 id=&quot;individuals&quot;&gt;Individuals&lt;/h3&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Need&lt;/th&gt;&lt;th&gt;Setup&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Try it today&lt;/td&gt;&lt;td&gt;Iron-hammer (one-command install)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Spend nothing&lt;/td&gt;&lt;td&gt;Clawdbox + Qwen (free)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Full features&lt;/td&gt;&lt;td&gt;Li Yue’s OpenClaw path&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;developers&quot;&gt;Developers&lt;/h3&gt;

















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Need&lt;/th&gt;&lt;th&gt;Setup&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Deep customization&lt;/td&gt;&lt;td&gt;Claude-to-IM core library&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Basics&lt;/td&gt;&lt;td&gt;the bridge, or the Skills edition&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;teams&quot;&gt;Teams&lt;/h3&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Need&lt;/th&gt;&lt;th&gt;Setup&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Stability&lt;/td&gt;&lt;td&gt;server&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Collaboration&lt;/td&gt;&lt;td&gt;Feishu&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Safety&lt;/td&gt;&lt;td&gt;real permission controls&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&quot;what-to-keep-in-mind&quot;&gt;What to keep in mind&lt;/h2&gt;
&lt;h3 id=&quot;deploy&quot;&gt;Deploy&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Local vs server&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;local: safer data, full control&lt;/li&gt;
&lt;li&gt;server: always on, reachable&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Models&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Claude: best quality, you pay&lt;/li&gt;
&lt;li&gt;Qwen: free and plentiful, China-friendly&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Messengers&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WhatsApp: simplest (scan a code)&lt;/li&gt;
&lt;li&gt;Telegram: richest features&lt;/li&gt;
&lt;li&gt;Feishu: China-friendly, good for teams&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;safety&quot;&gt;Safety&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Permissions matter&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;not on your daily machine&lt;/li&gt;
&lt;li&gt;VM or spare hardware&lt;/li&gt;
&lt;li&gt;an approval gate on tools&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Data&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;store keys safely&lt;/li&gt;
&lt;li&gt;redact logs&lt;/li&gt;
&lt;li&gt;access control&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Network&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTPS&lt;/li&gt;
&lt;li&gt;a firewall&lt;/li&gt;
&lt;li&gt;restrict source IPs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href=&quot;https://github.com/openclaw/openclaw&quot;&gt;https://github.com/openclaw/openclaw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Site: &lt;a href=&quot;https://openclaw.ai&quot;&gt;https://openclaw.ai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ClawHub: &lt;a href=&quot;https://clawhub.com&quot;&gt;https://clawhub.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Discord: &lt;a href=&quot;https://discord.com/invite/clawd&quot;&gt;https://discord.com/invite/clawd&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/openclaw-complete-guide/&quot; class=&quot;wikilink&quot;&gt;OpenClaw / Clawdbot complete guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/cli-ai-revival/&quot; class=&quot;wikilink&quot;&gt;CLI: the command-line revival in the AI era&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/agent-skills-hub/&quot; class=&quot;wikilink&quot;&gt;Agent Skills Hub: finding and managing good Skills&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Agent Skills Hub: finding and managing good Skills</title><link>https://ssherun.github.io/en/blog/agent-skills-hub/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/agent-skills-hub/</guid><description>A Skills discovery platform built in three days: find good Skills, find who makes them, combine them. A picture of what pure vibe coding can actually ship.</description><pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Agent Skills Hub is a discovery and management platform for Skills. It shipped in under three days, built entirely with vibe coding (AI-assisted development).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Site:&lt;/strong&gt; agentskillshub.top
&lt;strong&gt;Open source:&lt;/strong&gt; github.com/zhuyansen/agent-skills-hub
&lt;strong&gt;Author:&lt;/strong&gt; Jason Zhu (@GoSailGlobal)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt=&quot;A hall of skill constellations&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-agent-skills-hub-01.CIhqsLTW_18DYe4.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;three-problems-it-is-trying-to-solve&quot;&gt;Three problems it is trying to solve&lt;/h2&gt;
&lt;h3 id=&quot;1-how-do-you-find-the-right-skills&quot;&gt;1. How do you find the right Skills?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;there are a lot of them&lt;/li&gt;
&lt;li&gt;quality is uneven&lt;/li&gt;
&lt;li&gt;hard to filter&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-how-do-you-find-the-people-who-make-good-skills&quot;&gt;2. How do you find the people who make good Skills?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;you do not know who is shipping the good ones&lt;/li&gt;
&lt;li&gt;there is no place to talk&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;3-how-do-you-combine-skills&quot;&gt;3. How do you combine Skills?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;a single Skill is limited&lt;/li&gt;
&lt;li&gt;combinations are more powerful&lt;/li&gt;
&lt;li&gt;nobody recommends scenes&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;what-it-does&quot;&gt;What it does&lt;/h2&gt;
&lt;h3 id=&quot;1-trending&quot;&gt;1. Trending&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;the Skills people actually use&lt;/li&gt;
&lt;li&gt;live updates&lt;/li&gt;
&lt;li&gt;community-checked&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-skills-masters&quot;&gt;2. Skills Masters&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;creators of good Skills&lt;/li&gt;
&lt;li&gt;portfolios&lt;/li&gt;
&lt;li&gt;follow and talk&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;3-organization-builders&quot;&gt;3. Organization Builders&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;teams and orgs&lt;/li&gt;
&lt;li&gt;series of Skills&lt;/li&gt;
&lt;li&gt;collaborative development&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;4-recently-updated&quot;&gt;4. Recently Updated&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;newly published Skills&lt;/li&gt;
&lt;li&gt;projects that are still maintained&lt;/li&gt;
&lt;li&gt;a way to follow updates&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;5-top-rated&quot;&gt;5. Top Rated&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;highest-quality Skills&lt;/li&gt;
&lt;li&gt;composite scores&lt;/li&gt;
&lt;li&gt;user reviews&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;6-browse-by-category&quot;&gt;6. Browse by Category&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;by function&lt;/li&gt;
&lt;li&gt;by scene&lt;/li&gt;
&lt;li&gt;find it faster&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;7-scenario-workflows&quot;&gt;7. Scenario Workflows&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Skills used together&lt;/li&gt;
&lt;li&gt;real scenes&lt;/li&gt;
&lt;li&gt;practices that work&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;how-it-is-built&quot;&gt;How it is built&lt;/h2&gt;
&lt;h3 id=&quot;the-pipeline&quot;&gt;The pipeline&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Collect&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pull Skills metadata from many sources&lt;/li&gt;
&lt;li&gt;GitHub, communities, forums&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. Clean&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;dedupe&lt;/li&gt;
&lt;li&gt;format&lt;/li&gt;
&lt;li&gt;check that they still work&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3. Score quality&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Signals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;papers&lt;/li&gt;
&lt;li&gt;GitHub metrics (stars, forks, issues)&lt;/li&gt;
&lt;li&gt;token estimates&lt;/li&gt;
&lt;li&gt;composability&lt;/li&gt;
&lt;li&gt;a weighted composite&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;4. Show&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a front-end&lt;/li&gt;
&lt;li&gt;search and filters&lt;/li&gt;
&lt;li&gt;detail pages&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;built-with-vibe-coding&quot;&gt;Built with vibe coding&lt;/h2&gt;
&lt;h3 id=&quot;traits&quot;&gt;Traits&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;entirely vibe-coded&lt;/li&gt;
&lt;li&gt;front and back generated by AI&lt;/li&gt;
&lt;li&gt;under three days&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;tools&quot;&gt;Tools&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Claude Code&lt;/li&gt;
&lt;li&gt;requirements in natural language&lt;/li&gt;
&lt;li&gt;the model implements&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;from-the-author&quot;&gt;From the author&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;“Feel free to roast it. File an issue if something is broken — I’ll have Claude Code do the work 👀“&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&quot;how-to-take-part&quot;&gt;How to take part&lt;/h2&gt;
&lt;h3 id=&quot;ways-to-contribute&quot;&gt;Ways to contribute&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Submit a good Skill&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;share yours&lt;/li&gt;
&lt;li&gt;help other people find it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. Recommend a Skills Master&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;point at good creators&lt;/li&gt;
&lt;li&gt;grow the network&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3. Share a combination scene&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what you actually ran&lt;/li&gt;
&lt;li&gt;what worked&lt;/li&gt;
&lt;li&gt;unusual pairings&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;4. Star the repo&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;support the open-source project&lt;/li&gt;
&lt;li&gt;help more people find it&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;why-it-is-useful&quot;&gt;Why it is useful&lt;/h2&gt;
&lt;h3 id=&quot;for-users&quot;&gt;For users&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Find good Skills&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;less search time&lt;/li&gt;
&lt;li&gt;some quality bar&lt;/li&gt;
&lt;li&gt;clear categories&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. Learn what works&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;see how other people use them&lt;/li&gt;
&lt;li&gt;recommended combinations&lt;/li&gt;
&lt;li&gt;ideas you would not have had&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3. Find the right people&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;follow Skills Masters&lt;/li&gt;
&lt;li&gt;learn and talk&lt;/li&gt;
&lt;li&gt;chances to collaborate&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;for-creators&quot;&gt;For creators&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Show the work&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;more exposure&lt;/li&gt;
&lt;li&gt;feedback&lt;/li&gt;
&lt;li&gt;a place to build influence&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. Find users&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;see demand&lt;/li&gt;
&lt;li&gt;collect feedback&lt;/li&gt;
&lt;li&gt;keep improving&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3. Talk to peers&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;meet people in the same craft&lt;/li&gt;
&lt;li&gt;share experience&lt;/li&gt;
&lt;li&gt;build together&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt=&quot;Combining skill modules&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-agent-skills-hub-02.Cbs63wle_Z7dHcK.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;how-i-would-use-it&quot;&gt;How I would use it&lt;/h2&gt;
&lt;h3 id=&quot;if-you-are-new&quot;&gt;If you are new&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;First: browse trending&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;see what people actually run&lt;/li&gt;
&lt;li&gt;learn the mainstream Skills&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Second: explore by category&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;start from your need&lt;/li&gt;
&lt;li&gt;find the matching category&lt;/li&gt;
&lt;li&gt;try one&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Third: learn combinations&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;read the scene recommendations&lt;/li&gt;
&lt;li&gt;learn how Skills stack&lt;/li&gt;
&lt;li&gt;get more than one Skill’s worth&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;if-you-are-further-along&quot;&gt;If you are further along&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;First: follow Masters&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;find the good creators&lt;/li&gt;
&lt;li&gt;watch what they ship&lt;/li&gt;
&lt;li&gt;steal the thinking, not only the files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Second: contribute&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;share your Skills&lt;/li&gt;
&lt;li&gt;recommend combinations&lt;/li&gt;
&lt;li&gt;help the community grow&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Third: help build the platform&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;file issues&lt;/li&gt;
&lt;li&gt;send code&lt;/li&gt;
&lt;li&gt;improve the hub&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;what-i-take-from-it&quot;&gt;What I take from it&lt;/h2&gt;
&lt;h3 id=&quot;on-the-skills-ecosystem&quot;&gt;On the Skills ecosystem&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Quality beats quantity&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;more Skills is not better&lt;/li&gt;
&lt;li&gt;good Skills are the scarce thing&lt;/li&gt;
&lt;li&gt;you need filtering and scoring&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. Combinations are more powerful&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a single Skill is limited&lt;/li&gt;
&lt;li&gt;stacked Skills react&lt;/li&gt;
&lt;li&gt;scenes are the key&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3. The community has to drive it&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;open collaboration&lt;/li&gt;
&lt;li&gt;build it together&lt;/li&gt;
&lt;li&gt;keep evolving&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;on-vibe-coding&quot;&gt;On vibe coding&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Throughput is extreme&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;front and back in three days&lt;/li&gt;
&lt;li&gt;AI-assisted&lt;/li&gt;
&lt;li&gt;iterate fast&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. The bar to ship drops&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you do not need deep programming chops&lt;/li&gt;
&lt;li&gt;stay on product&lt;/li&gt;
&lt;li&gt;let AI implement&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3. The trend&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;more products will be built this way&lt;/li&gt;
&lt;li&gt;ideas and demand matter more&lt;/li&gt;
&lt;li&gt;implementation goes to the model&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Site: &lt;a href=&quot;https://agentskillshub.top&quot;&gt;https://agentskillshub.top&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href=&quot;https://github.com/zhuyansen/agent-skills-hub&quot;&gt;https://github.com/zhuyansen/agent-skills-hub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Author: Jason Zhu (@GoSailGlobal)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/agent-skills-five-design-patterns/&quot; class=&quot;wikilink&quot;&gt;Five design patterns for Agent Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/anthropic-skills-lessons/&quot; class=&quot;wikilink&quot;&gt;Lessons from hundreds of Skills inside Anthropic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/top-skill-yc-ceo-review/&quot; class=&quot;wikilink&quot;&gt;What a top Skill looks like: YC CEO’s 600-line review prompt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/hello-world/&quot; class=&quot;wikilink&quot;&gt;An agent-friendly blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>VS ATL exe template cannot generate a DLL</title><link>https://ssherun.github.io/en/blog/vs-atl-exe-cannot-generate-dll/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/vs-atl-exe-cannot-generate-dll/</guid><description>When a Visual Studio ATL exe template fails MIDL with a DLLDATA.C error, the file is usually in the wrong folder, not missing an interface. Here&apos;s the fix.</description><pubDate>Thu, 29 Apr 2021 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;the-error&quot;&gt;The error&lt;/h2&gt;
&lt;p&gt;The build reports:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;EXEC : error : MIDL will not generate DLLDATA.C unless you have at least 1 interface in the main project.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And the pre-build echo looks like this:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if exist dlldata.c goto :END&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;echo Error: MIDL will not generate DLLDATA.C unless you have at least 1 interface in the main project.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Exit 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;:END&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&quot;Debugging an ATL project late at night&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-vs-atl-exe-cannot-generate-dll-01.Dv-gfJCS_Z1rSN2j.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;how-you-get-here&quot;&gt;How you get here&lt;/h2&gt;
&lt;pre class=&quot;mermaid&quot;&gt;graph TB
OpenVS[&quot;Open Visual Studio&quot;]--&gt;NewATL[&quot;New ATL project&quot;]
NewATL--&gt;ChooseExe[&quot;Choose an .exe project&quot;]
ChooseExe--&gt;TwoProjects[&quot;You get ATLProject1 and ATLProject1PS&quot;]
TwoProjects--&gt;RunPS[&quot;Build ATLProject1PS&quot;]
RunPS--&gt;Error[&quot;The error above&quot;]&lt;/pre&gt;
&lt;h2 id=&quot;what-is-actually-wrong&quot;&gt;What is actually wrong&lt;/h2&gt;
&lt;p&gt;The message sounds like you forgot an interface. A stock Visual Studio template should generate that for you, so an “interface problem” is the wrong first guess.&lt;/p&gt;
&lt;p&gt;Look at &lt;code&gt;if exist&lt;/code&gt; — this is a &lt;strong&gt;pre-build event&lt;/strong&gt;. If &lt;code&gt;dlldata.c&lt;/code&gt; is not next to the project that checks for it, the check fails even when MIDL already wrote the file.&lt;/p&gt;
&lt;p&gt;The proxy/stub (PS) project has a pre-build event that tests for &lt;code&gt;dlldata.c&lt;/code&gt;. That file does not live in the same folder as the proxy/stub &lt;code&gt;.vcxproj&lt;/code&gt;, so the check cannot see it. Change the pre-build event for every configuration/platform so it looks in the parent (main) project folder.&lt;/p&gt;
&lt;p&gt;Linking the proxy/stub project has the same shape of bug: the linker cannot find &lt;code&gt;ATLProject1ps.def&lt;/code&gt; because it lives under &lt;code&gt;ATLProject1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Adjust the pre-build event and linker inputs&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-vs-atl-exe-cannot-generate-dll-02.DhGgtt-x_Z1jUPDY.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-fix&quot;&gt;The fix&lt;/h2&gt;
&lt;h3 id=&quot;step-one&quot;&gt;Step one&lt;/h3&gt;
&lt;p&gt;Point the pre-build event at the parent folder:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if exist ../ATLProject1/dlldata.c goto :END&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;echo Error: MIDL will not generate DLLDATA.C unless you have at least 1 interface in the main project.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Exit 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;:END&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;step-two&quot;&gt;Step two&lt;/h3&gt;
&lt;p&gt;Fix the module-definition path:&lt;/p&gt;
&lt;pre class=&quot;mermaid&quot;&gt;graph TB
Props[&quot;Project properties&quot;]--&gt;Linker[&quot;Linker&quot;]
Linker--&gt;Input[&quot;Input&quot;]
Input--&gt;Def[&quot;Module definition file&quot;]
Def--&gt;Path[&quot;Set it to ../ATLProject1/ATLProject1PS.def&quot;]&lt;/pre&gt;
&lt;p&gt;After both changes, the PS project can see &lt;code&gt;dlldata.c&lt;/code&gt; and the &lt;code&gt;.def&lt;/code&gt; file, and the MIDL error goes away.&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/windows-c-drive-cleanup-guide/&quot; class=&quot;wikilink&quot;&gt;A complete guide to cleaning a Windows C: drive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/winpe-pecmd-commands/&quot; class=&quot;wikilink&quot;&gt;PECMD commands in WinPE&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>PECMD commands in WinPE</title><link>https://ssherun.github.io/en/blog/winpe-pecmd-commands/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/winpe-pecmd-commands/</guid><description>An English reference for PECMD.EXE, the interpreter behind most Chinese WinPE builds: four command families, system variables, and the commands worth knowing.</description><pubDate>Tue, 01 Dec 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Most Chinese WinPE builds rest on one core binary: &lt;strong&gt;PECMD.EXE&lt;/strong&gt;, a small command interpreter with 70+ commands. It is not cmd.exe. It boots the PE, draws login UIs, loads a shell, mounts drivers, and runs a config file as a script.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Originally compiled from &lt;a href=&quot;https://www.twblogs.net/a/5b836da22b71776c51e30018&quot;&gt;twblogs.net&lt;/a&gt;. This English edition is a usable reference: full coverage of what PECMD is and the commands that matter, with the exhaustive per-command tables summarized.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&quot;A WinPE boot environment on a repair bench&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-winpe-pecmd-commands-01.BebVCCr2_1WIYNs.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-pecmd-is&quot;&gt;What PECMD is&lt;/h2&gt;
&lt;p&gt;PECMD is both:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;A script host&lt;/strong&gt; — a &lt;code&gt;.txt&lt;/code&gt; / config file of PECMD commands that runs at boot (&lt;code&gt;LOAD&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A command-line tool&lt;/strong&gt; — &lt;code&gt;PECMD.EXE &amp;#x3C;COMMAND&gt; ...&lt;/code&gt; from a running PE (not every command works on the CLI)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A typical boot path looks like:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;INIT CIK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;LOGO&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;TEXT Registering components...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;DEVI %SystemRoot%\DRV.CAB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;SHEL %SystemRoot%\EXPLORER.EXE&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;INIT&lt;/code&gt; registers a shell environment and user folders. &lt;code&gt;SHEL&lt;/code&gt; locks Explorer (or another shell) and hooks shutdown so &lt;strong&gt;Start → Shut down&lt;/strong&gt; runs &lt;code&gt;PECMD SHUT&lt;/code&gt;. Everything between is PECMD script.&lt;/p&gt;
&lt;p&gt;Commands live in four families. Window-control commands only work &lt;strong&gt;between &lt;code&gt;_SUB&lt;/code&gt; and &lt;code&gt;_END&lt;/code&gt;&lt;/strong&gt;. Subroutine commands (&lt;code&gt;_SUB&lt;/code&gt; / &lt;code&gt;_END&lt;/code&gt; / &lt;code&gt;CALL&lt;/code&gt; of a proc) only work &lt;strong&gt;inside a config file&lt;/strong&gt;, not on the CLI.&lt;/p&gt;
&lt;h2 id=&quot;system-variables&quot;&gt;System variables&lt;/h2&gt;
&lt;p&gt;PECMD exposes Windows special folders as variables you can expand with &lt;code&gt;%Name%&lt;/code&gt;:&lt;/p&gt;





















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Variable&lt;/th&gt;&lt;th&gt;Meaning&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;CurDir&lt;/code&gt;&lt;/td&gt;&lt;td&gt;current directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Desktop&lt;/code&gt;&lt;/td&gt;&lt;td&gt;desktop&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Favorites&lt;/code&gt;&lt;/td&gt;&lt;td&gt;favorites&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Personal&lt;/code&gt;&lt;/td&gt;&lt;td&gt;My Documents&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Programs&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Programs menu&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;SendTo&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Send To&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Start&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Start menu&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Startup&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Startup folder&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;QuickLaunch&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Quick Launch&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;SystemDriver&lt;/code&gt;&lt;/td&gt;&lt;td&gt;system volume (legacy name in PECMD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;SystemRoot&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Windows folder&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;code&gt;INIT&lt;/code&gt; also creates those folders under &lt;code&gt;%USERPROFILE%&lt;/code&gt;. The profile volume must be writable or &lt;code&gt;INIT&lt;/code&gt; fails.&lt;/p&gt;
&lt;p&gt;After &lt;code&gt;INIT C&lt;/code&gt;, optical-drive letters appear as &lt;code&gt;CDROM&lt;/code&gt;, &lt;code&gt;CDROM0&lt;/code&gt;, &lt;code&gt;CDROM1&lt;/code&gt;, … Refresh them with a bare &lt;code&gt;ENVI&lt;/code&gt; at a prompt.&lt;/p&gt;
&lt;h2 id=&quot;command-families&quot;&gt;Command families&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. Window controls and subroutines&lt;/strong&gt;
&lt;code&gt;CHEK&lt;/code&gt; &lt;code&gt;MENU&lt;/code&gt; &lt;code&gt;LABE&lt;/code&gt; &lt;code&gt;EDIT&lt;/code&gt; &lt;code&gt;GROU&lt;/code&gt; &lt;code&gt;IMAG&lt;/code&gt; &lt;code&gt;ITEM&lt;/code&gt; &lt;code&gt;MEMO&lt;/code&gt; &lt;code&gt;PBAR&lt;/code&gt; &lt;code&gt;TIME&lt;/code&gt; &lt;code&gt;RADI&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;These only exist inside a &lt;code&gt;_SUB&lt;/code&gt; … &lt;code&gt;_END&lt;/code&gt; window. Geometry is always &lt;code&gt;L&amp;#x3C;left&gt;T&amp;#x3C;top&gt;W&amp;#x3C;width&gt;H&amp;#x3C;height&gt;&lt;/code&gt;. Names must be unique and must not collide with environment variables. The first character of a name cannot be &lt;code&gt;$&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. String processing&lt;/strong&gt;
&lt;code&gt;LPOS&lt;/code&gt; &lt;code&gt;LSTR&lt;/code&gt; &lt;code&gt;MSTR&lt;/code&gt; &lt;code&gt;RPOS&lt;/code&gt; &lt;code&gt;RSTR&lt;/code&gt; &lt;code&gt;STRL&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Unicode-aware. Used to slice &lt;code&gt;%CurDate%&lt;/code&gt;, paths, and user input.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Subroutine markers&lt;/strong&gt;
&lt;code&gt;_SUB&lt;/code&gt; &lt;code&gt;_END&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Must pair. Cannot nest. Cannot appear on the CLI. Must sit on their own lines — not inside &lt;code&gt;FIND&lt;/code&gt; / &lt;code&gt;IFEX&lt;/code&gt; / &lt;code&gt;TEAM&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Everyday commands&lt;/strong&gt;
&lt;code&gt;BROW&lt;/code&gt; &lt;code&gt;CALC&lt;/code&gt; &lt;code&gt;CALL&lt;/code&gt; &lt;code&gt;DATE&lt;/code&gt; &lt;code&gt;DEVI&lt;/code&gt; &lt;code&gt;DISP&lt;/code&gt; &lt;code&gt;EJEC&lt;/code&gt; &lt;code&gt;ENVI&lt;/code&gt; &lt;code&gt;EXEC&lt;/code&gt; &lt;code&gt;EXIT&lt;/code&gt; &lt;code&gt;FBWF&lt;/code&gt; &lt;code&gt;FDIR&lt;/code&gt; &lt;code&gt;FDRV&lt;/code&gt; &lt;code&gt;FEXT&lt;/code&gt; &lt;code&gt;FILE&lt;/code&gt; &lt;code&gt;FIND&lt;/code&gt; &lt;code&gt;FORX&lt;/code&gt; &lt;code&gt;HELP&lt;/code&gt; &lt;code&gt;HKEY&lt;/code&gt; &lt;code&gt;HOTK&lt;/code&gt; &lt;code&gt;IFEX&lt;/code&gt; &lt;code&gt;INIT&lt;/code&gt; &lt;code&gt;KILL&lt;/code&gt; &lt;code&gt;LINK&lt;/code&gt; &lt;code&gt;LIST&lt;/code&gt; &lt;code&gt;LOAD&lt;/code&gt; &lt;code&gt;LOGO&lt;/code&gt; &lt;code&gt;LOGS&lt;/code&gt; &lt;code&gt;MAIN&lt;/code&gt; &lt;code&gt;MD5C&lt;/code&gt; &lt;code&gt;MESS&lt;/code&gt; &lt;code&gt;MOUN&lt;/code&gt; &lt;code&gt;NAME&lt;/code&gt; &lt;code&gt;NUMK&lt;/code&gt; &lt;code&gt;PAGE&lt;/code&gt; &lt;code&gt;PATH&lt;/code&gt; &lt;code&gt;RAMD&lt;/code&gt; &lt;code&gt;REGI&lt;/code&gt; &lt;code&gt;RUNS&lt;/code&gt; &lt;code&gt;SEND&lt;/code&gt; &lt;code&gt;SERV&lt;/code&gt; &lt;code&gt;SHEL&lt;/code&gt; &lt;code&gt;SHOW&lt;/code&gt; &lt;code&gt;SHUT&lt;/code&gt; &lt;code&gt;SITE&lt;/code&gt; &lt;code&gt;SUBJ&lt;/code&gt; &lt;code&gt;TEAM&lt;/code&gt; &lt;code&gt;TEMP&lt;/code&gt; &lt;code&gt;TEXT&lt;/code&gt; &lt;code&gt;TIPS&lt;/code&gt; &lt;code&gt;UPNP&lt;/code&gt; &lt;code&gt;USER&lt;/code&gt; &lt;code&gt;WAIT&lt;/code&gt; &lt;code&gt;WALL&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-commands-you-actually-write&quot;&gt;The commands you actually write&lt;/h2&gt;
&lt;h3 id=&quot;_sub--_end--define-a-procedure-or-a-window&quot;&gt;&lt;code&gt;_SUB&lt;/code&gt; / &lt;code&gt;_END&lt;/code&gt; — define a procedure or a window&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;_SUB &amp;#x3C;procName&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;_END&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;_SUB &amp;#x3C;winName&gt;,&amp;#x3C;shape&gt;,[title],[onClose],[icon],[type]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;_END&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Procedure:&lt;/strong&gt; &lt;code&gt;_SUB DoLoop&lt;/code&gt; … &lt;code&gt;_END&lt;/code&gt;. Only a matching &lt;code&gt;CALL DoLoop&lt;/code&gt; runs the body; the main script skips it. Put procedures at the top of the file.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Window:&lt;/strong&gt; shape is &lt;code&gt;W360H440&lt;/code&gt; (centered) or &lt;code&gt;L10T10W360H440&lt;/code&gt;. &lt;code&gt;onClose&lt;/code&gt; must be a PECMD command. Icon is &lt;code&gt;file#id&lt;/code&gt;. Type: &lt;code&gt;-&lt;/code&gt; no caption, &lt;code&gt;#&lt;/code&gt; no border, a number is opacity; &lt;code&gt;&gt;99&lt;/code&gt; hides the window.&lt;/li&gt;
&lt;li&gt;Title after create: &lt;code&gt;ENVI @Windows1=New title&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CALL @Windows1&lt;/code&gt; opens the window and &lt;strong&gt;blocks&lt;/strong&gt; until it closes. Do not &lt;code&gt;CALL @&lt;/code&gt; another window from inside a window.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;call--dll-procedure-or-window&quot;&gt;&lt;code&gt;CALL&lt;/code&gt; — DLL, procedure, or window&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;CALL $SHELL32.DLL,DllInstall,#1,U&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;CALL DoLoop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;CALL @Window1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;$dll,fn,[#]arg…&lt;/code&gt; — stdcall export, up to four args. &lt;code&gt;#&lt;/code&gt; means integer; otherwise Unicode string. Omit &lt;code&gt;fn&lt;/code&gt; and it calls &lt;code&gt;DllRegisterServer&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;No prefix — call a &lt;code&gt;_SUB&lt;/code&gt; procedure in &lt;strong&gt;this&lt;/strong&gt; config file (not on the CLI).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@name&lt;/code&gt; — show that window and wait.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;exec--run-a-program&quot;&gt;&lt;code&gt;EXEC&lt;/code&gt; — run a program&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;EXEC [=][!][@][$][&amp;#x26;]&amp;#x3C;path&gt; [args]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Prefixes stack:&lt;/p&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Prefix&lt;/th&gt;&lt;th&gt;Meaning&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;=&lt;/code&gt;&lt;/td&gt;&lt;td&gt;wait for exit&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;!&lt;/code&gt;&lt;/td&gt;&lt;td&gt;hidden&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;@&lt;/code&gt;&lt;/td&gt;&lt;td&gt;run on the Winlogon desktop (no UI; good for registration)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;$&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;ShellExecute&lt;/code&gt; — open a non-exe (&lt;code&gt;.txt&lt;/code&gt;, &lt;code&gt;.bmp&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;&amp;#x26;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;hook &lt;code&gt;ExitWindowsEx&lt;/code&gt; so Start → Shut down runs &lt;code&gt;PECMD SHUT&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;EXEC =!CMD.EXE /C &quot;DEL /Q /F %TEMP%&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;EXEC &amp;#x26;EXPLORER.EXE&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The PE shell itself is loaded this way.&lt;/p&gt;
&lt;h3 id=&quot;shel--load-and-lock-the-shell&quot;&gt;&lt;code&gt;SHEL&lt;/code&gt; — load and lock the shell&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;SHEL &amp;#x3C;exe&gt;,[md5-of-password],[retries]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Like &lt;code&gt;EXEC $&lt;/code&gt; plus: hook shutdown, and &lt;strong&gt;relaunch the shell if it is killed&lt;/strong&gt;. Optional login password (max 12 chars, stored as MD5). Default retries: 3. Must come &lt;strong&gt;after&lt;/strong&gt; &lt;code&gt;HOTK&lt;/code&gt;. Config-file only.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;SHEL %SystemRoot%\EXPLORER.EXE,e10adc3949ba59abbe56e057f20f883e,5&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Put &lt;code&gt;LOGO&lt;/code&gt; before a passworded &lt;code&gt;SHEL&lt;/code&gt;. &lt;code&gt;WALL&lt;/code&gt; must also come &lt;strong&gt;before&lt;/strong&gt; &lt;code&gt;SHEL&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;init--minimum-pe-bring-up&quot;&gt;&lt;code&gt;INIT&lt;/code&gt; — minimum PE bring-up&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;INIT [C][I][K][U]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Registers a Windows shell, creates user folders, installs a keyboard hook.&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Flag&lt;/th&gt;&lt;th&gt;Meaning&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;C&lt;/code&gt;&lt;/td&gt;&lt;td&gt;write optical letters into &lt;code&gt;CDROM*&lt;/code&gt; env vars&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;I&lt;/code&gt;&lt;/td&gt;&lt;td&gt;install some PECMD actions on the tray menu&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;K&lt;/code&gt;&lt;/td&gt;&lt;td&gt;install the low-level keyboard hook &lt;em&gt;now&lt;/em&gt; (Ctrl+Alt+Del → Task Manager). Public PE builds should usually omit &lt;code&gt;K&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;U&lt;/code&gt;&lt;/td&gt;&lt;td&gt;write USB letters into &lt;code&gt;USB*&lt;/code&gt; vars (unfinished)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Config-file only. After &lt;code&gt;INIT&lt;/code&gt;, &lt;code&gt;SHEL&lt;/code&gt; is enough for a minimal PE.&lt;/p&gt;
&lt;h3 id=&quot;envi--environment-and-control-text&quot;&gt;&lt;code&gt;ENVI&lt;/code&gt; — environment and control text&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ENVI [$|@|*][name][[=]value]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;no prefix — process env. Omit &lt;code&gt;=value&lt;/code&gt; to delete.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$&lt;/code&gt; — system env (inherited by later &lt;code&gt;EXEC&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@&lt;/code&gt; — set a window / control title or property (&lt;code&gt;ENVI @Edit1=%Edit1%&lt;/code&gt;, &lt;code&gt;ENVI @Check1.Check=1&lt;/code&gt;, &lt;code&gt;ENVI @Btn.Enable=0&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;*&lt;/code&gt; alone — write &lt;code&gt;CDROM*&lt;/code&gt; letters&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$&lt;/code&gt; alone — re-init user folders&lt;/li&gt;
&lt;li&gt;no args at a prompt — refresh env&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ENVI TEMP=%SystemDrive%\TEMP&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;ifex-and-find--branch&quot;&gt;&lt;code&gt;IFEX&lt;/code&gt; and &lt;code&gt;FIND&lt;/code&gt; — branch&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IFEX &amp;#x3C;cond&gt;,[cmdIfTrue][!cmdIfFalse]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Conditions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;memory: &lt;code&gt;MEM&gt;127&lt;/code&gt; (MB)&lt;/li&gt;
&lt;li&gt;free disk: &lt;code&gt;C:&gt;500&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;key: &lt;code&gt;KEY=17&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;path (wildcards ok): &lt;code&gt;C:\Windows&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;numeric var: &lt;code&gt;$%Val%=10&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Comparators: &lt;code&gt;&amp;#x3C;&lt;/code&gt; &lt;code&gt;&gt;&lt;/code&gt; &lt;code&gt;=&lt;/code&gt;. &lt;code&gt;,&lt;/code&gt; after the condition can be &lt;code&gt;*&lt;/code&gt;. Nesting is allowed; a nested &lt;code&gt;IFEX&lt;/code&gt;/&lt;code&gt;FIND&lt;/code&gt; cannot use &lt;code&gt;!&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IFEX C:\Windows,!MESS Directory C:\Windows is missing.@Check#OK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;FIND MEM&gt;127,CALL EXPLORER_SHELL!CALL CMD_SHELL&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;FIND&lt;/code&gt; is the sibling — same idea, often used as &lt;code&gt;FIND $%CancelIt%=YES,EXIT&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;calc--arithmetic&quot;&gt;&lt;code&gt;CALC&lt;/code&gt; — arithmetic&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;CALC [#]&amp;#x3C;dest&gt; = &amp;#x3C;a&gt; &amp;#x3C;op&gt; &amp;#x3C;b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;#&lt;/code&gt; = int; omit = double (4 decimal places). Ops: &lt;code&gt;+ - * /&lt;/code&gt;. Unset vars count as 0. Chain several &lt;code&gt;CALC&lt;/code&gt;s for a longer expression. Compare with &lt;code&gt;IFEX&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;CALC #Sum = 128 + 32&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;CALC Result = %Datum1% * %Datum2%&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;team--run-a-sequence&quot;&gt;&lt;code&gt;TEAM&lt;/code&gt; — run a sequence&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;TEAM TEXT Loading desktop|LOGO|SHEL %SystemRoot%\EXPLORER.EXE|WAIT 3000&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;|&lt;/code&gt; separates PECMD commands. Do not nest &lt;code&gt;IFEX&lt;/code&gt;/&lt;code&gt;FIND&lt;/code&gt; inside &lt;code&gt;TEAM&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;load--exit&quot;&gt;&lt;code&gt;LOAD&lt;/code&gt; / &lt;code&gt;EXIT&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;LOAD&lt;/code&gt; runs another config file as a procedure. &lt;code&gt;EXIT&lt;/code&gt; leaves the current &lt;code&gt;CALL&lt;/code&gt; or &lt;code&gt;LOAD&lt;/code&gt; — not the whole PECMD process.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IFEX $%Val%=10,EXIT!ENVI Val=&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;devi--drivers-from-a-cab&quot;&gt;&lt;code&gt;DEVI&lt;/code&gt; — drivers from a CAB&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;DEVI [$]&amp;#x3C;cab-or-folder&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;$&lt;/code&gt; = extract &lt;strong&gt;and install&lt;/strong&gt;; omit = extract only. Uses PECMD’s own search (not SetupAPI), so one device may match several INFs. Layout: one driver per folder, INF first in that folder, INFs pre-processed. Companion tool: XCAB.&lt;/p&gt;
&lt;p&gt;Unpack targets:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;INF → &lt;code&gt;%SystemRoot%\INF&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;SYS → &lt;code&gt;%SystemRoot%\SYSTEM32\DRIVERS&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;other → &lt;code&gt;%SystemRoot%\SYSTEM32&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#&lt;/code&gt; in a CAB name is a path separator: &lt;code&gt;SYSTEM32#WBEM#MOF#X.MOF&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;shut--power&quot;&gt;&lt;code&gt;SHUT&lt;/code&gt; — power&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;SHUT [H|E|R|S]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Arg&lt;/th&gt;&lt;th&gt;Action&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;(none)&lt;/td&gt;&lt;td&gt;power off (fast; may not flush everything)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;R&lt;/code&gt;&lt;/td&gt;&lt;td&gt;reboot&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;E&lt;/code&gt;&lt;/td&gt;&lt;td&gt;eject optical, wait 10s, power off&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;H&lt;/code&gt;&lt;/td&gt;&lt;td&gt;hibernate (full Windows, hibernate enabled)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;S&lt;/code&gt;&lt;/td&gt;&lt;td&gt;suspend (full Windows)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Works on the CLI. Pair with &lt;code&gt;EXEC &amp;#x26;EXPLORER.EXE&lt;/code&gt; so the Start menu calls this.&lt;/p&gt;
&lt;h3 id=&quot;wait&quot;&gt;&lt;code&gt;WAIT&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;WAIT [-][ms],[var]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-&lt;/code&gt; = any key cancels the wait&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0&lt;/code&gt; = pause until a key (&lt;code&gt;A–Z&lt;/code&gt;, &lt;code&gt;0–9&lt;/code&gt;); result in &lt;code&gt;var&lt;/code&gt; or &lt;code&gt;%PressKey%&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;do not spam &lt;code&gt;WAIT 0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;WAIT 2000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;WAIT 0,PKey&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;file--path--fdir--fdrv--fext--name&quot;&gt;&lt;code&gt;FILE&lt;/code&gt; / &lt;code&gt;PATH&lt;/code&gt; / &lt;code&gt;FDIR&lt;/code&gt; / &lt;code&gt;FDRV&lt;/code&gt; / &lt;code&gt;FEXT&lt;/code&gt; / &lt;code&gt;NAME&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Path plumbing you will use constantly:&lt;/p&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Command&lt;/th&gt;&lt;th&gt;Job&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;FILE&lt;/code&gt;&lt;/td&gt;&lt;td&gt;file ops (copy / delete / exist — see help in-PE)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PATH&lt;/code&gt;&lt;/td&gt;&lt;td&gt;search or set PATH&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;FDIR dest=C:\Windows\System32\calc.exe&lt;/code&gt;&lt;/td&gt;&lt;td&gt;directory of a file (no trailing &lt;code&gt;\&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;FDRV&lt;/code&gt;&lt;/td&gt;&lt;td&gt;drive letter of a path&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;FEXT&lt;/code&gt;&lt;/td&gt;&lt;td&gt;extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;NAME&lt;/code&gt;&lt;/td&gt;&lt;td&gt;file name without path&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;string-commands&quot;&gt;String commands&lt;/h3&gt;
&lt;p&gt;All Unicode. Length limit on &lt;code&gt;STRL&lt;/code&gt; source is 2K.&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Command&lt;/th&gt;&lt;th&gt;Job&lt;/th&gt;&lt;th&gt;Note&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;STRL len=一二三四五&lt;/code&gt;&lt;/td&gt;&lt;td&gt;length&lt;/td&gt;&lt;td&gt;example → &lt;code&gt;5&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;LSTR dest=1234567890,2&lt;/code&gt;&lt;/td&gt;&lt;td&gt;left &lt;em&gt;n&lt;/em&gt; chars&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;RSTR dest=1234567890,2&lt;/code&gt;&lt;/td&gt;&lt;td&gt;right &lt;em&gt;n&lt;/em&gt; chars&lt;/td&gt;&lt;td&gt;→ &lt;code&gt;90&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;MSTR dest=src,start,count&lt;/code&gt;&lt;/td&gt;&lt;td&gt;mid&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;LPOS&lt;/code&gt; / &lt;code&gt;RPOS&lt;/code&gt;&lt;/td&gt;&lt;td&gt;left / right index of a substring&lt;/td&gt;&lt;td&gt;feed &lt;code&gt;DATE&lt;/code&gt; output (&lt;code&gt;yyyy-m-d|dow|h:m:s&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;If &lt;em&gt;n&lt;/em&gt; &amp;#x3C; 1 or past the end, &lt;code&gt;LSTR&lt;/code&gt;/&lt;code&gt;RSTR&lt;/code&gt; return the whole string.&lt;/p&gt;
&lt;h3 id=&quot;regi--hkey-registry--runs&quot;&gt;&lt;code&gt;REGI&lt;/code&gt; / &lt;code&gt;HKEY&lt;/code&gt; (registry) / &lt;code&gt;RUNS&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;REGI&lt;/code&gt; is the general registry command (add / delete / query — run &lt;code&gt;HELP&lt;/code&gt; in-PE for the full flag list). &lt;code&gt;RUNS exe,display-name&lt;/code&gt; is a shorter way to write a Run key; separator is the rightmost &lt;code&gt;*&lt;/code&gt; or leftmost &lt;code&gt;,&lt;/code&gt;. Config-file only.&lt;/p&gt;
&lt;h3 id=&quot;moun--fbwf--ramd--serv&quot;&gt;&lt;code&gt;MOUN&lt;/code&gt; / &lt;code&gt;FBWF&lt;/code&gt; / &lt;code&gt;RAMD&lt;/code&gt; / &lt;code&gt;SERV&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MOUN&lt;/code&gt; — mount a volume or enable the writable overlay (must precede &lt;code&gt;FBWF&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FBWF P20 L32 H64&lt;/code&gt; — File-Based Write Filter cache: percent of RAM, min MB, max MB. Flags may be used alone (&lt;code&gt;FBWF L64&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RAMD&lt;/code&gt; — ramdisk&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SERV [!]name&lt;/code&gt; — start a service/driver; &lt;code&gt;!&lt;/code&gt; stops. &lt;code&gt;SERV FBWF&lt;/code&gt; is the usual way to make a CD-based PE writable&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;show--subj--site&quot;&gt;&lt;code&gt;SHOW&lt;/code&gt; / &lt;code&gt;SUBJ&lt;/code&gt; / &lt;code&gt;SITE&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SHOW [disk|F|R][:part],[letter]&lt;/code&gt; — assign letters to hidden / removable partitions. &lt;code&gt;0:1,H&lt;/code&gt; = hd0 partition 1 → &lt;code&gt;H:&lt;/code&gt;. &lt;code&gt;R:1,U&lt;/code&gt; = first removable partition → &lt;code&gt;U:&lt;/code&gt;. &lt;code&gt;F:0&lt;/code&gt; = all hidden fixed partitions, auto letter&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SUBJ B:,X:\PE_Tools&lt;/code&gt; — &lt;code&gt;SUBST&lt;/code&gt;-like virtual drive. Omit the path to delete. &lt;strong&gt;The letter must be exact&lt;/strong&gt; or you can delete a real volume&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SITE path,+H +R&lt;/code&gt; — attributes &lt;code&gt;A H R S&lt;/code&gt; with &lt;code&gt;+&lt;/code&gt; / &lt;code&gt;-&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;link--shortcut&quot;&gt;&lt;code&gt;LINK&lt;/code&gt; — shortcut&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;LINK [!]shortcut,target,[args],[icon#index],[comment],[cwd]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;No &lt;code&gt;.lnk&lt;/code&gt; on the shortcut path. &lt;code&gt;!&lt;/code&gt; = start minimized. Target must exist.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;LINK !%Desktop%\PPPoE,RASPPPOE.CMD,,RASDIAL.DLL#19&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;kill&quot;&gt;&lt;code&gt;KILL&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;KILL [\&amp;#x3C;windowTitle&gt;|process.exe]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;\&lt;/code&gt; = close a window (omit title = close the current &lt;code&gt;_SUB&lt;/code&gt; window). No &lt;code&gt;\&lt;/code&gt; = kill by image name (all matches). Omit both = kill PECMD’s parent.&lt;/p&gt;
&lt;h3 id=&quot;hotk--hkey--send&quot;&gt;&lt;code&gt;HOTK&lt;/code&gt; / &lt;code&gt;HKEY&lt;/code&gt; / &lt;code&gt;SEND&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;HOTK&lt;/code&gt; — up to 8 system hotkeys that launch an &lt;code&gt;.exe&lt;/code&gt;/&lt;code&gt;.cmd&lt;/code&gt;/&lt;code&gt;.bat&lt;/code&gt;. Config-file only. Must run &lt;strong&gt;before&lt;/strong&gt; &lt;code&gt;SHEL&lt;/code&gt;. Result stored under &lt;code&gt;HKLM\SOFTWARE\PELOGON&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HKEY&lt;/code&gt; — hotkey that runs a &lt;strong&gt;PECMD&lt;/strong&gt; command; only valid inside &lt;code&gt;_SUB&lt;/code&gt;…&lt;code&gt;_END&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SEND 0x12_,0x09_,0x09^,0x12^&lt;/code&gt; — synthesize keys (&lt;code&gt;_&lt;/code&gt; down, &lt;code&gt;^&lt;/code&gt; up). Example is Alt+Tab&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;HOTK #255,PECMD.EXE SHUT E&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;HKEY Ctrl+Alt+#0x41,DISP W800H600B16F75&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;#255&lt;/code&gt; is the power key on many boxes.&lt;/p&gt;
&lt;h3 id=&quot;disp--logo--wall--text--tips--mess&quot;&gt;&lt;code&gt;DISP&lt;/code&gt; / &lt;code&gt;LOGO&lt;/code&gt; / &lt;code&gt;WALL&lt;/code&gt; / &lt;code&gt;TEXT&lt;/code&gt; / &lt;code&gt;TIPS&lt;/code&gt; / &lt;code&gt;MESS&lt;/code&gt;&lt;/h3&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Command&lt;/th&gt;&lt;th&gt;Job&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;DISP W1024 H768 B32 F70 T5000&lt;/code&gt;&lt;/td&gt;&lt;td&gt;resolution / depth / refresh / wait ms. Any group can stand alone (&lt;code&gt;DISP F75&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;LOGO&lt;/code&gt;&lt;/td&gt;&lt;td&gt;splash / login bitmap&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;WALL file&lt;/code&gt;&lt;/td&gt;&lt;td&gt;wallpaper; &lt;strong&gt;before&lt;/strong&gt; &lt;code&gt;SHEL&lt;/code&gt;; config-file only&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;TEXT line\nline#0xFFDDDD L4 T720 R300 B768 $20&lt;/code&gt;&lt;/td&gt;&lt;td&gt;text on the logon bitmap or desktop. Empty text clears the last rect. &lt;code&gt;*&lt;/code&gt; keeps previous text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;TIPS title,body\nline,5000,1,#1&lt;/code&gt;&lt;/td&gt;&lt;td&gt;balloon. Icon 0–3 = none/info/warn/error; &lt;code&gt;@aL600T400&lt;/code&gt; = on-screen arrow tip. Pair with &lt;code&gt;WAIT&lt;/code&gt; so PECMD outlives the tip&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;MESS&lt;/code&gt;&lt;/td&gt;&lt;td&gt;message box&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;brow--file--folder-dialog&quot;&gt;&lt;code&gt;BROW&lt;/code&gt; — file / folder dialog&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;BROW Boot_Ini,C:\Windows\BOOT.INI,Pick a file,INI&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;BROW Tag,*C:\Windows,Pick a folder&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Prefix on the path: none = open file, &lt;code&gt;*&lt;/code&gt; = folder, &lt;code&gt;&amp;#x26;&lt;/code&gt; = save file. Result in &lt;code&gt;%Var%&lt;/code&gt;. Must run after &lt;code&gt;INIT&lt;/code&gt; or from the desktop.&lt;/p&gt;
&lt;h3 id=&quot;date&quot;&gt;&lt;code&gt;DATE&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;DATE SysDate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Stores &lt;code&gt;yyyy-m-d|dow|h:m:s&lt;/code&gt; in the var, or &lt;code&gt;%CurDate%&lt;/code&gt; if omitted. Slice with &lt;code&gt;LPOS&lt;/code&gt; / &lt;code&gt;LSTR&lt;/code&gt; / &lt;code&gt;RSTR&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;help&quot;&gt;&lt;code&gt;HELP&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;No args — print the in-PE help. Running &lt;code&gt;PECMD.EXE&lt;/code&gt; with no command does the same.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Interpreting PECMD at a command line&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-winpe-pecmd-commands-02.CpAYCrc__Z29laLD.webp&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;window-controls-inside-_sub--_end-only&quot;&gt;Window controls (inside &lt;code&gt;_SUB&lt;/code&gt; … &lt;code&gt;_END&lt;/code&gt; only)&lt;/h2&gt;
&lt;p&gt;Geometry is always &lt;code&gt;L T W H&lt;/code&gt;. After create, talk to the control through &lt;code&gt;ENVI @Name=…&lt;/code&gt; and &lt;code&gt;%Name%&lt;/code&gt;.&lt;/p&gt;











































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Command&lt;/th&gt;&lt;th&gt;Control&lt;/th&gt;&lt;th&gt;Notes&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;ITEM&lt;/code&gt;&lt;/td&gt;&lt;td&gt;button&lt;/td&gt;&lt;td&gt;event = PECMD command; icon &lt;code&gt;file#id&lt;/code&gt;; state ≠0 = disabled&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;CHEK&lt;/code&gt;&lt;/td&gt;&lt;td&gt;checkbox&lt;/td&gt;&lt;td&gt;state &lt;code&gt;1&lt;/code&gt;/&lt;code&gt;-1&lt;/code&gt; checked; &lt;code&gt;0&lt;/code&gt;/&lt;code&gt;2&lt;/code&gt;/&lt;code&gt;-2&lt;/code&gt; unchecked; negative = grayed. &lt;code&gt;ENVI @Name.Check=&lt;/code&gt; / &lt;code&gt;.Enable=&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;EDIT&lt;/code&gt;&lt;/td&gt;&lt;td&gt;single-line edit&lt;/td&gt;&lt;td&gt;type &lt;code&gt;&gt;0&lt;/code&gt; password, &lt;code&gt;&amp;#x3C;0&lt;/code&gt; disabled. Enter fires the event. &lt;code&gt;.ReadOnly=&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;LABE&lt;/code&gt;&lt;/td&gt;&lt;td&gt;static label&lt;/td&gt;&lt;td&gt;&lt;code&gt;\n&lt;/code&gt; for lines&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;LIST&lt;/code&gt;&lt;/td&gt;&lt;td&gt;combo&lt;/td&gt;&lt;td&gt;items &lt;code&gt;A|B|C&lt;/code&gt;; &lt;code&gt;%Name%&lt;/code&gt; is the selected string&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;MEMO&lt;/code&gt;&lt;/td&gt;&lt;td&gt;multiline memo&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;MENU&lt;/code&gt;&lt;/td&gt;&lt;td&gt;menu&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;IMAG&lt;/code&gt;&lt;/td&gt;&lt;td&gt;picture&lt;/td&gt;&lt;td&gt;any Windows image; keep it small&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PBAR&lt;/code&gt;&lt;/td&gt;&lt;td&gt;progress bar&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;RADI&lt;/code&gt;&lt;/td&gt;&lt;td&gt;radio&lt;/td&gt;&lt;td&gt;group with &lt;code&gt;GROU&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;GROU&lt;/code&gt;&lt;/td&gt;&lt;td&gt;group box&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;TIME&lt;/code&gt;&lt;/td&gt;&lt;td&gt;timer&lt;/td&gt;&lt;td&gt;period in ms; &lt;code&gt;0&lt;/code&gt; = paused. &lt;code&gt;ENVI @T=0&lt;/code&gt; pauses; &lt;code&gt;ENVI @T=10000&lt;/code&gt; restarts&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAGE&lt;/code&gt;&lt;/td&gt;&lt;td&gt;tab / page&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Example button:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ITEM Button3,L32T108W300H54,Explorer,EXEC explorer.exe,%SystemRoot%\explorer.exe&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;compact-catalog-of-the-rest&quot;&gt;Compact catalog of the rest&lt;/h2&gt;
&lt;p&gt;These appear in Chinese PE scripts; &lt;code&gt;HELP&lt;/code&gt; in a live PE is the authoritative flag list.&lt;/p&gt;





























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Command&lt;/th&gt;&lt;th&gt;One-line job&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;EJEC [C-|U-|R:]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;eject optical / remove USB (unfinished; prefer the tray if the PE has it). Do not put in a config; &lt;code&gt;INIT I&lt;/code&gt; adds it to the tray&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;LOGS&lt;/code&gt;&lt;/td&gt;&lt;td&gt;write / rotate a log&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;MAIN&lt;/code&gt;&lt;/td&gt;&lt;td&gt;main-window / instance helpers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;MD5C&lt;/code&gt;&lt;/td&gt;&lt;td&gt;MD5 a file (pair with &lt;code&gt;SHEL&lt;/code&gt; passwords)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;MOUN&lt;/code&gt;&lt;/td&gt;&lt;td&gt;mount / overlay&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;NUMK&lt;/code&gt;&lt;/td&gt;&lt;td&gt;num-lock state&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAGE&lt;/code&gt;&lt;/td&gt;&lt;td&gt;paging UI&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;RAMD&lt;/code&gt;&lt;/td&gt;&lt;td&gt;ramdisk&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;REGI&lt;/code&gt;&lt;/td&gt;&lt;td&gt;registry&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;UPNP [-pnp]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;BartPE Plug-and-Play payload baked into PECMD (&lt;code&gt;$&lt;/code&gt; shows UI). Blocking&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;USER name*company&lt;/code&gt;&lt;/td&gt;&lt;td&gt;”Registered to” on My Computer. Config-file only&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;TEMP Delete&lt;/code&gt; / &lt;code&gt;TEMP Setting&lt;/code&gt;&lt;/td&gt;&lt;td&gt;wipe or relocate &lt;code&gt;%TEMP%&lt;/code&gt;. Desktop only, not in the boot script. &lt;code&gt;@Delete&lt;/code&gt; skips the confirm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;FONT&lt;/code&gt;&lt;/td&gt;&lt;td&gt;install / search fonts (often paired with &lt;code&gt;IFEX KEY=&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&quot;a-minimal-pecmd-boot-script&quot;&gt;A minimal PECMD boot script&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;INIT CI&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;LOGO&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;TEXT Starting WinPE#0xFFFFFF L20 T700 R400 B760 $18&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;DEVI %SystemRoot%\DRV.CAB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ENVI TEMP=%SystemDrive%\TEMP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;LINK %Desktop%\Cmd,CMD.EXE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;WALL %CurDir%\wall.jpg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;HOTK #255,PECMD.EXE SHUT E&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;SHEL %SystemRoot%\EXPLORER.EXE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;WAIT 1000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;TIPS PE,Desktop is up,4000,1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Add a window procedure at the top if you need a first-run chooser (&lt;code&gt;CALL @Setup&lt;/code&gt; after &lt;code&gt;INIT&lt;/code&gt;). Keep &lt;code&gt;_SUB&lt;/code&gt; / &lt;code&gt;_END&lt;/code&gt; out of &lt;code&gt;TEAM&lt;/code&gt; / &lt;code&gt;IFEX&lt;/code&gt; / &lt;code&gt;FIND&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;rules-that-save-hours&quot;&gt;Rules that save hours&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Config vs CLI.&lt;/strong&gt; &lt;code&gt;_SUB&lt;/code&gt;, &lt;code&gt;_END&lt;/code&gt;, &lt;code&gt;CALL proc&lt;/code&gt;, &lt;code&gt;INIT&lt;/code&gt;, &lt;code&gt;SHEL&lt;/code&gt;, &lt;code&gt;HOTK&lt;/code&gt;, &lt;code&gt;WALL&lt;/code&gt;, &lt;code&gt;RUNS&lt;/code&gt;, &lt;code&gt;USER&lt;/code&gt; are config-only.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Order.&lt;/strong&gt; &lt;code&gt;HOTK&lt;/code&gt; before &lt;code&gt;SHEL&lt;/code&gt;. &lt;code&gt;WALL&lt;/code&gt; before &lt;code&gt;SHEL&lt;/code&gt;. &lt;code&gt;MOUN&lt;/code&gt; before &lt;code&gt;FBWF&lt;/code&gt;. &lt;code&gt;BROW&lt;/code&gt; after &lt;code&gt;INIT&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Names.&lt;/strong&gt; Unique, no &lt;code&gt;$&lt;/code&gt; prefix, no collision with env vars. &lt;code&gt;_SUB&lt;/code&gt; names across one file must not be similar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows.&lt;/strong&gt; Controls only between &lt;code&gt;_SUB&lt;/code&gt; and &lt;code&gt;_END&lt;/code&gt;. &lt;code&gt;CALL @win&lt;/code&gt; blocks. Do not nest window &lt;code&gt;CALL&lt;/code&gt;s.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shutdown.&lt;/strong&gt; &lt;code&gt;EXEC &amp;#x26;EXPLORER.EXE&lt;/code&gt; (or &lt;code&gt;SHEL&lt;/code&gt;) so the Start menu hits &lt;code&gt;PECMD SHUT&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Writable space.&lt;/strong&gt; &lt;code&gt;INIT&lt;/code&gt; needs a writable &lt;code&gt;%USERPROFILE%&lt;/code&gt;. CD PE: &lt;code&gt;SERV FBWF&lt;/code&gt; after a proper &lt;code&gt;MOUN&lt;/code&gt; / &lt;code&gt;FBWF&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Help.&lt;/strong&gt; &lt;code&gt;PECMD.EXE&lt;/code&gt; with no args, or &lt;code&gt;HELP&lt;/code&gt;, dumps the build you actually have — forks diverge.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/windows-c-drive-cleanup-guide/&quot; class=&quot;wikilink&quot;&gt;A complete guide to cleaning a Windows C: drive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/vs-atl-exe-cannot-generate-dll/&quot; class=&quot;wikilink&quot;&gt;VS ATL exe template cannot generate a DLL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>A complete guide to cleaning a Windows C: drive</title><link>https://ssherun.github.io/en/blog/windows-c-drive-cleanup-guide/</link><guid isPermaLink="true">https://ssherun.github.io/en/blog/windows-c-drive-cleanup-guide/</guid><description>A full C: drive is the headache every Windows user hits. This guide goes from simple to advanced — safe ways to reclaim space without reinstalling Windows.</description><pubDate>Mon, 14 Sep 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A full C: drive is probably the most common Windows headache. The longer you use the machine, the less free space you have — especially after Windows 10, when the OS itself got hungrier.&lt;/p&gt;
&lt;p&gt;This is a complete cleanup path from simple to advanced. The steps are straightforward and the side effects are small.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Safety:&lt;/strong&gt; a few of these operations carry some risk to the system or to personal files. Each section is marked with difficulty and safety. Stay inside your own level.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&quot;A Win10 desktop running out of C: space&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-windows-c-drive-cleanup-guide-01.DVyTLxmy_zLQ0w.webp&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;1-fastest-and-simplest--software-cleanup&quot;&gt;1. Fastest and simplest — software cleanup&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Difficulty: easy | Safety: high&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cleaning caches with software is the most ordinary, convenient move. There are plenty of free tools — Huorong’s built-in junk cleaner, for example.&lt;/p&gt;
&lt;h3 id=&quot;windows-10s-own-cleanup&quot;&gt;Windows 10’s own cleanup&lt;/h3&gt;
&lt;p&gt;If you do not want a third-party cleaner, Windows 10 can do it:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Click Start (bottom left) → the gear to open Settings&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Storage&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Turn on &lt;strong&gt;Storage Sense&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;When space is tight, the system will periodically clean caches. You can also run a cleanup immediately from the same screen.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;These clicks match Windows 10 version 1909. Earlier builds look slightly different. Upgrade if you can.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&quot;2-move-apps-and-personal-files-off-c&quot;&gt;2. Move apps and personal files off C:&lt;/h2&gt;
&lt;p&gt;Software cleanup is modest. The space you get back is limited. To go further you have to move things by hand.&lt;/p&gt;
&lt;h3 id=&quot;1-move-personal-folders&quot;&gt;1. Move personal folders&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Difficulty: easy | Safety: high&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In Storage settings, move every personal directory to D: (or another data volume) and apply.&lt;/p&gt;
&lt;p&gt;“Documents,” “Pictures,” and the rest on C: now live on D:.&lt;/p&gt;
&lt;h4 id=&quot;manual-move-not-windows-10-1909&quot;&gt;Manual move (not Windows 10 1909)&lt;/h4&gt;
&lt;p&gt;In This PC, right-click Desktop → Properties → &lt;strong&gt;Location&lt;/strong&gt; → Move. You can park the Desktop folder on another partition.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; create the destination folder on the other partition &lt;em&gt;before&lt;/em&gt; you move.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Do the same for Documents, Downloads, Pictures, Music, and Videos. You free C: now, and those folders will not eat C: as they grow.&lt;/p&gt;
&lt;h3 id=&quot;2-move-common-app-caches&quot;&gt;2. Move common app caches&lt;/h3&gt;
&lt;p&gt;A lot of everyday software installs on C:. Left alone, the caches get absurd. Changing the save path in settings is usually enough to give C: a lot of room back.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Usual suspects:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;WeChat desktop:&lt;/strong&gt; group chats and images; tens of GB over time is normal&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;QQ:&lt;/strong&gt; chat history and file cache&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Adobe Photoshop:&lt;/strong&gt; scratch disk&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Browsers:&lt;/strong&gt; download folder and cache&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In each app, find “file location” or “cache directory” and point it at D: or another volume.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;3-clean-the-windows-folder-and-large-files-by-hand&quot;&gt;3. Clean the Windows folder and large files by hand&lt;/h2&gt;
&lt;p&gt;The steps above already free a lot of cache. Next, go after system space.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Moving folders from C: to another volume&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;https://ssherun.github.io/_astro/inline-windows-c-drive-cleanup-guide-02.DgFtcjA3_Z2cmJst.webp&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;1-clean-inside-the-windows-folder&quot;&gt;1. Clean inside the Windows folder&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Difficulty: medium | Safety: high&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&quot;temp&quot;&gt;Temp&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Path:&lt;/strong&gt; &lt;code&gt;C:\Windows\Temp&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Temporary and cache files. Deleting &lt;em&gt;the files inside&lt;/em&gt; will not break the system.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Do not delete the folder itself&lt;/strong&gt; — only the contents. If a file will not delete, it is in use; reboot and try again.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;log-files&quot;&gt;Log files&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Path:&lt;/strong&gt; &lt;code&gt;C:\Windows\system32\logfiles&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;System and software logs. Most people never need them. Safe to delete the contents.&lt;/p&gt;
&lt;h4 id=&quot;backup&quot;&gt;Backup&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Path:&lt;/strong&gt; &lt;code&gt;C:\Windows\winsxs\backup&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Software backup copies. Basically unused. Safe to delete the contents.&lt;/p&gt;
&lt;h4 id=&quot;prefetch&quot;&gt;Prefetch&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Path:&lt;/strong&gt; &lt;code&gt;C:\Windows\Prefetch&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Windows prefetches folders you visit. Cleaning it regularly saves space and can make frequently used folders a bit slower to open the next time.&lt;/p&gt;
&lt;h4 id=&quot;help&quot;&gt;Help&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Path:&lt;/strong&gt; &lt;code&gt;C:\Windows\Help&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;System help files. Almost nobody uses them. Deleting the contents is a reasonable trade.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Again:&lt;/strong&gt; do not delete these folders. Delete the files &lt;em&gt;inside&lt;/em&gt; them.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;2-hunt-large-files&quot;&gt;2. Hunt large files&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Difficulty: medium | Safety: high&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&quot;windowsedb-search-database&quot;&gt;Windows.edb (search database)&lt;/h4&gt;
&lt;p&gt;This is the Windows Search service database. It caches search results. If you search a lot, it balloons.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Path:&lt;/strong&gt; &lt;code&gt;C:\ProgramData\Microsoft\Search\Data\Applications\Windows&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You can delete it; the system will keep running. Or search &lt;strong&gt;Indexing Options&lt;/strong&gt; in the Start menu → &lt;strong&gt;Advanced&lt;/strong&gt; → rebuild the index to reset the size.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; on some machines this file is grotesque — 70–80 GB. Emptying it can save a dying C: drive.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;3-turn-off-hibernation&quot;&gt;3. Turn off hibernation&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Difficulty: medium | Safety: high&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hibernation writes RAM to a disk cache and eats a lot of space. If C: is tight and you do not need hibernate, turn it off.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Steps:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Right-click Start → Search → type &lt;code&gt;cmd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Right-click &lt;strong&gt;Command Prompt&lt;/strong&gt; → Run as administrator&lt;/li&gt;
&lt;li&gt;Run: &lt;code&gt;powercfg -h off&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Hibernation is off.&lt;/p&gt;
&lt;p&gt;To turn it back on: &lt;code&gt;powercfg -h on&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;4-move-the-page-file-off-c&quot;&gt;4. Move the page file off C:&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Difficulty: medium | Safety: medium&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Memory-heavy apps (Photoshop, for example) make Windows carve out disk as a buffer when RAM is short.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A convenient tool:&lt;/strong&gt; Lenovo Smart Solution (联想智能解决工具).&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for “联想智能解决工具”&lt;/li&gt;
&lt;li&gt;Download the disk-cleanup tool&lt;/li&gt;
&lt;li&gt;The first item is virtual-memory settings&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;custom virtual memory&lt;/strong&gt; and put it on another volume (D:)&lt;/li&gt;
&lt;li&gt;Set the maximum a bit larger than physical RAM&lt;/li&gt;
&lt;li&gt;OK, save, reboot&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Caution:&lt;/strong&gt; if you are new to this, be careful. In some cases it can destabilize the system.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&quot;4-last-resort-options&quot;&gt;4. Last-resort options&lt;/h2&gt;
&lt;p&gt;The methods above should fix C: space for most people.&lt;/p&gt;
&lt;h3 id=&quot;non-destructive-repartition-higher-risk--not-for-beginners&quot;&gt;Non-destructive repartition (higher risk — not for beginners)&lt;/h3&gt;
&lt;p&gt;Tools like DiskGenius or Partition Assistant can grow C: without wiping data. There is still risk.&lt;/p&gt;
&lt;h3 id=&quot;replan-the-partitions-recommended&quot;&gt;Replan the partitions (recommended)&lt;/h3&gt;
&lt;p&gt;Everything above is remediation. The lasting fix is a larger C: in the first place.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A reasonable split:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Office use:&lt;/strong&gt; give the system volume about 100–120 GB&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Design work&lt;/strong&gt; (photo, video, CAD): consider using the whole disk as the system volume — do not partition&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next time you reinstall, back up, delete the partitions, and rebuild. That ends the C: crisis for good.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;
&lt;p&gt;A complete C: cleanup, simple to advanced:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Software cleanup&lt;/strong&gt; (easiest) — Storage Sense or a third-party cleaner&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Move files&lt;/strong&gt; (recommended) — personal folders and app caches to another volume&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manual cleanup&lt;/strong&gt; (intermediate) — Windows folders and large files&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;System tweaks&lt;/strong&gt; (advanced) — disable hibernate, move the page file&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repartition&lt;/strong&gt; (last resort) — plan a larger C: on the next reinstall&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pick the level that matches your skill. Go step by step. Safety first.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/winpe-pecmd-commands/&quot; class=&quot;wikilink&quot;&gt;PECMD commands in WinPE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssherun.github.io/en/blog/vs-atl-exe-cannot-generate-dll/&quot; class=&quot;wikilink&quot;&gt;VS ATL exe template cannot generate a DLL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item></channel></rss>