<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Gaurav Manek</title>
    <description>Gaurav Manek&apos;s Online Portfolio.</description>
    <link>https://gauravmanek.com</link>
    <atom:link href="https://gauravmanek.comfeed.xml" rel="self" type="application/rss+xml" />
    
      <item>
        <title>Agentic AI for Beginners Workshop</title>
        <description>&lt;p&gt;If you’re here for the workshop, welcome! Add me on &lt;a href=&quot;https://www.linkedin.com/in/gauravmanek/&quot;&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you haven’t already, please sign up for the following — they’ll give you free (or free-to-start) access to the agents and models we’ll be working with:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/&quot;&gt;GitHub&lt;/a&gt; and &lt;a href=&quot;https://github.com/features/copilot/plans&quot;&gt;GitHub Copilot Free&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://aistudio.google.com/&quot;&gt;Google AI Studio&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opencode.ai/zen&quot;&gt;OpenCode Zen&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://openrouter.ai/&quot;&gt;OpenRouter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During the workshop, we’ll be deploying AI agents for:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gauravmm/ai-tutorial-scraping-prescriptions/tree/master&quot;&gt;simple data extraction task&lt;/a&gt; and a&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gauravmm/ai-tutorial-triage-kittenclaw/tree/master&quot;&gt;multiagent task&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/gauravmm/agentic-ai-intro/releases/&quot;&gt;slides&lt;/a&gt; and &lt;a href=&quot;https://github.com/gauravmm/agentic-ai-intro&quot;&gt;source code&lt;/a&gt; are available under &lt;a href=&quot;https://creativecommons.org/licenses/by-sa/4.0/&quot;&gt;CC BY-SA 4.0 license&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ready to build? The &lt;a href=&quot;/lectures/2026/astar-intermediate-1/&quot;&gt;Build Your Own Agent Workshop&lt;/a&gt; is the build-heavy follow-up to this session.&lt;/p&gt;

&lt;h2 id=&quot;reading-list&quot;&gt;Reading List&lt;/h2&gt;

&lt;p&gt;When writing prompts, I recommend keeping up-to-date on industry best-practices. Some good places to start:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/overview&quot;&gt;Claude Prompt Engineering Docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developers.openai.com/api/docs/guides/prompt-engineering/&quot;&gt;OpenAI Prompt Engineering Guide&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.promptingguide.ai/&quot;&gt;PromptingGuide.AI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re looking for skills, start here:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The &lt;a href=&quot;https://github.com/anthropics/skills&quot;&gt;anthropics/skills&lt;/a&gt; collection&lt;/li&gt;
  &lt;li&gt;The &lt;a href=&quot;https://github.com/openclaw/skills&quot;&gt;openclaw/skills&lt;/a&gt; collection&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blader/humanizer&quot;&gt;https://github.com/blader/humanizer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are plenty of skills for specific tasks and tools. If you can’t find exactly what you need, you can always deploy the &lt;a href=&quot;https://github.com/anthropics/skills/blob/main/skills/skill-creator/&quot;&gt;Skill Creator&lt;/a&gt; skill. Feed it some documentation and examples and it will generate a skill for you. It may be the most important skill of all.&lt;/p&gt;

&lt;p&gt;(Be warned: its easy to smuggle malicious code and prompts in with skills. Check them carefully.)&lt;/p&gt;

&lt;p&gt;For more general reading:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/lectures/2025/nus-bse3713-ai-platforms&quot;&gt;My AI Platforms Lecture&lt;/a&gt;, including open-source as a defensive and offensive maneuver&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=wvWpdrfoEv0&quot;&gt;This CGP Grey video&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_large_language_models&quot;&gt;Sizes of LLMs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://fs.blog/chestertons-fence/&quot;&gt;Chesterton’s Fence&lt;/a&gt;, or in short: “Do not remove a fence until you know why it was put up in the first place.”&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.wheresyoured.at/the-men-who-killed-google/&quot;&gt;The Men Who Killed Google&lt;/a&gt;, for how overreliance on metrics (rather than product quality) leads to short-term gains at the cost of long-term goals.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.apodex.com/blog/apodex-1.0&quot;&gt;Apodex 1.0&lt;/a&gt;, a bet on swarms of small models that verify and rewrite each other’s work — a possible future alternative to scaling one giant model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As always, turn your critical thinking skills on and carefully engage with the claims each source makes. Test what you can&lt;/p&gt;
</description>
        <pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/lectures/2026/astar-workshop-5/</link>
        <guid isPermaLink="true">https://gauravmanek.com/lectures/2026/astar-workshop-5/</guid>
      </item>
    
      <item>
        <title>An Answer-Sheet Scanner</title>
        <description>&lt;p&gt;Following the &lt;a href=&quot;/blog/2026/ai-answer-mapping/&quot;&gt;previous experiment on grading answers&lt;/a&gt;, I thought I’d play around with even more local VLMs by running one directly in clients’ browsers.&lt;/p&gt;

&lt;p&gt;With the help of Fable, I built a purely client-side pipeline that uses a mix of classic computer vision techniques and a VLM to grade multiple-choice questions. Try it: &lt;strong&gt;&lt;a href=&quot;https://gauravmm.github.io/answer-sheet/&quot;&gt;gauravmm.github.io/answer-sheet&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The pipeline is simple. Classical computer vision:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;deskews the image,&lt;/li&gt;
  &lt;li&gt;locates the grid from the answer boxes’ own printed edges, then&lt;/li&gt;
  &lt;li&gt;classify each cell by how much ink is inside it.&lt;/li&gt;
  &lt;li&gt;infers the coloration.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The only ML in the product is a small handwriting model for the three header fields.&lt;/p&gt;

&lt;p&gt;At first, Fable (at my direction) attempted to use Granite-Docling. It could read the &lt;em&gt;structure&lt;/em&gt; perfectly but couldn’t reliably say which column each mark was in. VLMs in general are known to be weak at exactly the spatial-grounding job a dense grid demands. After testing it, Fable switched to a classical pipeline. On its test cases, it scores every mark correctly, in milliseconds, at a fraction of the download.&lt;/p&gt;

&lt;p&gt;If I had to use a VLM, I would likely label each cell uniquely, removing the spatial-grounding requirement entirely.&lt;/p&gt;

&lt;p&gt;The source, the sheet, and the full spec are &lt;a href=&quot;https://github.com/gauravmm/answer-sheet&quot;&gt;on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;figure class=&quot;media media--image&quot;&gt;
  &lt;img src=&quot;demo-sheet.webp&quot; alt=&quot;A completed answer sheet, photographed on a phone. [Download it](demo-sheet.webp) and feed it to the app.&quot; /&gt;
  &lt;figcaption&gt;A completed answer sheet, photographed on a phone. [Download it](demo-sheet.webp) and feed it to the app.&lt;/figcaption&gt;
&lt;/figure&gt;

