There are many other information retrieval agents which try to record, analyze, and respond to user behavior. The Watson project  analyzes the format of a document and relevant keywords are extracted to make a web search. The Watson project is not built as an application of a general agent toolkit, which would probably make it more difficult to be adapted to new kinds of IR agents. However, unlike Calvin, it is quite distributable because it requires no central database.
Remembrance Agents , which analyze existing documents on a person's hard drive and suggest them at appropriate times, use a common engine for analysis, so some of the existing analysis code is usable in multiple agents. Calvin, rather than focusing on reusable analysis code, focuses on reusable infrastructure into which different analysis algorithms can be run.
Some agents use an architecture which is similar to Calvin's [7,6,9]. These architectures use a proxy server to analyze pages being accessed by the user. The architectures focus more on observing WWW browsing activity than Calvin, which is built to support multiple data types. Unlike these architectures, Calvin has abstracted the notion of a resource so that resources of any type can be used.
Many other IR projects develop personal information agents to suggest resources to users. In the existing literature, however, the focus is often on the analysis techniques rather than on reusable architectures. Such agents [4,1,3] can observe document access for analysis. However, the focus on published literature of these agents is not reusability of the infrastructure, but the analysis of the documents.
Other software projects have gathered information about user activity, but not for the purpose of information retrieval. Gorniak and Poole , for instance, developed a system which records keystrokes in Java applications by forcing the applications to use a customized event queue in the Java machine. This kind of data collection technique is quite amenable to the Calvin architecture: A sub-agent could be implemented to gather this data and send it to the XML Executor.