Organizational notions such as roles, norms (e.g., obligations and permissions), and services are increasingly viewed as natural concepts to manage the complexity of software development. In particular in the context of multi-agent systems, agents are expected to be organization-aware, i.e., to understand and reason about the structure, work processes, and norms of the agent organization in which they operate. In this paper, we analyze which kinds of reasoning an agent should be able to do to function in an organization. We categorize these kinds of reasoning with respect to several dimensions, and distinguish three general approaches on how these might be integrated in existing agent programming languages. Through this, we provide a research agenda on what needs to be addressed when developing techniques for programming organization-aware agents.