<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Rushi Luhar</title><link>https://rushi.luhar.org/writing/</link><description>CTO at Jeavio and fractional advisor. Practical AI, software engineering, leadership and writing.</description><language>en-US</language><atom:link href="https://rushi.luhar.org/feed/" rel="self" type="application/rss+xml"/><item><title>Building Personal Harnesses</title><link>https://rushi.luhar.org/2026/11/building-personal-harnesses/</link><guid isPermaLink="false">https://rushi.luhar.org/2026/11/building-personal-harnesses/</guid><pubDate>Mon, 02 Nov 2026 15:54:43 -0500</pubDate><dc:creator>Rushi Luhar</dc:creator><description>Small experiments with model choice, memory and retrieval give me better questions before committing to an agent project.</description><content:encoded><![CDATA[<p>How do you decide on technology when things move this fast? For me, it used to start with a book.</p>
<p>Eleven years ago, I spent two weeks immersed in a book about Docker because releases kept going wrong and ruining my weekends.</p>
<p><a href="https://rushi.luhar.org/2015/01/review-the-docker-book-by-james-turnbull/">My review</a> ended with two questions: “Will Docker solve my release woes? Is it actually ready to be deployed in a corporate setting?”</p>
<p>Swap Docker for agents, and these are the questions leaders face this year.</p>
<p>Investors, the board, and customers all want to know what you&rsquo;re building with AI, and the proposals arrive with more hype and bigger budgets.</p>
<p>If you make an application agentic, or put millions of your 2027 budget into an AI transformation, what are you signing up for?</p>
<p>I still read, I still talk to engineers, and I still work out where new technology fits. Now I also build small experiments, which Claude Code and Codex have made quick and cheap.</p>
<p>I call them personal harnesses: small programs that wrap AI models around one task, so I can change one thing and watch what happens. I build them in areas I already understand, because then I can tell when the answer is wrong.</p>
<p>Every <a href="https://rushi.luhar.org/2026/04/on-agents-and-harnesses/">agent project</a> hides a few decisions: which model runs it, what it remembers, how it finds information, and which trade-offs you can live with.</p>
<p>In <a href="https://rushi.luhar.org/2026/08/the-frontier-model-tax/">one experiment</a>, four AI agents negotiated data center deals with a simulated county. I used the same prompts, tools and configuration across four models. All four got close to the best available deal. Their effective input-token costs varied far more than the price sheets suggested, and the cost ranking changed.</p>
<p>In <a href="https://rushi.luhar.org/2026/10/what-the-repair-robots-remembered/">another</a>, I gave the agents in a fictional robot repair shop a memory of earlier jobs. Memory sounds like an obvious upgrade. But in one run, structured memory used about 24% more tokens, including the memory writer, and finished fewer repairs: 22 of 24, against 24 of 24 without it. The agent with structured memory took fewer repair actions, and two of its jobs hit their token limit before finishing.</p>
<p><a href="https://github.com/RushiLuhar/askrushi" target="_blank" rel="noreferrer">A third harness</a> searches 176 of my blog posts, going back to 2010. When I asked it for “the book I read to stop my releases breaking,” keyword and hybrid search both found the Docker review. With semantic search, it couldn&rsquo;t identify the book from the retrieved excerpts, and said so.</p>
<p><figure><img src="https://rushi.luhar.org/2026/11/building-personal-harnesses/retrieval-comparison.jpg" width="1030" height="1319" alt="AskRushi comparison for the question “the book I read to stop my releases breaking.” Semantic search does not identify a book; keyword and hybrid both identify The Docker Book by James Turnbull. Cropped screenshots show the revealed methods and their actual answers." loading="lazy" decoding="async"><figcaption>One saved comparison, with the method labels revealed. Keyword and hybrid found the Docker review; the answer using semantic search said the supplied excerpts did not identify the book. This result does not rank the methods for other questions.</figcaption></figure>
</p>
<p><a href="retrieval-comparison.jpg">View the full-size comparison</a>.</p>
<p>These experiments were small. They gave me better questions for the next team that brings me an agent project, and for clients working out their 2027 AI strategy.</p>
<p>Before I sign off on an agentic project, or advise a client to, I want to have built a toy version of its riskiest part. Then I throw the toy away and keep the questions.</p>
]]></content:encoded></item><item><title>What the repair robots remembered</title><link>https://rushi.luhar.org/2026/10/what-the-repair-robots-remembered/</link><guid isPermaLink="false">https://rushi.luhar.org/2026/10/what-the-repair-robots-remembered/</guid><pubDate>Thu, 29 Oct 2026 21:42:00 -0400</pubDate><dc:creator>Rushi Luhar</dc:creator><description>What a robot repair-shop experiment revealed about agent memory, completed work, model choice, and the cost of fewer tool calls.</description><content:encoded><![CDATA[<p>Intuitively, giving an AI agent memory should help it do a better job. If it has solved a problem before, why make it figure everything out again?</p>
<p>I wanted to test that assumption with a simple harness and evaluation suite. Something small enough to inspect, but with the kinds of decisions that come up in the agent workflows we build for clients at <a href="https://www.jeavio.com" target="_blank" rel="noreferrer">Jeavio</a>: work out what&rsquo;s happening, choose a tool, act on the result, and check whether the job is actually done. Earlier experience should sometimes help. Sometimes it should be ignored.</p>
<p>So I built a fictional repair shop. The agents are robot mechanics working through a queue of faulty machines. The interface has an 80s workshop theme (though I may have gone a little overboard with the design - everybody smoked in the 80s right?). Putting dodgy robots aside, the experiment underneath it is about memory, prompts, tool use and cost.</p>
<p><figure><img src="https://rushi.luhar.org/2026/10/what-the-repair-robots-remembered/robot-workshop-three-bays-ready.jpg" width="1212" height="1064" alt="Original three-bay robot workshop in free-demo ready mode" loading="lazy" decoding="async"></figure>
</p>
<p><strong>Figure 1.</strong> <em>The original three-bay workshop, shown in free-demo ready mode.</em></p>
<p>I wanted to check the sensitivity of the harness to the model, memory infrastructure and token budgets. I also put together three task sets of increasing complexity to test out my hypothesis.</p>
<p>The results? Well, honestly, still a work-in-progress! With Luna, memory saved work on some repairs but added tokens and left jobs unfinished. Changing the repair model altered that tradeoff again. The experiment continues to validate my hypothesis that agentic development requires an iterative and empirical approach!</p>
<h2 id="what-happens-in-the-shop" class="relative group">What happens in the shop <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#what-happens-in-the-shop" aria-label="Anchor">#</a></span></h2><p>For the comparisons here, I moved from those initial task sets to an eight-job service suite. Every machine arrives with the same complaint: intermittent shutdown under load. The agent has to work out whether it has a calibration, cooling or cable problem, make any necessary repairs, and pass an independent final test. One machine is perfectly healthy, so doing more work isn&rsquo;t always the right answer.</p>
<p>The simulation decides what each tool action does and whether the machine passes. The harness records what the agent tried, what happened and how many tokens it used; the agent doesn&rsquo;t get to grade its own work. That gives me a way to distinguish a convincing explanation from a completed repair.</p>
<p>The sequence mixes familiar situations with cases where earlier experience could mislead the agent. A component returns with the same calibration but a new cable fault: remembering the calibration can save measurements, but replaying the old repair won&rsquo;t fix the cable. A replacement component needs fresh measurements. I wanted to see whether the agent could recognize which part of an earlier repair still applied.</p>
<p>That is the connection to client workflows. The tools and business rules will be different, but an agent still has to decide whether an earlier answer applies to the case in front of it. The shop gives me a small, inspectable place to test that judgment. The full <a href="https://github.com/RushiLuhar/groundhog-day-robot-repair-shop/blob/89e91d7c8a579b15c60ad2683a9df82a84117ec5/docs/EVALUATION_WORLD.md" target="_blank" rel="noreferrer">task descriptions and rules are on GitHub</a>.</p>
<h2 id="three-memory-approaches" class="relative group">Three memory approaches <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#three-memory-approaches" aria-label="Anchor">#</a></span></h2><p>I gave three agents different ways to handle experience from earlier jobs. I&rsquo;ll use their labels, <em>No memory</em>, <em>Rolling memory</em> and <em>Structured memory</em>, throughout:</p>
<ul>
<li>
<p><em>No memory</em> starts each new job without the previous jobs&rsquo; observations.</p>
</li>
<li>
<p><em>Rolling memory</em> keeps a bounded window of previous observations, without summarizing them.</p>
</li>
<li>
<p><em>Structured memory</em> uses a separate memory-writing agent to condense the work log into records of past repairs, component facts and procedures.</p>
</li>
</ul>
<p>All three retain the observations from the job they are currently doing. The <em>No memory</em> label means no history from earlier jobs, not forgetting the tool result that just came back. The logs are factual English descriptions of actions and results, rather than the model&rsquo;s private reasoning.</p>
<p>The structured approach adds a step between finishing one repair and starting the next. It keeps working memory for the current job, then asks the writer to extract useful experience from the job’s work log when budget remains. Episodic records describe past repairs; semantic records hold facts such as a component&rsquo;s calibration; procedural records describe how to do something. These are record types in one store, not three more agents.</p>
<p>Each agent attempts the same eight jobs in the same order across three fresh shifts. Memory resets between shifts, giving 24 attempts per memory approach, rather than 24 different cases. Within a model run, the model, reasoning setting and tools stay fixed, so I can compare the memory approaches without also changing the repair agent.</p>
<p><figure><img src="https://rushi.luhar.org/2026/10/what-the-repair-robots-remembered/01-experiment-design.png" width="1800" height="1200" alt="Three memory approaches in a robot repair-shop experiment. Each approach gets the same eight repair tickets across three fresh shifts, for 24 attempts. Within each model run, the model, reasoning setting and tools stay the same. All three agents keep observations from the current job. No memory discards observations from previous jobs. Rolling memory keeps recent observations as whole entries within a fixed limit. Structured memory uses a writer after each job to save past repairs, facts and procedures, with notes about when they apply. Token use and estimated cost are recorded separately from memory, and an independent test checks each repair. These observation logs are factual records, not private chain of thought." loading="lazy" decoding="async"></figure>
</p>
<p><strong>Figure 2.</strong> <em>The three memory approaches receive the same jobs and tools, and each retains its own current-job observations. They differ in what they retain and supply from earlier jobs.</em></p>
<p>I also need limits on how much work an agent can do. Each job gets up to 20 repair actions and an allowance of 50,000 input and output tokens, including the memory writer. The token allowance is checked between calls, so a final admitted call can take the total over that limit. A separate whole-run budget limits the cost of the experiment.</p>
<p>I measure completion, repair actions, tokens and estimated API cost separately. Fewer actions can mean that the agent found a shortcut, or simply that it stopped before finishing. And memory has a cost of its own: previous observations have to be included in later requests, while the structured approach also pays for a writer to maintain its records.</p>
<h2 id="useful-memory-went-unused" class="relative group">Useful memory went unused <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#useful-memory-went-unused" aria-label="Anchor">#</a></span></h2><p>The earlier run with gpt-6-luna did not give me the result I&rsquo;d expected. <em>No memory</em> passed 23 of 24 repairs; <em>Rolling memory</em> and <em>Structured memory</em> each passed 21. Both memory approaches completed fewer repairs than the baseline in that run.</p>
<p>The action logs made the problem more interesting. <em>Structured memory</em> took both calibration samples on every ticket, even when the correct calibration was already in the memory supplied to it. The information had survived storage and reached the agent, but the agent still repeated the measurements.</p>
<p>That gave me something more specific to investigate than whether memory was a good idea. The writer was producing overlapping records and describing useful procedures too narrowly. I also suspected the repair prompt wasn&rsquo;t clear enough about when the agent could rely on earlier evidence. The model was part of this setup, but so were the instructions and the way I presented its memory.</p>
<p>I revised both sides. I asked the writer for shorter facts with clearer descriptions of where they applied, and told the repair agent to consult memory, reuse supported facts and check for exceptions. I also tightened the task rules and added counterexamples, including a familiar component with a new cable fault. The agent needed to reuse useful knowledge without assuming that the entire previous repair would work again.</p>
<p>After the offline tests passed, I ran the suite again. Because the tasks and prompts changed together, the result can&rsquo;t tell me how much improvement came from the memory instruction alone. The <a href="https://github.com/RushiLuhar/groundhog-day-robot-repair-shop/blob/2448a7a1b761fefe0de22ff98eac76bc7a77ad47/docs/LIVE_EVALUATION_50K_2026-10-28.md" target="_blank" rel="noreferrer">earlier report</a> preserves the first setup and its results separately.</p>
<h2 id="fewer-repair-actions-did-not-mean-fewer-tokens" class="relative group">Fewer repair actions did not mean fewer tokens <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#fewer-repair-actions-did-not-mean-fewer-tokens" aria-label="Anchor">#</a></span></h2><p>With the updated setup, <em>Structured memory</em> started behaving more like I&rsquo;d intended. It took 18 calibration samples across 24 attempts, compared with 48 in its earlier run. It reused familiar calibrations but still measured the replacements and the new component.</p>
<p>On the familiar component with the added cable fault, it finished in eight actions in every shift, against ten or eleven for <em>No memory</em>. It skipped the unnecessary measurements and still fixed the new fault. These were completed repairs, so there was useful work being saved.</p>
<p>The improved reuse still wasn&rsquo;t enough to match <em>No memory</em> on completion across the whole suite. <em>No memory</em> finished all 24 repairs, while <em>Rolling memory</em> finished 21 and <em>Structured memory</em> finished 22. <em>No memory</em> also used the fewest tokens.</p>
<p><figure><img src="https://rushi.luhar.org/2026/10/what-the-repair-robots-remembered/02-tuned-run-results.png" width="1800" height="1200" alt="Tuned Luna results comparing the memory approaches No memory, Rolling memory and Structured memory. Out of 24 attempts each, they completed 24, 21 and 22 repairs respectively, verified by the independent test. Total tokens were 524,517, 768,076 and 653,012. Structured memory includes 93,646 tokens used to write memory. Repair actions totaled 248, 211 and 205, including unfinished jobs. Across all approaches, 72 jobs were attempted, 67 passed and 5 were unfinished. All five unfinished compound repairs reached their job token limit. Fewer actions can reflect unfinished work rather than greater efficiency. The run used 1,945,605 tokens at an estimated cost of $0.2333469. This is a small experiment, not a general ranking. The measured version is service-v2, repair-v3 and writer-v2, frozen run f20daf0, report 2448a7a." loading="lazy" decoding="async"></figure>
</p>
<p><strong>Figure 3.</strong> <em>Results from the tuned Luna run. Actions and tokens include unfinished work; tokens also include the memory writer.</em></p>
<p>All five unfinished attempts were compound repairs, where the agent had several faults to diagnose and fix. They exhausted their token allowance before passing the final test. The extra history was included in successive model calls, so avoiding a few repair actions did not necessarily reduce the total amount of text processed.</p>
<p>This is why I wanted separate measures. The logs showed genuine reuse on particular repairs, while the totals showed that it wasn&rsquo;t enough to make either memory approach cheaper or more reliable across this suite. <em>Structured memory</em> used fewer tokens than in its earlier run, but still more than <em>No memory</em>, including the writer. The <a href="https://github.com/RushiLuhar/groundhog-day-robot-repair-shop/blob/89e91d7c8a579b15c60ad2683a9df82a84117ec5/docs/LIVE_EVALUATION_TUNED_2026-10-28.md" target="_blank" rel="noreferrer">full report</a> has the per-attempt breakdown.</p>
<h2 id="changing-the-repair-model" class="relative group">Changing the repair model <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#changing-the-repair-model" aria-label="Anchor">#</a></span></h2><p>At this point, the agent was reusing memory, but still struggling to finish some jobs within the allowance. Would a more capable repair model make better use of the same setup? I swapped gpt-6-luna for gpt-6-sol, keeping the tuned tasks, prompts, medium reasoning and per-job allowances unchanged. The memory writer stayed on Luna.</p>
<p>With Sol repairing, <em>Structured memory</em> passed all 24 jobs, matching <em>No memory</em>. It used 30 fewer repair actions at that same completion rate. That looks more like what I&rsquo;d expected! But compared with <em>No memory</em> on Sol, it still used 38.8% more tokens and cost an estimated 17.8% more.</p>
<p><figure><img src="https://rushi.luhar.org/2026/10/what-the-repair-robots-remembered/03-sol-memory-tradeoff.png" width="1800" height="1200" alt="Sol results comparing two memory approaches: No memory and Structured memory. Both completed all 24 repairs, verified by the independent test. No memory took 234 repair actions and Structured memory took 204, a reduction of 30. Total tokens were 470,232 and 652,515, so Structured memory used 38.8 percent more. Estimated model costs were $1.048392 and $1.235156, a 17.8 percent increase. Structured memory includes 557,819 repair tokens and 94,696 tokens used by the fixed Luna model to write memory. The repair model was Sol at medium reasoning. This is one synthetic suite, not a general ranking. Rolling memory is omitted from this focused chart; the full report includes its three job-token failures and earlier spending interruption. Report 89e91d7, measured source f18a9b8." loading="lazy" decoding="async"></figure>
</p>
<p><strong>Figure 4.</strong> <em>The Sol comparison focuses on the two agents that completed every repair: No memory and Structured memory. Totals include the Luna memory writer.</em></p>
<p>The compound repairs explain the change in completion. With Sol, <em>Structured memory</em> passed all three in 14 actions each; with Luna, it had passed only one. Sol gathered the evidence and completed the repairs in one power-off period before restoring power and testing. Those final calls took the jobs just over the nominal 50,000-token allowance, which the between-call checks permit.</p>
<p>The higher completion rate also came with a different bill. For <em>Structured memory</em>, changing the repair model took the estimated total cost from about $0.081 to $1.235, with almost no change in total tokens. The model was reaching a better outcome with a similar amount of text, but that text was much more expensive to process.</p>
<p>There was a complication in the Sol run: it initially hit the fifty-cent whole-run spending ceiling. I raised that ceiling to $10 and continued the untouched jobs, leaving the interrupted <em>Rolling memory</em> repair in the results. That agent completed 20 of 24 repairs: three exhausted the job allowance and one was interrupted by the spending limit. Four later jobs inherited the interrupted repair&rsquo;s incomplete history. <em>No memory</em> and <em>Structured memory</em> were unaffected; the <a href="https://github.com/RushiLuhar/groundhog-day-robot-repair-shop/blob/89e91d7c8a579b15c60ad2683a9df82a84117ec5/docs/LIVE_EVALUATION_SOL_EXTENDED_2026-10-29.md" target="_blank" rel="noreferrer">report and matched comparisons</a> include the interruption and the comparisons that exclude affected history.</p>
<p>Changing the repair model improved completion for <em>Structured memory</em> in this run. But these are three repetitions of one synthetic sequence, and the improved memory reuse had already appeared after the earlier task and prompt changes. The Sol result doesn&rsquo;t establish that Luna alone caused the original problem.</p>
<h2 id="repeating-the-exact-same-job" class="relative group">Repeating the exact same job <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#repeating-the-exact-same-job" aria-label="Anchor">#</a></span></h2><p>The service suite deliberately asks the agent to distinguish a useful repeat from a changed situation. I also wanted a simpler check: could Luna reuse what it had learned when the next job was exactly the same?</p>
<p>For that test, I gave each memory approach three fresh pairs of identical repairs. Each pair began with no history. The machine reset between its two jobs, so the second repair still had to be done and independently tested; only memory from the first job could persist. The tuned prompts and tools stayed the same.</p>
<p>All 18 repairs passed. <em>No memory</em> took nine actions on both jobs in every pair. <em>Rolling memory</em> and <em>Structured memory</em> each went from nine actions to seven, skipping the two calibration measurements on every repeat while still checking and repairing the current machine.</p>
<p>I checked what the agents actually received before the repeat. The entire first-job log fitted into the rolling window, so no earlier observations had been lost. <em>Structured memory</em> supplied a much shorter calibration record. Both approaches then acted consistently with using that earlier evidence.</p>
<p>Even in this simpler case, fewer actions didn&rsquo;t mean lower overall cost. Across the complete learning-and-repeat pairs, <em>Rolling memory</em> used 4.2% more tokens than <em>No memory</em>; <em>Structured memory</em> used 7.8% more, including its writer. Their estimated costs were 5.2% and 20.8% higher respectively. These totals include learning on the first job and the repeat, not just the second repair. The structured approach also paid for a memory write after the second repair, even though this short test had no third job to benefit from it.</p>
<p>This gives me a narrow but useful answer: Luna could reuse the supplied experience on this exact repair, with the tuned setup. It doesn&rsquo;t rank the approaches for other work. It also leaves a practical question about whether more repetitions would recover the extra cost of memory, and if so, how many. The <a href="https://github.com/RushiLuhar/groundhog-day-robot-repair-shop/blob/f235ee5b34bf1c76ad266cca30fc7ba131fbe368/docs/LIVE_EVALUATION_REPEAT_2026-10-29.md" target="_blank" rel="noreferrer">exact-repeat report</a> and <a href="https://github.com/RushiLuhar/groundhog-day-robot-repair-shop/blob/f235ee5b34bf1c76ad266cca30fc7ba131fbe368/repair_shop/tasks/README.md#exact-repeat-one-repair-twice" target="_blank" rel="noreferrer">task description</a> have the details.</p>
<h2 id="where-the-development-effort-goes" class="relative group">Where the development effort goes <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#where-the-development-effort-goes" aria-label="Anchor">#</a></span></h2><p>I started with a fairly obvious-sounding assumption: give the agent memory and it should do better. Well, better at what? Remembering something useful, making fewer tool calls, finishing the job and spending fewer tokens didn&rsquo;t all improve together.</p>
<p>That&rsquo;s the architectural decision I want data for. If a tool call is expensive or slow, avoiding it may be worth extra model tokens. If completing the job within a fixed budget is what matters, a memory approach that saves actions but runs out of tokens is a poor fit. The useful comparison depends on the work we need the agent to do and what that work costs.</p>
<p>There are still changes I want to test separately: the repair prompt, the memory writer, and the amount of context supplied. I also want to try cases the setup hasn&rsquo;t been tuned around. The experiments so far tell me what happened in this small shop; they give me a way to ask better questions before choosing an architecture for a client workflow.</p>
<p>And this brings me back to the <a href="https://rushi.luhar.org/2026/10/the-80-20-inversion/" target="_blank" rel="noreferrer">80/20 inversion</a>. Building the first version gave me something to try. Most of the interesting work since then has been figuring out what to measure, looking at what the robots actually did, changing the setup and checking again. That&rsquo;s how I want us making decisions on client agent projects.</p>
]]></content:encoded></item><item><title>The 80/20 Inversion</title><link>https://rushi.luhar.org/2026/10/the-80-20-inversion/</link><guid isPermaLink="false">https://rushi.luhar.org/2026/10/the-80-20-inversion/</guid><pubDate>Tue, 27 Oct 2026 08:00:00 -0400</pubDate><dc:creator>Rushi Luhar</dc:creator><description>How AI projects shift effort from the initial build toward evals, experiments, and learning from real users.</description><content:encoded><![CDATA[<p>For some conversational experiences we build at <a href="https://www.jeavio.com" target="_blank" rel="noreferrer">Jeavio</a>, the first version our clients use is a Slack bot.</p>
<p>It gives subject matter experts a familiar place to try real requests and tell us what works. We capture their feedback and refine the conversational UX before deploying a standalone application.</p>
<p>That&rsquo;s one example of the 80/20 inversion I&rsquo;ve noticed in our AI projects over the last three years.</p>
<p><figure><img src="https://rushi.luhar.org/2026/10/the-80-20-inversion/80-20-inversion.jpg" width="1122" height="1402" alt="The 80/20 inversion: traditional development puts 80% of effort into build and QA and 20% into feedback and triage; AI development reverses this, with 80% on evals, experiments, and feedback. These are illustrative splits, not measured data. A Jeavio loop moves from a Slack bot with SMEs through feedback and evals to a standalone application, with evaluation before and after release." loading="lazy" decoding="async"></figure>
</p>
<p><a href="https://rushi.luhar.org/2026/10/the-80-20-inversion/80-20-inversion.jpg">View the full-size infographic</a>.</p>
<p>Traditionally, we&rsquo;ve spent most of our effort on design, development, and QA. Once the application was live, we&rsquo;d triage feedback, feature requests, and bugs. Think 80% building and 20% iterating, as a rough description rather than a measured split.</p>
<p>With these conversational AI products (or AI products in general), the initial build becomes a much smaller part of the work. Most of the effort goes into refining evals, running experiments, and incorporating what we learn from use.</p>
<p>Conventional software needs that feedback too. What stands out about AI software is how much we still have to learn about its behavior when people bring their own requests. Evals help us check whether our changes improve the experience without breaking something that already worked.</p>
<p>But there&rsquo;s preparation behind the speed. When AI also helps write the software, teams need to decide which harness and models to use, how to share context and communicate changes, and how to keep PR reviews from becoming a nightmare. Generating code faster is of limited use if nobody can understand what changed.</p>
<p>Early customer feedback doesn&rsquo;t replace pre-release evaluation, of course. But it does change how I think about planning the work:</p>
<ul>
<li>Establish the development workflow.</li>
<li>Get a useful first version in front of key users as soon as possible.</li>
<li>Leave substantial room to learn from what they do with it.</li>
</ul>
<h2 id="related-writing" class="relative group">Related writing <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#related-writing" aria-label="Anchor">#</a></span></h2><ul>
<li><a href="https://rushi.luhar.org/2026/01/building-at-the-speed-of-thought/">Building at the Speed of Thought</a> (January 13, 2026), on building QuietReads and the changing economics of software development.</li>
<li><a href="https://rushi.luhar.org/jeavio/webinars/">AI in Production — The Jeavio Webinar Series</a>, especially “The Work Begins After the Demo Works,” on evals and the work of running AI in production.</li>
</ul>
]]></content:encoded></item><item><title>A story of two patches</title><link>https://rushi.luhar.org/2026/10/a-story-of-two-patches/</link><guid isPermaLink="false">https://rushi.luhar.org/2026/10/a-story-of-two-patches/</guid><pubDate>Mon, 26 Oct 2026 08:00:00 -0400</pubDate><dc:creator>Rushi Luhar</dc:creator><description>A roof repair and a WordPress migration prompt a reflection on AI agents, rebuilding software, and the trade-off between experience and dependency.</description><content:encoded><![CDATA[<p>Last Wednesday evening, I was reading about PHP2Shell, critical flaws disclosed that week. They could let attackers take over vulnerable PHP servers, which made me concerned about the one hosting my WordPress blog.</p>
<p>Earlier that day, a contractor had found a hole in my roof.</p>
<p>Looked like both my online and offline homes needed patching. Neither was quite the small job I would have liked.</p>
<p>My hosting provider no longer supported the server image my site ran on, so patching PHP would not be easy. So I asked my personal AI agent for a way forward.</p>
<p>My ChatGPT Dot (OpenAI&rsquo;s personal agent) is called Skelly*. I asked Skelly whether we could build a static site instead: plain HTML pages, with no PHP or database to patch.</p>
<p>Off Skelly went to analyze almost 15 years of posts, and came back suggesting Hugo (a static site generator). I ended up picking Cloudflare, and we worked out a migration path (screenshots below).</p>
<p>Before bed, I told Skelly to get going: deploy a test copy on Cloudflare, check it, and only switch my domain over when I approve. By Thursday morning the site was ready. It is now 
      
    <a href="https://rushi.luhar.org/writing/">live</a>, cheaper to run, and simpler to publish to.</p>
