diff --git a/cmd/agent/agent.go b/cmd/agent/agent.go
index 22d773b..f10666b 100755
--- a/cmd/agent/agent.go
+++ b/cmd/agent/agent.go
@@ -322,6 +322,7 @@ func main() {
 	if err != nil {
 		panic(err)
 	}
+	comms.SetupHeartBeat(commChannel)
 
 	// initial check
 
diff --git a/pkg/comms/agentserver.go b/pkg/comms/agentserver.go
index 5c61296..924d093 100644
--- a/pkg/comms/agentserver.go
+++ b/pkg/comms/agentserver.go
@@ -68,26 +68,25 @@ func NewCommChannel(role Role, wsConn io.ReadWriteCloser) (CommChannel, error) {
 	}
 	log.Println("Communication channel between agent and converge server established")
 
-	// heartbeat
-	if role == Agent {
-		go func() {
-			for {
-				time.Sleep(10 * time.Second)
-				err := Send(commChannel.SideChannel,
-					ConvergeMessage{
-						Value: HeartBeat{},
-					})
-				if err != nil {
-					log.Println("Sending heartbeat to server failed")
-				}
-			}
-		}()
-	}
-
 	return commChannel, nil
 }
 
-// Sending an event to the other side
+// Communication from agent to server during the session.
+
+func SetupHeartBeat(commChannel CommChannel) {
+	go func() {
+		for {
+			time.Sleep(10 * time.Second)
+			err := Send(commChannel.SideChannel,
+				ConvergeMessage{
+					Value: HeartBeat{},
+				})
+			if err != nil {
+				log.Println("Sending heartbeat to server failed")
+			}
+		}
+	}()
+}
 
 func ListenForAgentEvents(channel GOBChannel,
 	agentInfo func(agent EnvironmentInfo),