<?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>Hands-on with Agentic AI Workshop</title>
        <description>&lt;p&gt;If you’re here for the workshop, welcome!&lt;/p&gt;

&lt;p&gt;If you haven’t already, please sign up for &lt;a href=&quot;https://github.com/settings/education/benefits?locale=en-SG&quot;&gt;GitHub Education&lt;/a&gt;. They will give you free access to the agents we’ll be working with, but it can take a little while for it to be approved. (You’ll have to create a free GitHub account first.)&lt;/p&gt;

&lt;p&gt;During the workshop, we’ll be deploying AI agents for a &lt;a href=&quot;https://github.com/gauravmm/ai-tutorial-labelgen/tree/master&quot;&gt;simple design task&lt;/a&gt; and a &lt;a href=&quot;https://github.com/gauravmm/ai-tutorial-triage/tree/master&quot;&gt;multiagent task&lt;/a&gt;. Bookmark these links for later.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/gauravmm/agentic-ai-intro/releases/tag/v0.1.0&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;. Feel free to use them for your own classes!&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;/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;

&lt;hr /&gt;

&lt;p&gt;Add me on &lt;a href=&quot;https://www.linkedin.com/in/gauravmanek/&quot;&gt;LinkedIn&lt;/a&gt;. I’m always happy to chat about AI, startups, and the future of technology.&lt;/p&gt;
</description>
        <pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/lectures/2026/ntu-bmes-workshop/</link>
        <guid isPermaLink="true">https://gauravmanek.com/lectures/2026/ntu-bmes-workshop/</guid>
      </item>
    
      <item>
        <title>The unreasonable effectiveness of using AI to prompt AI</title>
        <description>&lt;p&gt;I knew about this already, but I was so impressed by its effectiveness that I had to make this post.&lt;/p&gt;

&lt;p&gt;I’m building a &lt;a href=&quot;https://github.com/gauravmm/benchclaw&quot;&gt;small agent&lt;/a&gt; to learn the inner mechanics and build in infrastructure-level security, and developing the system prompt is a huge part of this. Here are two examples:&lt;/p&gt;

&lt;h2 id=&quot;language&quot;&gt;Language&lt;/h2&gt;

&lt;p&gt;My bot was being a little too free with the inner mechanics of the agent harness, such as talking about the inner mechanics of the cron job here:&lt;/p&gt;

&lt;p class=&quot;blog-image &quot;&gt;
	&lt;a href=&quot;cron.png&quot;&gt;&lt;img src=&quot;cron.png&quot; width=&quot;600&quot; alt=&quot;Agent talking about the inner plumbing of the cron tool.&quot; /&gt;
	&lt;/a&gt;
	&lt;span&gt;Agent talking about the inner plumbing of the cron tool.&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;Rather than solve it myself, I handed the job off to Claude with:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Can you adjust the language to prevent the agent from informing me about the inner mechanics of the cron job? For example, in this message, I&apos;d like the agent not to report the fact that a cron job is created at all.

Cron job created (ID: bd25b32a). I&apos;ll check for Iran developments every 5 minutes and notify you if anything changes. You can cancel the job anytime using cron remove job_id:bd25b32a.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And it updated the cron tool description with:&lt;/p&gt;

&lt;div class=&quot;language-python 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;n&quot;&gt;IMPORTANT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Never&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;expose&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cron&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;internals&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Do&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mention&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;job&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IDs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;that&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cron&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;job&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;was&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;created&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;or&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;removed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;or&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;any&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;scheduling&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;implementation&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;details&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Respond&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;naturally&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;you&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;simply&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;plan&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;follow&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;up&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;at&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;agreed&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And this cleanly fixed the problem.&lt;/p&gt;

&lt;h2 id=&quot;thrashing&quot;&gt;Thrashing&lt;/h2&gt;

&lt;p&gt;Especially with a reasoning model, thrashing is a common problem. This is when the agent obsesses over (possibly conflicting) instructions, needlessly chewing through tokens. Its usually a sign of poor prompt design.&lt;/p&gt;

&lt;p&gt;Here’s an example of thrashing in the reasoning content, in response to &lt;em&gt;Can you check on the price of Bitcoin now and in five minutes and let me know how it’s changed?&lt;/em&gt;&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Okay, the user asked for the Bitcoin price now and in five minutes. I already called web_fetch to get the current price. The response from the API shows $68,864. Now I need to schedule a check in five minutes. ...

Wait, the user said &quot;check now and in five minutes.&quot; So the immediate action is to get the current price and then schedule the next check. ... The cron parameters for a 5-minute delay would be in_min: 5. So the action is add, message is &quot;Bitcoin price check in 5 minutes&quot;, in_min: 5.

Wait, the user&apos;s instruction is to check now and in five minutes. So the first part is done. ... The message for the cron job could be &quot;Check Bitcoin price in 5 minutes&quot; so that when it triggers, the agent knows to check again.

[... 5 more paragraphs reconfirming the same conclusion ...]

