Agents may need to change and develop during their lifetime.
Changing behaviors (methods) with some languages is difficult or impossible.
Changing structural information in an object with some languages is difficult or impossible.
Phases are a way to group behaviors and relate variant objects with the same identity.
Primary use is for runtime description of structural features of an object. This usage is like parameterized constructors in C++ or Java. (In fact, in Java the common-case is that phase switching is hidden behind a normal constructor.)