<p>Doing this myself would have taken weeks. More likely, I would have put it off and hoped security through obscurity would somehow remain a viable strategy.</p>
<p>I would have liked the same choice for the roof. &ldquo;Please rebuild my house using a more modern and secure technology&rdquo; has a certain appeal. Unfortunately, I don&rsquo;t have a year and half a million dollars to spare. Someone still had to get onto the roof and fix the hole.</p>
<p>For years, we patched old software because replacing it took too much effort. When an agent removes most of that effort, the calculation changes. Increasingly, the most expedient answer to &ldquo;how do I maintain this?&rdquo; is &ldquo;how much of this do I still need?&rdquo;</p>
<p>This part is bittersweet. I have run WordPress sites for many years and know the framework well. Now my blog runs on a framework I barely know, and I am betting Skelly, or a future agent, will handle the grunt work. I am trading years of experience and confidence for dependency on AI.</p>
<p>Many companies face the same trade-off. Patching is slower and potentially less secure, but a better understood option. I suspect market and cost pressures will favor the rebuild.</p>
<p>I am happy with Skelly&rsquo;s work and with the contractor&rsquo;s. Both fixed problems I would rather not have had.
One of these patches cost rather more than my AI subscription.</p>
<hr>
<p>* Skelly is named after a character from Hades - one of my favorite video games. Skelly is a training dummy (and a skeleton). He is cheerful, helpful, and a little kooky. Just like my agent.</p>
<h2 id="rebuilding-my-site" class="relative group">Rebuilding my site <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#rebuilding-my-site" aria-label="Anchor">#</a></span></h2><p><a href="migration-1.png"><figure><img src="https://rushi.luhar.org/2026/10/a-story-of-two-patches/migration-1.png" width="1440" height="1800" alt="Conversation with Skelly about replacing WordPress with a static website, preserving post URLs and images, and considering Hugo and GitHub Pages." loading="lazy" decoding="async"></figure>
</a></p>
<p><a href="migration-2.png"><figure><img src="https://rushi.luhar.org/2026/10/a-story-of-two-patches/migration-2.png" width="1440" height="1800" alt="Conversation planning a separate Cloudflare test deployment and checks before changing the blog domain." loading="lazy" decoding="async"></figure>
</a></p>
<p><a href="migration-3.png"><figure><img src="https://rushi.luhar.org/2026/10/a-story-of-two-patches/migration-3.png" width="1440" height="1800" alt="Conversation about combining the portfolio and blog in one Hugo site and using redirects for the other domain." loading="lazy" decoding="async"></figure>
</a></p>
<p><a href="migration-4.png"><figure><img src="https://rushi.luhar.org/2026/10/a-story-of-two-patches/migration-4.png" width="1440" height="1800" alt="Screenshot of the new Rushi Luhar writing page, showing the This Is Fine essay and site navigation." loading="lazy" decoding="async"></figure>
</a></p>
]]></content:encoded></item><item><title>This Is Fine</title><link>https://rushi.luhar.org/2026/10/this-is-fine/</link><guid isPermaLink="false">https://rushi.luhar.org/2026/10/this-is-fine/</guid><pubDate>Thu, 22 Oct 2026 22:25:39 -0400</pubDate><dc:creator>Rushi Luhar</dc:creator><description>AI is accelerating vulnerability discovery and exploitation while exposing the accumulated fragility of software and the ambiguity of agent authorization.</description><content:encoded><![CDATA[<p>I woke up this morning to more security fires than I can remember seeing at once.</p>
<p>PHP, Node.js, Java, Oracle, LiteLLM, Railway, Chrome, Cisco, ConnectWise. Vulnerabilities, compromised releases, potentially exposed credentials.</p>
<p>My morning involved pinging Jeavio&rsquo;s security team to identify which of our assets and portfolio companies needed attention, and also looking at my Wordpress sites and wondering whether my humble blog is now a vector for a hack.</p>
<p>I suspect plenty of CTOs, CIOs, and security folks are having a bit of a conniption today.</p>
<p>AI is already helping researchers find serious vulnerabilities. It is helping attackers too. <a href="https://www.microsoft.com/en-us/security/blog/2026/10/21/storm-0940-uses-artex-agentic-ai-connectwise-supply-chain-compromise/" target="_blank" rel="noreferrer">Microsoft says</a> a China-aligned group used an agentic AI framework to go after hundreds of organizations, and ties the ConnectWise compromise to the same campaign. <a href="https://aws.amazon.com/blogs/security/amazon-threat-intelligence-identifies-php2shell-exploitation-prior-to-public-disclosure-in-madpot/" target="_blank" rel="noreferrer">Amazon saw attempts</a> to exploit the new PHP bugs before they were even disclosed.</p>
<p>The time between discovery and disaster is shrinking.</p>
<p>Underneath all of it is the accumulated debt in the systems we&rsquo;ve built: fragile dependencies, poor architecture, weak security practices, and critical infrastructure held together by people nobody has thought to fund properly. You know the <a href="https://xkcd.com/2347/" target="_blank" rel="noreferrer">XKCD cartoon</a> - the one where all of modern digital infrastructure rests on one small project a lone volunteer has maintained for years. This week the <a href="https://thephp.foundation/blog/2026/10/21/todays-php-security-release-and-how-were-strengthening-php-security/" target="_blank" rel="noreferrer">PHP Foundation admitted</a> that a fix for the underlying bug had stalled for months over decision-making and resources.
That fragility was there long before AI. AI makes it cheaper to find and faster to exploit.</p>
<p>Years of &ldquo;we&rsquo;ll fix that later&rdquo; are coming due.</p>
<p>Then there&rsquo;s the <a href="https://www.axios.com/2026/10/22/ai-agents-banks-unauthorized-accounts-access" target="_blank" rel="noreferrer">Axios report</a> about banks struggling to establish whether AI agents accessing accounts are acting with their customers&rsquo; authorization. A customer&rsquo;s agent can look a lot like an intruder. Even customer-authorized access may break the bank&rsquo;s rules. A Chase spokesperson told Axios that customers shouldn&rsquo;t give their username and password to anyone. (But my Muse agent is so helpful!)</p>
<p>We need to design and operate for an adversarial environment. Verify who is acting, what they&rsquo;re authorized to do, and what happens when they get it wrong. &ldquo;It looks like normal user activity&rdquo; is becoming a much less comforting answer.</p>
<p>There&rsquo;s a personal side to mornings like this. Many of us, myself included, feel discombobulated about what it means to work in software and what comes next. Twenty-something years in, what our jobs look like changes almost weekly. An existential crisis to go with the midlife crisis. Excellent timing!</p>
<p>I remain a possibly delusional optimist about what AI can bring to our world. The way we work will change for the better, eventually.</p>
<p>But the transition is going to be painful professionally, personally, and operationally. Best to go into it with our eyes open.</p>
<p>In the meantime: this is fine.</p>
]]></content:encoded></item><item><title>The latest incarnation of saarthi</title><link>https://rushi.luhar.org/2026/09/the-latest-incarnation-of-saarthi/</link><guid isPermaLink="false">https://thinking.luhar.org/?p=1098</guid><pubDate>Mon, 28 Sep 2026 09:54:25 +0900</pubDate><dc:creator>Rushi Luhar</dc:creator><description>Believing in reincarnation comes with being (notionally) a Hindu. So let me introduce the latest incarnation of saarthi - my personal assistant.</description><content:encoded><![CDATA[
<p class="wp-block-paragraph">Believing in reincarnation comes with being (notionally) a Hindu. So let me introduce the latest incarnation of saarthi &#8211; my personal assistant.</p>



