---
author: "Mukul Chugh"
canonical: "https://mukulchugh.com/blog"
description: "Notes on engineering, product, and the craft of building software that earns its keep."
image: "https://mukulchugh.com/og/blog.png"
language: "en"
title: "Writing"
type: "page"
---

# Notes from the work.

- [Checkpointing agent edits without touching git's index](https://mukulchugh.com/blog/checkpointing-agent-edits-without-touching-git-index): A pattern worth stealing, found while reading T3 Code's internals: snapshot an agent's entire working tree per turn without ever touching the user's real index, HEAD, or branches. (2026-08-10)
- [Skip your own API when you own the database](https://mukulchugh.com/blog/skip-your-own-api-when-you-own-the-database): A paginated REST endpoint took 120 seconds to aggregate 123k rows. One raw SQL query against the same self-hosted Postgres took 90 milliseconds. (2026-07-28)
- [Agents don't fail quietly: they loop](https://mukulchugh.com/blog/agent-stuck-detection-tool-loops): Multi-step tool agents rarely crash. They repeat themselves until the budget dies. Stuck detection is the fix. (2026-07-06)
- [Give multi-step agents a finish line](https://mukulchugh.com/blog/phased-agent-turns-gather-analyze-synthesize): Unbounded tool loops burn tokens and never commit. Budget the turn: gather, think, then answer with tools off. (2026-06-14)
- [Agent scratchpads need sanitation, not vibes](https://mukulchugh.com/blog/agent-working-memory-injection-hygiene): Within-turn working memory is useful, and dangerous if untrusted text becomes an instruction the model obeys. (2026-05-11)
- [Don't parse follow-ups out of the reply](https://mukulchugh.com/blog/agent-suggested-actions-as-tools): Streaming chat truncates. Markdown JSON fences rot. Suggested next steps belong in a typed side channel. (2026-03-30)
- [Don't dump the whole document into the context window](https://mukulchugh.com/blog/progressive-tool-results-transcript-chunks): Long tool results crowd out the answer. Search, summarize, then read pieces: progressive disclosure for the model. (2026-03-02)
- [One keyboard, two Macs](https://mukulchugh.com/blog/openkvm-one-keyboard-two-macs): Universal Control kept breaking on my desk. So I built OpenKVM: a small macOS app that shares one keyboard and mouse between two Macs. (2026-01-18)
- [Native widgets from React, without leaving JSX](https://mukulchugh.com/blog/brik-react-to-native-widgets): Home-screen widgets and Live Activities usually mean writing Swift by hand. Brik keeps that surface in React and compiles down to native. (2025-12-20)
- [Ferry: Apple Watch as a Mac mic](https://mukulchugh.com/blog/ferry-apple-watch-mac-mic): I already wear a Watch. Ferry turns it into a system-wide microphone for the Mac on my desk. (2025-11-15)
- [Agent Skills aren't just prompts](https://mukulchugh.com/blog/quivly-skills-agent-expertise): We open-sourced Quivly Skills: reusable agent expertise for customer engineering and post-sales, not another prompt dump. (2025-10-21)
- [One MCP gateway beats twelve tool logins](https://mukulchugh.com/blog/mcp-gateway-for-team-tools): When every team tool has its own auth story, agents can't help. A read-only MCP gateway is the shape I keep coming back to. (2025-09-08)
- [Agents draft. Humans release.](https://mukulchugh.com/blog/human-in-the-loop-agent-plans): I want agents that make review cheap, not agents that skip the person who owns the blast radius. (2025-07-19)
- [What Swiggy-scale mobile actually taught me](https://mukulchugh.com/blog/mobile-lessons-from-swiggy-scale): Before startup life, I shipped mobile at Swiggy. Scale changes which bugs matter, and how little your happy path predicts production. (2025-06-02)
- [A personal agent fleet is just a small OS](https://mukulchugh.com/blog/self-hosted-personal-agent-fleet): I run messaging, memory, tools, and delegated agents on a VPS. Less sci-fi assistant, more private operating system for my own work. (2025-05-14)

---

[View this page](https://mukulchugh.com/blog) · [Site index](https://mukulchugh.com/llms.txt)
