This paper identifies an approach for designing software agents to support collaborative applications. It proposes that agent supported collaborative systems can be economically built using reusable agents. The paper describes an approach to define generic agents based on a metamodel, which can be used to model a wide range of applications. To do this the paper defines a collaborative metamodel and identifies generic agents based on the metamodel concepts. The paper then describes a methodology that defines systems as object models in terms of the metamodel concepts. The objects in the model are then implemented as components, often using a workspace system. It then supports each component object with the generic agent that corresponds to the component concept.