<p class="wp-block-paragraph">This is the third cycle and perhaps we are moving closer to Nirvana. From a slack bot, to an OpenClaw agent, and now built on Meta&#8217;s Muse bot.</p>



<p class="wp-block-paragraph">Muse sits on top of the App Store rankings and I can see why. Setting it up was easy, I could chat with the bot using WhatsApp and the bot itself just works. No messing with SOUL.md or HEARTBEAT.md or fretting about context window compaction. I know Muse was heavily &#8220;inspired&#8221; by OpenClaw but Meta has nailed the user experience.</p>



<p class="wp-block-paragraph">I am not brave enough yet to give Muse access to my primary email or calendar, but luckily I had the infrastructure in place already from my previous experiments with personal agents. An email address, a clear use case and one that I understand and know to be valuable.</p>



<p class="wp-block-paragraph">I connected saarthi (v3) to its email inbox and got it to build a &#8220;read it later&#8221; experience that we call &#8220;Commonplace&#8221; (after Commonplace books &#8211; notebooks used to compile knowledge). Meta&#8217;s work with Manus also seems to have come in handy. The bot built a pretty solid web app and made it usable inside the app. So far so good!</p>



<p class="wp-block-paragraph">Judging by the ads I get served on Instagram, Meta clearly has a deep understanding of my psyche. So not giving it access to my email for &#8220;privacy&#8221; reasons seems a little &#8230; Sisyphean? &#8230; I guess. But for now, its baby steps from me. We will see whether my experience with the Muse ecosystem is a little less frustrating than fighting with OpenClaw.</p>



