We propose, as part of an agent architecture, a system where contracts are represented as first-class entities to allow the relationships between agents to be specified and developed separately from their built-in capabilities. The contracts allow the agent’s problem-solving ability to be augmented by the potential of outsourcing tasks and obligations to other agents. The contracts also allow the agent’s response to requests from other agents to be formally defined. The contracts are represented as event calculus rules which dictate the evolution of obligations and permissions on the agents concerned. The event calculus is used deductively to infer current and past obligations and permissions, and abductively to make plans to fulfil obligations subject to any restrictions imposed by the contracts.