</description>
        <pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/blog/2026/answer-sheet/</link>
        <guid isPermaLink="true">https://gauravmanek.com/blog/2026/answer-sheet/</guid>
      </item>
    
      <item>
        <title>One-Shotting a Grading Rig with Fable</title>
        <description>&lt;p&gt;Like the rest of the world, I am very impressed by the long-term capabilities of Anthropic’s latest model. Having a little usage to spare, I decided I would try it on a cute little idea that I have been sleeping on.&lt;/p&gt;

&lt;p&gt;The idea: a fixed camera and a projector, both pointed down at a paper jig on my desk. Drop a handwritten exam answer into the jig, a local VLM grades it, and the projector draws the marks — ticks, the score, a one-line remark — back onto the paper, registered to the right spot on the page. I wrote a spec, handed it to Fable, and asked it to produce a working MVP. The whole thing came together in a single conversation.&lt;/p&gt;

&lt;h2 id=&quot;what-fable-can-do&quot;&gt;What Fable can do&lt;/h2&gt;

&lt;p&gt;On its own initiative, Fable did some impressive things that I wouldn’t have bet an AI would be able to do:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Calibrated the jig by superimposing a grid and reading off the coordinates.&lt;/li&gt;
  &lt;li&gt;Calibrating the projector by projecting dots and differencing frames to find them.&lt;/li&gt;
  &lt;li&gt;Generating its own synthetic test data with realistic transforms.&lt;/li&gt;
  &lt;li&gt;Debugging a MacOS window-handling issue.&lt;/li&gt;
  &lt;li&gt;Figuring out color-channel issues&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It worked autonomously for about forty minutes, and had a working prototype. It built the product up by layer by layer, instead of all at once, and built up a set of experiments and tests to validate at each step of the way.&lt;/p&gt;

&lt;figure class=&quot;media media--image&quot;&gt;
  &lt;img src=&quot;pipeline-stages.webp&quot; alt=&quot;One live grade, end to end: blank the projector and capture, flatten the page with a homography, crop to the known answer box, grade it with a local VLM, render the annotation in paper coordinates, then warp that onto the projector so it lands on the page.&quot; /&gt;
  &lt;figcaption&gt;One live grade, end to end: blank the projector and capture, flatten the page with a homography, crop to the known answer box, grade it with a local VLM, render the annotation in paper coordinates, then warp that onto the projector so it lands on the page.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;my-hands&quot;&gt;My hands&lt;/h2&gt;

&lt;p&gt;My contribution to the endeavour was the design and assembly of the jig, some mild discussion in writing the spec, and swapping in pages on request.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/gauravmm/answer-mapping&quot;&gt;full source is on GitHub&lt;/a&gt;, and Fable’s own &lt;a href=&quot;fable_reflections.md&quot;&gt;unedited writeup on the session&lt;/a&gt; is fascinating. It almost (but not quite) thinks like a human would.&lt;/p&gt;

&lt;figure class=&quot;media media--video&quot;&gt;
  &lt;video preload=&quot;auto&quot; autoplay=&quot;&quot; loop=&quot;&quot; muted=&quot;&quot; width=&quot;360&quot;&gt;
    &lt;source src=&quot;demo.webm&quot; type=&quot;video/webm&quot; /&gt;
  &lt;/video&gt;
  &lt;figcaption&gt;The rig grading a real page, hands-free: present the paper, the marks land back on it.&lt;/figcaption&gt;
&lt;/figure&gt;
</description>
        <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/blog/2026/ai-answer-mapping/</link>
        <guid isPermaLink="true">https://gauravmanek.com/blog/2026/ai-answer-mapping/</guid>
      </item>
    
      <item>
        <title>Build Your Own Agent Workshop</title>
        <description>&lt;p&gt;If you’re here for the workshop, welcome! Add me on &lt;a href=&quot;https://www.linkedin.com/in/gauravmanek/&quot;&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This is the build-heavy follow-up to the &lt;a href=&quot;/lectures/2026/astar-workshop-4/&quot;&gt;Intro to Agentic AI&lt;/a&gt; session. The basic workshop covered concepts; this one is about shipping. (You don’t have to participate in that to apply for this.)&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/gauravmm/intermediate-agentic-ai/releases/&quot;&gt;slides&lt;/a&gt; and &lt;a href=&quot;https://github.com/gauravmm/intermediate-agentic-ai&quot;&gt;source code&lt;/a&gt; are available under &lt;a href=&quot;https://creativecommons.org/licenses/by-sa/4.0/&quot;&gt;CC BY-SA 4.0 license&lt;/a&gt;. Setup guides and reference material are in the &lt;a href=&quot;https://github.com/gauravmm/intermediate-agentic-ai-resources/&quot;&gt;intermediate-agentic-ai-resources&lt;/a&gt; repo.&lt;/p&gt;

&lt;p&gt;You’ll come in with a team, a real problem, and real data, and leave four hours later with a working agent that someone on your team will actually use next week. Expect a 15-minute talk, then heads-down building with hands-on help.&lt;/p&gt;

&lt;p&gt;Teams are product-focused by design: each one pairs engineers with the actual users whose problem is being solved. You have to specify your users and your projects  when you apply for this workshop.&lt;/p&gt;

&lt;h2 id=&quot;before-you-apply&quot;&gt;Before you apply&lt;/h2&gt;

&lt;p&gt;We know we’re asking &lt;em&gt;a lot&lt;/em&gt; for a 4-hour workshop. The bar is high on purpose: every hour spent upfront understanding the problem and lining up real data is an hour we don’t waste in the room with a half-formed brief. We’ll be bringing together a lot of resources for this workshop, so its important we set ourselves up for success.&lt;/p&gt;

&lt;p&gt;We’re capping the first cohort at 8 teams. If you apply now and don’t make it in, &lt;strong&gt;you go to the front of the queue for the next round&lt;/strong&gt;, so it’s worth getting your one-pager in even if you’re not 100% sure your project fits.&lt;/p&gt;

&lt;h2 id=&quot;projects&quot;&gt;Projects&lt;/h2&gt;

&lt;p&gt;A good workshop project is:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Bounded.&lt;/strong&gt; The minimally useful user story can be demo-ed in 90 seconds and is buildable by 2 engineers in ~2.5 hours of build time.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Real user in the room.&lt;/strong&gt; At least one team member personally has the problem the agent solves and will be the demo’s first user.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Real data in the room.&lt;/strong&gt; 5+ representative examples available on workshop day, from a personal laptop, without violating the constraints below.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Internal-facing.&lt;/strong&gt; No public users, no anonymous access, no autonomous external actions.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Evaluable.&lt;/strong&gt; You can describe, in one sentence, how you’d tell if the agent is doing a good job. “It feels right” is not evaluable; “matches the expert’s answer on 8 of 10 known cases” is.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Agentic, not just a prompt.&lt;/strong&gt; The project requires at least one of: tool use, retrieval, multi-step reasoning, sub-agents, or self-critique. A single-shot prompt-and-response chatbot is not a workshop project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note that these are &lt;em&gt;application-agnostic&lt;/em&gt;. We’ll accept projects from any area.&lt;/p&gt;

&lt;h3 id=&quot;disqualifying-properties&quot;&gt;Disqualifying properties&lt;/h3&gt;

