Memento is a software infrastructure to support the construction and evolution of assistant applications (or assistants) that act as adjuncts to the human mind. Each assistant embodies an effective understanding of some information domain or problem domain. The assistant employs this understanding to aid a user or user community in the manipulation, transmission, and storage of meaningful information artifacts from the assistant's domain, called models. Additionally, models flow via the assistant's user interface at the semantic level. Memento provides mechanisms which address all of these common assistant responsibilities. When combined, the mechanisms result in real-time artifact-based collaboration over an assistant's models. Memento preserves the meaning of an assistant's models throughout these processes by enforcement of the domain's membership rules, called semantic constraints. Because Memento abstracts an assistant's models and semantic constraints, it is therefore said to be domain-independent. Memento is composed of two layers. The bottom layer, described in Chapter 2, supports real-time artifact-based collaboration over collections of name-value attribute pairs, called MObjects. A dynamic, hierarchical type system over MObjects characterizes what attributes are required to appear on an MObject. Memento facilitates MObject collaboration through mechanisms for coherent transactions over MObjects, notification of dynamic MObject changes, and shared, persistent MObject storage. Chapter 3 describes Memento's second, higher layer which permits the expression of an assistant's models as conceptual graphs, a knowledge representation scheme based in cognitive psychology. Conceptual graphs are, in turn, represented as collections of MObjects. Model meaning is preserved through enforcement of conceptual graph schemata that characterize a domain's semantic constraints. A developer can easily create a domain-specific customization of Memento, called a domain representation. The domain representation becomes a portable, collaborative applications programmer's interface (API) for the assistant's models and domain. The domain representation is then combined with a suitable user interface to make a complete assistant. This process and several example assistants are described in Chapter 4. The dissertation concludes in Chapter 5 with a survey of related research in the areas of artifact-based collaboration, human-computer interaction, software engineering, and knowledge representation.