Designing AI Agents (Principles, patterns, and best practices)