&lt;p&gt;A project is disqualified if any of the following are true:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Requires data or systems the team can’t access from a personal laptop on workshop day.&lt;/li&gt;
  &lt;li&gt;Touches PHI, PII, financial records, security credentials, or anything else where a leak would matter.&lt;/li&gt;
  &lt;li&gt;Output goes to a customer, patient, regulator, or other external party without a human review step.&lt;/li&gt;
  &lt;li&gt;Requires training or fine-tuning a model. Frontier models with good prompting and tool use only.&lt;/li&gt;
  &lt;li&gt;Depends on a specific person who isn’t on the team (“we’ll get input from Legal”).&lt;/li&gt;
  &lt;li&gt;“Build a platform for X.” Platforms are not 3-hour projects.&lt;/li&gt;
  &lt;li&gt;Makes autonomous changes on external systems.&lt;/li&gt;
  &lt;li&gt;Is a trivial RAG over a document pile. You can learn that from LinkedIn.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My goal is to help you avoid these pitfalls that make projects balloon quickly out of scope.&lt;/p&gt;

&lt;h3 id=&quot;project-ideas&quot;&gt;Project ideas&lt;/h3&gt;

&lt;p&gt;Here are some starting points. You don’t have to pick from this list, but a good project will look a lot like one of these:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;#&lt;/th&gt;
      &lt;th&gt;Name&lt;/th&gt;
      &lt;th&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;1&lt;/td&gt;
      &lt;td&gt;Calendar &amp;amp; todo chatbot&lt;/td&gt;
      &lt;td&gt;Manages calendar events and todo lists conversationally. Resolves conflicts and reasons about priorities.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;Market &amp;amp; competitor research&lt;/td&gt;
      &lt;td&gt;Researches a market landscape and specific competitors. Produces structured briefs with sources.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;3&lt;/td&gt;
      &lt;td&gt;Work instruction check &amp;amp; writeup chatbot&lt;/td&gt;
      &lt;td&gt;Follows along with a technician as they complete a work instruction, prompts them for details and next steps.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;Document sorter &amp;amp; summarizer&lt;/td&gt;
      &lt;td&gt;Sorts and summarizes a document corpus for quick lookup. Surfaces the right passage on demand.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;5&lt;/td&gt;
      &lt;td&gt;Patent research bot&lt;/td&gt;
      &lt;td&gt;Searches patent databases and parses claims for a target area. Surfaces relevant prior art with citations.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;6&lt;/td&gt;
      &lt;td&gt;Research paper triage agent&lt;/td&gt;
      &lt;td&gt;Pulls related work from PubMed/arXiv/ChemRxiv and ranks by relevance to the user’s project. Produces a “what’s new and why you care” brief.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;7&lt;/td&gt;
      &lt;td&gt;Experiment protocol checker&lt;/td&gt;
      &lt;td&gt;Reads a draft protocol and flags missing controls, ambiguous steps, safety issues, and SOP deviations. Embedded user = anyone who’s reviewed a junior person’s protocol and wanted to cry.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;8&lt;/td&gt;
      &lt;td&gt;Safety + SDS assistant&lt;/td&gt;
      &lt;td&gt;Given a planned experiment, pulls SDS sheets for each chemical and summarizes incompatibilities, required PPE, and waste handling. Catches the spicy combinations before they happen.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;9&lt;/td&gt;
      &lt;td&gt;Test protocol drafter from a requirement&lt;/td&gt;
      &lt;td&gt;Given a design requirement, drafts a bench test protocol with apparatus, procedure, acceptance criteria, sample size, and applicable standards. Backtest against existing protocols the lab has written.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;10&lt;/td&gt;
      &lt;td&gt;Bench test data analyzer&lt;/td&gt;
      &lt;td&gt;Pick one type of test the lab runs frequently and build a pipeline to run standard analyses, generate plots, and draft a results section.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;minimal-technical-requirements&quot;&gt;Minimal technical requirements&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Personal laptop, not ITSS-managed.&lt;/strong&gt; You need to install things without filing a ticket.
    &lt;ul&gt;
      &lt;li&gt;If it’s Windows, install &lt;a href=&quot;https://learn.microsoft.com/en-us/windows/wsl/install&quot;&gt;WSL2&lt;/a&gt;, &lt;a href=&quot;https://docs.astral.sh/uv/&quot;&gt;uv&lt;/a&gt;, and &lt;a href=&quot;https://github.com/nvm-sh/nvm&quot;&gt;nvm&lt;/a&gt;. Use &lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;Visual Studio Code&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;If it’s a Mac, install Homebrew or &lt;a href=&quot;https://github.com/lucasgelfond/zerobrew&quot;&gt;Zerobrew&lt;/a&gt;, &lt;a href=&quot;https://docs.astral.sh/uv/&quot;&gt;uv&lt;/a&gt;, and &lt;a href=&quot;https://github.com/nvm-sh/nvm&quot;&gt;nvm&lt;/a&gt;. Use &lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;Visual Studio Code&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;If it’s Linux, Godspeed to you.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Each person must have a subscription to a frontier model.&lt;/strong&gt; Active and logged in &lt;em&gt;before&lt;/em&gt; the workshop starts.
    &lt;ul&gt;
      &lt;li&gt;Claude Pro and Codex Plus, strongly encouraged.&lt;/li&gt;
      &lt;li&gt;Kimi Allegretto, OpenCode Go, Z.AI GLM Lite, etc. acceptable. (Limited support.)&lt;/li&gt;
      &lt;li&gt;GitHub Copilot discouraged (poor billing model), Cursor discouraged (lack of direct AI access).&lt;/li&gt;
      &lt;li&gt;If you don’t know what to choose, get a month of Claude Pro. &lt;a href=&quot;https://claude.ai/referral/hvlQcCbM2A&quot;&gt;My referral code&lt;/a&gt; gives you the first week free.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Any API keys or credentials your project needs&lt;/strong&gt; (internal docs, instrument output folder, etc.) tested and working on workshop day. If you can’t connect to it from your laptop the morning of, you can’t use it.
    &lt;ul&gt;
      &lt;li&gt;Only exception is the calendar, which we can provide a connector for.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;group-requirements&quot;&gt;Group requirements&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Must bring data.&lt;/strong&gt; At least 5 real examples of whatever your agent will process — protocols, documents, instrument files, questions with known answers, etc. Synthetic examples are fine if real data can’t leave its home system, but they must be representative.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Team of 2-4 people&lt;/strong&gt;, max 4.
    &lt;ul&gt;
      &lt;li&gt;Minimum 2 engineers with working Python or TypeScript.&lt;/li&gt;
      &lt;li&gt;Minimum 1 actual user who would personally use what you build.&lt;/li&gt;
      &lt;li&gt;A team member may be either, both, or neither.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pre-submitted one-pager&lt;/strong&gt; (see below) reviewed and approved before workshop day.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Stuck for 10 minutes? Raise your hand.&lt;/strong&gt; No silent struggling.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;application&quot;&gt;Application&lt;/h2&gt;

