For several years, agent-based software engineering has faced the matter of enabling heterogeneous programs written by different people, at different times, in different languages and with different interfaces to communicate and interoperate . Researchers in the ARPA Knowledge Sharing Effort have proposed agent communication languages (ACLs) as the means to allow the exchange of knowledge among software agents in order to facilitate their interoperation . Generally, an ACL is composed of three main elements: an open-ended vocabulary appropriate to a common application area, an inner language (KIF-Knowledge Interchange Format) to encode the information content communicated among agents, and an outer language (KQML-Knowledge Query and Manipulation Language) to express the intentions of agents.
Nowadays, KQML has become the communication language par excellence in agent-based systems. However, when several computational entities interact by exchanging messages a higher level of interaction concerned with the conventions that they share during the exchange should be addressed . This level of interaction is not supported by KQML, whereas coordination languages -like COOL - allow such conventions to be explicitly expressed. Making shared conventions explicit allows interdependencies among agents' activities to be managed.
Apart from COOL, other agent building tools such as AgentTalk or JAFMAS  also provide coordination constructs. JAFMAS , for instance, provides a generic methodology for developing speech-act based multi-agent systems using coordination constructs similar to COOL. However, many more agent building tools that have not addressed this issue yet.
Interagents --like KQML facilitators-- are inspired by the efficient secretary metaphor already introduced in the Actors model of concurrent computation . Nevertheless, interagents (unlike KQML facilitators) offer the coordination level required by agents to cooperate in non-trivial ways. On the other hand, unlike KQML facilitators, interagents have no knowledge about the reasoning capabilities of their users , though they are aware about their users' plans thanks to conversation protocols.
By introducing interagents, and concretely JIM, we try to make headway with respect to other agent building tools offering a programmable communication and coordination module whose behaviour can be specified either before or during its user's run-time by both the agent engineer and the (user) agent itself. In addition, another major advantage of using interagents is that they permit agents to reason about communication and coordination at a higher level of abstraction, making implementation details transparent to their users.
Finally, notice that in some sense interagents extend to agents some concepts introduced to coordinate distributed objects