Every shortcut becomes
an incident report.
INCIDENT #001 the agent retried a failed call. The loan disbursed twice.
RESOLVED idempotency keys inside an orchestrated saga — a retry cannot double-write.
INCIDENT #002 a customer's name surfaced in graph state, checkpoints, logs and traces.
RESOLVED one PII vault, crypto-shredded — erasure is the destruction of a single key.
INCIDENT #003 the prompt said "only disburse after acceptance." The prompt lost.
RESOLVED five deterministic guardrail rings the LLM cannot route around.
INCIDENT #004 the write committed; the network ate the 200. Did it happen?
RESOLVED transactional outbox + idempotent projection — the ledger converges.
BALANCEDthe LLM can be wrong, safely.
The fix is not a better prompt.
It's architecture.
A guardrail is only a guardrail if the LLM cannot route around it. Anything the model can skip by phrasing a tool call differently is a convention, not a control.
This isn't hypothetical.
A full conversational loan agent — LangGraph and MCP over a durable, event-driven banking core — running entirely on a laptop with onedocker compose up. Below: follow one request through it, hop by hop — rendered from the samearchitecture.drawio that documents the repo.
Pablo Godoy
Software engineer. I build event-driven banking systems and the agentic AI that can be trusted to sit on top of them. Currently writing the production loan-agent series.
toolbox
langgraph · aws bedrock agentcore · mcp · typescript · python · postgres · dbos · xstate · keycloak/oidc · evals & chaos testing