This report describes RoboSoc, a system for developing RoboCup agents designed especially, but not only, for educational use. RoboSoc is designed to be as general, open, and easy to use as possible and to encourage and simplify the modification, extension and sharing of RoboCup agents, and parts of them. To do this I assumed four requirements from the user: she wants the best possible data, use as much time as possible for the decision making, rather act on incomplete information than not act at all, and she wants to manipulate the objects found in the soccer environment. RoboSoc consists of three parts: a library of basic objects and utilities used by the rest of the system, a basic system handling the interactions with the soccer server and the timing of the agent, and a framework for world modeling and decision support. The framework defines three concepts, views, predicates and skills. The views are specialized information processing units responsible for a specific part of the world model, like modeling the ball or the agent, controlled by events generated by the basic system. The predicates can be used either by the decision maker or the skills to test the state of the world. The skills are specialized, short-term planners which generate plans for what actions the agent should do in order to reach a desired goal state. The whole RoboSoc system, implemented in C++ in the Solaris Unix environment, is working and have been used in a course on AI-progamming.