&lt;p&gt;The application form asks for:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Team name.&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2-4 members.&lt;/strong&gt; For each: name, role (engineer / user / both), and which frontier-model subscription they’re bringing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’ll also have to confirm that:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;at least 2 engineers with working Python or TypeScript (even at a very basic level is fine),&lt;/li&gt;
  &lt;li&gt;at least 1 person who would personally use the thing you’re building.&lt;/li&gt;
  &lt;li&gt;every member, especially non-engineers, have an active frontier-model subscription by workshop day.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;problem-explainer&quot;&gt;Problem explainer&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Problem:&lt;/strong&gt; what’s painful today, one paragraph. Include how often it happens and roughly how much time it eats.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;User:&lt;/strong&gt; who exactly, and which of them is on the team. “Our PMs” is too vague; “Sarah, who is on this team” is right.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Inputs &amp;amp; systems:&lt;/strong&gt; what data, APIs, or docs the agent needs, and confirmation you’ll have working access from a personal laptop on workshop day.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Happy-path demo:&lt;/strong&gt; two sentences describing the exact scenario you’ll show at the end.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Success criteria:&lt;/strong&gt; one sentence describing what counts as success after you leave the workshop. &lt;em&gt;e.g.&lt;/em&gt; “Sarah uses it at least once next week without help.”&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;user-stories&quot;&gt;User stories&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;3-5 concrete user stories in the form: &lt;em&gt;As [specific person], when [trigger], I want [action] so that [outcome].&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;1 minimally useful user story marked clearly&lt;/strong&gt; — this is your build goal for the day.
    &lt;ul&gt;
      &lt;li&gt;If you only ship this one, the day was a win.&lt;/li&gt;
      &lt;li&gt;Must be demoable in under 90 seconds.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;data&quot;&gt;Data&lt;/h3&gt;

&lt;p&gt;Describe the 5 real (or representative synthetic) examples you’ll bring. What are they, where do they come from, and is anything sensitive that needs anonymizing first?&lt;/p&gt;

&lt;h3 id=&quot;risks&quot;&gt;Risks&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Does your project satisfy all the required criteria and avoid all the disqualifying ones? If not, address it here.&lt;/li&gt;
  &lt;li&gt;Biggest unknown (in one line).&lt;/li&gt;
  &lt;li&gt;Anything you need from the host (sample data, an API you don’t have access to, a specific library).&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Tue, 23 Jun 2026 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/lectures/2026/astar-intermediate-1/</link>
        <guid isPermaLink="true">https://gauravmanek.com/lectures/2026/astar-intermediate-1/</guid>
      </item>
    
      <item>
        <title>Agentic AI for Beginners Workshop</title>
        <description>&lt;p&gt;If you’re here for the workshop, welcome! Add me on &lt;a href=&quot;https://www.linkedin.com/in/gauravmanek/&quot;&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you haven’t already, please sign up for the following — they’ll give you free (or free-to-start) access to the agents and models we’ll be working with:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/&quot;&gt;GitHub&lt;/a&gt; and &lt;a href=&quot;https://github.com/features/copilot/plans&quot;&gt;GitHub Copilot Free&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://aistudio.google.com/&quot;&gt;Google AI Studio&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opencode.ai/zen&quot;&gt;OpenCode Zen&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://openrouter.ai/&quot;&gt;OpenRouter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During the workshop, we’ll be deploying AI agents for:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gauravmm/ai-tutorial-scraping-prescriptions/tree/master&quot;&gt;simple data extraction task&lt;/a&gt; and a&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gauravmm/ai-tutorial-triage-kittenclaw/tree/master&quot;&gt;multiagent task&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/gauravmm/agentic-ai-intro/releases/&quot;&gt;slides&lt;/a&gt; and &lt;a href=&quot;https://github.com/gauravmm/agentic-ai-intro&quot;&gt;source code&lt;/a&gt; are available under &lt;a href=&quot;https://creativecommons.org/licenses/by-sa/4.0/&quot;&gt;CC BY-SA 4.0 license&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ready to build? The &lt;a href=&quot;/lectures/2026/astar-intermediate-1/&quot;&gt;Build Your Own Agent Workshop&lt;/a&gt; is the build-heavy follow-up to this session.&lt;/p&gt;

&lt;h2 id=&quot;reading-list&quot;&gt;Reading List&lt;/h2&gt;

&lt;p&gt;When writing prompts, I recommend keeping up-to-date on industry best-practices. Some good places to start:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/overview&quot;&gt;Claude Prompt Engineering Docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developers.openai.com/api/docs/guides/prompt-engineering/&quot;&gt;OpenAI Prompt Engineering Guide&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.promptingguide.ai/&quot;&gt;PromptingGuide.AI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re looking for skills, start here:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The &lt;a href=&quot;https://github.com/anthropics/skills&quot;&gt;anthropics/skills&lt;/a&gt; collection&lt;/li&gt;
  &lt;li&gt;The &lt;a href=&quot;https://github.com/openclaw/skills&quot;&gt;openclaw/skills&lt;/a&gt; collection&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blader/humanizer&quot;&gt;https://github.com/blader/humanizer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are plenty of skills for specific tasks and tools. If you can’t find exactly what you need, you can always deploy the &lt;a href=&quot;https://github.com/anthropics/skills/blob/main/skills/skill-creator/&quot;&gt;Skill Creator&lt;/a&gt; skill. Feed it some documentation and examples and it will generate a skill for you. It may be the most important skill of all.&lt;/p&gt;

&lt;p&gt;(Be warned: its easy to smuggle malicious code and prompts in with skills. Check them carefully.)&lt;/p&gt;

&lt;p&gt;For more general reading:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/lectures/2025/nus-bse3713-ai-platforms&quot;&gt;My AI Platforms Lecture&lt;/a&gt;, including open-source as a defensive and offensive maneuver&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=wvWpdrfoEv0&quot;&gt;This CGP Grey video&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_large_language_models&quot;&gt;Sizes of LLMs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://fs.blog/chestertons-fence/&quot;&gt;Chesterton’s Fence&lt;/a&gt;, or in short: “Do not remove a fence until you know why it was put up in the first place.”&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.wheresyoured.at/the-men-who-killed-google/&quot;&gt;The Men Who Killed Google&lt;/a&gt;, for how overreliance on metrics (rather than product quality) leads to short-term gains at the cost of long-term goals.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.apodex.com/blog/apodex-1.0&quot;&gt;Apodex 1.0&lt;/a&gt;, a bet on swarms of small models that verify and rewrite each other’s work — a possible future alternative to scaling one giant model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As always, turn your critical thinking skills on and carefully engage with the claims each source makes. Test what you can&lt;/p&gt;
</description>
        <pubDate>Mon, 22 Jun 2026 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/lectures/2026/astar-workshop-4/</link>
        <guid isPermaLink="true">https://gauravmanek.com/lectures/2026/astar-workshop-4/</guid>
      </item>
    
      <item>
        <title>How I choose the task a workshop lives on</title>
        <description>&lt;p&gt;Last time I wrote about &lt;a href=&quot;/blog/2026/kittenclaw/&quot;&gt;KittenClaw&lt;/a&gt;, the teaching harness I built so a room full of beginners could get an agent running end-to-end on free tiers without losing the first forty minutes to setup. The harness solves the plumbing. It says nothing about the harder question, which is what you actually point it at.&lt;/p&gt;

