# Akash Panchal > I build production AI agents and document the hard engineering problems. Currently: Evercall — when an Australian emergency plumber can't answer, we book the job. - [Home](https://akashpanchal.com): Production AI agents. Currently Evercall. - [Evercall](https://evercall.app): When an Australian emergency plumber can't answer, we book the job. - [Building Evercall](https://akashpanchal.com/building-evercall): One line per week that actually shipped. - [Articles](https://akashpanchal.com/articles) - [Tutorials](https://akashpanchal.com/tutorials) - [RSS](https://akashpanchal.com/rss.xml) Canonical HTML is at the paths below. Each piece also has a `.md` URL for agents. ## Writing - [WebRTC from First Principles: Why Voice Agents Run on UDP, Not HTTP](https://akashpanchal.com/articles/webrtc-for-voice-agents): Sound is a 20ms clock. TCP was built for documents. This is a ground-up tour of WebRTC — sampling, RTP, ICE, jitter buffers — and why every serious voice agent ends up as a media participant, not a server behind a POST. - Markdown: https://akashpanchal.com/articles/webrtc-for-voice-agents.md - [Voice Agents: The Hard Problems Nobody Warns You About](https://akashpanchal.com/articles/voice-agents-hard-problems): The demo is easy — speech-to-text, LLM, text-to-speech, done. Then a real person talks to it and everything falls apart: the silences are too long, it talks over them, it can't tell when they're done. The hard problems in voice aren't the models. They're latency, barge-in, and turn-taking. - Markdown: https://akashpanchal.com/articles/voice-agents-hard-problems.md - [The State Machine You Were About to Write Already Exists — LiveKit Voice Agents](https://akashpanchal.com/tutorials/livekit-voice-agents): Phone agents need dates, room types, and callback numbers. The instinct is a CallState dataclass and next_question(). LiveKit Agents already solved that with AgentTask and TaskGroup — here's the hotel receptionist that shows how. - Markdown: https://akashpanchal.com/tutorials/livekit-voice-agents.md ## Also - [Stop Re-Reading Huge Tool Outputs: Breadcrumbs Over Blobs](https://akashpanchal.com/articles/breadcrumbs-over-blobs): Your agent just called searchDocs() and got back 48KB of JSON. On the next turn it re-reads all of it — or worse, silently drops the detail it needs. Store signatures and pointers instead of blobs. - Markdown: https://akashpanchal.com/articles/breadcrumbs-over-blobs.md - [Two Agent Harnesses: Mastra's AgentController vs LangChain's Deep Agents](https://akashpanchal.com/articles/two-agent-harnesses): Two frameworks, working independently, reached for the same word — harness. But they bet on opposite shapes of work: one you hold and steer, the other you hand a goal and let run. Here's the line between them, in code. - Markdown: https://akashpanchal.com/articles/two-agent-harnesses.md - [I Stopped Hand-Rolling the Agent Loop — AI SDK v7 Features Worth Shipping](https://akashpanchal.com/articles/ai-sdk-v7-features): Every agent project had the same skeleton at the top: call the model, run tools, loop, pray you got the stop condition right. v7 moves that — plus approvals, structured output, and telemetry — into the SDK. Here's what I reached for the week it landed. - Markdown: https://akashpanchal.com/articles/ai-sdk-v7-features.md - [I Let an Agent Write Code and Run It — Safely — in a Vercel Sandbox](https://akashpanchal.com/articles/agent-runs-code-vercel-sandbox): An agent that writes code you can't run is a fancy autocomplete. But running model-generated code on your own box is how you get a crypto miner. I build a mini-app where the agent writes, executes, and self-corrects code inside a Vercel Sandbox microVM — and walk the parts that surprised me. - Markdown: https://akashpanchal.com/articles/agent-runs-code-vercel-sandbox.md - [Build a Harness Agent From Scratch](https://akashpanchal.com/tutorials/build-a-harness-agent-from-scratch): Picture the demo — model, tools, while loop, done. Then someone refreshes the browser and it's gone. This tutorial builds the layer around the loop: sessions, persistence, approvals, and a UI contract — by hand, with the OpenAI SDK. - Markdown: https://akashpanchal.com/tutorials/build-a-harness-agent-from-scratch.md ## Optional Earlier Mastra series. URLs stay live; this is not what I am building now. - [Build a Mastra Agent From Scratch — Tools, Memory, and the Loop (Part 1)](https://akashpanchal.com/tutorials/mastra-agents): Every new agent project starts with the same hand-rolled loop. Part 1 of the Mastra series: define a typed agent, wire tools with createTool, and add memory so it survives the next turn — without rebuilding the plumbing again. - Markdown: https://akashpanchal.com/tutorials/mastra-agents.md - [When Your Agent Skips the Eligibility Check — Mastra Workflows (Part 2)](https://akashpanchal.com/tutorials/mastra-workflows): Agents decide. Workflows guarantee. Part 2: typed multi-step pipelines with sequencing, parallelism, branching, loops, and human-in-the-loop suspend & resume — for the steps where order isn't up for a vote. - Markdown: https://akashpanchal.com/tutorials/mastra-workflows.md - [An Agent Loop Is Not an App — Mastra's Harness (Part 3)](https://akashpanchal.com/tutorials/mastra-harness): Refresh the tab. Approve a delete. Hand off a subtask. Part 3: Mastra's AgentController adds sessions, modes, subagents, and tool approvals — the layer that turns a loop into something users can depend on. - Markdown: https://akashpanchal.com/tutorials/mastra-harness.md - [Why Users Think Your Agent Is Frozen — Streaming to a Real UI (Part 4)](https://akashpanchal.com/tutorials/mastra-streaming): Ten seconds of silence looks identical to a crash. Part 4: wire agent.stream() into a UI — tokens, tool calls, and custom progress events — so users watch the work happen instead of staring at a spinner. - Markdown: https://akashpanchal.com/tutorials/mastra-streaming.md - [Your Agent Is Still Guessing — Mastra RAG With Citations (Part 5)](https://akashpanchal.com/tutorials/mastra-rag): A confident answer with no source is still a hallucination waiting to happen. Part 5: chunk, embed, store, query — wire a retrieval pipeline under your agent so it answers from your documents, with citations. - Markdown: https://akashpanchal.com/tutorials/mastra-rag.md - [Some Agent Work Outlives the HTTP Request — Durable Agents (Part 6)](https://akashpanchal.com/tutorials/mastra-durable-agents): Forty-page scrape. Human approval that takes a day. A cron job at 3am. Part 6: background tasks, crash-proof durable agents, and heartbeats — machinery for work that doesn't fit in one request. - Markdown: https://akashpanchal.com/tutorials/mastra-durable-agents.md - [An Agent Without Evals Is a Vibe With a Deploy Button (Part 7)](https://akashpanchal.com/tutorials/mastra-evals): The demo sounds sharper. Production quietly gets worse. Part 7 — the series finale: deterministic checks, model-graded scorers, CI gates, and live sampling so 'it seems better' becomes '0.86, up from 0.71'. - Markdown: https://akashpanchal.com/tutorials/mastra-evals.md