What abstractions do we need to model an agent environment and how do we represent the interactions of the entities contained in it? I will talk about a particular approach in multi-agent systems attempting to answer these questions in computational logic terms -- terms suitable for both reusing these abstraction across multi-agent applications and also building agents that are arguably closer to the profile of application users. This work follows in a long tradition of viewing the knowledge of an agent as some kind of computational logic program, where agent reasoning becomes a kind of logical inference on the knowledge that evolves over time as the agent interacts with a changing environment. By enhancing this classic idea with the notion that the agent environment can be developed as a distributed system that processes events, the combined framework becomes more powerful both as a representational approach and as a computational framework for describing and explaining agent applications. I will motivate the approach by looking at a range of applications: from known agent testbeds to more recent applications such as supporting diabetics to manage their disease, negotiation in agent-oriented electronic markets, and agent-driven internet of things.