&lt;p&gt;That question matters more than the harness does. For a lot of the people in the room, the workshop &lt;em&gt;is&lt;/em&gt; their first real contact with an agent. If that contact goes badly, if the task is confusing or fiddly or spits out pages of output nobody can read, they don’t just fail the exercise. They walk away with the quiet conclusion that this stuff is finicky and not for them, and I’ve probably delayed their next attempt by months. The first task is the make-or-break example, and I’ve come to treat it with far more suspicion than the code around it.&lt;/p&gt;

&lt;p&gt;So here is the rubric I use to choose it. It is deliberately opinionated, because every one of these rules is scar tissue from a task that went sideways.&lt;/p&gt;

&lt;h2 id=&quot;form-remove-every-excuse-not-to-start&quot;&gt;Form: remove every excuse not to start&lt;/h2&gt;

&lt;p&gt;The first job of the task is to have nothing standing between a person and their first result.&lt;/p&gt;

&lt;p&gt;No programming background can be required. The moment a task assumes someone is willing to write two lines of python, I’ve cut my enrollable audience by ~80% and added friction for 80% of who’s left. Whatever the task is, it has to be legible to someone who has never opened a terminal. And if it rewards someone who &lt;em&gt;can&lt;/em&gt;, that reward has to be optional.&lt;/p&gt;

&lt;p&gt;It has to run on cheap or free tiers, and it has to be indifferent to which provider supplies them. I don’t want the exercise to break the day a free tier changes its terms, and I don’t want to be shilling for anyone. The same task should run on whatever model the room can get for nothing.&lt;/p&gt;

&lt;p&gt;It has to run in the browser. Every local install is a fork in the road where a third of the room ends up somewhere I can’t help them from the front. And the whole interaction has to be &lt;em&gt;visible&lt;/em&gt;, with no step happening on someone else’s server where we can’t watch it. This is the same instinct that made KittenClaw three readable files with its whole memory on disk: if a beginner can’t see it, they can’t learn from it, and they certainly can’t trust it. Finally, a human has to be in the loop. A task that runs to completion on its own is a demo, not an exercise.&lt;/p&gt;

&lt;h2 id=&quot;scope-a-toy-of-a-real-thing&quot;&gt;Scope: a toy of a real thing&lt;/h2&gt;

&lt;p&gt;Get the form right and you’ve earned the room’s attention. Scope is how you keep it.&lt;/p&gt;

&lt;p&gt;The interaction loop has to be short enough to feel immediate. Change the prompt, change a constraint, and see the outcome in seconds. That tight loop does the teaching. It’s what turns “I read that prompts matter” into “I felt that prompt change the answer.” Anything that puts minutes between a change and its consequence kills the intuition before it forms.&lt;/p&gt;

&lt;p&gt;The knowledge base has to be small, fixed, and boring. No loading documents, no managing state mid-exercise, and absolutely nothing proprietary. Data management is friction and proprietary data is risk, and neither teaches anything about agents. The reasoning has to be shallow for the same reason the models are cheap: I don’t want thirty people debugging a subtle chain of logic on a free tier. Short steps, obvious failures.&lt;/p&gt;

&lt;p&gt;And the task has to sit in a specific sweet spot. It should be a &lt;em&gt;toy version of a real workflow&lt;/em&gt;, close enough that an attendee can see the analogy to a system that would actually earn its keep. But it can’t be so simple that a regex or a spreadsheet would do it. If a non-AI tool solves it cleanly, the exercise teaches that agents are pointless. The whole thing works only if success and failure are both obvious the instant they happen. No rubric, no “well, sort of.” It worked or it didn’t, and everyone can see which.&lt;/p&gt;

&lt;p&gt;Two guardrails do a lot of work here. Avoid anything that’s already a solved product, like transcription, document Q&amp;amp;A, or deep-research-over-a-corpus, because the interesting engineering has been done and hidden, and there’s nothing left to feel. And avoid anything a five-line script would nail, for the opposite reason. The task has to live in the gap between “trivial” and “already a product,” which is exactly where the useful agentic work lives too.&lt;/p&gt;

&lt;h2 id=&quot;difficulty-one-task-every-skill-level&quot;&gt;Difficulty: one task, every skill level&lt;/h2&gt;

&lt;p&gt;The last problem is that the room is not uniform. In the same thirty people I’ll have someone who has never used a chatbot sitting next to someone who writes Python for a living, and the task has to land for both.&lt;/p&gt;

&lt;p&gt;So the task has to be modular. There’s a version you solve by editing a prompt in plain English, and a version you solve by changing the tools underneath, and the same exercise has to admit both without either group feeling cheated. For the people who finish early (and someone always finishes early), the task needs room for &lt;em&gt;adversarial&lt;/em&gt; constraints. A user who won’t commit to an answer, a requirement that the bot collect something it doesn’t obviously need, an edge case that turns a clean solution into a pile of blanks. Realistic difficulty, handed out on demand, so the fast solvers stay in the problem instead of getting bored and skeptical.&lt;/p&gt;

&lt;p&gt;And there has to be a moment of wow. One beat that teases what comes after the workshop. The one I use is agent-driving-agent: a coding assistant driving KittenClaw, writing a prompt on its own, holding a whole conversation with the bot and then grading the transcript. The &lt;a href=&quot;/blog/2026/kittenclaw/&quot;&gt;triage exercise I ship with KittenClaw&lt;/a&gt; is built to pay all of this off at once: a bot that has to gather information it doesn’t itself need because a second agent will. Modular and adversarial at once, in fifteen lines.&lt;/p&gt;

&lt;p&gt;None of these rules are clever. They’re just expensive to learn the other way. The harness took a weekend; the rubric took years of teaching.&lt;/p&gt;
</description>
        <pubDate>Sun, 21 Jun 2026 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/blog/2026/workshop-task-criteria/</link>
        <guid isPermaLink="true">https://gauravmanek.com/blog/2026/workshop-task-criteria/</guid>
      </item>
    
      <item>
        <title>How to Build Evals for AI Agents</title>
        <description>&lt;p&gt;If you’re here from the talk, welcome! Add me on &lt;a href=&quot;https://www.linkedin.com/in/gauravmanek/&quot;&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/gauravmm/2026-06-Evals/releases&quot;&gt;slides&lt;/a&gt; are available under &lt;a href=&quot;https://creativecommons.org/licenses/by-sa/4.0/&quot;&gt;CC BY-SA 4.0 license&lt;/a&gt;. Feel free to use them for your own purposes.&lt;/p&gt;

