Multi-agent systems can be viewed as a software architecture style consisting of autonomous components called agents. The agents interact through message passing according to a predefined protocol. There are different organizational styles for multi-agent systems including hierarchical, flat, subsumption, and modular organizations. Effective multi-agent systems require specially designed communication protocols that fit the agent architecture, organization, and tasks. Standard communication languages and protocols are increasingly used to facilitate conversations between agents from different systems.