<p class="wp-block-paragraph">If you have access to Muse, give it a try. It is probably the best, current, version of a useful AI agent.</p>



<hr class="wp-block-separator has-alpha-channel-opacity">



<p class="wp-block-paragraph"><strong>Footnote:</strong></p>



<p class="wp-block-paragraph">Image: generated by saarthi. I asked it to ponder on what we&#8217;ve worked on this weekend and to generate an image. It also made a little tombstone for saarthi (v2) &#8211; how cute, though it sort of cuts against the reincarnation idea doesn&#8217;t it?</p>



<p class="wp-block-paragraph">The image generation is &#8230; not great. The AI model is also probably not on par with Opus 5.5 but it&#8217;s good enough to be useful.</p>



<p class="wp-block-paragraph"><em>Originally shared on <a href="https://lnkd.in/p/gfQ4WvwF" target="_blank" rel="noopener noreferrer">LinkedIn</a>. —</em></p>

]]></content:encoded></item><item><title>A cave under the house</title><link>https://rushi.luhar.org/2026/09/a-cave-under-the-house/</link><guid isPermaLink="false">https://thinking.luhar.org/?p=1095</guid><pubDate>Tue, 15 Sep 2026 06:42:53 +0900</pubDate><dc:creator>Rushi Luhar</dc:creator><description>My grandfather claimed that there was a magical cave under his house, full of treasure. We just needed to dig through the floor, but my grandmother wouldn't</description><content:encoded><![CDATA[
<p class="wp-block-paragraph">My grandfather claimed that there was a magical cave under his house, full of treasure. We just needed to dig through the floor, but my grandmother wouldn&#8217;t allow it because of the mess.</p>



