Calvin supports a distributed multi-agent approach to data filtering. The ``XML Executor'' module accepts connections via TCP/IP for the transmission of information about new documents. Agents which monitor the user communicate their information via XML. To report a document access, the monitoring agent opens a connection to the XML Executor and sends an XML message containing the document information. The Executor then replies with a message indicating whether or not it was able to parse the message.
Currently, our primary monitoring agent is a Java proxy server which monitors WWW browsing behavior and reports the pages accessed. However, using XML over TCP/IP allows non-java agents to easily interface with Calvin, and allows a potentially large number of different agents to gather information without requiring any further modifications to Calvin itself. For example, Windows API calls provide much information about user document access. Planned future development of Calvin includes writing an agent to access these API calls and send document information to Calvin.
Two way communication is supported in Calvin to eventually enable agents to send queries through the XML Executor to learn about the user, and to allow user interfaces to control the sub-agents. Currently our XML specification does not provide this syntax, but it could easily be added.
Although the primary kind of user resource access we are currently studying is WWW browsing behavior, Calvin is extensible to handle different resource types, including document references manually entered by users. This extensibility is handled via the Resource Registry. Using a predefined interface, programmers can write Java resource handlers and add references to them in the registry. A resource handler defines how to communicate information about a document internally among Calvin resources, user interfaces for displaying/editing meta information about the resource, and how to automatically retrieve the resource referred to.
These Java classes are registered with the Resource Registry through the Registry editor. Once they are registered, Calvin uses the registered information to determine how to treat references to the specified type of document. Because the resource handlers implement predefined interfaces, no modifications are necessary to the Calvin source code to deal with these resources; the new resource types are seamlessly integrated with Calvin. This makes Calvin customizable to different kinds of environments where different document access recording goals may be required. To support our research, Calvin has pre-defined default handlers for the following types of documents: WWW Document, Email address, Phone number, Book, and electronic concept maps  (a type of graphical knowledge representation).
The following illustrates the use of the resource registry. When Calvin is running and the WWW proxy server sends it an XML message, the proxy server identifies its resource type by including a field ``<type>0</type>.'' Before further processing of the message, Calvin asks the resource registry for an instance of a class corresponding to resource type id 0. The registry responds with an instance of the WebURLResource class, which is a descendent of the ResourceModel class. Calvin then parses the rest of the XML message using the API specified by ResourceModel. Once the message is fully parsed, the instance of WebURLResource can be accessed to manipulate the resource. Section 7 provides more information on the primitives for manipulating resources.