&lt;p&gt;If you remember nothing else from the talk, remember these three things:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Your test set &lt;em&gt;is&lt;/em&gt; your spec.&lt;/strong&gt; If a behavior isn’t in the eval, it isn’t a requirement. Make the set diverse on purpose — happy path, boring edge cases, known failure modes, adversarial inputs, and “things the agent shouldn’t do”.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Evals are never done.&lt;/strong&gt; Pull real production traces into your test set every week, or it will drift away from your users.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Evals are not a substitute for good infrastructure.&lt;/strong&gt; A broken retry loop, a missing timeout, or a tool call without an idempotency key will hurt you more than a 2% accuracy regression. Evals tell you &lt;em&gt;what&lt;/em&gt; is wrong; infrastructure decides &lt;em&gt;what happens&lt;/em&gt; when something is wrong.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you want to try out your newfound knowledge on a very simple agentic task, take a look at my &lt;a href=&quot;https://github.com/gauravmm/ai-tutorial-triage-kittenclaw&quot;&gt;AI Triage Bot via KittenClaw&lt;/a&gt;. Your coding agent can run the bot interactively and develop both the solution and the evals as it goes. It’s a great sandbox to play in.&lt;/p&gt;

&lt;h2 id=&quot;reading-list&quot;&gt;Reading List&lt;/h2&gt;

&lt;p&gt;The eval space is moving fast, but a few pieces have aged well. Start at the top, work down — these are written for builders, not researchers, and assume no ML background.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.evidentlyai.com/llm-guide/llm-evaluation&quot;&gt;LLM Evaluation: a Beginner’s Guide&lt;/a&gt; by Evidently AI — if “LLM-as-a-judge” isn’t yet a phrase you’d use in a sentence, read this one first. It assumes no ML background and lays out the vocabulary the rest of this list takes for granted.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://eugeneyan.com/writing/eval-process/&quot;&gt;An LLM-as-Judge Won’t Save The Product — Fixing Your Process Will&lt;/a&gt; by Eugene Yan — start here. The closest single piece of writing to the spirit of this talk: the process around your evals matters more than the cleverness of any individual grader. Pairs directly with Lesson 3.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hamel.dev/blog/posts/evals/&quot;&gt;Your AI Product Needs Evals&lt;/a&gt; by Hamel Husain — the post that crystallised the field; case-study driven and refreshingly opinionated.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hamel.dev/blog/posts/field-guide/&quot;&gt;A Field Guide to Rapidly Improving AI Products&lt;/a&gt; by Hamel Husain — tactical follow-up, with the look-at-your-data flywheel I gestured at in Lesson 2. Also his article &lt;a href=&quot;https://hamel.dev/blog/posts/llm-judge/&quot;&gt;Using LLM-as-a-Judge For Evaluation&lt;/a&gt;, which explains the whole process in exhaustive detail.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more detailed reading:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://eugeneyan.com/writing/evals/&quot;&gt;Task-Specific LLM Evals that Do &amp;amp; Don’t Work&lt;/a&gt; by Eugene Yan — secondary reading once the process post lands; a tour of evaluation dimensions with real examples of where each grader breaks.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://simonwillison.net/tags/evals/&quot;&gt;Simon Willison’s evals tag&lt;/a&gt; — a running commentary on what works and what doesn’t in practice. Great for absorbing taste in small doses.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=eGVDKegRdgM&quot;&gt;Scaling Up “Vibe Checks” for LLMs&lt;/a&gt; by Shreya Shankar (Stanford MLSys #97) — the same lessons in talk form, if you’d rather watch than read.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As always, turn your critical thinking skills on and carefully engage with the claims each source makes. The field is young enough that any “best practice” you read today may be embarrassing in eighteen months. The way you find out is by running the evals yourself.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;If you liked my talk, feel free to check out &lt;a href=&quot;https://www.gauravmanek.com/lectures/&quot;&gt;other talks I’ve given&lt;/a&gt;. A natural next stop is &lt;a href=&quot;/lectures/2026/abc-infrastructure/&quot;&gt;Infrastructure-based Safety for Your ‘Claw&lt;/a&gt;, which picks up where Lesson 3 leaves off.&lt;/p&gt;
</description>
        <pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/lectures/2026/evals/</link>
        <guid isPermaLink="true">https://gauravmanek.com/lectures/2026/evals/</guid>
      </item>
    
      <item>
        <title>Small Tools for AI Development</title>
        <description>&lt;!-- SCAFFOLD — bare grouped list for filtering. Not prose yet.
     Filter / reorder / cut, then I&apos;ll expand into the post.
     All items verified public via gh, all created after Jan 2026. --&gt;

&lt;h2 id=&quot;tools-built-for-ai-to-use&quot;&gt;Tools built for AI to use&lt;/h2&gt;

&lt;!-- The main section: small, specific tools the agent calls, or that shape what flows in/out of it. --&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;jqi&lt;/strong&gt; — structural JSON profiler so an agent can grasp the &lt;em&gt;shape&lt;/em&gt; of a huge JSON blob without paying to read all of it. — &lt;a href=&quot;/blog/2026/jqi/&quot;&gt;post&lt;/a&gt; · &lt;a href=&quot;https://github.com/gauravmm/jqi&quot;&gt;github&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;mcp_gateway_maker&lt;/strong&gt; (the MCP filter) — AI-built tool for making MCP proxies with security features: a layer in front of a server that rewrites or blocks each call. — &lt;a href=&quot;/blog/2026/ai-mcp-filter/&quot;&gt;post&lt;/a&gt; · &lt;a href=&quot;https://github.com/gauravmm/mcp_gateway_maker&quot;&gt;github&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;claudenlos&lt;/strong&gt; — static analyzer over Claude’s logs that finds, tool by tool, where the tokens actually go. — &lt;a href=&quot;/blog/2026/claudenlos/&quot;&gt;post&lt;/a&gt; · &lt;a href=&quot;https://github.com/gauravmm/claudenlos&quot;&gt;github&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;zsh-reap&lt;/strong&gt; — zsh plugin that tracks long-running foreground jobs and lets an agent (or you) restart them from another terminal. — &lt;a href=&quot;/blog/2026/zsh-reap/&quot;&gt;post&lt;/a&gt; · &lt;a href=&quot;https://github.com/gauravmm/zsh-reap&quot;&gt;github&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;watching-and-orchestrating-agents&quot;&gt;Watching and orchestrating agents&lt;/h2&gt;

&lt;!-- The separate section you called out: developer-facing tools for running/observing agents. --&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;tasklight&lt;/strong&gt; — always-on-top desktop overlay (HUD) for watching local AI coding agents work. — &lt;a href=&quot;/blog/2026/tasklight/&quot;&gt;post&lt;/a&gt; · &lt;a href=&quot;https://github.com/gauravmm/tasklight&quot;&gt;github&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;tmux-orchestra&lt;/strong&gt; — pure-POSIX-shell tmux plugin exposing an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;orchestra&lt;/code&gt; CLI for agent status, notifications, and prompt-published context, rendered in a dedicated sidebar pane. — &lt;a href=&quot;https://github.com/gauravmm/tmux-orchestra&quot;&gt;github&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;harnesses-you-can-read&quot;&gt;Harnesses you can read&lt;/h2&gt;