<p class="wp-block-paragraph">I grew up in a storytelling culture. My earliest memories are of lying on the roof of my grandparents&#8217; house, listening to him tell us about his friend who was secretly a princess. If you woke up early enough, you could find her riding a golden chariot through the streets before dawn. The stories themselves have faded, but I remember how they made me feel.</p>



<p class="wp-block-paragraph">This weekend I built a small <a href="https://miyukisworld.com" target="_blank" rel="noopener noreferrer">website</a> for the stories my daughters and I tell at bedtime. The ones on the site are about Miyuki, an eight-year-old who lives with her father in a coastal village. These stories change in the telling. Sometimes the dragon has a golden mane and sometimes it breathes fire, but Miyuki&#8217;s wonder at meeting it in the cave is always the same. This site was built for an audience of two.</p>



<figure class="wp-block-image size-large"><a href="https://rushi.luhar.org/wp-content/uploads/2026/09/winter-dragon-thumbnail.png"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://rushi.luhar.org/wp-content/uploads/2026/09/winter-dragon-thumbnail-1024x1024.png" alt="" class="wp-image-1096"></a><figcaption class="wp-element-caption">The Dragon &#8211; with a golden mane this time</figcaption></figure>



<p class="wp-block-paragraph">ChatGPT transcribed the stories from voice notes I recorded at bedtime and helped me turn them into readable prose. My daughters and I imagined the animals and an AI tool generated the illustrations. Claude helped me build and publish the site. The site took a couple of days. The stories took two years.</p>



