Calvin has been designed and implemented in the context of supporting users as they access documents. As the user browses, Calvin records the documents which the user is accessing. From these documents, Calvin uses information retrieval techniques to create an index for each document reflecting its subject matter. These documents are retrieved and suggested to the user when similar documents are accessed in the future. A screen shot of Calvin's resource suggester is shown in figure 1. Calvin's task and user interactions are described in detail in [8].
Although Calvin was designed in the context of information retrieval, its architecture was designed to be general enough to enable using its components in multiple task domains, and for its data storage techniques to be applied in other research contexts where processing data needs to be collected and analyzed for system evaluation.
Calvin's architecture is shown in figure 2. Calvin includes sub-agents as part of an extensible system to collect data from various sources and send the information for analysis via an XML message. This information is analyzed by a researcher-defined ``Data Analysis'' component. This component conforms to a specific interface specification so that data analysis components can be changed out without changing the rest of the system. The kinds of data which can be passed among system components are specified in a registry and are customizable. This configuration allows researchers to use Calvin to perform the data collection/storage and focus on issues of analysis.
Calvin's architecture has the following features: