Many agent-oriented programming languages are based on the Prolog-like logical goal reduction approach where rules are used to reduce, in a depth-first way, a selected goal. The ability of agents to change between goals means that such languages often overlay the basic computational engine with a mechanism for dynamically changing which goal is selected.Our approach is different. The basic computational approach we use is that of model building for logical formulae, but the underlying formulae are temporal. This allows us to capture the dynamic nature of the agent explicitly. In addition, the temporal basis provides us with ways of having multiple active 'goals' and being able to achieve several at once. As in most agent-oriented languages deliberation is used to choose between goals when not all can be satisfied at once. This basic execution of temporal formulae provides us with the foundation for agent programming. In order to deal with multi-agent systems in an equally straightforward way we also incorporate a very simple, but flexible, model of organisational structuring.These two aspects provide the core of the language implemented. There are, however, many extensions that have been proposed, some of which have been implemented, and all of which are mentioned in this article. These include varieties of agent belief, resourcebounded reasoning, the language's use as a coordination language, and the use of contextual constraints.