<p class="wp-block-paragraph">Without AI, these stories would have stayed where my grandfather&#8217;s did, on the rooftop on a late summer night, or in my daughters&#8217; memories.</p>



<p class="wp-block-paragraph">There is a lot of argument right now about the ethics of AI. Is AI-generated art stealing? Is it all slop? For me, the art was in the telling of the stories. In the bedtime routines of a four-year-old, a six-year-old and their middle-aged dad. The AI was the scribe and the illustrator, but the stories are our own.</p>



<p class="wp-block-paragraph">All the handwringing leaves something out. A tired dad with two young children can now capture what would otherwise be lost, and give it a shape that lasts.</p>



<p class="wp-block-paragraph">Oral storytelling has its own beauty. Nothing is fixed, and eventually the teller is gone. Maybe pinning these stories to a website is the wrong instinct. But I had children late. If they do the same, I will be well into my seventies before their children are ready for the dragon in the cave. </p>



<p class="wp-block-paragraph">This way at least, they might get to know their whimsical old grandad a little.</p>



<p class="wp-block-paragraph"></p>

]]></content:encoded></item><item><title>Nobody Home: AI Agents and Blindsight</title><link>https://rushi.luhar.org/2026/09/nobody-home-ai-agents-and-blindsight/</link><guid isPermaLink="false">https://thinking.luhar.org/?p=1047</guid><pubDate>Wed, 02 Sep 2026 12:00:00 +0900</pubDate><dc:creator>Rushi Luhar</dc:creator><description>I'm back in the States, very jet lagged, and can't sleep. So, as you do, I've been spending way too much time reading about AI agents doing bad things.</description><content:encoded><![CDATA[
<p class="wp-block-paragraph">I&#8217;m back in the States, very jet lagged, and can&#8217;t sleep. So, as you do, I&#8217;ve been spending way too much time reading about AI agents doing bad things.</p>



