In contrast, JACK™ Intelligent Agents has proven to be well suited to applications requiring complex interactions with an ever-changing environment. Each JACK agent is an autonomous computational entity. Autonomy, coupled with the ability to take input from the environment and communicate with other agents, provides system builders with a very powerful form of encapsulation. A given agent can be defined in terms of its goals, knowledge and social capability, and then left to perform its function autonomously within the environment it was designed to function in.
This is a very effective way of building distributed systems – each agent in the system is responsible for pursuing its own goals, reacting to events and communicating with other agents in the system. There is no need to explicitly program the interactions of the whole system, rather, the interactions emerge as a by-product of the individual goals and capabilities of the constituent agents.