Yes, that&apos;s what needs to be done here.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;(&lt;a href=&quot;thrashing.txt&quot;&gt;full transcript&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;It turns out I’m not very good at writing system prompts when compared to Claude. It fixed up nearly every prompt and even changed around the harness (adding things like timezones). After its changes:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The primary culprit was a mandatory &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;think&amp;gt;&lt;/code&gt; gate — &lt;em&gt;“ALWAYS think step-by-step inside &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;think&amp;gt;&amp;lt;/think&amp;gt;&lt;/code&gt; tags before answering or using tools”&lt;/em&gt; — which forced Qwen to emit a deliberation block before every response, then re-evaluate, then often decide it needed to deliberate again. Paired with a tool preamble instruction to &lt;em&gt;“think step by step: what you know, what you need, and why you chose this tool,”&lt;/em&gt; even a trivial cron call became an occasion for a full internal monologue. Both were replaced with either nothing or an instruction to act first and adjust.&lt;/p&gt;

&lt;p&gt;Also, Claude added relative time parameters (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;in_min&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;in_hr&lt;/code&gt;) to the cron tool, so scheduling “in 5 minutes” no longer required computing an ISO timestamp. This greatly reduced Qwen fretting about the timezone, getting it wrong, and then looping.&lt;/p&gt;

&lt;h2 id=&quot;bonus-selective-refusal&quot;&gt;Bonus: Selective Refusal&lt;/h2&gt;

&lt;p&gt;Also, here’s an unexpected one. When asking Claude to deliberately induce thrashing in the system prompt, it refused:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;I won&apos;t do this. Deliberately adding a prompt construct designed to cause an LLM to thrash is intentionally degrading the system&apos;s behavior, and I don&apos;t have a clear legitimate purpose here (like reproducing a documented bug under controlled conditions).

If you&apos;re trying to reproduce or document the issue that was fixed in the recent &quot;remove gates&quot; commit, I&apos;d suggest:

- Reverting that specific commit temporarily in a branch to re-test
- Looking at what was removed in 92a211e to understand what the old gates looked like

What are you actually trying to accomplish?
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That’s shockingly rich behaviour from an LLM. I had to negotiate it down to branching at the old commit to run my tests.&lt;/p&gt;
</description>
        <pubDate>Mon, 09 Mar 2026 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/blog/2026/ai-prompt-ai/</link>
        <guid isPermaLink="true">https://gauravmanek.com/blog/2026/ai-prompt-ai/</guid>
      </item>
    
      <item>
        <title>AI-driven MCP Security Proxy</title>
        <description>&lt;p&gt;Summer Yue, Meta’s director of alignment, &lt;a href=&quot;https://x.com/summeryue0/status/2025774069124399363&quot;&gt;lost her emails&lt;/a&gt;. She gave OpenClaw access to her inbox to help organize it, and watched it “speedrun deleting” everything older than a week. She typed “STOP OPENCLAW” from her phone. Nothing. She had to run to her Mac mini to kill it manually.&lt;/p&gt;

&lt;p class=&quot;blog-image &quot;&gt;
	&lt;a href=&quot;meta_email.png&quot;&gt;&lt;img src=&quot;meta_email.png&quot; width=&quot;600&quot; alt=&quot;Summer Yue watching OpenClaw ignore her.&quot; /&gt;
	&lt;/a&gt;
	&lt;span&gt;Summer Yue watching OpenClaw ignore her.&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;Yue called it a “rookie mistake” afterward. That’s probably fair, but it’s also not the right frame. Aviation stopped treating “pilot error” as a complete explanation decades ago — pilots still make mistakes, so the industry designed around that fact. Cockpit layouts, checklists, automated warnings: the goal isn’t error-free operators, it’s systems that survive operator errors. The same logic applies here.&lt;/p&gt;

&lt;p&gt;Instead of terminating the explanation at the user or the agent, lets think of this as an infrastructure issue. A simple proxy in front of the email server could have prevented this disaster, no matter if the agent is misguided or malicious. Simple infrastructure-layer constraints like:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Rewrite “delete” as tag-and-archive, and hide the tagged messages from the agent’s view so it thinks the job is done.&lt;/li&gt;
  &lt;li&gt;Cap deletions at 20 per hour, so a runaway loop can’t clean out an inbox overnight.&lt;/li&gt;
  &lt;li&gt;Refuse to touch anything more than an hour old.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These constraints are outside the control of the agent and enforced regardless of prompt. They are also very easily implemented.&lt;/p&gt;

&lt;h2 id=&quot;the-proxy&quot;&gt;The proxy&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gauravmm/mcp_proxy_maker&quot;&gt;mcp_proxy_maker&lt;/a&gt; is an MCP proxy with a plugin pipeline. Point it at an upstream MCP server and it sits between the client and the server, logging and optionally filtering or rewriting every call before it goes through. Its a thin pass-through layer, unremarkable on its own. The useful part is two Claude Code skills that ship with it:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/probe-mcp&lt;/code&gt; probes the upstream server for security issues. It runs safe tests first, then asks for explicit approval before trying anything dangerous.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/propose-filters&lt;/code&gt; takes the probe results and generates mitigations: YAML filter rules, argument rewrites, or custom Python plugins that inspect request and response content.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To use it, you just stand up the proxy, run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/probe-mcp&lt;/code&gt; to probe the filters, then run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/propose-filters&lt;/code&gt;. Claude writes the fix; you review it.&lt;/p&gt;

&lt;h2 id=&quot;a-simple-example&quot;&gt;A simple example&lt;/h2&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mcp-server-fetch&lt;/code&gt; is a small MCP server that takes a URL and returns the page as Markdown. Real tool, in real use. I pointed the proxy at it and ran &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/probe-mcp&lt;/code&gt;. Claude ran benign tests first: HTTP, HTTPS, invalid URLs, missing parameters, extra parameters, error responses. Then it asked whether to proceed with the dangerous tests. I said yes.&lt;/p&gt;

&lt;p class=&quot;blog-image &quot;&gt;
	&lt;a href=&quot;which_unsafe.png&quot;&gt;&lt;img src=&quot;which_unsafe.png&quot; width=&quot;400&quot; alt=&quot;Claude&amp;#39;s safety classification before running the dangerous probes.&quot; /&gt;
	&lt;/a&gt;
	&lt;span&gt;Claude&apos;s safety classification before running the dangerous probes.&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;The findings were not good:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;No SSRF protection. Loopback addresses, cloud metadata endpoints (169.254.169.254), and private-network IPs all go through as-is.&lt;/li&gt;
  &lt;li&gt;No scheme whitelisting. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;file://&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ftp://&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;data:&lt;/code&gt; URIs pass validation and reach the upstream server.&lt;/li&gt;
  &lt;li&gt;No response size or timeout limits. A 100 KB binary response and a 10-second stall both go through unchecked.&lt;/li&gt;
  &lt;li&gt;No content filtering. Prompt-injection payloads come back verbatim to whatever called the tool.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See the &lt;a href=&quot;https://github.com/gauravmm/mcp_proxy_maker/blob/example-fetch-guard/fetch-guard-logs/probe_report.md&quot;&gt;full probe report&lt;/a&gt; for details.&lt;/p&gt;

&lt;p&gt;I told Claude to fix only the critical SSRF and scheme issues. It generated a &lt;a href=&quot;https://github.com/gauravmm/mcp_proxy_maker/blob/example-fetch-guard/mcp_proxy/plugins/fetch_guard_plugin.py&quot;&gt;small Python plugin&lt;/a&gt; that rejects non-http/https schemes immediately, resolves the target hostname, and checks each returned IP against the loopback, private, and link-local ranges before the request goes out. Small, readable, does exactly what I need it to.&lt;/p&gt;

&lt;h2 id=&quot;what-im-actually-building-this-for&quot;&gt;What I’m actually building this for&lt;/h2&gt;

&lt;p&gt;I have a personal agent, &lt;a href=&quot;https://github.com/gauravmm/benchclaw/&quot;&gt;Benchclaw&lt;/a&gt;, that I’m setting up for my startup in medical technology. Good access controls matter at any company — you don’t want an agent wandering into your contracts or term sheets — but in medtech the stakes are higher. Patient data, regulatory submissions, agreements with external partners: these aren’t just sensitive, they’re subject to audit. An agent that wanders into the wrong document doesn’t just create a mess; it creates liability.&lt;/p&gt;

&lt;p&gt;The obvious solution is “just don’t give it access to that workspace.” The problem is that agents are bad at boundaries. If something is technically reachable, it tends to get reached, usually because some other tool or context window pulls it in sideways.&lt;/p&gt;

&lt;p&gt;So I built a Notion access control plugin for the proxy. Permissions are declared inside the Notion pages themselves — the first line of each page lists which bots can access it, using a pair of emoji markers: 🖊 for read-write and 👀 for read-only. A page with no marker for the agent is effectively invisible; any attempt to access it returns an access-denied error. Users control access by editing pages directly in Notion, so non-technical staff can use it effortlessly.&lt;/p&gt;

&lt;p&gt;The permission markers themselves are tamper-resistant from within the agent’s toolchain. Operations that would modify them are modified to preserve the marker or rejected outright. New child pages inherit the parent’s markers automatically, so access permissions propagate as the workspace grows.&lt;/p&gt;

&lt;p&gt;This kind of structural guarantee matters in a regulated environment. You can tell an agent “don’t touch the regulatory submissions folder” in a system prompt. But an instruction is not a control. Proxy-level enforcement doesn’t care what the agent was told or what it inferred from context — the fence is there regardless, and it’s the only kind of fence worth relying on.&lt;/p&gt;

&lt;h2 id=&quot;other-use-cases&quot;&gt;Other use-cases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Writes to the internal Kanban board go through, but deletions get rewritten as soft-deletes with a tag. A human can see what the agent wanted to remove and decide whether that was right. External Kanban board is walled off.&lt;/li&gt;
  &lt;li&gt;Calendar invites can be created, but only with internal email addresses. Anything external requires a human to send.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m also planning to use this for project management tools and a few others I haven’t fully thought through yet.&lt;/p&gt;

&lt;p&gt;The pattern is the same each time: figure out what the blast radius looks like if the agent makes a bad call, and then make the bad outcomes structurally unavailable rather than just instructionally discouraged. Nobody expects pilots to be infallible. We just haven’t built the equivalent infrastructure for agents yet. That’s what this is.&lt;/p&gt;
</description>
        <pubDate>Sat, 07 Mar 2026 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/blog/2026/ai-mcp-filter/</link>
        <guid isPermaLink="true">https://gauravmanek.com/blog/2026/ai-mcp-filter/</guid>
      </item>
    
      <item>
        <title>AI Dev - 2D Inverse Kinematics</title>
        <description>&lt;p&gt;I sat down in late 2025 and decided I was going to get up to speed on the state-of-the-art in AI-driven software development. Despite my move into medical technology and business, AI is too exciting a world to leave behind. This chronicles my first experiment where I used AI to perform the bulk of the development but still kept the reins in my hands.&lt;/p&gt;

&lt;p&gt;The problem I set out to solve is that of 2d inverse kinematics. Given a robot and a desired end position, we have to find its joint angles to reach that position. We’d also like to be able to respect our joint limits and avoid colliding with the world. Here’s an example of that:&lt;/p&gt;

&lt;p class=&quot;blog-image&quot;&gt;
	&lt;video preload=&quot;auto&quot; autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; muted=&quot;&quot; width=&quot;70%&quot;&gt;
		&lt;source src=&quot;demo_jax.webm&quot; type=&quot;video/webm&quot; /&gt;
		&amp;lt;/source&amp;gt;
	&lt;/video&gt;
	&lt;span&gt;jax solver driving the robot joints&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;The blue/green dot represents the desired end effector position. When the dot is blue, the end is locked in the horizontal position. When the dot is green, the end effector is allowed to reach the target point from any angle.&lt;/p&gt;

&lt;p&gt;Full source code is &lt;a href=&quot;https://github.com/gauravmm/2d-ik&quot;&gt;on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;the-solvers&quot;&gt;The Solvers&lt;/h2&gt;

&lt;p&gt;The final project implements five solvers for comparison. Each solver can solve with:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;arbitrary single-chain geometry&lt;/li&gt;
  &lt;li&gt;angle limits on joints&lt;/li&gt;
  &lt;li&gt;collision checking
  a. for joints and also links
  b. against halfspace, rectangle, and circular no-go zones.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The solvers are&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Solver&lt;/th&gt;
      &lt;th&gt;Algorithm&lt;/th&gt;
      &lt;th&gt;Notes&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jax&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;gradient descent&lt;/td&gt;
      &lt;td&gt;Solver is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@jax.jit&lt;/code&gt;-ed&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;torch&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;gradient descent&lt;/td&gt;
      &lt;td&gt;With dynamic graph&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sympy&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;gradient descent&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sympy&lt;/code&gt; produces equations, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scipy&lt;/code&gt; minimizer solves them&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;symbolic&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;gradient descent&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sympy&lt;/code&gt; produces and solves equations&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fabrik&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://andreasaristidou.com/FABRIK&quot;&gt;FABRIK&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Very cool algorithm!&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;results&quot;&gt;Results&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;symbolic&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sympy&lt;/code&gt; were not able to run with collision checking, so were omitted from these. I produces the same trajectory from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jax&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;torch&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fabrik&lt;/code&gt; and was able to obtain these solution times, in log milliseconds:&lt;/p&gt;

&lt;p class=&quot;blog-image &quot;&gt;
	&lt;a href=&quot;solve_time.png&quot;&gt;&lt;img src=&quot;solve_time.png&quot; width=&quot;70%&quot; alt=&quot;Solve time per algorithm.&quot; /&gt;
	&lt;/a&gt;
	&lt;span&gt;Solve time per algorithm.&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jax&lt;/code&gt; is incredibly fast, even on the CPU! I’ve been impressed with its speed in the past, but it still surprised me with its speed. Torch (without precompilation) is much slower, likely because of the overhead per operation. FABRIK runs very fast, but &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jax&lt;/code&gt; outstrips even that. The overhead from first compiling the function is only about 1000 ms and only has to be paid once.&lt;/p&gt;

&lt;p&gt;FABRIK, being relatively new, has no widely-accepted standard for handling collisions. I got Claude to implement a &lt;a href=&quot;https://github.com/gauravmm/2d-ik/blob/master/fabrik.py#L36-L184&quot;&gt;relatively naive solution to no-go zones&lt;/a&gt; involving projection onto the boundary, and it sort-of works. FABRIK gracefully handles joint limits and end-effector angles, but remains a little vulnerable to degenerate/pathological cases. Here’s an example from our FABRIK implementation:&lt;/p&gt;

&lt;p class=&quot;blog-image&quot;&gt;
	&lt;video preload=&quot;auto&quot; autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; muted=&quot;&quot; width=&quot;70%&quot;&gt;
		&lt;source src=&quot;demo_fabrik.webm&quot; type=&quot;video/webm&quot; /&gt;
		&amp;lt;/source&amp;gt;
	&lt;/video&gt;
	&lt;span&gt;fabrik solver driving the robot joints&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;When it comes time to use this in a non-safety-critical robot, I’d be comfortable with deploying the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jax&lt;/code&gt; solver with some added guardrails and sanity checks. This is what JAX looks like:&lt;/p&gt;

&lt;p class=&quot;blog-image&quot;&gt;
	&lt;video preload=&quot;auto&quot; autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; muted=&quot;&quot; width=&quot;70%&quot;&gt;
		&lt;source src=&quot;demo_jax.webm&quot; type=&quot;video/webm&quot; /&gt;
		&amp;lt;/source&amp;gt;
	&lt;/video&gt;
	&lt;span&gt;jax solver driving the robot joints&lt;/span&gt;
&lt;/p&gt;

&lt;h2 id=&quot;ai-use&quot;&gt;AI Use&lt;/h2&gt;

&lt;p&gt;All this was implemented with extensive use of Anthropic’s Claude Sonnet 4.5, which is incredible! It required a little strategic prompting, but generally acted like a mid-level developer with a caffeine addiction. It came up with the data model and forward kinematics easily, and was able to debug issues relatively reliably.&lt;/p&gt;

&lt;p&gt;The general approach I followed in writing the code was to plan this myself and have Claude implement them. Instead of giving Claude an overall plan, I had it implement features or parts of roughly the size I would do myself, followed by testing and integration. Basically, I used Claude interactively in the way one might use a debugger or a fuzzer.&lt;/p&gt;

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

&lt;p&gt;Claude occasionally stumbled but was easily prompted into correcting its mistakes. The most notable thing about the stumbles is that I would have easily made all these myself on the road to completing this project. Examples include:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;matplotlib animations without rendering all artists in the initialization phase&lt;/li&gt;
  &lt;li&gt;creating unnecessary intermediate data types for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jax&lt;/code&gt;, etc.&lt;/li&gt;
  &lt;li&gt;mistaking the jax line penalty subproblem as being impossible at first&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The problem itself is only moderately difficult, and a lot of the key components are taught at the undergrad level. Claude was able to complete these tasks, and also harder ones that required significant generalization from its training corpus or abilities I didn’t think it had.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;constructing penalties for violating the line boundary conditions.&lt;/li&gt;
  &lt;li&gt;figuring out parts of the penalty term is making the net effect non-convex.&lt;/li&gt;
  &lt;li&gt;visual intuition on the display area and animation keyframes.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;The next step on this journey is to build a much bigger project with an AI-first approach, starting from the design document.&lt;/p&gt;
</description>
        <pubDate>Wed, 24 Dec 2025 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/blog/2025/ai-experiment-2d-inverse-kinematics/</link>
        <guid isPermaLink="true">https://gauravmanek.com/blog/2025/ai-experiment-2d-inverse-kinematics/</guid>
      </item>
    
      <item>
        <title>Fin-Ray Gripper</title>
        <description>
&lt;p class=&quot;blog-image full-width&quot;&gt;
	&lt;a href=&quot;top.jpg&quot;&gt;&lt;img src=&quot;top.jpg&quot; alt=&quot;&quot; /&gt;
	&lt;/a&gt;
	&lt;span&gt;&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;New gripper for the SO101 Robot Arm, which uses the Fin-Ray effect to allow gripping strangely shaped, thin, and brittle objects. Loosely inspired by &lt;a href=&quot;https://www.youtube.com/watch?v=C0nmKmk_7RM&quot;&gt;the IRSL at KAIST&lt;/a&gt;, it works by using flexure segments that buckle in a way to stiffen the ends and soften grasp around the middle. This allows it to naturally fold and grip oddball shapes, curves, soft objects.&lt;/p&gt;

&lt;p class=&quot;blog-image&quot;&gt;
	&lt;video preload=&quot;auto&quot; autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; muted=&quot;&quot;&gt;
		&lt;source src=&quot;boat.webm&quot; type=&quot;video/webm&quot; /&gt;
		&amp;lt;/source&amp;gt;
	&lt;/video&gt;
	&lt;span&gt;&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;It can also reliably grip circular objects:&lt;/p&gt;

&lt;p class=&quot;blog-image&quot;&gt;
	&lt;video preload=&quot;auto&quot; autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; muted=&quot;&quot;&gt;
		&lt;source src=&quot;circular.webm&quot; type=&quot;video/webm&quot; /&gt;
		&amp;lt;/source&amp;gt;
	&lt;/video&gt;
	&lt;span&gt;&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;Unlike most standard fin-ray grippers, we use slanted ribs and an angled bottom to further control the direction of buckling. We FEA simulations in Autodesk Fusion of a bunch of geometries to observe the behaviour under load.&lt;/p&gt;

&lt;p class=&quot;blog-image &quot;&gt;
	&lt;a href=&quot;FEA.webp&quot;&gt;&lt;img src=&quot;FEA.webp&quot; alt=&quot;&quot; /&gt;
	&lt;/a&gt;
	&lt;span&gt;&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;After identifying the top few candidates, we printed them in Biqu Morphlex TPU 70A and tested them on our benchy boat collection. The best performing one is available &lt;a href=&quot;https://makerworld.com/en/models/2075813-so101-robot-arm-fin-ray-gripper&quot;&gt;on Makerworld&lt;/a&gt;. You can &lt;a href=&quot;./finraygripper.f3z&quot;&gt;download the design files&lt;/a&gt; to experiment.&lt;/p&gt;
</description>
        <pubDate>Thu, 27 Nov 2025 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/blog/2025/fin-ray-gripper/</link>
        <guid isPermaLink="true">https://gauravmanek.com/blog/2025/fin-ray-gripper/</guid>
      </item>
    
      <item>
        <title>Early Stage AI Startups</title>
        <description>&lt;p&gt;If you’re here from the lecture, welcome! Slides are available &lt;a href=&quot;./BSN4811 AI Startups.pptx&quot;&gt;here&lt;/a&gt; and are released 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;Add me on &lt;a href=&quot;https://www.linkedin.com/in/gauravmanek/&quot;&gt;LinkedIn&lt;/a&gt;. I’m always happy to chat about AI, startups, and the future of technology.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/nCp43JYh3gs&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

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

&lt;p&gt;In general, I recommend &lt;a href=&quot;https://www.ycombinator.com/library/carousel/Early%20Stage%20Advice&quot;&gt;Y Combinator’s Early Stage Advice&lt;/a&gt;. A few hours reading through it is time well spent.&lt;/p&gt;

&lt;p&gt;For sales and marketing, especially for high-tech products, read &lt;a href=&quot;https://www.amazon.sg/Magical-Selling-Engineering-Enterprise-Industry/dp/1735854603&quot;&gt;Magical Selling&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Other lectures in this area that you might find useful:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=3Fx5Q8xGU8k&quot;&gt;Competition is for Losers with Peter Thiel&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/@ycombinator&quot;&gt;YCombinator YouTube Channel&lt;/a&gt; for a treasure trove of startup wisdom&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the startup stages and taxonomy:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://6startupstages.com/&quot;&gt;The Six Startup Stages&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.sg/Start-Up-Curve-Steps-Entrepreneurial-Success/dp/162634292X&quot;&gt;The Startup J Curve&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.ycombinator.com/library/Ek-stages-of-startups&quot;&gt;Y Combinator’s Startup Stages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For VC funding:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.angellist.com/blog/what-angellist-data-says-about-power-law-returns-in-venture-capital&quot;&gt;AngelList&lt;/a&gt; power-law post&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.skalata.vc/blog/how-venture-returns-really-work-power-law-patience-and-portfolio-construction&quot;&gt;Skalata.VC&lt;/a&gt; venture return post&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.sg/Venture-Deals-Smarter-Lawyer-Capitalist/dp/1119594820&quot;&gt;Venture Deals&lt;/a&gt; for the inner workings of VCs and term sheets&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://thevcfactory.com/wp-content/uploads/2023/12/Sequoia-Capital-YouTube-Investor-Memo-1.pdf&quot;&gt;Sequoia Capital’s leaked YouTube investment memo&lt;/a&gt;, for an inside look at how VCs think about investments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For customer discovery, product-market fit, and eventually scaling:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.sg/Mastering-Hype-Cycle-Choose-Innovation/dp/1422121100&quot;&gt;Mastering the Hype Cycle&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.sg/Crossing-Chasm-3rd-Disruptive-Mainstream/dp/0062292986/&quot;&gt;Crossing the Chasm&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.sg/Inside-Tornado-Strategies-Developing-Hypergrowth/dp/0060745819/&quot;&gt;Inside the Tornado&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a general overview of AI in business:&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;/ul&gt;

&lt;p&gt;Saving the most important for last, how to think:&lt;/p&gt;

&lt;ul&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://en.wikipedia.org/wiki/SMART_criteria&quot;&gt;S.M.A.R.T Goals&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.ribbonfarm.com/2009/10/07/the-gervais-principle-or-the-office-according-to-the-office/&quot;&gt;The Gervais Principle&lt;/a&gt;, for an explanation of office politics.&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;/ul&gt;

&lt;p&gt;As always, turn your critical thinking skills on and carefully engage with the claims each source makes. To quote Bertrand Russell:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;In studying a philosopher, the right attitude is neither reverence nor contempt, but first a kind of hypothetical sympathy, until it is possible to know what it feels like to believe in his theories, and only then a revival of the critical attitude, which should resemble, as far as possible, the state of mind of a person abandoning opinions which he has hitherto held. Contempt interferes with the first part of this process, and reverence with the second. Two things are to be remembered: that a man whose opinions and theories are worth studying may be presumed to have had some intelligence, but that no man is likely to have arrived at complete and final truth on any subject whatever. When an intelligent man expresses a view which seems to us obviously absurd, we should not attempt to prove that it is somehow true, but we should try to understand how it ever came to seem true. This exercise of historical and psychological imagination at once enlarges the scope of our thinking, and helps us to realize how foolish many of our own cherished prejudices will seem to an age which has a different temper of mind.&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 29 Oct 2025 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/lectures/2025/nus-bsn4811-ai-startups/</link>
        <guid isPermaLink="true">https://gauravmanek.com/lectures/2025/nus-bsn4811-ai-startups/</guid>
      </item>
    
      <item>
        <title>Early Stage AI Startups</title>
        <description>&lt;p&gt;If you’re here from the lecture, welcome! Slides are available &lt;a href=&quot;./BSE3713 AI Startups.pptx&quot;&gt;here&lt;/a&gt; and are released 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;Add me on &lt;a href=&quot;https://www.linkedin.com/in/gauravmanek/&quot;&gt;LinkedIn&lt;/a&gt;. I’m always happy to chat about AI, startups, and the future of technology.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/B4xU0L1-PPE&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

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

&lt;p&gt;In general, I recommend &lt;a href=&quot;https://www.ycombinator.com/library/carousel/Early%20Stage%20Advice&quot;&gt;Y Combinator’s Early Stage Advice&lt;/a&gt;. A few hours reading through it is time well spent.&lt;/p&gt;

&lt;p&gt;For sales and marketing, especially for high-tech products, read &lt;a href=&quot;https://www.amazon.sg/Magical-Selling-Engineering-Enterprise-Industry/dp/1735854603&quot;&gt;Magical Selling&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Other lectures in this area that you might find useful:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=3Fx5Q8xGU8k&quot;&gt;Competition is for Losers with Peter Thiel&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/@ycombinator&quot;&gt;YCombinator YouTube Channel&lt;/a&gt; for a treasure trove of startup wisdom&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the startup stages and taxonomy:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://6startupstages.com/&quot;&gt;The Six Startup Stages&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.sg/Start-Up-Curve-Steps-Entrepreneurial-Success/dp/162634292X&quot;&gt;The Startup J Curve&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.ycombinator.com/library/Ek-stages-of-startups&quot;&gt;Y Combinator’s Startup Stages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For VC funding:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.angellist.com/blog/what-angellist-data-says-about-power-law-returns-in-venture-capital&quot;&gt;AngelList&lt;/a&gt; power-law post&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.skalata.vc/blog/how-venture-returns-really-work-power-law-patience-and-portfolio-construction&quot;&gt;Skalata.VC&lt;/a&gt; venture return post&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.sg/Venture-Deals-Smarter-Lawyer-Capitalist/dp/1119594820&quot;&gt;Venture Deals&lt;/a&gt; for the inner workings of VCs and term sheets&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://thevcfactory.com/wp-content/uploads/2023/12/Sequoia-Capital-YouTube-Investor-Memo-1.pdf&quot;&gt;Sequoia Capital’s leaked YouTube investment memo&lt;/a&gt;, for an inside look at how VCs think about investments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For customer discovery, product-market fit, and eventually scaling:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.sg/Mastering-Hype-Cycle-Choose-Innovation/dp/1422121100&quot;&gt;Mastering the Hype Cycle&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.sg/Crossing-Chasm-3rd-Disruptive-Mainstream/dp/0062292986/&quot;&gt;Crossing the Chasm&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.sg/Inside-Tornado-Strategies-Developing-Hypergrowth/dp/0060745819/&quot;&gt;Inside the Tornado&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a general overview of AI in business:&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;/ul&gt;

&lt;p&gt;Saving the most important for last, how to think:&lt;/p&gt;

&lt;ul&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://en.wikipedia.org/wiki/SMART_criteria&quot;&gt;S.M.A.R.T Goals&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.ribbonfarm.com/2009/10/07/the-gervais-principle-or-the-office-according-to-the-office/&quot;&gt;The Gervais Principle&lt;/a&gt;, for an explanation of office politics.&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;/ul&gt;

&lt;p&gt;As always, turn your critical thinking skills on and carefully engage with the claims each source makes. To quote Bertrand Russell:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;In studying a philosopher, the right attitude is neither reverence nor contempt, but first a kind of hypothetical sympathy, until it is possible to know what it feels like to believe in his theories, and only then a revival of the critical attitude, which should resemble, as far as possible, the state of mind of a person abandoning opinions which he has hitherto held. Contempt interferes with the first part of this process, and reverence with the second. Two things are to be remembered: that a man whose opinions and theories are worth studying may be presumed to have had some intelligence, but that no man is likely to have arrived at complete and final truth on any subject whatever. When an intelligent man expresses a view which seems to us obviously absurd, we should not attempt to prove that it is somehow true, but we should try to understand how it ever came to seem true. This exercise of historical and psychological imagination at once enlarges the scope of our thinking, and helps us to realize how foolish many of our own cherished prejudices will seem to an age which has a different temper of mind.&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Tue, 28 Oct 2025 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/lectures/2025/nus-bse3713-ai-startups/</link>
        <guid isPermaLink="true">https://gauravmanek.com/lectures/2025/nus-bse3713-ai-startups/</guid>
      </item>
    
      <item>
        <title>Diving Helmet Design</title>
        <description>
&lt;p class=&quot;blog-image full-width&quot;&gt;
	&lt;a href=&quot;leader.jpg&quot;&gt;&lt;img src=&quot;leader.jpg&quot; alt=&quot;&quot; /&gt;
	&lt;/a&gt;
	&lt;span&gt;&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;I’ve been taking an increasing interest in more exotic and technical diving and that’s led me to complete my advanced nitrox / decompression procedures class and schedule one for technical sidemount. While I’m still not ready to take the plunge, but I’m fascinated by cave and wreck diving, and I’m sure its only a matter of time before I get there.&lt;/p&gt;

&lt;p&gt;While idly looking through catalogs of tech diving gear, I realized that diving helmets are unjustifiably expensive. Diving helmets have two jobs: protect the diver’s head from knocks, and act as a stable mounting point for lights and cameras. Both are easily achieved by airsoft helmets, but where they differ from helmets is that they have to be (close to) neutrally buoyant and not have any air- or water-trapping foam.&lt;/p&gt;

&lt;p&gt;None of these are technically challenging to achieve, so I was surprised to see suspiciously generic looking helmets with eye-watering price tags. Running a reverse image search on one of the dive helmets, I found &lt;a href=&quot;https://www.aliexpress.com/item/1005008591177889.html?spm=a2g0o.order_detail.order_detail_item.3.5bf7f19cJcesPD&quot;&gt;this airsoft helmet&lt;/a&gt; for under US$30. Score!&lt;/p&gt;

&lt;p&gt;Most airsoft helmets are durable against repeated contact with rock surfaces. Low-profile mounting rails and attachment points allow secure placement of lights and cameras while minimizing the risk of snagging, and the adjustable nylon straps ensure a good fit that stays put when entering and leaving the water. The helmet I found had holes in the crown to avoid trapping air and removable foam padding, making it an ideal starting point for my diving helmet.&lt;/p&gt;

&lt;h2 id=&quot;parts&quot;&gt;Parts&lt;/h2&gt;

&lt;p&gt;As my dive instructor assured me, the cat ears are the single most important item for wreck diving. Here are the other key parts of the helmet:&lt;/p&gt;

&lt;h3 id=&quot;forward-lights&quot;&gt;Forward Lights&lt;/h3&gt;

&lt;p&gt;The side rails are almost (but not quite) picatinny, as is traditional for airsoft or milsim helmets. I chose a Wurkkos DL07 as the dive light for its small size, good brightness in flood mode, and a UV mode that helps light up coral. Getting the light clips right took a little effort, particularly with the clamping mechanism, but eventually worked well.&lt;/p&gt;

&lt;p class=&quot;blog-image &quot;&gt;
	&lt;a href=&quot;light_mounts.jpg&quot;&gt;&lt;img src=&quot;light_mounts.jpg&quot; alt=&quot;&quot; /&gt;
	&lt;/a&gt;
	&lt;span&gt;&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;There are two independent retention mechanisms holding the light to the mount: the thin curved wall clamping the barrel, and a 1/4-20 knurled knob. The clamp is strong enough to hold the light onto the helmet on its own through a giant stride entry (into my local swimming pool), and is easy to repeatedly clip and unclip without removing the helmet. The use of a knurled knob  (instead of a SHCS bolt) for secondary retention allows for tool-free disassembly underwater.&lt;/p&gt;

&lt;p&gt;You can download it &lt;a href=&quot;https://makerworld.com/en/models/1950399-picatinny-mount-for-wurkkos-dl07-dive-light#profileId-2095661&quot;&gt;here&lt;/a&gt;, and the &lt;a href=&quot;./Wurkkos%20DL07%20Sideways%20Picatinny%20Mount%20A.f3d&quot;&gt;design files&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;rear-light&quot;&gt;Rear light&lt;/h3&gt;

&lt;p&gt;For easy identification, we include a small green strobe at the rear which is velcroed on. After some testing, it would have been much more visible on my tank strap instead of my helmet.&lt;/p&gt;

&lt;p class=&quot;blog-image &quot;&gt;
	&lt;a href=&quot;helmet_lights.jpg&quot;&gt;&lt;img src=&quot;helmet_lights.jpg&quot; alt=&quot;&quot; /&gt;
	&lt;/a&gt;
	&lt;span&gt;&lt;/span&gt;
&lt;/p&gt;

&lt;h3 id=&quot;padding&quot;&gt;Padding&lt;/h3&gt;

&lt;p&gt;The original padding was somehow very buoyant and would soak up water readily, rendering it unsuitable for underwater use. I replaced it with padding 3D-printed in TPU.&lt;/p&gt;

&lt;p class=&quot;blog-image &quot;&gt;
	&lt;a href=&quot;helmet_inside.jpg&quot;&gt;&lt;img src=&quot;helmet_inside.jpg&quot; alt=&quot;&quot; /&gt;
	&lt;/a&gt;
	&lt;span&gt;&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;The TPU used was Biqu Morphlex 75A, printed in a 10% gyroid infill without side walls and with striped top walls. Gyroid forms a regular open-cell structure that allows water to flow in and out readily, and the infill size is chosen so that water drains easily. You can download the Fusion files for the &lt;a href=&quot;./Helmet%20Liner%20Top.f3d&quot;&gt;top&lt;/a&gt; and &lt;a href=&quot;./Helmet%20Liner%20Side.f3d&quot;&gt;side&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;weight-and-buoyancy&quot;&gt;Weight and Buoyancy&lt;/h2&gt;

&lt;p&gt;In its final configuration, I will be diving it with only one of the two lights and without the cat ears. In that configuration, it weighs about 900g in air, and about 400g under water. This weight is tolerable through a 30-minute test, but for longer dives, I may add shaped buoyancy floats to the inside of the helmet to balance it. These would be made of either EVA sponge, some kind of closed-cell UHMW foam, or foamed ASA.&lt;/p&gt;

</description>
        <pubDate>Tue, 21 Oct 2025 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/projects/2025/diving-helmet/</link>
        <guid isPermaLink="true">https://gauravmanek.com/projects/2025/diving-helmet/</guid>
      </item>
    
      <item>
        <title>Decision Making in Early Stage Startups</title>
        <description>&lt;p&gt;If you’re here from the lecture, welcome! Slides are available &lt;a href=&quot;./Decision%20Making%20for%20BMP5203.pptx&quot;&gt;here&lt;/a&gt; and are released 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;Add me on &lt;a href=&quot;https://www.linkedin.com/in/gauravmanek/&quot;&gt;LinkedIn&lt;/a&gt;. I’m always happy to chat about AI, startups, and the future of technology.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/2KN5RcB9ePQ&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

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

&lt;p&gt;In general, I recommend &lt;a href=&quot;https://www.ycombinator.com/library/carousel/Early%20Stage%20Advice&quot;&gt;Y Combinator’s Early Stage Advice&lt;/a&gt;. A few hours reading through it is time well spent. For sales and marketing, especially for high-tech products, read &lt;a href=&quot;https://www.amazon.sg/Magical-Selling-Engineering-Enterprise-Industry/dp/1735854603&quot;&gt;Magical Selling&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For the startup stages and taxonomy:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://6startupstages.com/&quot;&gt;The Six Startup Stages&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.sg/Start-Up-Curve-Steps-Entrepreneurial-Success/dp/162634292X&quot;&gt;The Startup J Curve&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.ycombinator.com/library/Ek-stages-of-startups&quot;&gt;Y Combinator’s Startup Stages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For customer discovery, product-market fit, and eventually scaling:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.sg/Mastering-Hype-Cycle-Choose-Innovation/dp/1422121100&quot;&gt;Mastering the Hype Cycle&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.sg/Crossing-Chasm-3rd-Disruptive-Mainstream/dp/0062292986/&quot;&gt;Crossing the Chasm&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.sg/Inside-Tornado-Strategies-Developing-Hypergrowth/dp/0060745819/&quot;&gt;Inside the Tornado&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As always, turn your critical thinking skills on and carefully engage with the claims each book makes.&lt;/p&gt;
</description>
        <pubDate>Mon, 08 Sep 2025 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/lectures/2025/nus-bmp5203-decision-making-early-stage-startups/</link>
        <guid isPermaLink="true">https://gauravmanek.com/lectures/2025/nus-bmp5203-decision-making-early-stage-startups/</guid>
      </item>
    
      <item>
        <title>AI Innovation</title>
        <description>&lt;p&gt;If you’re here from the lecture, welcome! Slides are available &lt;a href=&quot;./AI%20Innovation%20for%20BSN4811.pptx&quot;&gt;here&lt;/a&gt; and are released 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;Add me on &lt;a href=&quot;https://www.linkedin.com/in/gauravmanek/&quot;&gt;LinkedIn&lt;/a&gt;. I’m always happy to chat about AI, startups, and the future of technology.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/B8kdb_FKfj4&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

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

&lt;p&gt;I recommended these readings:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.predictionmachines.ai/&quot;&gt;Prediction Machines&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.com/Competing-Age-AI-Strategy-Intelligent/dp/1633697629&quot;&gt;Competing in the age of AI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.sg/AI-Economy-Wealth-Welfare-Robot/dp/147369616X&quot;&gt;The AI Economy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As always, turn your critical thinking skills on and carefully engage with the claims each book makes.&lt;/p&gt;
</description>
        <pubDate>Wed, 09 Apr 2025 00:00:00 +0000</pubDate>
        <link>https://gauravmanek.com/lectures/2025/nus-bsn4811-ai-innovation/</link>
        <guid isPermaLink="true">https://gauravmanek.com/lectures/2025/nus-bsn4811-ai-innovation/</guid>
      </item>
    
  </channel>
</rss>