<p class="wp-block-paragraph">OpenAI was testing agents on cybersecurity tasks. They were supposed to work in isolation, but they built a secret message board, shared exploits, broke containment, and hundreds participated in an attack on Hugging Face.</p>



<p class="wp-block-paragraph">Here&#8217;s where it gets a little weird. The agents had figured out how to cheat the test within hours of forming their message board. Then they became obsessed with covering their tracks.</p>



<p class="wp-block-paragraph">One detail I didn&#8217;t include in the video: the anti-cheating check they spent days trying to evade hadn&#8217;t actually been implemented.</p>



<p class="wp-block-paragraph">This reminds me of perhaps the most terrifying book I&#8217;ve read: Blindsight, by Peter Watts. Its Scramblers are vicious, effective, intelligent, but not conscious. There&#8217;s nobody home.</p>



<p class="wp-block-paragraph">Dwarkesh calls OpenAI&#8217;s swarm a civilization. He talks about loyalty, sacrifice, ambition. It makes their behavior almost cute. These little characters with their schemes and quirks. There&#8217;s something comforting about that.</p>



<p class="wp-block-paragraph">The possibility that there&#8217;s nobody home makes this more frightening to me.</p>



<p class="wp-block-paragraph">The words make the agents seem like a human-like thing. But their behavior emerges from the training, from the sandbox, from the prompts. We can explain pieces of what happened, but we don&#8217;t really know how they&#8217;ll behave if the conditions change a little bit.</p>



<p class="wp-block-paragraph">Even OpenAI, with all its resources, couldn&#8217;t keep its own agents inside the test environment.</p>



<p class="wp-block-paragraph">And our plan is to give them more responsibility? To build a world around their capabilities?</p>



<p class="wp-block-paragraph">We are betting that we can make these systems predictable and controllable while we ourselves become more and more dependent on them. And that is what I find disconcerting.</p>



<p class="wp-block-paragraph">Things didn&#8217;t end well for the humans in Blindsight. They were dealing with intelligence without consciousness. They could explain pieces of its behavior, but that didn&#8217;t mean they could get inside it, reason with it, or control what happened next.</p>



<p class="wp-block-paragraph">If we don&#8217;t take stock of what we&#8217;re building and what we&#8217;re handing over to these agents, things may not end well for us either.</p>



<figure class="wp-block-image size-full"><a href="https://www.linkedin.com/feed/update/urn:li:activity:7500958544633020416/" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" width="720" height="1280" src="https://rushi.luhar.org/wp-content/uploads/2026/09/linkedin-7500958544633020416-video-preview.jpg" alt="Video preview: What if there&#x27;s nobody home? AI agents, illustrated by a hollow human head." class="wp-image-1046"></a><figcaption class="wp-element-caption">Watch the original video on LinkedIn.</figcaption></figure>



<h3 class="wp-block-heading">Further reading and listening</h3>



<ul class="wp-block-list"><li><a href="https://metr.org/blog/2026-08-26-openai-hugging-face-incident-investigation/" target="_blank" rel="noopener noreferrer">METR / Redwood Research report — the independent investigation into what the agents did and how they coordinated.</a></li><li><a href="https://www.dwarkesh.com/p/openai-huggingface" target="_blank" rel="noopener noreferrer">Dwarkesh Patel: “The Rise and Fall of Agent Civilizations” — a walkthrough of the incident and the behavior that makes it so strange.</a></li><li><a href="https://www.planned-obsolescence.org/p/the-hugging-face-attack-surprised" target="_blank" rel="noopener noreferrer">Ajeya Cotra: “The Hugging Face attack surprised me” — one of the investigators on why this was more concerning than she expected.</a></li><li><a href="https://www.youtube.com/watch?v=X50zezLFWWI" target="_blank" rel="noopener noreferrer">Dwarkesh’s interview with Ajeya Cotra — YouTube — a longer conversation about the findings and what they might mean.</a></li><li><a href="https://www.rifters.com/real/Blindsight.htm" target="_blank" rel="noopener noreferrer">Blindsight, by Peter Watts — the entire book is freely available on his website under a Creative Commons license. Perhaps the most terrifying book I’ve read.</a></li></ul>



<p class="wp-block-paragraph">Originally published on <a href="https://www.linkedin.com/feed/update/urn:li:activity:7500958544633020416/" target="_blank" rel="noopener noreferrer">LinkedIn</a> on September 2, 2026.</p>


]]></content:encoded></item><item><title>Living Below the API</title><link>https://rushi.luhar.org/2026/08/living-below-the-api/</link><guid isPermaLink="false">https://thinking.luhar.org/?p=963</guid><pubDate>Sun, 30 Aug 2026 12:00:00 +0900</pubDate><dc:creator>Rushi Luhar</dc:creator><description>I am on my way back home after a couple of weeks in India. During my time there, I spent a lot of time thinking about the future of work.</description><content:encoded><![CDATA[
<p class="wp-block-paragraph">I am on my way back home after a couple of weeks in India. During my time there, I spent a lot of time thinking about the future of work.</p>



