agent definition - imperfect