refactor singleton controllers and rename to agents