<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>AI Engineering — Articles by Pouria Jahandideh</title><description>A 12-week hands-on AI engineering mentorship. Build a real AI coding agent from scratch — agent loops, tool calling, evals, RAG, context engineering, sandboxing, memory and multi-agent orchestration. No frameworks.</description><link>https://pjsofts.github.io/</link><language>en-us</language><item><title>Prompt caching and what an AI agent actually costs</title><link>https://pjsofts.github.io/blog/prompt-caching-and-agent-cost/</link><guid isPermaLink="true">https://pjsofts.github.io/blog/prompt-caching-and-agent-cost/</guid><description>Your agent resends the entire conversation on every single turn, so cost grows quadratically with steps. Prompt caching fixes most of it — but only if your prefix is stable. Here are the four rules, the mistake that silently triples your bill, and why caching and context trimming pull against each other.</description><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate><category>Agents</category><category>Cost</category><category>Prompt Caching</category><category>Context Engineering</category><category>Production</category><author>Pouria Jahandideh</author></item><item><title>Claude Code vs. Grok CLI: how two production coding agents talk to their models</title><link>https://pjsofts.github.io/blog/claude-code-vs-grok-cli-architecture/</link><guid isPermaLink="true">https://pjsofts.github.io/blog/claude-code-vs-grok-cli-architecture/</guid><description>A source-level comparison of two shipping AI coding agents — which API shape each uses, why Grok speaks OpenAI&apos;s wire format on its own servers, and the multi-backend abstraction that lets one client target three APIs.</description><pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate><category>Claude Code</category><category>Grok</category><category>Agents</category><category>Architecture</category><category>API Design</category><author>Pouria Jahandideh</author></item><item><title>Chat Completions vs. the Responses API: a practical migration guide</title><link>https://pjsofts.github.io/blog/chat-completions-vs-responses-api/</link><guid isPermaLink="true">https://pjsofts.github.io/blog/chat-completions-vs-responses-api/</guid><description>The mental-model shift from messages to items, a field-by-field migration map, tool calling with call_id, conversation state, and how the same code runs through the OpenAI SDK, a gateway, and LangChain.</description><pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate><category>OpenAI</category><category>Responses API</category><category>Agents</category><category>API Design</category><category>Migration</category><author>Pouria Jahandideh</author></item><item><title>Most AI agent failures aren&apos;t model failures — they&apos;re tool design failures</title><link>https://pjsofts.github.io/blog/designing-tools-for-ai-agents/</link><guid isPermaLink="true">https://pjsofts.github.io/blog/designing-tools-for-ai-agents/</guid><description>Better models won&apos;t fix badly designed tools. Task-oriented tools over raw APIs, fewer tools over more, designing for the model rather than the human, high-signal returns, and evaluating the tool interface itself.</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><category>Agents</category><category>Tool Design</category><category>Evals</category><category>LLM</category><author>Pouria Jahandideh</author></item><item><title>What is an agent loop, really? (It&apos;s about 40 lines of code)</title><link>https://pjsofts.github.io/blog/what-is-an-agent-loop/</link><guid isPermaLink="true">https://pjsofts.github.io/blog/what-is-an-agent-loop/</guid><description>Agent frameworks make the loop look complicated. It isn&apos;t. Here is the whole thing in Python and TypeScript — the exchange, the stop rule, the step limit, and why writing it yourself changes how you debug everything else.</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><category>Agents</category><category>Agent Loop</category><category>Python</category><category>TypeScript</category><category>Fundamentals</category><author>Pouria Jahandideh</author></item><item><title>Context engineering: the highest-leverage skill in AI engineering</title><link>https://pjsofts.github.io/blog/context-engineering-for-agents/</link><guid isPermaLink="true">https://pjsofts.github.io/blog/context-engineering-for-agents/</guid><description>The model has no memory — everything it knows on any turn is something you put in the request. How to assemble a system prompt, budget tokens, load project rules, and compact long sessions without losing what matters.</description><pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate><category>Context Engineering</category><category>Prompt Engineering</category><category>Agents</category><category>Tokens</category><author>Pouria Jahandideh</author></item><item><title>Why your AI agent needs evals (and how to build them in an afternoon)</title><link>https://pjsofts.github.io/blog/why-your-ai-agent-needs-evals/</link><guid isPermaLink="true">https://pjsofts.github.io/blog/why-your-ai-agent-needs-evals/</guid><description>You never ship an improvement you haven&apos;t measured. Golden datasets, deterministic scorers vs LLM-as-judge, negative test cases, and the data flywheel that turns every user correction into a regression test.</description><pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate><category>Evals</category><category>Testing</category><category>Agents</category><category>LLM-as-judge</category><author>Pouria Jahandideh</author></item></channel></rss>