# What is a controller?
An agent controller acts as a layer between the IoTHub and one or more agents. It allows for even easier control of agents.
To use an agents controller, first install your controller (see Installing a controller) and start it. The controller will automatically appear in the IoTHub. Then, just create a new agent and assign the controller to it. This step will create a virtual link between the new agent and the controller. Once the assignation is finished, then you can directly install the agent from the IoTHub and the controller will download, decompress, and install the agent in the host in which the controller was executed.
With the agent installed, you can now use the controller to start, stop, and reset the agent. Resetting an agent restores its initial state with the controller still assigned.
To detach the controller, the agent needs to be stopped. If the agent is currently running, this can be done by either stop it of force a reset.