&lt;!-- Their own group, per your note. --&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;KittenClaw&lt;/strong&gt; — minimal, readable chat harness for teaching the agentic loop; runs on free tiers. — &lt;a href=&quot;/blog/2026/kittenclaw/&quot;&gt;post&lt;/a&gt; · &lt;a href=&quot;https://github.com/gauravmm/KittenClaw&quot;&gt;github&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;benchclaw&lt;/strong&gt; — ultra-lightweight personal AI assistant / agentic testbed (Telegram and other channels). — &lt;a href=&quot;https://github.com/gauravmm/benchclaw&quot;&gt;github&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;TeachClaw&lt;/strong&gt; — in-class teaching assistant students chat with on Telegram. It’s the chat layer over the knowledge bases below, citing every claim through the citation back-pressure system. — &lt;a href=&quot;https://github.com/gauravmm/TeachClaw&quot;&gt;github&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;knowledge-bases-agents-read-from&quot;&gt;Knowledge bases agents read from&lt;/h2&gt;

&lt;!-- Retrieval libraries served over MCP. The knowledgebase repos own only the *library*;
     the chat layer is TeachClaw, which they feed through the citation back-pressure system
     (answers must cite a source from the corpus). --&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;knowledgebase-agenticai&lt;/strong&gt; — curated workshop corpus for the agentic-AI lecture; owns the library only, served to the bot over MCP with citations. — &lt;a href=&quot;https://github.com/gauravmm/knowledgebase-agenticai&quot;&gt;github&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;knowledgebase-businessai&lt;/strong&gt; — curated reference library for the AI-in-business lecture: ingest scripts, manifests, and a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;search&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fetch_doc&lt;/code&gt; MCP server. — &lt;a href=&quot;https://github.com/gauravmm/knowledgebase-businessai&quot;&gt;github&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;cute-db&lt;/strong&gt; — indexes cute-animal images and clips with a vision-language model, stores descriptions in SQLite, and serves keyword search over MCP (a testing/demo corpus). — &lt;a href=&quot;https://github.com/gauravmm/cute-db&quot;&gt;github&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- ============================================================
     CANDIDATES TO CONFIRM OR CUT — not placed above on purpose
     ============================================================

  - ai-voiceover (2026-02-22) — empty README; unsure what it is. Confirm scope.

  EXCLUDED (don&apos;t look like your AI-dev tools — confirm):
  - voicebox  — &quot;open-source voice synthesis studio&quot;; looks like a product/fork, not a dev tool.
  - puuuush   — README is a Neon logo; looks like a fork/template. Probably not yours-as-a-tool.

  NOT TOOLS (essays/series — excluded, but say if you want them linked as context):
  - ai-prompt-ai           — &quot;Using AI to Prompt AI&quot; (concept post)
  - harness-design-context — &quot;Harness Design 1 — Context Engineering&quot; (essay series)

  NOTE: mcp_proxy_maker was renamed to mcp_gateway_maker; the blog post&apos;s old link redirects.
============================================================ --&gt;
</description>
        <pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/projects/2026/ai-tools/</link>
        <guid isPermaLink="true">https://gauravmanek.com/projects/2026/ai-tools/</guid>
      </item>
    
      <item>
        <title>An AI Agent Small Enough to Read</title>
        <description>&lt;p&gt;I teach a hands-on workshop on agentic AI for beginners. The concepts are not the hard part — the agentic loop is genuinely simple once you see it — the hard part is the first forty minutes. Thirty people with thirty laptops in thirty different states, and the lesson can’t start until everyone has Python, a model to talk to, and an API key. It can take thirty minutes until the slowest person is ready to learn.&lt;/p&gt;

&lt;p&gt;Instead of fighting more complex setup and diluting the workshop content, I’ve built KittenClaw. A minimal chat harness for teaching agentic loops, small enough that a beginner can read the whole thing in one sitting, and light enough to run end-to-end on free tiers. There are three layers to it, and not one of them sends a bill: the runner is a GitHub Codespace on the free allowance; the model driving the agent comes from a provider with a genuine free tier like OpenRouter; and you develop against it with whatever coding harness you already have, which for us is GitHub Copilot.&lt;/p&gt;

&lt;h2 id=&quot;small-enough-to-read&quot;&gt;Small enough to read&lt;/h2&gt;

&lt;p&gt;The entire runtime is three Python files: the tools, a thin Telegram adapter, and the full agentic loop in plain view. That’s deliberate, because the loop is the thing you came to learn. A beginner can open all three files and follow what happens between typing a message and getting a reply.&lt;/p&gt;

&lt;p&gt;The agent’s entire state lives on disk as JSON Lines, letting students inspect and follow exactly what the agent is doing, with nothing hidden. When something goes wrong, you open the file and read exactly what the model saw, in order. Once a student internalizes that the transcript is the whole story, agents stop being magic and start being a program they can reason about.&lt;/p&gt;

&lt;h2 id=&quot;setup-is-a-browser-tab&quot;&gt;Setup is a browser tab&lt;/h2&gt;

&lt;p&gt;Here’s the part I’m proudest of: the entire stack is assembled from free tiers, top to bottom, and nobody in the room spends a cent. The compute is a GitHub Codespace, or GitLab’s equivalent Workspaces, on the free allowance — fork the repo, open it in the browser, and the devcontainer installs Python and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;uv&lt;/code&gt;, syncs the dependencies, and lays out the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.env&lt;/code&gt; for you before you’ve touched anything. No local toolchain, no “works on my machine,” no Python 2.7 from 2019 lurking on someone’s laptop.&lt;/p&gt;

&lt;p&gt;The model is whichever provider you like that has a genuine free tier — Google AI Studio, OpenCode Zen, or OpenRouter — none of which want a credit card to get started. The chat app is Telegram, free, reached by long-polling so it works even in corporate environments with NAT and punitive firewalls. Skill development also can be run in the free tier of a coding assistant — GitHub Copilot or OpenCode Zen. Paste your key and a bot token into the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.env&lt;/code&gt;, and you’re running.&lt;/p&gt;

&lt;h2 id=&quot;bending-it-into-a-task&quot;&gt;Bending it into a task&lt;/h2&gt;

&lt;p&gt;KittenClaw on its own is just a harness. The interesting part is how little it takes to bend it into a real exercise. Its a tiny tool that can be hammered into whatever shape is needed for your teaching scenario. Choosing &lt;em&gt;which&lt;/em&gt; shape is its own problem, and a surprisingly load-bearing one — I wrote up &lt;a href=&quot;/blog/2026/workshop-task-criteria/&quot;&gt;the rubric I use to pick the task&lt;/a&gt; separately.&lt;/p&gt;

&lt;p&gt;The scenario I ship is a &lt;a href=&quot;https://github.com/gauravmm/ai-tutorial-triage-kittenclaw&quot;&gt;medical triage bot&lt;/a&gt;: it interviews a patient about their symptoms, classifies them as minor, moderate, or severe, and routes accordingly — book an appointment, escalate to the ER, or close the conversation. What makes it more than a toy is the second agent. A separate reporter bot, implemented as a GitHub Copilot skill, reads the archived conversations afterwards and extracts a structured intake record: name, age, symptoms, triage level. The two agents never call each other. They only share the conversation files.&lt;/p&gt;

