Most agent frameworks can be readily characterized into one of two groups. On the one hand, there are frameworks designed to have well-defined formal semantics, enabling formal reasoning about agents and their behavior. On the other hand, there are frameworks targeted at developing agent systems that can be deployed as practical applications interacting in highly dynamic real-world environments. These frameworks have tended to sacrifice formal grounding for the ability to tackle real-world problems. An ideal agent system should combine the sophisticated representations and control of the more practical systems with principled semantics that enable reasoning about system behavior. In this paper, we discuss a number of both formal and practical requirements that must be met to satisfy the demands of large-scale applications. We also briefly describe work on a new BDI agent framework that aims to bridge the gap between formal and practical agent frameworks. This system, called SPARK (the SRI Procedural Agent Realization Kit), is currently being used as the agent infrastructure for a personal assistant system for a manager in an office environment.