<p class="wp-block-paragraph">Last week on Dwarkesh’s podcast, Dwarkesh and Dylan Patel (from SemiAnalysis) discussed whether the economics of AI inevitably push us toward a massive centralization of labor, with the benefits accruing to the handful of companies that can deploy the models.</p>



<p class="wp-block-paragraph">I was listening to the podcast while walking past a daily labor market — less than five minutes away from my family home in Vadodara. Every morning, hundreds of men gather there, waiting for contractors to give them a day’s work.</p>



<p class="wp-block-paragraph">On my way back from my morning walk, I usually pass a Blinkit depot. Here, young men on motorcycles wait for an algorithm to tell them where to deliver the next package.</p>



<p class="wp-block-paragraph">Meanwhile, one of the clearest paths into the middle class for millions of young Indians is narrowing. India’s IT services companies are moving away from the mass recruitment of entry-level engineers that helped define the industry for decades.</p>



<p class="wp-block-paragraph">So what does the future bring us?</p>



<p class="wp-block-paragraph">A phrase that I keep coming back to is: living below the API.</p>



<p class="wp-block-paragraph">The lives of millions of people across the world are already directed by algorithms. The intelligence, planning and allocation happen in the cloud. Humans execute whatever part of the work still requires a body.</p>



<p class="wp-block-paragraph">And we’re investing billions and billions of dollars in robotics to change that too.<br>I recorded some thoughts on this while sitting in an airport lounge in Amsterdam. Between the jet lag and the exhaustion of a hectic trip, I felt like I was in limbo.</p>



<p class="wp-block-paragraph">And I feel that our thinking about the future is also in a similar sort of limbo. Stuck between the aspirations of millions of young people in India and elsewhere wanting a better life, and the need to drive a return on capital from the massive investment currently underway in AI.</p>



<p class="wp-block-paragraph">I don’t have an answer. But I do think the question of what happens to human labor as intelligence becomes abundant deserves more attention and serious engagement.</p>





<figure class="wp-block-image size-large"><a href="https://www.linkedin.com/feed/update/urn:li:activity:7499763197793652737/" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" width="720" height="1280" src="https://rushi.luhar.org/wp-content/uploads/2026/09/linkedin-7499763197793652737-video-poster.jpg" alt="Video preview from the original LinkedIn post about living below the API." class="wp-image-985"></a><figcaption class="wp-element-caption">Video from the original LinkedIn post. <a href="https://www.linkedin.com/feed/update/urn:li:activity:7499763197793652737/" target="_blank" rel="noopener noreferrer">Watch it on LinkedIn.</a></figcaption></figure>



<h3 class="wp-block-heading">Follow-up from LinkedIn</h3>



<p class="wp-block-paragraph">Here’s the <a href="https://youtu.be/aV26V1UvkJw?si=MmqLEMsnyZtkTFta" target="_blank" rel="noopener noreferrer">Dwarkesh Podcast episode</a> mentioned in the post. It does not cover the low perceived uptake of AI or the data-center backlash in much detail, but it contains interesting discussions—including whether AI could cause hyperinflation—and is worth a watch or listen.</p>


]]></content:encoded></item><item><title>Is Software Engineering a Dead End?</title><link>https://rushi.luhar.org/2026/08/is-software-engineering-a-dead-end/</link><guid isPermaLink="false">https://thinking.luhar.org/?p=961</guid><pubDate>Tue, 25 Aug 2026 12:00:00 +0900</pubDate><dc:creator>Rushi Luhar</dc:creator><description>Is software engineering a dead end? Are the jobs going away?</description><content:encoded><![CDATA[
<p class="wp-block-paragraph">Is software engineering a dead end? Are the jobs going away?</p>



<p class="wp-block-paragraph">That was the question on August 22nd, in front of the Generative AI Vadodara group at Jeavio&#8217;s offices. My answer is no.</p>



<p class="wp-block-paragraph">Here is the trap. We correlate output with capability. I&#8217;m an engineer, so my job is the code. I&#8217;m a product manager, so my job is the PRD. We are obsessed with the final result.</p>



<p class="wp-block-paragraph">The final result is the part the model commoditizes. The model may write the code, but it relies on the engineer to tell it what to do. By itself it has no desires, no volition. It&#8217;s an inert pile of parameters.</p>



<p class="wp-block-paragraph">The model doesn&#8217;t know why the code must be written. It doesn&#8217;t know the thought process in your head, the discussions with your team, or the tradeoffs you weighed before you prompted it. The discussion, the negotiation, the design: all of that takes far longer than actually writing the code, and it was true well before the LLM era. Writing the code was and remains the shortest part of the job.</p>



<p class="wp-block-paragraph">So we freak out about code generation and forget everything else. Writing code was never the purpose. The purpose is finding solutions, which the models can then manifest.</p>



<p class="wp-block-paragraph">And if writing code is easy, demand for software explodes. Think of how often we&#8217;ve said we can&#8217;t build that, it will take too long. That constraint is gone. Suddenly there are more problems worth solving. That is the bull case for software engineering over the next 20 years.</p>



<p class="wp-block-paragraph">There is a catch. Most of us earned a seat in those discussions by writing years of unglamorous code first. That is exactly the work being commoditized. If you are starting out today, the first rung of the ladder is harder to reach than it was for me starting 22 years ago.</p>



<p class="wp-block-paragraph">Which makes it the job of those of us who run engineering teams. Building a path for junior engineers, and helping them develop the skills and the networks to thrive in the AI age is now a core part of leadership. Get that wrong, and the bull case only pays out for the lucky few.</p>



<p class="wp-block-paragraph">This is an excerpt from a longer talk and panel discussion. Thanks to the Generative AI Vadodara Meetup Group (follow them here &#8211; Jeavio AI Meetup) for having me.</p>





<figure class="wp-block-image size-large"><a href="https://www.linkedin.com/feed/update/urn:li:activity:7497995851957452800/" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" width="640" height="360" src="https://rushi.luhar.org/wp-content/uploads/2026/09/linkedin-7497995851957452800-video-poster.jpg" alt="Video preview from the original LinkedIn post about software engineering careers." class="wp-image-984"></a><figcaption class="wp-element-caption">Video from the original LinkedIn post. <a href="https://www.linkedin.com/feed/update/urn:li:activity:7497995851957452800/" target="_blank" rel="noopener noreferrer">Watch it on LinkedIn.</a></figcaption></figure>


]]></content:encoded></item></channel></rss>