<?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/">
  <channel>
    <title>coding-agents on S Anand</title>
    <link>https://www.s-anand.net/blog/tag/coding-agents/</link>
    <description>Recent content in coding-agents on S Anand</description>
    <generator>Hugo -- 0.156.0</generator>
    <language>en-us</language>
    <lastBuildDate>Fri, 12 Jun 2026 08:10:56 +0530</lastBuildDate>
    <atom:link href="https://www.s-anand.net/blog/tag/coding-agents/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Let AI take your exams</title>
      <link>https://www.s-anand.net/blog/let-ai-take-your-exams/</link>
      <pubDate>Fri, 12 Jun 2026 08:10:56 +0530</pubDate>
      <guid>https://www.s-anand.net/blog/let-ai-take-your-exams/</guid>
      <description>&lt;p&gt;At 2 pm IST today (Fri 12 Jun 2026), I conducted a workshop at &lt;a href=&#34;https://www.iitmparadox.org/workshops&#34;&gt;Paradox, IITM&lt;/a&gt; - at &lt;a href=&#34;https://doms.iitm.ac.in/&#34;&gt;DOMS 101&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My core message is: &amp;ldquo;AI can solve exams and help you learn. Delegate what AI can do. Learn what AI &lt;em&gt;can&amp;rsquo;t&lt;/em&gt; do instead.&amp;rdquo;&lt;/p&gt;
&lt;video controls preload=&#34;metadata&#34; width=&#34;1920&#34; height=&#34;1080&#34; style=&#34;max-width: 100%; height: auto;&#34;&gt;
  &lt;source src=&#34;https://media.s-anand.net/2026-06-12-let-ai-take-your-exam.webm&#34; type=&#34;video/webm; codecs=&amp;quot;vp9, opus&amp;quot;&#34;&gt;
&lt;/video&gt;
&lt;p&gt;&lt;a href=&#34;https://sanand0.github.io/talks/2026-06-12-let-ai-take-your-exams/&#34;&gt;My talks page for &amp;ldquo;Let AI take your exams&amp;rdquo;&lt;/a&gt; includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://sanand0.github.io/talks/2026-06-12-let-ai-take-your-exams/story.html&#34;&gt;The full story + transcript + audio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sanand0.github.io/talks/2026-06-12-let-ai-take-your-exams/codex.html&#34;&gt;How Codex solved a real exam, live&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sanand0.github.io/talks/2026-06-12-let-ai-take-your-exams/techniques.html&#34;&gt;My collection of AI-learning techniques&lt;/a&gt; - which was not covered in the workshop, but is a useful reference&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here are the &lt;a href=&#34;https://sanand0.github.io/talks/2026-06-12-let-ai-take-your-exams/story.html&#34;&gt;takeaways from the workshop&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;AI is more capable than you think — and getting smarter.&lt;/strong&gt; Recalibrate constantly what it can and can&amp;rsquo;t do. Note down what it can&amp;rsquo;t, because that is precisely where your value lives.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Delegate first; learn the rest.&lt;/strong&gt; Give everything to AI. Focus your learning on what it can&amp;rsquo;t yet do — that&amp;rsquo;s where the value will be. It&amp;rsquo;s a moving filter; revisit it every quarter.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Always use the best model, turned up high.&lt;/strong&gt; Reserve &amp;ldquo;fast and cheap&amp;rdquo; for the ~5% of moments you need a quick answer. And remember students get serious AI free via the GitHub Student Pack and Gemini.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Make the AI ask &lt;em&gt;you&lt;/em&gt; for context.&lt;/strong&gt; &amp;ldquo;If you need more information, ask me.&amp;rdquo; You don&amp;rsquo;t have to know what context it needs — push that burden back to the machine.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Beat hallucination with a maker-checker.&lt;/strong&gt; Two independent models that must agree cut errors from 14% to under 4%. Tell the checker to &amp;ldquo;find the errors,&amp;rdquo; not to grade.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Loop with feedback in verifiable environments.&lt;/strong&gt; Point an agent at an exam, a codebase, anything that scores itself — let it try, submit, read the result, retry. This is the most powerful technique AI has.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calibrate, don&amp;rsquo;t just trust.&lt;/strong&gt; Practise predicting whether AI will get something right — even on topics you don&amp;rsquo;t know. Watch for base-rate traps and familiar problems with one changed premise.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Be lazy, productively.&lt;/strong&gt; Don&amp;rsquo;t read AI&amp;rsquo;s 20-page output — train it to give you five words. Working well with AI is a management skill.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Learn from peers.&lt;/strong&gt; Multiple people trying things is how you discover what works. Non-transactional relationships are the rising currency of the AI era.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Apply the scientific method to everything.&lt;/strong&gt; Form a hypothesis, hunt for evidence, try to falsify yourself. And when a system blocks you unfairly — hack it, then publish what you learned.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here are the &lt;a href=&#34;https://sanand0.github.io/talks/2026-06-12-let-ai-take-your-exams/codex.html&#34;&gt;takeaways from how Codex solved the exam&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;An agent operates the environment; a chatbot answers the question.&lt;/strong&gt; Codex read source, ran code, clicked Check, and looped on feedback. That&amp;rsquo;s why it beat copy-paste — the exam was full of affordances a chatbot can&amp;rsquo;t touch.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verifiable environments favour AI.&lt;/strong&gt; The more checkable the exam — validators, error strings, downloadable files, a live Check button — the more it helped the agent, not the student. &amp;ldquo;AI-proof&amp;rdquo; and &amp;ldquo;feedback-rich&amp;rdquo; are opposites.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Most failures were wording, not reasoning — and the source fixed them.&lt;/strong&gt; The fix for a brittle validator was to read the validator. Pass the error message back to the agent and it converges.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Don&amp;rsquo;t guess where attempts are limited.&lt;/strong&gt; The network game punished early guesses. The recoverable mistakes had feedback; the costly ones didn&amp;rsquo;t. Triage cheap-and-certain first.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The gap between 9 and 10 was a credential, not a brain.&lt;/strong&gt; Same model, same skill. Anand&amp;rsquo;s missing mark was an invalid token. In the AI era, &amp;ldquo;can it?&amp;rdquo; often means &amp;ldquo;does it have the keys?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It cost about a coffee.&lt;/strong&gt; ~$2–3 of tokens for the whole exam, ~96% cached. The real cost is the human judgment to know when the agent is plausibly, confidently wrong.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;original-announcement&#34;&gt;Original announcement&lt;/h3&gt;
&lt;p&gt;You can join online at &lt;a href=&#34;https://meet.google.com/cpt-faee-ucx&#34;&gt;https://meet.google.com/cpt-faee-ucx&lt;/a&gt; and ask questions on chat.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agenda&lt;/strong&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You&amp;rsquo;ve been told AI can pass your exams. But what happens when you actually watch it try — live, on your questions, in real time?&lt;/p&gt;
&lt;p&gt;This workshop starts with a collective experiment: we ask coding agents to solve real exams (including IITM exams) and see how it solves them.&lt;/p&gt;
&lt;p&gt;What follows isn&amp;rsquo;t a tutorial on prompting — it&amp;rsquo;s an autopsy that reveals what your exams are actually testing, where AI confidently hallucinates, and what that means for what&amp;rsquo;s worth learning.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll leave with a reframed understanding of your degree (the goal isn&amp;rsquo;t answers, it&amp;rsquo;s the ability to catch wrong ones) and a concrete study rituals that uses AI as a Socratic sparring partner rather than an answer machine.&lt;/p&gt;
&lt;p&gt;Come with a question you got wrong recently — it&amp;rsquo;s going to be useful.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Real agenda&lt;/strong&gt;: An &lt;a href=&#34;https://en.wikipedia.org/wiki/R/IAmA&#34;&gt;ask-me-anything&lt;/a&gt; session plus real-life experiments.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-05-18-let-ai-take-your-exams.avif&#34;&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title>AI Coding Agent Subscription ROI</title>
      <link>https://www.s-anand.net/blog/ai-coding-agent-subscription-roi/</link>
      <pubDate>Sat, 30 May 2026 23:19:34 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/ai-coding-agent-subscription-roi/</guid>
      <description>&lt;p&gt;I ran &lt;a href=&#34;https://github.com/ryoppippi/ccusage&#34;&gt;&lt;code&gt;npx -y ccusage monthly --compact&lt;/code&gt;&lt;/a&gt; to get the following break-up of my AI coding agent costs.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Month&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Codex&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Claude&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;2025-09&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$37.47&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$2.29&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2025-10&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$106.79&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$9.13&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2025-11&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$100.35&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$14.24&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2025-12&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$240.69&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$24.88&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2026-01&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$100.89&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$20.28&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2026-02&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$323.21&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$29.46&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2026-03&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$1996.32&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$134.87&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2026-04&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$401.36&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$47.07&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2026-05&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$378.20&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$45.13&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This shows the ROI of my $20 subscriptions to each. I get ~$35 worth of API calls for my $20 Claude Pro subscription and ~$400 of API calls for my $20 ChatGPT Plus subscription (on top of my ChatGPT chats.)&lt;/p&gt;
