To my mind agentM already summarized pretty well :


I would just add some features which could make this agent really versatile :