Based loosely on Schwartz's FLiPSiDE system [], the Open Agent Architecture is a blackboard-based framework allowing individual software ``client" agents to communicate by means of goals posted on a blackboard controlled by a ``Server" process.
The Server is responsible both for storing data that is global to the agents, for identifying agents that can achieve various goals, and for scheduling and maintaining the flow of communication during distributed computation. All communication between client agents must pass through the blackboard. An extension of Prolog has been chosen as the interagent communication language (ICL) to take advantage of unification and backtracking when posting queries. The primary job of the Server is to decompose ICL expressions and route them to agents who have indicated a capability in resolving them. Thus, agents can communicate in an undirected fashion, with the blackboard acting as a broker. Communication can also take place also in a directed mode if the originating agent specifies the identity of a target agent.
An agent consists of a Prolog meta-layer above a knowledge layer written in Prolog, C or Lisp. The knowledge layer, in turn, may lie on top of existing standalone applications (e.g. mailers, calendar programs, databases). The knowledge layer can access the functionality of the underlying application through the manipulation of files (e.g., mail spool, calendar datafiles), through calls to an application's API interface (e.g. MAPI in Microsoft Windows), through a scripting language, or through interpretation of an operating system's message events (Apple Events or Microsoft Windows Messages).
Individual agents can respond to requests for information, perform actions for the user or for another agent, and can install triggers to monitor whether a condition is satisfied. Triggers may make reference to blackboard messages (e.g. when a remote computation is completed), blackboard data, or agent-specific test conditions (e.g. ``when mail arrives ").
The creation of new agents is facilitated by a client library furnishing common functionality to all agents. This library provides methods for defining an agent's capabilities (used by the blackboard to determine when this agent should participate in the solving of a subgoal), natural language vocabulary (used by the interface agent), and polling status. It also provides functionality allowing an agent to read and write information to the blackboard, to receive requests for information or action, and to post such requests to the blackboard, a specific agent, or an entire population of appropriate agents.
When attempting to solve a goal, an agent may find itself lacking certain necessary information. The agent can either post a request of a specific agent for the information, or it may post a general request on the blackboard. In the latter case, all agents who can contribute to the search will send solutions to the blackboard for routing to the originator of the request. The agent initiating the search may choose either to wait until all answers return before continuing processing, or may set a trigger indicating that when the remote computation is finished, a notification should interrupt local work in progress. An agent also has access to primitives permitting distributed AND and OR-parallel solving of a list of goals.