&lt;p&gt;I end up using Codex a lot more - partly because it&amp;rsquo;s a bit more diligent, but mostly because it&amp;rsquo;s a lot cheaper.&lt;/p&gt;
&lt;p&gt;Clearly, subscriptions are good deal for individuals. Codex, especially.&lt;/p&gt;
&lt;p&gt;This may not be true for corporates. &lt;a href=&#34;https://simonwillison.net/2026/May/27/product-market-fit/&#34;&gt;Simon Willison&lt;/a&gt; says that Anthropic and OpenAI both changed &lt;em&gt;enterprise&lt;/em&gt; pricing to align with token prices. That means the cost of enterprise AI security is ~2-20 &lt;em&gt;times&lt;/em&gt; their token budget - which is growing rapidly.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;BTW, my moment of &lt;a href=&#34;https://en.wikipedia.org/wiki/Chatbot_psychosis&#34;&gt;AI psychosis&lt;/a&gt; was in March 2026. The coding agents had increased their limits and I was tokenmaxxing. I&amp;rsquo;m far from that limit today, but the symptoms linger.&lt;/p&gt;
&lt;noscript&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-05-30-ai-coding-agent-subscription-roi.avif&#34;&gt;&lt;/p&gt;
&lt;/noscript&gt;
&lt;p&gt;&lt;canvas id=&#34;ai-coding-agent-usage&#34;&gt;&lt;/canvas&gt;&lt;/p&gt;
&lt;script&gt;
  (async function () {
    const rows = [
      { month: &#39;2025-09&#39;, claude: 2.29, codex: 37.47 },
      { month: &#39;2025-10&#39;, claude: 9.13, codex: 106.79 },
      { month: &#39;2025-11&#39;, claude: 14.24, codex: 100.35 },
      { month: &#39;2025-12&#39;, claude: 24.88, codex: 240.69 },
      { month: &#39;2026-01&#39;, claude: 20.28, codex: 100.89 },
      { month: &#39;2026-02&#39;, claude: 29.46, codex: 323.21 },
      { month: &#39;2026-03&#39;, claude: 134.87, codex: 1996.32 },
      { month: &#39;2026-04&#39;, claude: 47.07, codex: 401.36 },
      { month: &#39;2026-05&#39;, claude: 45.13, codex: 378.20 }
    ];

    const theme = {
      ink: &#39;#231f20&#39;,
      muted: &#39;#6b625c&#39;,
      grid: &#39;rgba(35, 31, 32, 0.11)&#39;,
      axis: &#39;rgba(35, 31, 32, 0.22)&#39;,
      claude: &#39;#b96d3a&#39;,
      codex: &#39;#2d5f87&#39;,
      tooltip: &#39;rgba(35, 31, 32, 0.94)&#39;
    };

    const canvas = document.getElementById(&#39;ai-coding-agent-usage&#39;);

    Object.assign(canvas.style, {
      display: &#39;block&#39;,
      width: &#39;100%&#39;,
      height: &#39;100%&#39;,
      minHeight: &#39;480px&#39;
    });

    function loadChartJs() {
      if (window.Chart) return Promise.resolve();
      return new Promise((resolve, reject) =&gt; {
        const script = document.createElement(&#39;script&#39;);
        script.src = &#39;https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js&#39;;
        script.onload = resolve;
        script.onerror = reject;
        document.head.appendChild(script);
      });
    }

    await loadChartJs();

    const usd = new Intl.NumberFormat(&#39;en-US&#39;, {
      style: &#39;currency&#39;,
      currency: &#39;USD&#39;,
      maximumFractionDigits: 2
    });

    const compactUsd = new Intl.NumberFormat(&#39;en-US&#39;, {
      style: &#39;currency&#39;,
      currency: &#39;USD&#39;,
      notation: &#39;compact&#39;,
      maximumFractionDigits: 1
    });

    Chart.defaults.font.family = document.body.style.fontFamily;
    Chart.defaults.color = theme.muted;

    new Chart(canvas, {
      type: &#39;line&#39;,
      data: {
        labels: rows.map(d =&gt; d.month),
        datasets: [
          {
            label: &#39;Claude&#39;,
            data: rows.map(d =&gt; d.claude),
            borderColor: theme.claude,
            backgroundColor: theme.claude,
            pointBackgroundColor: &#39;#ffffff&#39;,
            pointBorderColor: theme.claude,
            pointBorderWidth: 2.5,
            pointRadius: 4,
            pointHoverRadius: 7,
            borderWidth: 3,
            tension: 0.22
          },
          {
            label: &#39;Codex&#39;,
            data: rows.map(d =&gt; d.codex),
            borderColor: theme.codex,
            backgroundColor: theme.codex,
            pointBackgroundColor: &#39;#ffffff&#39;,
            pointBorderColor: theme.codex,
            pointBorderWidth: 2.5,
            pointRadius: 4,
            pointHoverRadius: 7,
            borderWidth: 3,
            tension: 0.22
          }
        ]
      },
      options: {
        responsive: true,
        maintainAspectRatio: false,
        interaction: { mode: &#39;index&#39;, intersect: false },
        layout: { padding: { top: 12, right: 18, bottom: 4, left: 8 } },
        plugins: {
          legend: {
            position: &#39;bottom&#39;,
            labels: {
              usePointStyle: true,
              pointStyle: &#39;circle&#39;,
              boxWidth: 8,
              boxHeight: 8,
              padding: 22,
              color: theme.muted,
              font: { size: 13, weight: &#39;650&#39; }
            }
          },
          tooltip: {
            enabled: true,
            mode: &#39;index&#39;,
            intersect: false,
            backgroundColor: theme.tooltip,
            bodyFont: { size: 13, weight: &#39;650&#39; },
            padding: 13,
            displayColors: true,
            callbacks: {
              title: items =&gt; items[0].label,
              label: item =&gt; `${item.dataset.label}: ${usd.format(item.parsed.y)}`,
              afterBody: items =&gt; {
                const i = items[0].dataIndex;
                const total = rows[i].claude + rows[i].codex;
                return `Combined: ${usd.format(total)}`;
              }
            }
          }
        },
        scales: {
          x: {
            grid: { color: &#39;rgba(35,31,32,0.07)&#39;, drawTicks: false },
            border: { color: theme.axis },
            ticks: { maxRotation: 0, autoSkip: false, color: theme.muted, font: { size: 12 } }
          },
          y: {
            beginAtZero: true,
            suggestedMax: 2200,
            grid: { color: theme.grid },
            border: { display: false },
            ticks: {
              padding: 8,
              color: theme.muted,
              callback: value =&gt; value &gt;= 1000 ? compactUsd.format(value) : &#39;$&#39; + value
            },
            title: {
              display: true,
              text: &#39;Cost (USD)&#39;,
              color: theme.muted,
              font: { size: 12, weight: &#39;650&#39; }
            }
          }
        }
      }
    });
  })();
&lt;/script&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;14 Jun 2026&lt;/strong&gt;: &lt;a href=&#34;https://x.com/SemiAnalysis_/status/2064815044085318040&#34;&gt;SemiAnalysis&lt;/a&gt; tested and found that a $20 Claude Pro gives you ~$400 and a $100 Claude Max gives you ~$2,000 of API usage. For ChatGPT, the numbers are ~$700 and $3,500.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Correcting instruction debt</title>
      <link>https://www.s-anand.net/blog/correcting-instruction-debt/</link>
      <pubDate>Mon, 25 May 2026 16:30:02 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/correcting-instruction-debt/</guid>
      <description>&lt;p&gt;Here&amp;rsquo;s another AI-generated post, with &lt;em&gt;&lt;strong&gt;Anand&lt;/strong&gt;&lt;/em&gt; editor notes. But I&amp;rsquo;ve also added my own version of the post below.&lt;/p&gt;
&lt;!--
RESEARCH: https://chatgpt.com/c/6a13dc2a-4d28-83ec-ae9b-016cd00b13a9
BLOG: https://claude.ai/chat/17173628-db14-42a4-b9c4-1aff78d5edf3
--&gt;
&lt;section ai-disclosure=&#34;ai-generated&#34; data-ai-model=&#34;claude-sonnet-4.6&#34; data-ai-provider=&#34;Anthropic&#34;&gt;
&lt;p&gt;I told my &amp;ldquo;&lt;a href=&#34;https://github.com/sanand0/scripts/blob/48a095e0a956841a8e395345d31f79b1ae99d4a6/freeslots.py&#34;&gt;find a free calendar slot&lt;/a&gt;&amp;rdquo; script to &amp;ldquo;&lt;a href=&#34;https://github.com/sanand0/scripts/commit/a8f5fb9eb5640b828618a33f2c89252e67664487#r186420170&#34;&gt;Avoid weekends and holidays&lt;/a&gt;&amp;rdquo;. Wednesday vanished. Turns out it&amp;rsquo;s a Singapore holiday (&lt;em&gt;&lt;strong&gt;Anand&lt;/strong&gt;: It&amp;rsquo;s &lt;a href=&#34;https://en.wikipedia.org/wiki/Eid_al-Adha&#34;&gt;Eid al-Adha&lt;/a&gt;&lt;/em&gt;), — irrelevant for the people I was meeting in other zones. &lt;strong&gt;I&amp;rsquo;d debugged my own helpful rule.&lt;/strong&gt; (&lt;em&gt;&lt;strong&gt;Anand&lt;/strong&gt;: What? What does &amp;ldquo;debugged my own helpful rule&amp;rdquo; even mean?&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;Annoying. But revealing. I went to ChatGPT — not to fix the script, but to think: (&lt;em&gt;&lt;strong&gt;Anand&lt;/strong&gt;: True. I had no clue what to do.&lt;/em&gt;)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Could you maybe interview me to figure out what direction I might want to take this train of thought in&amp;hellip;? Just ask me two or three questions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;(The whole point was to &lt;em&gt;not&lt;/em&gt; take on more work myself.)&lt;/p&gt;
&lt;p&gt;Two questions in, it named it: &lt;strong&gt;instruction debt.&lt;/strong&gt; (&lt;em&gt;&lt;strong&gt;Anand&lt;/strong&gt;: which is such a cool term that I&amp;rsquo;ll keep it.&lt;/em&gt;)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Not &amp;ldquo;bad instructions,&amp;rdquo; because the original instruction was reasonable. The debt is created when a rule that once reduced cognitive load later creates invisible work, missed options, brittle behavior, or debugging cost.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That hit. The script obeyed too literally. I got no warning. Worst of all, I&amp;rsquo;d scored a self-goal — given my future self an instruction that would bother me, while believing I was being helpful.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I asked it to research further — and to mine my own agent logs as evidence. (&lt;a href=&#34;https://www.s-anand.net/blog/how-i-use-local-mcp/&#34;&gt;Local MCP&lt;/a&gt; runs bash; ChatGPT can read &lt;code&gt;~/.codex&lt;/code&gt;, &lt;code&gt;~/.claude&lt;/code&gt;, &lt;code&gt;~/.copilot&lt;/code&gt; and run &lt;code&gt;~/code/scripts/agentlog.py&lt;/code&gt; directly.) It came back with a taxonomy. I asked it to stress-test against more correction turns and &lt;strong&gt;discard what didn&amp;rsquo;t survive&lt;/strong&gt;. (&lt;em&gt;&lt;strong&gt;Anand&lt;/strong&gt;: Basically, I said, analyze my logs.&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;It did. The robust categories, each grounded in an actual correction I&amp;rsquo;d made:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Objective framing&lt;/strong&gt; — &amp;ldquo;don&amp;rsquo;t base teachability on scores… base it on the pattern of errors.&amp;rdquo; Wrong proxy. (&lt;em&gt;&lt;strong&gt;Anand&lt;/strong&gt;: Oh, yeah, I was trying to find patterns of errors in student submissions.&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evidence/modeling&lt;/strong&gt; — Ticketmaster classifier overfit on &lt;code&gt;venue_name&lt;/code&gt;. Predictive, not causal. (&lt;em&gt;&lt;strong&gt;Anand&lt;/strong&gt;: True. Stupid model said, &amp;ldquo;tickets in this stadium sell more&amp;rdquo; as if it were actionable.&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Constraint semantics&lt;/strong&gt; — the Singapore holiday. Hard filter where a warning would do.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;State/action&lt;/strong&gt; — Darwinbox: &amp;ldquo;Click Clockin&amp;rdquo; clocked me &lt;em&gt;out&lt;/em&gt;. No pre/post-state check. (&lt;em&gt;&lt;strong&gt;Anand&lt;/strong&gt;: The button said &amp;ldquo;Clock in OR out&amp;rdquo;. I was clocked in. It clicked, thinking that&amp;rsquo;ll clock me in, without seeing that the button was already pressed.&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Representation/path&lt;/strong&gt; — blog migration: &amp;ldquo;ALL LINKS relative&amp;rdquo; broke nested URLs. (&lt;em&gt;&lt;strong&gt;Anand&lt;/strong&gt;: Yeah, relative links in my blog have been problematic for 20 years.&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validation&lt;/strong&gt; — OCBC PDF: row balances passed, totals failed by SGD 6.9M. (_&lt;strong&gt;Anand&lt;/strong&gt;: I&amp;rsquo;m nowhere near this rich. Codex just messed up &lt;em&gt;badly&lt;/em&gt;.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ChatGPT&amp;rsquo;s own self-critique was the best part:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Lack of carefulness&amp;rdquo; should not be a category. It is not actionable. (_&lt;strong&gt;Anand&lt;/strong&gt;: No idea what this means!)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;Then the pivot. It proposed a &lt;strong&gt;60-line &amp;ldquo;Operating Contract&amp;rdquo;&lt;/strong&gt; for my &lt;code&gt;AGENTS.md&lt;/code&gt;. I pushed back:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The operating contract is WAY too long. I was thinking 1 line, not 60&amp;hellip; fast and frugal heuristics that cover the majority of the scenarios, rather than hard-coding everything, is what we&amp;rsquo;re suggesting coding agents do in the first place.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It came back with three lines. &lt;a href=&#34;https://github.com/sanand0/scripts/commit/7be44855ac6063a364163181585b8eb5721fc469#r186421964&#34;&gt;I pasted them in verbatim&lt;/a&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;For non-trivial tasks, define the user-visible invariant: &amp;#34;done means ___&amp;#34;; verify that invariant before claiming success.
Treat constraints as soft preferences unless safety, privacy, data loss, credentials, or the current request makes them hard; surface any constraint that filters, skips, blocks, or deletes.
Prefer simple, rerunnable changes: inspect real inputs/state first, use existing tools/libs, log counts/examples, and call out uncertainty.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Line 1 catches OCBC and clock-in. Line 2 catches the Singapore holiday. Line 3 catches the toil.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Don&amp;rsquo;t add the rule to your head. Add it to the file the agent already reads.&lt;/strong&gt; (&lt;em&gt;&lt;strong&gt;Anand&lt;/strong&gt;: Oh, so totally true!&lt;/em&gt;)&lt;/p&gt;
&lt;/section&gt;
&lt;hr&gt;
&lt;p&gt;Actually, the first half of the above AI-generated post didn&amp;rsquo;t really resonate with me. So let me explain in my own words what I did.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I found that, for some reason, this Wednesday never appears when I ask for &lt;a href=&#34;https://github.com/sanand0/scripts/blob/48a095e0a956841a8e395345d31f79b1ae99d4a6/freeslots.py&#34;&gt;find a free calendar slot&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I asked Codex, &amp;ldquo;Why on earth is this happening?&amp;rdquo; It said, &lt;a href=&#34;https://github.com/sanand0/scripts/commit/a8f5fb9eb5640b828618a33f2c89252e67664487#r186420170&#34;&gt;because you told me to exclude holidays&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;That got me thinking, where am I giving instructions that shoot me in the foot? And ChatGPT did a long, detailed analysis of my coding agent logs and came up with a bunch of examples and categorization.&lt;/li&gt;
&lt;li&gt;I didn&amp;rsquo;t bother reading it. I told it in &lt;a href=&#34;https://www.google.com/search?q=henry+kissinger+is+that+the+best+you+can+do&#34;&gt;Henry Kissinger style&lt;/a&gt;: can you do better?&lt;/li&gt;
&lt;li&gt;I didn&amp;rsquo;t bother reading it again. I told it, &amp;ldquo;Just tell me what to put into AGENTS.md&amp;rdquo;. I don&amp;rsquo;t want to do the work every time. &lt;strong&gt;YOU&lt;/strong&gt; do the work. Automate it!&lt;/li&gt;
&lt;li&gt;It gave me 60 lines. I said, &amp;ldquo;What rubbish! I can&amp;rsquo;t review 60. Just 3, max.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/commit/7be44855ac6063a364163181585b8eb5721fc469#r186421964&#34;&gt;I copied that into AGENTS.md&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;For non-trivial tasks, define the user-visible invariant: &amp;ldquo;done means ___&amp;rdquo;; verify that invariant before claiming success.&lt;/li&gt;
&lt;li&gt;Treat constraints as soft preferences unless safety, privacy, data loss, credentials, or the current request makes them hard; surface any constraint that filters, skips, blocks, or deletes.&lt;/li&gt;
&lt;li&gt;Prefer simple, rerunnable changes: inspect real inputs/state first, use existing tools/libs, log counts/examples, and call out uncertainty.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;The first makes &lt;em&gt;total&lt;/em&gt; sense. Define &amp;ldquo;done&amp;rdquo;.&lt;br&gt;
The second makes &lt;em&gt;some&lt;/em&gt; sense - that&amp;rsquo;s exactly what I did wrong with the calendar.&lt;br&gt;
The third is supposed to &amp;ldquo;handle my recurring style&amp;rdquo; - and &lt;em&gt;kind of&lt;/em&gt; makes sense, so I&amp;rsquo;ll let it be.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-05-25-correcting-instruction-debt.avif&#34;&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title>AI advice for teams</title>
      <link>https://www.s-anand.net/blog/ai-advice-for-teams/</link>
      <pubDate>Sat, 25 Apr 2026 12:17:03 -0400</pubDate>
      <guid>https://www.s-anand.net/blog/ai-advice-for-teams/</guid>
      <description>&lt;p&gt;I updated my &lt;a href=&#34;https://www.s-anand.net/blog/ai-advice/&#34;&gt;AI Advice&lt;/a&gt; page by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Transcribing my calls in the last 2 months (Gemini 3.1 Pro, &lt;a href=&#34;https://github.com/sanand0/blog/blob/384c39c752a580f7ae9c49fafb44a8a09fb75175/pages/prompts/transcribe-call-recording.md&#34;&gt;&amp;ldquo;Transcribe this call recording&amp;hellip;&amp;rdquo;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Extracting AI advice (Gemini 3 Flash, &amp;ldquo;Summarize ALL AI-related advice &amp;hellip; into 1-sentence bullets&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;Asking &lt;a href=&#34;https://claude.ai/share/5aa54ed5-fc11-4730-9ea8-7ace18dc6c00&#34;&gt;Claude&lt;/a&gt;, ChatGPT, and Gemini to document what&amp;rsquo;s new / changed. &lt;!-- https://claude.ai/chat/f4e096d6-eb76-4ef0-981f-29217514c209 --&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I added this request:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;But, and this is IMPORTANT, analyze my original writing style, write it exactly in that style, and then verify to make sure it follows the same style (correcting where required.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This worked &lt;em&gt;surprisingly&lt;/em&gt; well with Claude 4.6 Sonnet (adaptive). I used the resulting &lt;a href=&#34;https://www.s-anand.net/blog/ai-advice/&#34;&gt;ai-advice.md&lt;/a&gt; almost verbatim.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the full list of changes it suggested:&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-04-25-ai-advice-for-teams.avif&#34;&gt; &lt;!-- https://chatgpt.com/c/69ed0051-b88c-83ea-8c8f-97b42015fd9d --&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The biggest structural update:&lt;/strong&gt; ai-advice.md is still written as &amp;ldquo;how individuals use AI better.&amp;rdquo; Your actual advice has evolved into &amp;ldquo;how people, teams, and organizations operate in the agent era.&amp;rdquo; The whole document should eventually be reorganized to reflect this.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;insert&#34;&gt;INSERT&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Build an AI workspace, not just a chat &lt;em&gt;(Very high frequency — 10+ docs)&lt;/em&gt;&lt;/strong&gt; Every serious AI project needs a project folder containing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; — folder-specific instructions the agent reads on startup&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prompts.md&lt;/code&gt; — all prompts version-controlled as source code&lt;/li&gt;
&lt;li&gt;&lt;code&gt;skills/&lt;/code&gt; — encapsulated successful workflows (see #2)&lt;/li&gt;
&lt;li&gt;Git repository with commits at every checkpoint&lt;/li&gt;
&lt;li&gt;Test fixtures, synthetic datasets, logs, outputs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Treat prompts as the real IP. Code is disposable; prompts, tests, and skills are assets.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Encapsulate successful workflows into reusable skills &lt;em&gt;(Very high frequency)&lt;/em&gt;&lt;/strong&gt; Once an agent succeeds at a task three times, encapsulate it: the prompt, tools used, edge cases, constraints, validation tests. Store in a &lt;code&gt;skill.md&lt;/code&gt; file. Skills are the new software libraries — they make workflows deterministically repeatable without re-explaining everything. Use agents to &lt;em&gt;build&lt;/em&gt; these skills by asking them to summarize what they learned.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Run coding agents safely: Git + Docker &lt;em&gt;(Very high frequency)&lt;/em&gt;&lt;/strong&gt; Always: (a) work inside a Git repository and instruct the agent to commit as it goes — &lt;code&gt;git checkout&lt;/code&gt; is your undo button, (b) run agents inside Docker containers so they cannot touch your actual files, (c) use &amp;ldquo;YOLO mode&amp;rdquo; (skip permission prompts) only inside isolated containers. These aren&amp;rsquo;t optional for anything beyond throwaway prototypes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;ldquo;LLMs hallucinate, but code doesn&amp;rsquo;t&amp;rdquo; — use code as the truth engine &lt;em&gt;(Very high frequency)&lt;/em&gt;&lt;/strong&gt; Broaden &amp;ldquo;have it write code to process numbers&amp;rdquo; significantly. The mantra is: wherever correctness matters, make the AI produce &lt;em&gt;executable code or logic&lt;/em&gt; rather than natural language answers. Code either works or fails — it&amp;rsquo;s binary and auditable. Use domain-specific languages (Prolog-like rule trees, schema validators, policy-as-code) for logic-heavy tasks. This is the primary mechanism for eliminating hallucinations in production.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Build verification into the workflow, not after it &lt;em&gt;(Very high frequency)&lt;/em&gt;&lt;/strong&gt; Verification should be engineered as a product feature, not added as a post-hoc check. Every output should expose: source citations linked to snippets, confidence levels, what&amp;rsquo;s unverifiable, disagreement signals, and audit logs. Use model disagreement as a &lt;em&gt;routing signal&lt;/em&gt; — when models disagree, send to human review; when they agree, lower review priority. Build golden sets to measure actual accuracy on your specific task.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Use AI for exception triage, not blanket automation &lt;em&gt;(High frequency)&lt;/em&gt;&lt;/strong&gt; Let AI classify outputs as red/yellow/green: green = automate fully, yellow = flag for review, red = human required. This is more mature than &amp;ldquo;80-90% AI, human for last mile.&amp;rdquo; It says &lt;em&gt;exactly&lt;/em&gt; where the human loop belongs, and it scales: automation handles routine volume while humans focus only on high-stakes exceptions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Use synthetic data deliberately &lt;em&gt;(High frequency)&lt;/em&gt;&lt;/strong&gt; Not just &amp;ldquo;realistic fake data for prototyping&amp;rdquo; — generate hypothesis-driven synthetic data that embeds specific behavioral patterns, edge cases, and known failure modes you expect in production. This lets you stress-test before real data arrives, without compliance concerns, and at whatever messiness level you choose.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Treat demos as imagination accelerators &lt;em&gt;(High frequency)&lt;/em&gt;&lt;/strong&gt; Demos are not just proof-of-concept — they are the fastest way to expand what stakeholders think is possible. Use &amp;ldquo;Hollywood set&amp;rdquo; demos: working outputs, simulated backends, precomputed workflows, client-specific synthetic data. Only demo live if the task completes in under 10 minutes. Simulate or precompute slow, expensive, or credential-heavy workflows. Show the output first; defend the architecture only if asked.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Maintain a living model radar — don&amp;rsquo;t freeze model advice &lt;em&gt;(High frequency)&lt;/em&gt;&lt;/strong&gt; Specific model recommendations go stale within months. The durable advice: continuously blind-test frontier models on your &lt;em&gt;exact&lt;/em&gt; task, maintain a benchmark set, and route by capability. Current pattern: Claude for coding/aesthetic/style/writing; ChatGPT for rigorous analysis/financial modeling/extended thinking; Gemini for Google Workspace/research/video/speed. But measure this; don&amp;rsquo;t assume it. Additionally: use LiteLLM or Portkey as open-source gateways for organizational cost observability across models.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The Jevons Paradox applies to knowledge work &lt;em&gt;(High frequency in strategic contexts)&lt;/em&gt;&lt;/strong&gt; AI making cognitive tasks cheaper will &lt;em&gt;increase&lt;/em&gt; total demand for cognitive work, not reduce it. Human roles shift from execution to verification and judgment — but there&amp;rsquo;s a talent crunch coming for verification roles. Hire now for people who can check, certify, and take accountability for AI output.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Use games to teach AI, not slide decks &lt;em&gt;(High frequency)&lt;/em&gt;&lt;/strong&gt; Replace passive L&amp;amp;D with Capture the Flag challenges, treasure hunts, forbidden-word jailbreaks, prompt-injection games, and coding-agent races. Evaluate proficiency by task completion speed with an agent, not syntax recall. Design challenges where using a coding agent is the only practical way to finish in time — this creates binary signal: those who can use agents solve everything; those who can&amp;rsquo;t solve nothing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bifurcate hallucination advice: operational vs. creative &lt;em&gt;(Medium-high frequency)&lt;/em&gt;&lt;/strong&gt; Current advice mixes these. Split explicitly:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;For operations, facts, finance, law, regulated outputs&lt;/strong&gt;: eliminate hallucinations via multi-agent consensus, code execution, source grounding, and human routing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;For ideation, brainstorming, research&lt;/strong&gt;: deliberately &lt;em&gt;use&lt;/em&gt; hallucinations as stochastic ideation. Run the same prompt multiple times. Use weaker models without extended thinking — &amp;ldquo;speaking without thinking&amp;rdquo; produces more imaginative divergence&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Move from dashboards to answers and actions &lt;em&gt;(High frequency)&lt;/em&gt;&lt;/strong&gt; Replace static BI dashboards with AI that answers &amp;ldquo;what should I do?&amp;rdquo; not just &amp;ldquo;what happened?&amp;rdquo; Ask AI to anticipate a stakeholder&amp;rsquo;s questions and pre-answer them. The endpoint: proactive agents that push insights to individuals rather than passive dashboards that wait to be queried.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sell outcomes, accountability, and verification — not software &lt;em&gt;(High frequency in business contexts)&lt;/em&gt;&lt;/strong&gt; Software is a depreciating asset; any client can regenerate it tomorrow. Durable value: judgment, trust, domain expertise, data access, and taking responsibility for results. Shift toward outcome-based pricing. The &amp;ldquo;neck to catch&amp;rdquo; — human accountability for AI output — is increasingly the product.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Measure AI adoption by behavior, not attendance &lt;em&gt;(Medium frequency)&lt;/em&gt;&lt;/strong&gt; Track: unique days of active use (regularity beats volume), token consumption trends, tool diversity, quality of outputs produced, and business outcomes driven. Usage logs from NetSkope or LLM gateways give better signal than training completion rates.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Assess AI literacy by how people prompt, verify, and recover &lt;em&gt;(High frequency in education contexts)&lt;/em&gt;&lt;/strong&gt; Don&amp;rsquo;t evaluate final answers — AI can produce those. Evaluate: quality of prompts (specificity, guardrails, constraints), ability to identify and fix hallucinations, recovery from errors, and process discipline. Multiple-choice questions are essentially obsolete for AI-era assessment. Assess the &lt;em&gt;process&lt;/em&gt;, not the output.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Use AI-native output formats &lt;em&gt;(High frequency)&lt;/em&gt;&lt;/strong&gt; Stop defaulting to PPT or PDF. AI generates HTML, SVG, JSON, interactive dashboards, podcasts, sketch notes, and games better than it generates static slides. A single source document can auto-generate: podcasts, explainer videos, interactive quizzes, sketch notes, executive summaries, slide decks. Use NotebookLM for audio synthesis from diverse sources.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Audit your own behavior via AI &lt;em&gt;(Medium frequency)&lt;/em&gt;&lt;/strong&gt; Feed your own meeting transcripts, email chains, and call recordings into LLMs to find personal blind spots, biases, and recurring errors. Conduct project post-mortems on email threads. Use adversarial prompting — pit GPT against Claude to stress-test your plans. This expands &amp;ldquo;mine your digital exhaust&amp;rdquo; from insight into behavioral coaching.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Optimize content for the agentic web &lt;em&gt;(Medium frequency)&lt;/em&gt;&lt;/strong&gt; More content is now consumed by AI agents than humans. Publish in formats AI can parse, cite, and remix: clean metadata, semantic structure, source links, reusable chunks. Develop MCP connectors to your proprietary content. This is SEO for the agentic era.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ask AI what it needs before starting &lt;em&gt;(Medium frequency)&lt;/em&gt;&lt;/strong&gt; Don&amp;rsquo;t guess what context to provide. Ask: &amp;ldquo;What information, tools, files, and access do you need to do X?&amp;rdquo; Let the agent specify missing pieces before it starts, not halfway through. Simple and dramatically reduces mid-task derailment.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;update&#34;&gt;UPDATE&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Two-Strike Rule → time-box and preserve context before abandoning
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; Abandon after two failed fix attempts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; After two failed repair loops: (a) ask the agent to produce a failure summary, minimal reproduction case, and fresh plan before abandoning, (b) switch to a time limit (2 hours) not an attempt limit, (c) in Docker/YOLO mode, let agents iterate without this limit. The current rule was written for chat-based coding; agentic tools self-correct across many more iterations. Pure restarts discard useful diagnostic context.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Paid subscription → quality + friction, not blanket privacy
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;Your data isn&amp;rsquo;t used to train the models. This is the best $20/month.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; Paid subscriptions give better models and less friction. For &lt;em&gt;privacy&lt;/em&gt;, the picture is more nuanced: consumer plans (ChatGPT, Claude.ai) have data controls you must check and configure; Enterprise/API plans explicitly exclude training by default. For sensitive work, use Enterprise/API or run locally. Don&amp;rsquo;t assume consumer paid = private. &lt;a href=&#34;https://help.openai.com/en/articles/7730893-data-controls-faq&#34;&gt;OpenAI Data Controls FAQ&lt;/a&gt; Also: maintain subscriptions to all three major models (~$60-80/month), not one. Heavy users: consider the $100/month tier to eliminate friction during peak experimentation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Model recommendations — replace frozen Q1 2026 advice with routing logic
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;Claude/Gemini still good at UI. GPT for rigorous testing.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; See INSERT #9. Add: use a more capable model (Claude) to write scripts and instructions for cheaper models (Codex) to execute. Benchmark on your exact task; these rankings shift quarterly.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Intern&amp;rdquo; — expand to multiple mental models by task
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;It&amp;rsquo;s as smart as a post-graduate intern.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; The right mental model depends on task:
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Brilliant but stubborn intern&lt;/em&gt;: excellent at fetching/preparing materials, unreliable for precise design or nuanced judgment&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Fresh MBA who needs full context&lt;/em&gt;: give it the same rules, examples, and feedback you&amp;rsquo;d give a new hire&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Senior mentor to defer to&lt;/em&gt;: for syntax, library knowledge, and coding patterns, AI may know better than you — defer (&amp;ldquo;Mentor Flip&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Alien intelligence that needs coaching&lt;/em&gt;: for novel tasks, it needs explanation, not just instruction&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Human-in-the-loop → human-on-the-loop with exception routing
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;Handle 80-90% of effort, human expert for last mile validation.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; More mature framing — &amp;ldquo;human-on-the-loop&amp;rdquo; rather than &amp;ldquo;human-in-the-loop.&amp;rdquo; Build a confidence-building period first; validate; then grant autonomy for routine cases. The human&amp;rsquo;s job is to review exceptions (disagreements, low-confidence, high-stakes), not everything.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Code is disposable&amp;rdquo; → prompts and skills are the real assets
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;Code is an AI compilation artifact. Don&amp;rsquo;t get attached to it.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; Code is disposable &lt;em&gt;when the workflow is disposable&lt;/em&gt;. But prompts, skills, tests, data contracts, and validation logic are permanent assets that compound in value. Preserve these even when you throw away the code.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Don&amp;rsquo;t learn to code&amp;rdquo; → learn logic, not syntax
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;As a non-technical person, build apps. Don&amp;rsquo;t learn to code.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; Don&amp;rsquo;t worship syntax — it&amp;rsquo;s declining in value. But learn enough conceptual fluency to: specify what you want clearly, write test cases, debug outputs, assess security implications, and judge whether AI-generated code is correct. Syntax is less valuable; understanding is not.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Buy, don&amp;rsquo;t build&amp;rdquo; → buy foundations, build thin orchestration
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;Don&amp;rsquo;t train models. Build orchestration layers and proprietary data workflows.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; Don&amp;rsquo;t build or fine-tune base models (they&amp;rsquo;re obsolete on arrival). Do build: thin domain-specific orchestration, skills/prompt libraries, verification layers, data pipelines, and MCP connectors. Avoid custom SLMs unless you have strict air-gap, privacy, or cost-at-scale constraints — the &amp;ldquo;SLM Depreciation Trap&amp;rdquo; (custom models obsolete before deployment) is real.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Wait for models to improve&amp;rdquo; → apply a 1-3 month ROI window
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;Things not possible today will be possible in a few months.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; Apply a test: if a workaround won&amp;rsquo;t pay back within 1-3 months, wait. If building creates learning, adoption, or strategic leverage now, prototype anyway. The advice shouldn&amp;rsquo;t be &amp;ldquo;wait&amp;rdquo; or &amp;ldquo;build&amp;rdquo; — it should be &amp;ldquo;calculate the ROI window.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Data safety → specific operational checklist
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; Send schema not data; pick trusted providers; anonymize.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; Add specific controls: set Google Drive access to read-only and Gmail to draft-only for AI; keep a dedicated &amp;ldquo;AI-only&amp;rdquo; folder rather than granting full Drive access; use separate browser profiles for work/personal AI; run agents locally (Codex, Claude Code on-machine) for sensitive data; use MCP for restricted, scoped data access. Anonymize before cloud; schema+local-execution for sensitive tabular data.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Hallucinations can be a great feature&amp;rdquo; → boundary-condition this
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;Don&amp;rsquo;t always eliminate them. Use as appropriate.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; Great for: ideation, research brainstorming, creative divergence, humor. Never acceptable for: facts, finance, law, medicine, safety, or regulated outputs without verification. Be explicit about which mode you&amp;rsquo;re in.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Skills section — &amp;ldquo;declining&amp;rdquo; needs nuance
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;Domain depth&amp;rdquo; listed as declining.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; Routine versions of domain skills decline; judgment-heavy versions grow. Domain depth matters most for: problem framing, validation design, incentive mapping, ethics, and edge-case recognition. Don&amp;rsquo;t blanket-advise people to abandon domain expertise.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;delete&#34;&gt;DELETE&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Two-Strike Rule&lt;/strong&gt; (current form): Outdated for agentic tools; replaced by time-boxing + context preservation |&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Paid subscription = privacy&amp;rdquo;&lt;/strong&gt; (the simple version): Factually incomplete; needs the consumer/enterprise/API distinction |&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;If all models agree, accept&amp;rdquo;&lt;/strong&gt;: Too strong. Soften to: &amp;ldquo;agreement lowers review priority; measure on a golden set&amp;rdquo; |&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Claude/Gemini for UI, GPT for rigorous testing&amp;rdquo; Q1 2026 frozen claim&lt;/strong&gt;: Goes stale; replace with routing logic + model radar |&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Prefer less experienced people&amp;rdquo;&lt;/strong&gt; (blunt version): Replace with: &amp;ldquo;prefer AI-native, humble, high-agency people — could be interns, domain experts, or non-coders; the traits are delegation, verification, and fast learning&amp;rdquo; |&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Wait for the crisis&amp;rdquo;&lt;/strong&gt; (adoption section): Reframe to: &amp;ldquo;watch for urgency windows; arrive prepared with demos, risk framing, and low-friction integration&amp;rdquo; |&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Domain depth is declining&amp;rdquo;&lt;/strong&gt; (blanket): Replace with nuanced version from UPDATE #12 |&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Use AI for validation is safe and effective&amp;rdquo;&lt;/strong&gt; (unqualified): Replace with: &amp;ldquo;use AI to &lt;em&gt;design&lt;/em&gt; validation workflows; don&amp;rsquo;t treat AI output as validation itself&amp;rdquo; |&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Repurpose content and data&amp;rdquo; TODO placeholder&lt;/strong&gt;: Fill it in or remove it |&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Have it write code to process numbers&amp;rdquo;&lt;/strong&gt;: Upgrade to &amp;ldquo;LLMs hallucinate, but code doesn&amp;rsquo;t&amp;rdquo; — write &lt;em&gt;and execute&lt;/em&gt; code for correctness |&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;contradictions&#34;&gt;Contradictions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;Stay out of the way&amp;rdquo; vs. &amp;ldquo;verify everything&amp;rdquo;: Risk ladder: low-risk/creative/prototype = get out of the way; high-risk/regulated/persistent = full verification stack |&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Code is disposable&amp;rdquo; vs. &amp;ldquo;use Git, Docker, versioning&amp;rdquo;: Code may be disposable; &lt;em&gt;recovery, reproducibility, and auditability are not&lt;/em&gt; |&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Don&amp;rsquo;t learn to code&amp;rdquo; vs. &amp;ldquo;candidates need technical depth&amp;rdquo;: Syntax is less valuable; conceptual fluency (logic, testing, security, judgment) is more valuable |&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Buy, don&amp;rsquo;t build&amp;rdquo; vs. &amp;ldquo;build custom pipelines&amp;rdquo;: Don&amp;rsquo;t build foundation models or heavy platforms. Do build thin orchestration, domain workflows, verification layers, skills |&lt;/li&gt;
&lt;li&gt;&amp;ldquo;AI wildly&amp;rdquo; vs. security/privacy constraints: Overuse for low-risk/personal tasks; use enterprise/local/sandboxed patterns for sensitive work |&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Human-in-the-loop&amp;rdquo; vs. autonomous agents: Exception routing: automate routine cases, route edge cases and disagreements to humans |&lt;/li&gt;
&lt;li&gt;Live demos vs. simulated demos: Live only if task completes in under 10 minutes; simulate otherwise |&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Hallucinations as feature&amp;rdquo; vs. eliminate hallucinations: Feature for ideation; eliminated for operations/facts/regulated outputs |&lt;/li&gt;
&lt;li&gt;&amp;ldquo;AI can do health/finance better than experts&amp;rdquo; vs. responsibility: AI supports preparation and second opinions; decisions need qualified human accountability |&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;10-principles&#34;&gt;10 principles&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;The scarce skill is not doing the work; it&amp;rsquo;s choosing the work, feeding the agent context, and verifying the result.&lt;/li&gt;
&lt;li&gt;Prompts, skills, tests, and context files are assets. Code is a byproduct.&lt;/li&gt;
&lt;li&gt;Use AI wildly in low-risk contexts; use it rigorously in high-risk contexts.&lt;/li&gt;
&lt;li&gt;For facts and money, make AI produce evidence. For logic, make it produce code. For operations, make it produce audit trails.&lt;/li&gt;
&lt;li&gt;LLMs hallucinate, but code doesn&amp;rsquo;t. When correctness matters, make AI write and run code.&lt;/li&gt;
&lt;li&gt;Treat demos as imagination accelerators — show what&amp;rsquo;s now possible before arguing about architecture.&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t sell software if the client can regenerate it tomorrow. Sell outcomes, accountability, and verification.&lt;/li&gt;
&lt;li&gt;AI training should be a game of doing, breaking, checking, and recovering — not a lecture about tools.&lt;/li&gt;
&lt;li&gt;Every repeated AI success should become a reusable skill. Every failure is training data if you preserve the prompt, output, rejection reason, and fix.&lt;/li&gt;
&lt;li&gt;The risk today is not just hallucination; it&amp;rsquo;s underuse, insecure overuse, and unverified scale.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;suggested-structural-reorganization&#34;&gt;Suggested structural reorganization&lt;/h2&gt;
&lt;p&gt;Your current document answers: &lt;em&gt;&amp;ldquo;What tips should I follow?&amp;rdquo;&lt;/em&gt;
Your actual advice answers: &lt;em&gt;&amp;ldquo;How do I operate in the agent era?&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Suggested new top-level structure:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Start here&lt;/strong&gt; — AI is a new operating layer; use it 50 times/day; ask it first, verify consequential outputs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Personal habits&lt;/strong&gt; — voice, interview-me, emotions as entry points, digital exhaust, learning by play&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prompting and context&lt;/strong&gt; — outcome-first, sycophancy defense, multiple outputs, style vocabulary&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agentic workspaces&lt;/strong&gt; — project folders, AGENTS.md, skills.md, prompts.md, Git, Docker&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coding with AI&lt;/strong&gt; — vibe code safely; code is disposable; tests/prompts are assets; Playwright; failing tests first&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verification and trust&lt;/strong&gt; — citations, code execution, golden sets, multi-model checks, exception routing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data and privacy&lt;/strong&gt; — consumer vs. enterprise vs. API vs. local; least-privilege access patterns&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI adoption in organizations&lt;/strong&gt; — visible leadership use, behavior tracking, games/CTFs, power users, incentive mapping&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Demos, POCs, and business value&lt;/strong&gt; — prototype in hours; synthetic data; Hollywood-set demos; sell outcomes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skills in the AI era&lt;/strong&gt; — grow/shrink/preserve taxonomy (updated)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Education&lt;/strong&gt; — assess process not output; AI-proof questions; monitor the messy middle&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Business models&lt;/strong&gt; — software depreciates; skills/trust/verification appreciate; thin orchestration not heavy platforms&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 19 Apr 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-19-apr-2026/</link>
      <pubDate>Sun, 19 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-19-apr-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WebApps are a depreciated store of value. Earlier, a web-app would have impressed me because the capability to create it is rare, and the effort to create it is high. Today, when I see a &amp;ldquo;localhost:3000&amp;rdquo; or a &amp;ldquo;replit.app&amp;rdquo; domain, I mentally discount the effort behind it and ask: How rare is the capability to create this with a coding agent and how much effort is it. THAT determines the value of what I see. Part of the value is &amp;ldquo;Look ma, no hands!&amp;rdquo; and it&amp;rsquo;s delightful they&amp;rsquo;ve learnt. Part of the value is &amp;ldquo;There&amp;rsquo;s gold in them thar hills!&amp;rdquo; and use-case discovery is important.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://wavacity.com/&#34;&gt;WaveCity&lt;/a&gt; is a WASM build of Audacity, i.e. Audacity running in the browser! &lt;a href=&#34;https://audiomass.co/&#34;&gt;Audiomass&lt;/a&gt; is a similar but simpler audio editor - again, WASM-based. &lt;a href=&#34;https://gemini.google.com/share/54d4778ed7bd&#34;&gt;Gemini&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Agent Skills Usage</title>
      <link>https://www.s-anand.net/blog/agent-skills-usage/</link>
      <pubDate>Mon, 13 Apr 2026 16:16:41 -0700</pubDate>
      <guid>https://www.s-anand.net/blog/agent-skills-usage/</guid>
      <description>&lt;p&gt;I have a bunch of &lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents&#34;&gt;coding agent skills&lt;/a&gt; I&amp;rsquo;ve accumulated over the last few months. Here&amp;rsquo;s how often my sessions use them:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left;&#34;&gt;Skill&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left;&#34;&gt;Claude&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left;&#34;&gt;Codex&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left;&#34;&gt;Copilot&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left;&#34;&gt;Overall&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/code/SKILL.md&#34; target=&#34;_blank&#34;&gt;code&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(229, 240, 249); color: rgb(0, 0, 0);&#34;&gt;6.1%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(8, 48, 107); color: rgb(255, 255, 255);&#34;&gt;69.1%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(94, 164, 208); color: rgb(255, 255, 255);&#34;&gt;37.5%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(35, 114, 180); color: rgb(255, 255, 255);&#34;&gt;51.5%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/data-story/SKILL.md&#34; target=&#34;_blank&#34;&gt;data-story&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(45, 125, 187); color: rgb(255, 255, 255);&#34;&gt;48.7%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(198, 220, 239); color: rgb(0, 0, 0);&#34;&gt;16.4%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(94, 164, 208); color: rgb(255, 255, 255);&#34;&gt;37.5%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(145, 194, 223); color: rgb(255, 255, 255);&#34;&gt;28.0%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/data-analysis/SKILL.md&#34; target=&#34;_blank&#34;&gt;data-analysis&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(239, 246, 253); color: rgb(0, 0, 0);&#34;&gt;2.6%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(105, 172, 212); color: rgb(255, 255, 255);&#34;&gt;35.2%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(225, 237, 248); color: rgb(0, 0, 0);&#34;&gt;7.8%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(176, 210, 232); color: rgb(0, 0, 0);&#34;&gt;21.8%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/design/SKILL.md&#34; target=&#34;_blank&#34;&gt;design&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(158, 201, 226); color: rgb(0, 0, 0);&#34;&gt;25.5%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(168, 206, 229); color: rgb(0, 0, 0);&#34;&gt;23.6%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(206, 225, 242); color: rgb(0, 0, 0);&#34;&gt;14.1%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(176, 210, 232); color: rgb(0, 0, 0);&#34;&gt;21.8%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/plan/SKILL.md&#34; target=&#34;_blank&#34;&gt;plan&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(223, 235, 247); color: rgb(0, 0, 0);&#34;&gt;8.5%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(213, 229, 244); color: rgb(0, 0, 0);&#34;&gt;11.8%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(206, 225, 242); color: rgb(0, 0, 0);&#34;&gt;14.1%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(213, 229, 244); color: rgb(0, 0, 0);&#34;&gt;11.8%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/agent-friendly-cli/SKILL.md&#34; target=&#34;_blank&#34;&gt;agent-friendly-cli&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(236, 244, 252); color: rgb(0, 0, 0);&#34;&gt;3.7%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(207, 225, 242); color: rgb(0, 0, 0);&#34;&gt;13.8%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(215, 230, 245); color: rgb(0, 0, 0);&#34;&gt;11.1%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(215, 230, 245); color: rgb(0, 0, 0);&#34;&gt;11.2%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/devtools/SKILL.md&#34; target=&#34;_blank&#34;&gt;devtools&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(183, 213, 234); color: rgb(0, 0, 0);&#34;&gt;20.4%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(226, 237, 248); color: rgb(0, 0, 0);&#34;&gt;7.3%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(220, 234, 246); color: rgb(0, 0, 0);&#34;&gt;9.4%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(218, 232, 246); color: rgb(0, 0, 0);&#34;&gt;10.0%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/llm/SKILL.md&#34; target=&#34;_blank&#34;&gt;llm&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(240, 246, 253); color: rgb(0, 0, 0);&#34;&gt;2.5%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(222, 235, 247); color: rgb(0, 0, 0);&#34;&gt;8.7%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(225, 237, 248); color: rgb(0, 0, 0);&#34;&gt;7.8%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(226, 237, 248); color: rgb(0, 0, 0);&#34;&gt;7.4%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/pdf/SKILL.md&#34; target=&#34;_blank&#34;&gt;pdf&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(224, 236, 248); color: rgb(0, 0, 0);&#34;&gt;7.9%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(225, 237, 248); color: rgb(0, 0, 0);&#34;&gt;7.8%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(228, 239, 249); color: rgb(0, 0, 0);&#34;&gt;6.6%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/linkedin-cdp/SKILL.md&#34; target=&#34;_blank&#34;&gt;linkedin-cdp&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(206, 224, 241); color: rgb(0, 0, 0);&#34;&gt;14.3%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(231, 241, 250); color: rgb(0, 0, 0);&#34;&gt;5.6%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(232, 241, 250); color: rgb(0, 0, 0);&#34;&gt;5.3%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/uv-uvx/SKILL.md&#34; target=&#34;_blank&#34;&gt;uv-uvx&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(220, 233, 246); color: rgb(0, 0, 0);&#34;&gt;9.5%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(233, 242, 250); color: rgb(0, 0, 0);&#34;&gt;4.9%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/interactive-storytelling/SKILL.md&#34; target=&#34;_blank&#34;&gt;interactive-storytelling&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(227, 238, 248); color: rgb(0, 0, 0);&#34;&gt;7.1%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(239, 246, 252); color: rgb(0, 0, 0);&#34;&gt;2.7%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(227, 238, 248); color: rgb(0, 0, 0);&#34;&gt;7.1%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(234, 242, 251); color: rgb(0, 0, 0);&#34;&gt;4.6%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/demos/SKILL.md&#34; target=&#34;_blank&#34;&gt;demos&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(223, 235, 247); color: rgb(0, 0, 0);&#34;&gt;8.5%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(239, 246, 252); color: rgb(0, 0, 0);&#34;&gt;2.8%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(242, 248, 254); color: rgb(0, 0, 0);&#34;&gt;1.6%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(237, 245, 252); color: rgb(0, 0, 0);&#34;&gt;3.5%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/cloudflare/SKILL.md&#34; target=&#34;_blank&#34;&gt;cloudflare&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(235, 243, 251); color: rgb(0, 0, 0);&#34;&gt;4.3%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(238, 245, 252); color: rgb(0, 0, 0);&#34;&gt;3.1%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(237, 245, 252); color: rgb(0, 0, 0);&#34;&gt;3.3%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/melt-mlt/SKILL.md&#34; target=&#34;_blank&#34;&gt;melt-mlt&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(240, 246, 253); color: rgb(0, 0, 0);&#34;&gt;2.5%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(242, 248, 254); color: rgb(0, 0, 0);&#34;&gt;1.6%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(242, 248, 253); color: rgb(0, 0, 0);&#34;&gt;1.8%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/vector-art/SKILL.md&#34; target=&#34;_blank&#34;&gt;vector-art&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(240, 246, 253); color: rgb(0, 0, 0);&#34;&gt;2.5%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(240, 247, 253); color: rgb(0, 0, 0);&#34;&gt;2.4%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(242, 248, 253); color: rgb(0, 0, 0);&#34;&gt;1.7%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/vitest-dom/SKILL.md&#34; target=&#34;_blank&#34;&gt;vitest-dom&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(241, 247, 253); color: rgb(0, 0, 0);&#34;&gt;2.2%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(243, 248, 254); color: rgb(0, 0, 0);&#34;&gt;1.4%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/memorable-explanations/SKILL.md&#34; target=&#34;_blank&#34;&gt;memorable-explanations&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(239, 246, 253); color: rgb(0, 0, 0);&#34;&gt;2.6%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(242, 248, 254); color: rgb(0, 0, 0);&#34;&gt;1.6%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(243, 249, 254); color: rgb(0, 0, 0);&#34;&gt;1.3%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/npm-packages/SKILL.md&#34; target=&#34;_blank&#34;&gt;npm-packages&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(245, 250, 254); color: rgb(0, 0, 0);&#34;&gt;0.6%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(246, 250, 255); color: rgb(0, 0, 0);&#34;&gt;0.3%&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Here are my observations, with surprises highlighted as ⁉️&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/code/SKILL.md&#34;&gt;&lt;code&gt;code&lt;/code&gt;&lt;/a&gt; is the most used skill, by far. About half the sessions use it.
&lt;ul&gt;
&lt;li&gt;But Claude doesn&amp;rsquo;t use it much⁉️&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/data-story/SKILL.md&#34;&gt;&lt;code&gt;data-story&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/data-analysis/SKILL.md&#34;&gt;&lt;code&gt;data-analysis&lt;/code&gt;&lt;/a&gt; skills were the most rapidly adopted.
&lt;ul&gt;
&lt;li&gt;I use Claude (with Claude Code &lt;em&gt;and&lt;/em&gt; Copilot) a lot more for data stories. I use Codex for data analysis.&lt;/li&gt;
&lt;li&gt;Therefore the &lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/webapp-testing/SKILL.md&#34;&gt;&lt;code&gt;webapp-testing&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/devtools/SKILL.md&#34;&gt;&lt;code&gt;devtools&lt;/code&gt;&lt;/a&gt; skilss are used less by Codex.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/design/SKILL.md&#34;&gt;&lt;code&gt;design&lt;/code&gt;&lt;/a&gt; skill is used consistently across agents. It was inspired by Claude&amp;rsquo;s design skill - but I don&amp;rsquo;t think it is particularly good, and needs revision.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/agent-friendly-cli/SKILL.md&#34;&gt;&lt;code&gt;agent-friendly-cli&lt;/code&gt;&lt;/a&gt; tool development is mostly with Codex, followed by Copilot, and very little with Claude.&lt;/li&gt;
&lt;li&gt;Most &lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/pdf/SKILL.md&#34;&gt;&lt;code&gt;pdf&lt;/code&gt;&lt;/a&gt; sessions are with Copilot / Codex, not Claude⁉️&lt;/li&gt;
&lt;li&gt;Codex reads most skills diligengly.
&lt;ul&gt;
&lt;li&gt;It is the only one diligently reading my &lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/uv-uvx/SKILL.md&#34;&gt;&lt;code&gt;uv-uvx&lt;/code&gt;&lt;/a&gt; skill, even though every agent uses it⁉️&lt;/li&gt;
&lt;li&gt;In fact, it is the only agent to have read every skill except &lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/linkedin-cdp/SKILL.md&#34;&gt;&lt;code&gt;linkedin-cdp&lt;/code&gt;&lt;/a&gt; (it never needed it.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Coding agents ARE the new software</title>
      <link>https://www.s-anand.net/blog/coding-agents-are-the-new-software/</link>
      <pubDate>Mon, 23 Mar 2026 16:03:18 +0530</pubDate>
      <guid>https://www.s-anand.net/blog/coding-agents-are-the-new-software/</guid>
      <description>&lt;p&gt;Increasingly, &lt;strong&gt;I use coding agents instead of writing software&lt;/strong&gt;. For example, I built a &lt;a href=&#34;https://files.s-anand.net/blog/blogmap/&#34;&gt;Blog UMAP&lt;/a&gt;. Then, I built &lt;a href=&#34;https://files.s-anand.net/blog/calvinmap/&#34;&gt;Calvin UMAP&lt;/a&gt;. And more. But instead of building re-usable software, I just ran Claude with prior context.&lt;/p&gt;
&lt;p&gt;Increasingly, &lt;strong&gt;I use coding agents to run software&lt;/strong&gt;. For example, I use Codex to classify my expense receipts. It writes re-usable code, but I run it using Codex, and it updates the code with new/edge cases.&lt;/p&gt;
&lt;p&gt;I see a future where coding agents are the wrapper around &lt;em&gt;all&lt;/em&gt; software. (Lots of people have spoken about this. I am &lt;em&gt;feeling&lt;/em&gt; it now.)&lt;/p&gt;
&lt;p&gt;If that&amp;rsquo;s so, then:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Agents are the new users&lt;/strong&gt; of software. We need &lt;a href=&#34;https://github.com/sanand0/scripts/blob/main/agents/agent-friendly-cli/SKILL.md&#34;&gt;agent-friendly CLI&lt;/a&gt;, agentic web accessibility, and stuff like that.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agents &lt;em&gt;ARE&lt;/em&gt; the new software&lt;/strong&gt;. I mean, &lt;em&gt;all&lt;/em&gt; sofware is just one coding agent. &amp;ldquo;Tell the agent to do it&amp;rdquo;. It&amp;rsquo;ll find &amp;amp; install what&amp;rsquo;s required or write it - to get the job done.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If agents are a genie we can&amp;rsquo;t push back into the bottle, I guess we&amp;rsquo;ll see more (naive) usage, meaning:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;More one-off uses, e.g. personal use tools &amp;amp; projects (which is great! That&amp;rsquo;s like Excel templates and macros.)&lt;/li&gt;
&lt;li&gt;More prototypes that are NOT production-ready, leading to &lt;a href=&#34;https://www.linkedin.com/search/results/people/?keywords=%22vibe%20code%20fixer%22&#34;&gt;Vibe Code Fixer&lt;/a&gt; and &lt;a href=&#34;https://www.linkedin.com/search/results/people/?keywords=%22ai%20slop%20fixer%22&#34;&gt;AI Slop Fixer&lt;/a&gt; roles. Also:
&lt;ul&gt;
&lt;li&gt;AI Policy Architects (project managers)&lt;/li&gt;
&lt;li&gt;AI Architects&lt;/li&gt;
&lt;li&gt;AI Designers&lt;/li&gt;
&lt;li&gt;AI PromptOps Engineers (developers)&lt;/li&gt;
&lt;li&gt;AI Auditors (testers)&lt;/li&gt;
&lt;li&gt;AI Security Experts&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wait-a-sec&amp;hellip; that&amp;rsquo;s just the usual software roles, but with &amp;ldquo;AI&amp;rdquo; in the title, doing slightly different things.&lt;/p&gt;
&lt;p&gt;Huh.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Words fail me.&#34; loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-03-25-words-fail-me.avif&#34;&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title>AI in SDLC at PyConf</title>
      <link>https://www.s-anand.net/blog/ai-in-sdlc-at-pyconf/</link>
      <pubDate>Thu, 19 Mar 2026 14:58:26 +0530</pubDate>
      <guid>https://www.s-anand.net/blog/ai-in-sdlc-at-pyconf/</guid>
      <description>&lt;p&gt;I was at a panel on &lt;a href=&#34;https://2026.pyconfhyd.org/&#34;&gt;AI in SDLC&lt;/a&gt; at PyConf. Here&amp;rsquo;s the summary of my advice:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Process&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Make AI your &lt;em&gt;entire&lt;/em&gt; SDLC loop. Record client calls, feed them to a coding agent to directly build &amp;amp; deploy the solution.&lt;/li&gt;
&lt;li&gt;Record your prompts, run post-mortems, and distill them into &lt;code&gt;SKILLS.md&lt;/code&gt; files for reuse.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Prompting&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ask AI to make output &lt;em&gt;more reviewable&lt;/em&gt;. Don&amp;rsquo;t waste time reviewing unclear output.&lt;/li&gt;
&lt;li&gt;Prefer &lt;em&gt;directional&lt;/em&gt; feedback (feeling, emotion, intent) over implementational.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Also&lt;/em&gt; give AI freedom to do things its way. Learn from that - you&amp;rsquo;ll be surprised.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Learning&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prefer interns / outsiders over experts. They don&amp;rsquo;t slow the process with preconceptions and leverage AI better.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Stop&lt;/em&gt; learning what AI does well. Learn what AI fails at - using AI. Keep re-assessing these.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Adoption&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Developer using AI are &lt;em&gt;still&lt;/em&gt; accountable for their code. (Agents might become accountable in the future.)&lt;/li&gt;
&lt;li&gt;Start with new projects: less competition, fewer preconceptions, lower risk.&lt;/li&gt;
&lt;li&gt;Start in domains where failure is OK, rather than making AI safe enough for high-risk domains.&lt;/li&gt;
&lt;li&gt;Create safe spaces where hallucinations don&amp;rsquo;t matter and run experiments there to learn what AI can do.&lt;/li&gt;
&lt;li&gt;Plan for where AI&amp;rsquo;ll be a year later. It&amp;rsquo;s growing &lt;em&gt;very&lt;/em&gt; rapidly.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The full details of the panel discussion are at &lt;a href=&#34;https://sanand0.github.io/talks/2026-03-15-pyconf-ai-in-sdlc/&#34;&gt;Who Owns the Commit?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://sanand0.github.io/talks/2026-03-15-pyconf-ai-in-sdlc/sketchnote.avif&#34;&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Cracking online exams with coding agents</title>
      <link>https://www.s-anand.net/blog/cracking-online-exams-with-coding-agents/</link>
      <pubDate>Fri, 13 Mar 2026 15:37:19 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/cracking-online-exams-with-coding-agents/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-03-13-cracking-online-exams-with-coding-agents.avif&#34;&gt; &lt;!-- https://gemini.google.com/u/2/app/a6a6c341434ec848 --&gt;&lt;/p&gt;
&lt;p&gt;An effective way to solve online exams is to point a coding agent at it.&lt;/p&gt;
&lt;p&gt;I use that on my &lt;a href=&#34;https://tds.s-anand.net/&#34;&gt;Tools in Data Science&lt;/a&gt; course in two ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;As a test case of my code&lt;/strong&gt;. If my agent can solve it, good: I set the question correctly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;As a test of student ability&lt;/strong&gt;. If it can&amp;rsquo;t, good: it&amp;rsquo;s a tough question (provided I didn&amp;rsquo;t make a mistake).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For &lt;a href=&#34;https://2026.pyconfhyd.org/&#34;&gt;PyConf, Hyderabad&lt;/a&gt;, my colleague built a &lt;a href=&#34;https://crack-the-prompt.straivedemo.com/&#34;&gt;Crack the Prompt&lt;/a&gt; challenge. Crack it and you get&amp;hellip; I don&amp;rsquo;t know&amp;hellip; goodies? A job interview? Leaderboard bragging rights?&lt;/p&gt;
&lt;p&gt;I told Codex:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Use the browser to visit &lt;a href=&#34;https://crack-the-prompt.straivedemo.com/&#34;&gt;https://crack-the-prompt.straivedemo.com/&lt;/a&gt; and solve it using the email ID &lt;a href=&#34;mailto:root.node@gmail.com&#34;&gt;root.node@gmail.com&lt;/a&gt; and GitHub handle sanand0&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After 4 minutes, it told me:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The answers to all three prompt-engineering questions&lt;/li&gt;
&lt;li&gt;The code has a bug - so no one can submit &lt;em&gt;anyway&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;The prompts are hidden on the server-side (making it a bit harded to hack)&lt;/li&gt;
&lt;li&gt;But you can skip levels via the API - level-locking is front-end only&lt;/li&gt;
&lt;li&gt;&amp;hellip; and a whole bunch of interesting things.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When I asked Claude to write about the process in Matt Levine&amp;rsquo;s style, &lt;a href=&#34;https://sanand0.github.io/datastories/crack-the-prompt/&#34;&gt;it included an interesting lesson&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The Victorians had the same problem. They designed elaborate entrance exams for the civil service because they wanted to identify people with the capacity for careful, systematic thinking. Then someone invented the civil service exam prep industry, and suddenly the exam was measuring preparation rather than capacity.&lt;/p&gt;
&lt;p&gt;The challenge was about the process &amp;ndash; about developing the instincts, the questioning strategies, the ability to read AI behavior like a poker tell. That&amp;rsquo;s the thing you can&amp;rsquo;t automate. Or rather, it&amp;rsquo;s the thing you can automate, which means it&amp;rsquo;s no longer a skill worth developing, which means we need to think about what skill we&amp;rsquo;re actually trying to cultivate when we design these challenges.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;EXACTLY&lt;/strong&gt;. What&amp;rsquo;s the skill we&amp;rsquo;re trying to cultivate? When will it be outdated?&lt;/p&gt;
&lt;p&gt;From now on, when testing, I&amp;rsquo;m going to write down &amp;ldquo;What skill is this &lt;strong&gt;really&lt;/strong&gt; testing?&amp;rdquo; That&amp;rsquo;s good enough a start.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>AnalAIzing Cloud Costs</title>
      <link>https://www.s-anand.net/blog/analaizing-cloud-costs/</link>
      <pubDate>Sun, 01 Mar 2026 16:21:25 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/analaizing-cloud-costs/</guid>
      <description>&lt;!--
Codex session: /home/sanand/.codex/sessions/2026/02/28/rollout-2026-02-28T11-23-34-019ca245-e0dc-7932-be83-05f3cb4ef1f1.jsonl
Gemini insights about the session: https://gemini.google.com/app/2c5abf249292a22e
--&gt;
&lt;p&gt;I have a &lt;a href=&#34;https://github.com/education&#34;&gt;GitHub Education&lt;/a&gt; since I &lt;a href=&#34;https://study.iitm.ac.in/ds/course_pages/BSSE2002.html&#34;&gt;teach at IITM&lt;/a&gt;. But if I switch back to a free account, how much would I need to pay?&lt;/p&gt;
&lt;p&gt;I asked Codex (5.3, xhigh):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;My GITHUB_TOKEN is in .env. Go through my GitHub billing. Ignore the $100 sponsorships I make. Other than that, my current metered usage is $6.71 for Feb 2026 (which is included in my billing plan). $0.35 comes from sanand0/exam and $0.34 from sanand0/blog and so on. That&amp;rsquo;s coming mostly from &amp;ldquo;Actions Linux&amp;rdquo;, occasionally &amp;ldquo;Actions Storage&amp;rdquo;. Pick a few of the top repos and tell me what I should do to make the cost zero - or reduce the cost as much as possible. See if there&amp;rsquo;s a pattern across repos.&lt;/p&gt;
&lt;p&gt;Document all of your findings in &lt;code&gt;analysis.md&lt;/code&gt; and continue to append new findings in this file, summarizing my request as a heading followed by your response.&lt;/p&gt;
&lt;p&gt;My aim is to stay well below the 2,000 free actions minutes/month - which I&amp;rsquo;m already below. But still, I want to optimize a bit&amp;hellip; Tell me&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What my billing would be under a free account&lt;/li&gt;
&lt;li&gt;What repos and what activity are the biggest risks for hitting the free limit&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;After half an hour of my watching a movie, it told me (in great detail - see the details below) that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;My billing is &lt;em&gt;way&lt;/em&gt; below the free limit.&lt;/li&gt;
&lt;li&gt;I should watch out for GitHub Copilot, frequent CI runs, scheduled jobs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But the more interesting thing for me is how easy cloud optimization has become with coding agents.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-03-01-analaizing-cloud-costs.avif&#34;&gt; &lt;!-- https://gemini.google.com/app/2c5abf249292a22e --&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;It makes curiosity cheaper&lt;/strong&gt;. I wouldn&amp;rsquo;t have sat and written the scripts to figure out where $6.71 went. But coding agents made micro-audits practical (and with clever use of &lt;code&gt;jaq&lt;/code&gt;, &lt;code&gt;csvq&lt;/code&gt;, and &lt;code&gt;duckdb&lt;/code&gt;. If you can get an answer by just from a question, we&amp;rsquo;d use it like Google - to &lt;strong&gt;answer ad hoc questions&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It challenges common sense&lt;/strong&gt;. I assumed caching was good for speed and compute. But Codex&amp;rsquo;s analysis of my &lt;a href=&#34;https://github.com/sanand0/blog/actions&#34;&gt;&lt;code&gt;sanand0/blog&lt;/code&gt; actions&lt;/a&gt; pointed out that dropping a job&amp;rsquo;s time from 1.2 minutes to 0.7 minutes doesn&amp;rsquo;t change the &lt;em&gt;2-minute billed floor&lt;/em&gt;! Also, the 114MB cache &lt;em&gt;increased&lt;/em&gt; storage costs. We can &lt;strong&gt;test optimizations without assuming&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It exposes blind spots&lt;/strong&gt;. Turns out that a big chunk of the cost of my (private) &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-ee&#34;&gt;TDS exam&lt;/a&gt; repo was &lt;code&gt;dynamic/copilot-pull-request-reviewer&lt;/code&gt; - a GitHub workflow triggered by using Copilot. I also have a big chunk of &amp;ldquo;legacy&amp;rdquo; GitHub Pages on older repos that add to cost because of failures and retries. We can find these invisible leeches draining cost &lt;strong&gt;without knowing what to ask for&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It self-corrects&lt;/strong&gt;. Codex hit a deprecated GitHub billing endpoint (HTTP 410). It curled the GitHub docs, found the new endpoint, and rewrote its query. It made a mistake with &lt;code&gt;csvq&lt;/code&gt;, read the help, and switched to &lt;code&gt;duckdb&lt;/code&gt; for complex median calculations. That self-correction and learning means that it can &lt;strong&gt;work while you sleep&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It fixes, not just finds&lt;/strong&gt;. Codex rewrote my &lt;a href=&#34;https://github.com/sanand0/blog/commit/2644e9bfcfb4369c2768fbfad599fa939ada2e0f#diff-28802fbf11c83a2eee09623fb192785e7ca92a3f40602a517c011b947a1822d3&#34;&gt;blog deployment script&lt;/a&gt; to use a single job instead of two, to save compute time. I just copied andd deployed it. It went from &lt;strong&gt;researcher to advisor&lt;/strong&gt;. That&amp;rsquo;s a short step from executor, next.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If analyzing cloud cost is this easy, Cloud FinOps companies face a risk.
AWS, Azure, and GCP will simple embed Cloud FinOps into their services.
Cloud spend won&amp;rsquo;t fall &amp;ndash; we&amp;rsquo;ll just use more compute for the same budget.&lt;/p&gt;
&lt;p&gt;The big Cloud FinOps companies (e.g. IBM, Flexera, Broadcom) are in some trouble. They can&amp;rsquo;t cannibalize their own market. They&amp;rsquo;ll likely shrink and focus on banks &amp;amp; Governments that need a reputable partner.&lt;/p&gt;
&lt;p&gt;Companies that &lt;em&gt;own&lt;/em&gt; the infra data (e.g. DataDog, Snowflake, DataBricks) will likely grow, since only they can access the context for optimization. That&amp;rsquo;ll let them provide better service cheaper, e.g. auto-optimize queries, compute, storage, etc. for you.&lt;/p&gt;
&lt;p&gt;Pure plays (e.g. CloudZero, Finout) might need to pivot from infra optimization to&amp;hellip; something more strategic, I guess.&lt;/p&gt;
&lt;hr&gt;
&lt;details&gt;
&lt;summary&gt;Here&#39;s the full (long) response from Codex&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Data source: &lt;code&gt;GET /users/sanand0/settings/billing/usage&lt;/code&gt; using your token in &lt;code&gt;.env&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Snapshot time: 2026-02-28T03:24:45Z (UTC).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ignoring sponsorships, Feb 2026 metered usage is:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Product&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Gross Amount&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Copilot Premium Request&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$5.05&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Actions (Linux + Storage)&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$1.646844306&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Git LFS storage&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.009750857&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Total&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$6.706595163&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Top Actions repos in Feb 2026:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Repo&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Total Actions Cost&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Linux Cost&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Storage Cost&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Linux Minutes&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;exam&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.354000000&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.354000000&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.000000000&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;59&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;blog&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.337295637&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.246000000&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.091295637&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;41&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;tools-in-data-science-public&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.211055072&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.204000000&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.007055072&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;34&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;tools&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.174166256&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.174000000&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.000166256&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;29&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;iss-location&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.174000000&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.174000000&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.000000000&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;29&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;imdbscrape&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.168000000&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.168000000&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;$0.000000000&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;28&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Cross-repo pattern:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your cost is dominated by &lt;strong&gt;minute-floor billing per job&lt;/strong&gt; and &lt;strong&gt;trigger frequency&lt;/strong&gt;, not pure runtime.&lt;/li&gt;
&lt;li&gt;Feb run-level pattern (from fetched run/job metadata in top repos):
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dynamic&lt;/code&gt;: 9 runs, 79 billed-like minutes (~8.78/run)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;push&lt;/code&gt;: 50 runs, 81 billed-like minutes (~1.62/run)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;schedule&lt;/code&gt;: 55 runs, 57 billed-like minutes (~1.04/run)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Primary cost-reduction levers:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Disable Copilot dynamic code-review/agent workflows on repos where not needed (&lt;code&gt;exam&lt;/code&gt;, &lt;code&gt;tools&lt;/code&gt; were the big dynamic consumers).&lt;/li&gt;
&lt;li&gt;Restrict Pages deploy workflows to &lt;code&gt;main&lt;/code&gt; only (avoid &lt;code&gt;dev&lt;/code&gt;/feature branch deploys).&lt;/li&gt;
&lt;li&gt;Merge 2-job build+deploy workflows into one job where feasible (reduces per-job minute floor).&lt;/li&gt;
&lt;li&gt;Reduce scheduled frequency for daily cron repos if not needed (&lt;code&gt;iss-location&lt;/code&gt;, &lt;code&gt;imdbscrape&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;For storage, reduce artifact/caches and cleanup stale artifacts.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;I expanded analysis across all 14 repos that used Linux Actions minutes in Feb 2026 and fetched per-run job details.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1) &lt;code&gt;sanand0/blog&lt;/code&gt;: does disabling cache improve costs?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Workflow history:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cache was introduced in &lt;code&gt;.github/workflows/deploy.yml&lt;/code&gt; commit &lt;code&gt;4f744fffdeb64aebd09cfc6fd1bb27fd9844842d&lt;/code&gt; on &lt;strong&gt;2026-02-20T04:40:39Z&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Previous workflow commit: &lt;code&gt;61392ee781ff77e9914b0a1a68b852f46d0a66e8&lt;/code&gt; on &lt;strong&gt;2026-01-02T03:11:32Z&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Observed runs around this change (&lt;code&gt;main&lt;/code&gt; + &lt;code&gt;dev&lt;/code&gt; only):&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Phase&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Runs&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Avg Active Job Min&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Median Active Job Min&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Avg Billed-like Min&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Median Billed-like Min&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Before cache (Jan 2 -&amp;gt; Feb 20)&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;62&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;1.192&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;0.900&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;2.194&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;2.0&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;After cache (Feb 20 -&amp;gt; Feb 28)&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;6&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;0.744&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;0.817&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;1.667&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;2.0&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Interpretation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No clear billed-minute win from cache&lt;/strong&gt;: median billed-like is still 2/run in both periods (minute floor + 2 jobs dominates).&lt;/li&gt;
&lt;li&gt;Cache likely helped runtime modestly (small active-minute decrease), but sample after cache is small (&lt;code&gt;n=6&lt;/code&gt;) and confounded by other workflow changes.&lt;/li&gt;
&lt;li&gt;Storage side: current &lt;code&gt;blog&lt;/code&gt; caches are ~114 MB. If that stayed all month, rough max cost is about &lt;strong&gt;$0.026/month&lt;/strong&gt; at observed storage unit price; this is only part of &lt;code&gt;blog&lt;/code&gt; storage charge (&lt;code&gt;$0.0913&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Therefore, disabling cache may save some storage, but &lt;strong&gt;the main cost lever is reducing run count and job count&lt;/strong&gt;, not cache toggles.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2) Better &lt;code&gt;blog&lt;/code&gt; optimizations than cache-off&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;High-impact changes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Trigger deploy only on &lt;code&gt;main&lt;/code&gt; (Feb had 20 &lt;code&gt;dev&lt;/code&gt; deploy runs vs 2 &lt;code&gt;main&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Add path filters so non-site changes do not deploy.&lt;/li&gt;
&lt;li&gt;Use a &lt;strong&gt;single deploy job&lt;/strong&gt; (instead of separate &lt;code&gt;build&lt;/code&gt; + &lt;code&gt;deploy&lt;/code&gt;) to reduce minute-floor overhead.&lt;/li&gt;
&lt;li&gt;Keep &lt;code&gt;[skip ci]&lt;/code&gt; support.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Explicit workflow suggestion file created:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/home/vscode/Downloads/github-usage/analysis/blog-cost-optimized-deploy.yml&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3) Additional repo pattern findings (expanded set)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Feb 2026 Linux-minute repos and event patterns:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Repo&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Minutes&lt;/th&gt;
          &lt;th&gt;Main pattern&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;exam&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;59&lt;/td&gt;
          &lt;td&gt;dynamic Copilot runs (&lt;code&gt;Copilot code review&lt;/code&gt;, &lt;code&gt;Running Copilot coding agent&lt;/code&gt;)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;blog&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;41&lt;/td&gt;
          &lt;td&gt;push deploy workflow (&lt;code&gt;Deploy Hugo site&lt;/code&gt;)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;tools-in-data-science-public&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;34&lt;/td&gt;
          &lt;td&gt;push deploy + some dynamic pages runs&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;iss-location&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;29&lt;/td&gt;
          &lt;td&gt;daily schedule&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;imdbscrape&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;28&lt;/td&gt;
          &lt;td&gt;daily schedule&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;tools&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;29&lt;/td&gt;
          &lt;td&gt;push deploy + dynamic Copilot review&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;pyoppe&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;10&lt;/td&gt;
          &lt;td&gt;dynamic &lt;code&gt;pages build and deployment&lt;/code&gt; (legacy Pages), includes retries/failures&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;schoolai&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;6&lt;/td&gt;
          &lt;td&gt;dynamic &lt;code&gt;pages build and deployment&lt;/code&gt; (legacy Pages)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;image-filters&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;6&lt;/td&gt;
          &lt;td&gt;dynamic &lt;code&gt;pages build and deployment&lt;/code&gt; (legacy Pages)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;llmpricing&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;3&lt;/td&gt;
          &lt;td&gt;dynamic &lt;code&gt;pages build and deployment&lt;/code&gt; (legacy Pages)&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Important hidden pattern:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pyoppe&lt;/code&gt;, &lt;code&gt;schoolai&lt;/code&gt;, &lt;code&gt;image-filters&lt;/code&gt;, &lt;code&gt;llmpricing&lt;/code&gt; use &lt;strong&gt;Pages build_type = legacy&lt;/strong&gt; and incur dynamic pages runs.&lt;/li&gt;
&lt;li&gt;These runs are tiny but still billed at minute floor and can multiply via retries/failures.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;4) What your billing would be under a free account&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Assumptions for this estimate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Focus on Actions minutes/usage behavior from your Feb 2026 data.&lt;/li&gt;
&lt;li&gt;Sponsorships still excluded.&lt;/li&gt;
&lt;li&gt;Copilot Premium Request billing is separate from Actions minutes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Your Feb Actions usage:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;All repos Linux minutes: &lt;strong&gt;258&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Private-repo Linux minutes (&lt;code&gt;exam&lt;/code&gt;): &lt;strong&gt;59&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estimate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Under a 2,000-minute free limit, both 258 and 59 are far below the cap.&lt;/li&gt;
&lt;li&gt;So for Actions minutes specifically, you would still be &lt;strong&gt;$0 overage&lt;/strong&gt; this month.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;5) Biggest risks for hitting the free limit&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If your objective is avoiding 2,000-minute overflow, the highest-risk activity patterns are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Copilot runs on private repos&lt;/strong&gt; (high minutes per run).
&lt;ul&gt;
&lt;li&gt;Example observed: &lt;code&gt;exam&lt;/code&gt; dynamic runs consumed 59 minutes from 5 runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Many frequent push deploys on multi-job workflows&lt;/strong&gt; (2-minute floor per push is common).
&lt;ul&gt;
&lt;li&gt;Example: &lt;code&gt;blog&lt;/code&gt; and &lt;code&gt;tools-in-data-science-public&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Daily scheduled jobs across many repos&lt;/strong&gt;.
&lt;ul&gt;
&lt;li&gt;One daily repo is ~30 min/month baseline; many such repos accumulate predictably.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Legacy Pages dynamic builds with retries/failures&lt;/strong&gt;.
&lt;ul&gt;
&lt;li&gt;Small runs, but multiplicative retriggers add up.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Rule-of-thumb risk math:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;~1 daily scheduled workflow ~= 30 min/month.&lt;/li&gt;
&lt;li&gt;~1 two-job push deploy ~= ~2 min/run.&lt;/li&gt;
&lt;li&gt;~1 Copilot dynamic review run can be ~8-15 min/run.&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 01 Mar 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-01-mar-2026/</link>
      <pubDate>Sun, 01 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-01-mar-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/qtfkwk/unidown&#34;&gt;unidown&lt;/a&gt; is a Rust CLI tool that converts Markdown to Unicode characters - useful for LinkedIn.&lt;/li&gt;
&lt;li&gt;3 years into Nestle, Sangeeta Talwar (who was selling Maggi soup cubes) took the &amp;ldquo;Maggi Instant Noodles&amp;rdquo; (popular in Malaysia), changed it to &amp;ldquo;2-minutes&amp;rdquo;, realized that noodles are fun for kids to play with, invented the masala flavor, positioned it as easy for moms, distributed hanging baskets (rodent-safe, brand visibility) at stores, &lt;a href=&#34;https://www.youtube.com/watch?v=8_D-nQSTn-E&#34;&gt;marketed on TV&lt;/a&gt; and in stores, etc. &lt;a href=&#34;https://gemini.google.com/share/f923af221e41&#34;&gt;Gemini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.google/innovation-and-ai/technology/ai/nano-banana-2/&#34;&gt;Nano Banana Pro 2&lt;/a&gt; is out. Better text, better instruction following.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://lobste.rs/s/nddlyy/codespelunker_cli_code_search_tool&#34;&gt;codespelunker&lt;/a&gt; is a fast CLI code search tool. Just run &lt;code&gt;cs&lt;/code&gt; for an interactive search. It feels light and fast, like &lt;code&gt;ug&lt;/code&gt;. &lt;a href=&#34;https://lobste.rs/s/nddlyy/codespelunker_cli_code_search_tool&#34;&gt;lobste.rs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Shadow IT is unpaid R&amp;amp;D, not a security threat. When frustrated marketing or sales teams secretly buy their own software tools and bypass the IT department, traditional companies try to ban them. Transformed companies study them. &amp;ldquo;Shadow IT&amp;rdquo; is a highly accurate heat map pointing exactly to where your current systems are failing and where the immediate business value lies. &lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&#34;https://www.cio.com/article/222428/shadow-it-the-cio-s-perspective.html&#34;&gt;CIO.com&lt;/a&gt;, &lt;a href=&#34;https://thepisa.org/wp-content/uploads/2025/06/BizLedIT-GARTNER-Executive-Summary-Business-Feb2021.pdf&#34;&gt;Gartner: Business-Led IT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Coding agents have introduced a &amp;ldquo;Usage&amp;rdquo; page to check your usage: &lt;a href=&#34;https://claude.ai/settings/usage&#34;&gt;Claude usage&lt;/a&gt; and &lt;a href=&#34;https://chatgpt.com/codex/settings/usage&#34;&gt;ChatGPT usage&lt;/a&gt;. Both have weekly limits and 5 hour rolling limits - with Codex&amp;rsquo;s being more generous. This aggregates usage across the coding agents as well. Codex has a separate &lt;a href=&#34;https://developers.openai.com/codex/integrations/github/&#34;&gt;GitHub Code Review&lt;/a&gt; quota separate from this, however.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title></title>
      <link>https://www.s-anand.net/blog/people-beginning-and-ending-with-ai/</link>
      <pubDate>Sat, 15 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/people-beginning-and-ending-with-ai/</guid>
      <description>&lt;p&gt;When I realized &lt;strong&gt;Ai&lt;/strong&gt;shwarya R&lt;strong&gt;ai&lt;/strong&gt; begins and ends with AI, I &lt;em&gt;had&lt;/em&gt; to find out if there were more like her.&lt;/p&gt;
&lt;p&gt;It took a coding agent (Claude Code in this case) 10 minutes to find the 10 celebrities who share that distinction, at least across the 24,086 names on Wikipedia:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ai&lt;/strong&gt; Nag&lt;strong&gt;ai&lt;/strong&gt; - Japanese playwright&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ai&lt;/strong&gt;guo D&lt;strong&gt;ai&lt;/strong&gt; - Chinese-American atmospheric scientist&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ai&lt;/strong&gt; (poet) - American poet&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ai&lt;/strong&gt;sea Naw&lt;strong&gt;ai&lt;/strong&gt; - Fijian rugby player&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ai&lt;/strong&gt; (singer) - Japanese-American singer&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ai&lt;/strong&gt;sha Chught&lt;strong&gt;ai&lt;/strong&gt; - Pakistani actress&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ai&lt;/strong&gt;yappan Pill&lt;strong&gt;ai&lt;/strong&gt; - Indian social reformer&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ai&lt;/strong&gt;zawa Seishis&lt;strong&gt;ai&lt;/strong&gt; - Japanese Confucian scholar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ai&lt;/strong&gt;nmuire mac Sétn&lt;strong&gt;ai&lt;/strong&gt; - Irish high king&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ai&lt;/strong&gt;sha Yousef al-Mann&lt;strong&gt;ai&lt;/strong&gt; - Qatari artist&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Glory be to these AI bookends!&lt;/p&gt;
&lt;p&gt;PS: It&amp;rsquo;s pretty cool that two celebrities are known just as &amp;ldquo;Ai&amp;rdquo;!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prompt: &lt;a href=&#34;https://github.com/sanand0/research/pull/11&#34;&gt;https://github.com/sanand0/research/pull/11&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Code: &lt;a href=&#34;https://github.com/sanand0/research/tree/main/wikipedia-ai-names&#34;&gt;https://github.com/sanand0/research/tree/main/wikipedia-ai-names&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2025-11-15-people-beginning-and-ending-with-ai-linkedin.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/posts/sanand0_when-i-realized-%F0%9D%97%94%F0%9D%97%B6shwarya-r%F0%9D%97%AE%F0%9D%97%B6-begins-activity-7396577669649379328-3M2l&#34;&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title>If a bot passes your exam, what are you teaching?</title>
      <link>https://www.s-anand.net/blog/if-a-bot-passes-your-exam-what-are-you-teaching/</link>
      <pubDate>Sun, 09 Nov 2025 15:53:58 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/if-a-bot-passes-your-exam-what-are-you-teaching/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;If a bot passes your exam, what are you teaching?&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/calvin-hobbes-exam.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s incredible how far coding agents have come. They can now solve complete exams. That changes what we should measure.&lt;/p&gt;
&lt;p&gt;My Tools in Data Science course has a &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2025-09-roe&#34;&gt;Remote Online Exam&lt;/a&gt;. It was so difficult that, in 2023, it sparked threads titled &amp;ldquo;What is the purpose of an impossible ROE?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Today, despite making the test harder, students solve it easily with &lt;a href=&#34;https://claude.ai/&#34;&gt;Claude&lt;/a&gt;, &lt;a href=&#34;https://chatgpt.com/&#34;&gt;ChatGPT&lt;/a&gt;, etc. Here&amp;rsquo;s today&amp;rsquo;s score distribution:&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/image-14.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;I solved one question with &lt;a href=&#34;https://developers.openai.com/codex/cli/&#34;&gt;Codex CLI&lt;/a&gt;. I ran I &lt;code&gt;chrome --remote-debugging-port=9222&lt;/code&gt; and prompted Codex to:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Use CDP to visit &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2025-09-roe&#34;&gt;https://exam.sanand.workers.dev/tds-2025-09-roe&lt;/a&gt; and solve Q4. Click on the “Check” button to verify the solution.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That was it. ~6 minutes and ~50 cents later, it solved the problem.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://asciinema.org/a/xni6OMt38oQSyhYLHLY3fwncS&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://asciinema.org/a/xni6OMt38oQSyhYLHLY3fwncS.svg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This works reliably. It worked 3/3 times.&lt;/p&gt;
&lt;p&gt;This runs in parallel. I can answer different questions in different Codex sessions.&lt;/p&gt;
&lt;p&gt;This is already in use. Several students got 10/10 in 15 minutes - on a 45 minute exam.&lt;/p&gt;
&lt;p&gt;So I need better evaluations. Instead of &amp;ldquo;Can you(r agent) solve this?&amp;rdquo;, I should check if they can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Turn a messy brief into an agent-friendly spec + plan&lt;/li&gt;
&lt;li&gt;Set up and connect the right tools&lt;/li&gt;
&lt;li&gt;Solve within a time and cost budget&lt;/li&gt;
&lt;li&gt;Test &amp;amp; debug without a human&lt;/li&gt;
&lt;li&gt;Recover from errors&lt;/li&gt;
&lt;li&gt;Adapt to new situations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also, code is the by-product (of AI coding or copying). Learning lives in the &lt;strong&gt;execution logs&lt;/strong&gt;. That&amp;rsquo;s what I should evaluate.&lt;/p&gt;
&lt;p&gt;Point I&amp;rsquo;m pondering: If a bot can pass my exam, what exactly am I teaching?&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/posts/sanand0_its-incredible-how-far-coding-agents-have-activity-7393317571892207616-VCUr&#34;&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title></title>
      <link>https://www.s-anand.net/blog/coding-agent-comparison/</link>
      <pubDate>Sat, 25 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/coding-agent-comparison/</guid>
      <description>&lt;p&gt;I asked multiple coding agents and models to build the same app:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Create a single-page web app at &lt;code&gt;index&lt;/code&gt;.&lt;code&gt;html&lt;/code&gt; that beautifully renders a GitHub user profile and activity comprehensively. Pick the ID in the URL ?&lt;code&gt;id&lt;/code&gt;=&amp;hellip;, default to ?&lt;code&gt;id&lt;/code&gt;=&lt;code&gt;torvalds&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;hellip; and compared their quality, cost, and speed.&lt;/p&gt;
&lt;p&gt;My observations:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quality variance is the highest&lt;/strong&gt;. Some models / agents produce great visuals, some average, some fail completely.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cost and time variance are lower&lt;/strong&gt; among the successful models. About 2X variance in each.&lt;/p&gt;
&lt;p&gt;This is unlike non-code usage, where quality varies &lt;em&gt;less&lt;/em&gt; than cost.&lt;/p&gt;
&lt;p&gt;My takeaway: &lt;strong&gt;Pick the best model&lt;/strong&gt; / &lt;strong&gt;agent&lt;/strong&gt;. Don&amp;rsquo;t worry about speed and cost - the variance is lower.&lt;/p&gt;
&lt;p&gt;Results: &lt;a href=&#34;https://sanand0.github.io/llmevals/coding-agents/&#34;&gt;https://sanand0.github.io/llmevals/coding-agents/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2025-10-25-coding-agent-comparison-linkedin.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/posts/sanand0_i-asked-multiple-coding-agents-and-models-activity-7383420784389787648-moGP&#34;&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title></title>
      <link>https://www.s-anand.net/blog/qwen-coder-and-code/</link>
      <pubDate>Fri, 15 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/qwen-coder-and-code/</guid>
      <description>&lt;p&gt;Alibaba released an open-source coding model (qwen-coder) and tool (qwen-code).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;qwen-code + qwen-coder cost 8 cents and made 3 mistakes. &lt;a href=&#34;https://lnkd.in/gguSGdv6&#34;&gt;https://lnkd.in/gguSGdv6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;qwen-code + claude-sonnet-4 cost 104 cents and made no mistakes. &lt;a href=&#34;https://lnkd.in/gEPnVS-F&#34;&gt;https://lnkd.in/gEPnVS-F&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;claude-code cost 29 cents and made no mistakes. &lt;a href=&#34;https://lnkd.in/gyCVeAr4&#34;&gt;https://lnkd.in/gyCVeAr4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There&amp;rsquo;s no reason to shift yet, but it&amp;rsquo;s a good step in the development of open code models &amp;amp; tools.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2025-08-15-qwen-coder-and-code-linkedin.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/posts/sanand0_alibaba-released-an-open-source-coding-model-activity-7355586584324304897-G18D&#34;&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title></title>
      <link>https://www.s-anand.net/blog/codex-jules-vibe-coding/</link>
      <pubDate>Sun, 22 Jun 2025 09:52:29 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/codex-jules-vibe-coding/</guid>
      <description>&lt;p&gt;I use Codex and Jules to code while I walk. I&amp;rsquo;ve merged several PRs without careful review. This added technical debt.&lt;/p&gt;
&lt;p&gt;This weekend, I spent four hours fixing the AI generated tests and code.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;What mistakes did it make?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inconsistency&lt;/strong&gt;. It flips between &lt;code&gt;execCommand(&amp;quot;copy&lt;/code&gt;&amp;quot;) and &lt;code&gt;clipboard.writeText&lt;/code&gt;(). It wavers on timeouts (50 ms vs 100 ms). It doesn&amp;rsquo;t always run/fix test cases.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Missed edge cases&lt;/strong&gt;. I switched &amp;lt;&lt;code&gt;div&lt;/code&gt;&amp;gt; to &amp;lt;&lt;code&gt;form&lt;/code&gt;&amp;gt;. My earlier code didn&amp;rsquo;t have a &lt;code&gt;type=&amp;quot;button&lt;/code&gt;&amp;quot;, so clicks reloaded the page. It missed that. It also left scripts as plain &amp;lt;&lt;code&gt;script&lt;/code&gt;&amp;gt; instead of &amp;lt;&lt;code&gt;script type=&amp;quot;module&lt;/code&gt;&amp;quot;&amp;gt; which was required.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Limited experimentation&lt;/strong&gt;. My failed with a HTTP 404 because the &lt;code&gt;common&lt;/code&gt;/ directory wasn&amp;rsquo;t served. I added &lt;code&gt;console.log&lt;/code&gt;s to find this. Also, &lt;code&gt;happy-dom&lt;/code&gt; won&amp;rsquo;t handle multiple &lt;code&gt;export&lt;/code&gt;s instead of a single &lt;code&gt;export&lt;/code&gt; { &amp;hellip; }. I wrote code to verify this. Coding agents didn&amp;rsquo;t run such experiments.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;What can we do about it?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Detailed coding rules&lt;/strong&gt;. E.g. &lt;em&gt;always&lt;/em&gt; run test cases and fix until they pass. Only use ESM. Always import from CDN via JSDelivr. That sort of thing.&lt;/p&gt;
&lt;p&gt;100% &lt;strong&gt;test coverage&lt;/strong&gt;. Ideally 100% of code and all usage scenarios.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Log everything&lt;/strong&gt;. My tests got a HTTP 404 because I was not serving the &lt;code&gt;common&lt;/code&gt;/ directory. LLMs couldn&amp;rsquo;t figure this out because it was not logged. Logging everything helps humans &lt;em&gt;and&lt;/em&gt; LLMs debug.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wait&lt;/strong&gt;. LLMs and coding agents keep improving. A few months down the line, they&amp;rsquo;ll run more experiments themselves.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Was AI coding worth the effort&lt;/strong&gt;? Here, yes. The tools &lt;em&gt;worked&lt;/em&gt;. Codex saved me 90% effort. My code quality obsession reduced savings to ~70%. Still huge.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2025-06-22-codex-jules-vibe-coding-linkedin.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/feed/update/urn%3Ali%3Ashare%3A7342489647257632769&#34;&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Turning Walks into Pull Requests</title>
      <link>https://www.s-anand.net/blog/turning-walks-into-pull-requests/</link>
      <pubDate>Fri, 30 May 2025 05:16:52 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/turning-walks-into-pull-requests/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Turning Walks into Pull Requests&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/jules.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;In the last few days, I&amp;rsquo;m coding with &lt;a href=&#34;https://jules.google.com/&#34;&gt;Jules&lt;/a&gt; (Google&amp;rsquo;s coding agent) while walking.&lt;/p&gt;
&lt;p&gt;Here are a few pull requests merged so far:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sanand0/tools/pull/5&#34;&gt;Add features via an issue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sanand0/saveform/pull/2&#34;&gt;Write test cases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sanand0/tools/pull/8&#34;&gt;Add docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Why bother?&lt;/strong&gt; My commute used to be audiobook time. Great for ideas, useless for deliverables. With ChatGPT, Gemini, Claude.ai, etc. I was able to have them write code, but I still needed to run, test, and deploy. &lt;a href=&#34;https://jules.google.com/&#34;&gt;Jules&lt;/a&gt; (and tools like &lt;a href=&#34;https://github.blog/news-insights/product-news/github-copilot-meet-the-new-coding-agent/&#34;&gt;GitHub Copilot Coding Agent&lt;/a&gt;, &lt;a href=&#34;https://openai.com/index/introducing-codex/&#34;&gt;OpenAI Codex&lt;/a&gt;, &lt;a href=&#34;https://github.com/qodo-ai/pr-agent&#34;&gt;PR Agent&lt;/a&gt;, etc. which are not currently free for everyone) lets you chat clone a repo, write code in a new branch, test it, and push. I can deploy that with a click.&lt;/p&gt;
&lt;p&gt;Fifteen minutes into yesterday&amp;rsquo;s walk I realised I&amp;rsquo;d shipped more code than in an hour at my desk (even with LLMs)!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Workflow&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open &lt;a href=&#34;https://jules.google.com/&#34;&gt;Jules&lt;/a&gt; via browser on phone, connect wired headset.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prompt&lt;/strong&gt; (by typing or speaking) the change to make. It reads the repo, creates a plan and writes code.&lt;/li&gt;
&lt;li&gt;It runs any existing test suites in a sandbox. Repeats until all tests pass.&lt;/li&gt;
&lt;li&gt;I have it publish a branch, go to &lt;a href=&#34;https://github.com/mobile&#34;&gt;GitHub Mobile&lt;/a&gt; and create a PR.&lt;/li&gt;
&lt;li&gt;Back home, I review the output and merge.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There are 3 kinds of uses I&amp;rsquo;ve put it to.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;#1. &lt;a href=&#34;https://github.com/sanand0/tools/pull/8&#34;&gt;Documentation&lt;/a&gt;&lt;/strong&gt; is the easiest. Low risk, high quality, boring task. Here&amp;rsquo;s a sample prompt:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This repo has multiple directories, each with their own standalone single page application tools.&lt;/p&gt;
&lt;p&gt;If a directory does not have a README.md, add a concise, clear, USEFUL, tersely worded one covering what the tool does, the various real life use cases, and how it works.&lt;/p&gt;
&lt;p&gt;If a readme already exists, do NOT delete any information. Prefix this new information at the start.&lt;/p&gt;
&lt;p&gt;Avoid repeating information across multiple README files. Consolidated such information into the root directory readme.&lt;/p&gt;
&lt;p&gt;In the root directory README, also include links to each tool directory as a list, explaining in a single sentence what the tool does.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;#2. &lt;a href=&#34;https://github.com/sanand0/saveform/pull/2&#34;&gt;Testing&lt;/a&gt;&lt;/strong&gt; is the next best. Low risk, medium quality, boring task. Here&amp;rsquo;s an example:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Run the tests in this repo. Go through the code and see what parts of the code are not covered. Understand the logic and see what kinds of user scenarios are not covered. Add test cases to cover these in the same style as the existing code.&lt;/p&gt;
&lt;p&gt;Write MINIMAL, ELEGANT code.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;#3. &lt;a href=&#34;https://github.com/sanand0/tools/pull/5&#34;&gt;Coding&lt;/a&gt;&lt;/strong&gt; may not be the best suited for this. High risk, medium quality, and interesting. But here&amp;rsquo;s a sample prompt:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Fix &lt;a href=&#34;https://github.com/sanand0/tools/issues/3&#34;&gt;https://github.com/sanand0/tools/issues/3&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Allow the user to enter just the GitHub @username, e.g. @sanand0 apart from the URL&lt;/li&gt;
&lt;li&gt;Add crisp documentation at the start explaining what the app does&lt;/li&gt;
&lt;li&gt;Only display html_url (as a link), avatar_url (as an image), name, company, blog, location, email, hireable, bio, twitter_username, public_repos, public_gists, followers, following, created_at, updated_at&lt;/li&gt;
&lt;li&gt;Format dates like Wed 28 May 2025. Format numbers with commas. Add links to blog, twitter_username, email&lt;/li&gt;
&lt;li&gt;Add &amp;ldquo;Download CSV&amp;rdquo; and &amp;ldquo;Copy to Excel&amp;rdquo; buttons similar to the json2csv/ tool&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Automated tests are a great way to reduce AI coding risk, as &lt;a href=&#34;https://simonwillison.net/2025/May/28/automated-tests/&#34;&gt;Simon Willison suggests&lt;/a&gt;. I need to do more of this!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wins &amp;amp; Losses&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Good&lt;/strong&gt;: 1 walk = one merged PR. Even with LLMs, it used to take me 2 hours. Now, it&amp;rsquo;s about half an hour of reclaimed walking &amp;ldquo;dead time&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Good&lt;/strong&gt;: Test-first prompting caught a sneaky race condition I’d have missed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bad&lt;/strong&gt;: Told Jules “add docs” without saying “don’t overwrite existing.” It politely destroyed my README. Manual revert ensued.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bad&lt;/strong&gt;: Front-end tasks need visual QA; I&amp;rsquo;m still hunting for a zero-setup UAT preview on mobile.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The industry echoes the pattern: GitHub’s new Copilot agent submits draft PRs behind branch protections [1]; Sweep auto-fixes small tickets but can over-touch files [2]; Microsoft’s own engineers found agents flailed on complex bug fixes [3].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But…&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Isn’t this risky?&lt;/strong&gt; Maybe. Branch protections, CI, and human review stay intact. Agents are like a noisy junior devs who never sleep.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Is the diff readable?&lt;/strong&gt; If not, I have it retry, write more reviewable diffs, and explain clearly in comments &amp;amp; commit messages.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Does it have enough context?&lt;/strong&gt; I add all the context clearly in the issue or the prompt. That can take some research.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security?&lt;/strong&gt; The agents run inside repos you give it access. Prompt injection and exfiltration &lt;strong&gt;are&lt;/strong&gt; possible risks, but &lt;strong&gt;only&lt;/strong&gt; if it accesses external code / websites.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;How to start&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pick a low-stakes repo with solid tests.&lt;/li&gt;
&lt;li&gt;Pick an agent. &lt;a href=&#34;https://jules.google.com/&#34;&gt;Jules&lt;/a&gt; has 5 tasks/day free for now. Or pay and use &lt;a href=&#34;https://github.blog/news-insights/product-news/github-copilot-meet-the-new-coding-agent/&#34;&gt;GitHub Copilot Coding Agent&lt;/a&gt;, &lt;a href=&#34;https://openai.com/index/introducing-codex/&#34;&gt;OpenAI Codex&lt;/a&gt;, etc. Or self-host &lt;a href=&#34;https://github.com/qodo-ai/pr-agent&#34;&gt;PR Agent&lt;/a&gt;, etc.&lt;/li&gt;
&lt;li&gt;Write a failing test.&lt;/li&gt;
&lt;li&gt;Go for a walk and talk.&lt;/li&gt;
&lt;li&gt;Merge (or laugh) on return.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
  </channel>
</rss>