&lt;p&gt;That constraint is the whole lesson, and it’s one I keep coming back to in my own work: the triage bot has to collect information it does not itself need, &lt;em&gt;because the reporter needs it&lt;/em&gt;. Students discover this the hard way, by building a bot that triages perfectly and produces reports full of blanks. From there the failure modes write themselves — a bot that schedules appointments nobody asked for, one that misses an emergency, one that confirms a booking without the date, one that treats a rejected date as a terminal error instead of backpressure to retry against. Each is a small, concrete bug with a real-world analogue, and each is debugged by reading a file.&lt;/p&gt;

&lt;h2 id=&quot;putting-a-smarter-model-on-the-other-end&quot;&gt;Putting a smarter model on the other end&lt;/h2&gt;

&lt;p&gt;Because the whole bot is a command you can script and a file you can read, nothing says the thing on the other end of the conversation has to be a human. You, or your favourite frontier model, can drive a conversation from the shell:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;uv run python &lt;span class=&quot;nt&quot;&gt;-m&lt;/span&gt; kittenclaw &lt;span class=&quot;nt&quot;&gt;--once&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Hello, how are you doing?&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This trick is one that I most enjoy showing students: tell a strong model to role-play someone with chest pain who keeps downplaying it, or who won’t commit to an appointment date, let it hold a full conversation with KittenClaw, and then hand it the resulting transcript and ask how the triage bot did. The same file that is the agent’s memory becomes the test case and the report card.&lt;/p&gt;

&lt;p&gt;That closes a loop worth understanding. A small, cheap model runs the task; a smart model invents the awkward patients, plays them out end to end, reads the file, and proposes edits to the prompt and the skills. You can run that cycle dozens of times in the time it takes to hand-write one good test conversation, and the bot that comes out the other side has been hardened against cases you’d never have thought to write. &lt;a href=&quot;/blog/2026/ai-prompt-ai/&quot;&gt;Using a stronger model to improve a weaker one’s instructions&lt;/a&gt; is one of the most practical skills in the field right now, and KittenClaw is small enough to show the whole mechanism rather than just describe it — which is exactly why I teach the end-to-end loop on it.&lt;/p&gt;

&lt;h2 id=&quot;why-the-small-version-teaches-better&quot;&gt;Why the small version teaches better&lt;/h2&gt;

&lt;p&gt;A framework that hides the loop teaches you the framework. For an application that’s exactly what you want; for a beginner trying to understand what an agent &lt;em&gt;is&lt;/em&gt;, it’s backwards. KittenClaw keeps the loop, the tools, and the state all in view and on disk, cheap enough to run that nobody has to ask permission, and small enough that the source isn’t a wall to hide behind. The slides can tell you an agent is “a model in a loop with tools and memory.” It lands a lot harder when the loop is twenty lines you just read, the memory is a file you just opened, and the whole thing — compute, model, chat app, and the second agent besides — has been running on free tiers, in a browser tab, for the price of nothing at all. That last part isn’t a footnote. It means the only thing a student needs to bring to a real multiagent system is curiosity, and that’s the point.&lt;/p&gt;

&lt;p&gt;The slides and source for the workshop are &lt;a href=&quot;https://github.com/gauravmm/agentic-ai-intro&quot;&gt;on GitHub&lt;/a&gt; under CC BY-SA — take them and teach your own.&lt;/p&gt;
</description>
        <pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/blog/2026/kittenclaw/</link>
        <guid isPermaLink="true">https://gauravmanek.com/blog/2026/kittenclaw/</guid>
      </item>
    
      <item>
        <title>Restarting Foreground Jobs Without Touching the Terminal</title>
        <description>&lt;p&gt;You’re working with an agent in one terminal while a dev server runs in another. Sooner or later, the agent needs to restart the server, but has no idea how you started it, which terminal it’s in, or what its PID is. So all progress grinds to a halt until you notice that its asked you to do something trivial.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zsh-reap&lt;/code&gt; is a tiny zsh plugin that fixes this. Foreground jobs running for at least five seconds are watched, killable, and restartable from any other terminal (including an agent’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Bash&lt;/code&gt; tool) like this:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;zsh-reap list
ID         PID     SHELL   CWD                  UPTIME   COMMAND
1319a-8e   78234   ttys003 ~/work/myapp         0:14:22  npm run dev
138f0-1f   80112   ttys005 ~/work/myapp/api     0:02:11  cargo run &lt;span class=&quot;nt&quot;&gt;--release&lt;/span&gt;

&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;zsh-reap restart 1319a-8e
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The restart lands in the &lt;em&gt;original&lt;/em&gt; shell — same &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$PATH&lt;/code&gt;, same &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$VIRTUAL_ENV&lt;/code&gt;, same &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nvm&lt;/code&gt; version, same everything. From the user’s point of view the terminal looks exactly as if they’d hit Ctrl-C and re-typed the line.&lt;/p&gt;

&lt;h2 id=&quot;tightly-scoped&quot;&gt;Tightly scoped&lt;/h2&gt;

&lt;p&gt;I built this for a single specific scenario: long-running foreground jobs to kill and restart. A few decisions worth flagging:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Restart only works in the originating shell.&lt;/strong&gt; The restart runs inside the same live shell as the original invocation and inherits env vars, history, sockets, etc. for free.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Restarts run the whole command string.&lt;/strong&gt; No changes, nothing else. If you need those, your agent can kill the job and run it again.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Foreground only.&lt;/strong&gt; Background jobs (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;&lt;/code&gt;) are already handled by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jobs&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fg&lt;/code&gt;; users have a mental model for those.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Minimal dependencies&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zsh&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ps&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pgrep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kill&lt;/code&gt;. No &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jq&lt;/code&gt;, no Python.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;how-does-it-work&quot;&gt;How does it work?&lt;/h2&gt;

&lt;p&gt;I’m not sure myself. Your agent could read the spec that my agent wrote up and explain it to you better than I could.&lt;/p&gt;

&lt;h2 id=&quot;why-this-matters&quot;&gt;Why this matters&lt;/h2&gt;

&lt;p&gt;This isn’t a flagship tool. It’s a microscopic zsh plugin that solves &lt;em&gt;one specific friction&lt;/em&gt;. The interface is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zsh-reap list/restart&lt;/code&gt;, and it works the same way from a tmux pane, a script, or a Claude Code &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Bash&lt;/code&gt; tool call.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;shape&lt;/em&gt; of the solution is worth repeating: small agent-friendly tools that ease small and specific problems in human-agent collaboration. (&lt;a href=&quot;https://github.com/gauravmm/jqi/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jqi&lt;/code&gt;&lt;/a&gt;, which I wrote up earlier this year, is the same instinct applied to JSON exploration — different problem, same tiny shape.)&lt;/p&gt;

&lt;p&gt;I’m betting (along with a large part of the ecosystem) that a large part of the savings that AI delivers is going to come from the proliferation of tools like these.&lt;/p&gt;
</description>
        <pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/blog/2026/zsh-reap/</link>
        <guid isPermaLink="true">https://gauravmanek.com/blog/2026/zsh-reap/</guid>
      </item>
    
  </channel>
</rss>