<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>AI Systems on Muhammad Hassan Raza</title><link>https://mhassan.dev/categories/ai-systems/</link><description>Recent content in AI Systems on Muhammad Hassan Raza</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Fri, 25 Sep 2026 10:00:00 +0500</lastBuildDate><atom:link href="https://mhassan.dev/categories/ai-systems/index.xml" rel="self" type="application/rss+xml"/><item><title>Agent Middleware: What Kept Obelisk's Agents in Line</title><link>https://mhassan.dev/blog/langgraph-multi-agent-middleware/</link><pubDate>Wed, 08 Apr 2026 10:00:00 +0500</pubDate><guid>https://mhassan.dev/blog/langgraph-multi-agent-middleware/</guid><description>Obelisk runs more than fifteen specialist agents. The agents were the easy part. Model choice, context, cost, retries and approvals all ended up in a middleware layer, and that layer is what made it work.</description></item><item><title>Scoring Fraud in Legal Intake Calls</title><link>https://mhassan.dev/blog/fraud-scoring-legal-intake/</link><pubDate>Wed, 08 Apr 2026 10:00:00 +0500</pubDate><guid>https://mhassan.dev/blog/fraud-scoring-legal-intake/</guid><description>Coached callers, invented doctors and borrowed photos. How RISQ scores intake calls for mass tort firms, and why the most useful score measures the interviewer, not the caller.</description></item><item><title>LangChain in Production: What the Tutorials Leave Out</title><link>https://mhassan.dev/blog/langchain-production/</link><pubDate>Sun, 01 Feb 2026 10:00:00 +0500</pubDate><guid>https://mhassan.dev/blog/langchain-production/</guid><description>Where LangChain earns its place, where it gets in the way, and the handful of habits that kept our AI features from failing quietly: timeouts, validation, real persistence, tracing and pinned versions.</description></item></channel></rss>