Classic goal oriented action planning defines a separate action class and hands the planner a list of them. We took the actions out. The planner compiles every smart object in the scene, and preconditions and effects are assigned to those objects directly, so the world describes what it makes possible.
An agent queries the planner with its current state and its goal state. The planner returns an ordered list of the smart objects to interact with, and the state the agent will be in between each one, ordered so every step moves it closer to the goal in a way that looks believable. The agent then runs an internal finite state machine to walk that list and interact with each object in turn.
Built in Unreal Engine 4, though nothing about the approach is tied to it. It would drop into more or less any C++ engine or editor.