Initial implementation of Agent