Recent Blog Posts
Insights on AI Agents, Modern Web, and the Future of Engineering.
Versioning Tools: Backward-Compatible Function Evolution for Agents
Treat LLM function-calling tool schemas as a public API you cannot break — additive-only evolution rules, deprecation with dual registration, model behavior on schema changes, and golden tool-call fixtures that catch regressions before deploy.
Circuit Breakers for LLM and Tool Dependencies
Apply the circuit-breaker pattern specifically to LLM providers and agent tool endpoints — failure classification, per-dependency state machines, LiteLLM gateway wiring, and fault-injection tests that prove the breaker trips when it should.
Idempotency Keys in Agent Payment Loops: Retry Without Double-Charge
The full lifecycle of a payment idempotency key inside an agentic retry loop: mint it per logical intent, persist it before the tool call, replay stored results, scope and fingerprint keys, and reconcile for double charges.
A2A Agent Cards: Publishing and Resolving Agent Capabilities
Author, publish, sign, and consume A2A Agent Cards: the JSON manifest that declares an agent identity, skills, interfaces, and security requirements at /.well-known/agent-card.json, with a worked publishing and resolution example.
Hardening MCP Servers: Input Validation, Rate Limits, and Authentication
A practical hardening guide for production MCP servers: schema-validated tool inputs, payload caps, per-client rate limits with 429 semantics, OAuth 2.1 enforcement, and transport-level controls grounded in the MCP specification.
Flutter Widget Testing: Finding, Tapping, and Asserting Your Way to Safer UIs
Core widget testing fundamentals: testWidgets and the WidgetTester lifecycle, pump and pumpAndSettle, finders and matchers, gestures, keys, async pitfalls, and how to structure and run a widget test suite.
Flutter Web's Wasm-First Era: What Changes and How to Migrate
WebAssembly is slated to become Flutter web's default compilation target. What dart2wasm changes, how to read the performance claims, and a concrete migration checklist from dart2js and legacy JS interop.
jnigen and jni_util: Calling Java and Kotlin Code from Dart
How Dart-to-JVM interop actually works: what jnigen generates, what package:jni and jni_util provide at runtime, how to bind Java and Kotlin APIs step by step, and when this beats platform channels.
Dart Macros: Compile-Time Code Generation Comes to the Language
Dart macros promised in-language compile-time code generation with deep semantic introspection. The program was paused in January 2025 over hygiene, analyzer integration, and compile-time performance. This post explains what macros were designed to do, why they did not ship, what the 2026 roadmap replaces them with, and how to keep using build_runner today.
GenUI TransportAdapter: Wiring a Flutter GenUI App to Any LLM Agent
The A2uiTransportAdapter replaced ContentGenerator in Flutter's genui package after the A2UI v0.9 rewrite. Learn how the Engine/Transport/Facade split works, how onSend and addChunk stream tokens, and how to build your own transport for any LLM provider, WebSocket agent, or mock backend.
Root Cause Analysis Playbooks for Agent Failures: From Symptom to Fix
A systematic method for debugging agent failures: classify the symptom, walk a trace from the failing span upward, and apply a playbook for each failure class — routing, tool, context, hallucination, and infrastructure — with durable execution and state inspection as first-class techniques.
Delegated Authorities: Scoped Permissions for Sub-Agent Execution
Give sub-agents only the authority their task requires: why tool lists are not permissions, how agents-as-tools and handoffs differ in privilege, building a delegation layer with capability objects, and enforcing scope at the runner rather than trusting the prompt.