Abstraction is the technique we use to deal with complexity. What is the proper kind and level of abstraction for complex software agents? We think it would be reasonable to endow agents with a philosophy. Then, by understanding their philosophies, we can use them more effectively. To endow agents with ethical principles, developers need an architecture that supports explicit goals, principles and capabilities, as well as laws and ways to sanction or punish miscreants. All of the ethical approaches described in this article are single-agent in orientation and encode other agents implicitly