A simple planning agent uses percepts from the environment to build a model of the current state and calls a planning algorithm to generate a plan to achieve its goal. Practical planning involves restricting the language used to define problems, using specialized planners rather than general theorem provers, and adopting hierarchical decomposition to store and retrieve abstract plans from a library. A solution is a fully instantiated, totally ordered plan that guarantees achieving the goal.