In awe at the size of this lad, absolute unit. Maybe just keep `AbstractAgent` class there and move other stuff to a second file.