struct agent prototype