Each time I've built an agent for a new project, I find myself rebuilding the same components so I put them together in this framework. Key components include multimodal support, built-in tools (and compatibility with custom or MCP tools), streaming, and a data model for threads, messages and attachments with persistent storage. It also comes with it's own cli and chat interfaces to interact with the agent.