diff --git a/apps/app-runner/main.go b/apps/app-runner/main.go
index b560c6c..9c57225 100644
--- a/apps/app-runner/main.go
+++ b/apps/app-runner/main.go
@@ -20,6 +20,7 @@
 
 var port = flag.Int("port", 3000, "Port to listen on")
 var appId = flag.String("app-id", "", "Application ID")
+var service = flag.String("service", "", "Service name")
 var repoAddr = flag.String("repo-addr", "", "Git repository address")
 var branch = flag.String("branch", "", "Name of the branch to process")
 var rootDir = flag.String("root-dir", "/", "Path to the app code")
@@ -115,7 +116,7 @@
 	if err := json.NewDecoder(r).Decode(&cmds); err != nil {
 		panic(err)
 	}
-	s := NewServer(*port, *appId, *repoAddr, *branch, *rootDir, signer, *appDir, cmds, self, *managerAddr)
+	s := NewServer(*port, *appId, *service, *repoAddr, *branch, *rootDir, signer, *appDir, cmds, self, *managerAddr)
 	if err := s.Start(); err != nil {
 		log.Fatal(err)
 	}
diff --git a/apps/app-runner/server.go b/apps/app-runner/server.go
index 6a98e3a..ef14842 100644
--- a/apps/app-runner/server.go
+++ b/apps/app-runner/server.go
@@ -21,6 +21,7 @@
 	l           sync.Locker
 	port        int
 	appId       string
+	service     string
 	ready       bool
 	cmd         *exec.Cmd
 	repoAddr    string
@@ -35,12 +36,13 @@
 	currDir     string
 }
 
-func NewServer(port int, appId string, repoAddr, branch, rootDir string, signer ssh.Signer, appDir string, runCommands []Command, self string, manager string) *Server {
+func NewServer(port int, appId, service, repoAddr, branch, rootDir string, signer ssh.Signer, appDir string, runCommands []Command, self string, manager string) *Server {
 	return &Server{
 		l:           &sync.Mutex{},
 		port:        port,
 		ready:       false,
 		appId:       appId,
+		service:     service,
 		repoAddr:    repoAddr,
 		branch:      branch,
 		rootDir:     rootDir,
@@ -58,10 +60,10 @@
 	http.HandleFunc("/update", s.handleUpdate)
 	http.HandleFunc("/ready", s.handleReady)
 	http.HandleFunc("/logs", s.handleLogs)
+	go s.pingManager()
 	if err := s.run(); err != nil {
 		return err
 	}
-	go s.pingManager()
 	return http.ListenAndServe(fmt.Sprintf(":%d", s.port), nil)
 }
 
@@ -140,13 +142,12 @@
 }
 
 type pingReq struct {
+	Service string `json:"service"`
 	Address string `json:"address"`
 	Logs    string `json:"logs"`
 }
 
 func (s *Server) pingManager() {
-	// TODO(gio): do we need runnert -> manager communication?
-	return
 	defer func() {
 		go func() {
 			time.Sleep(5 * time.Second)
@@ -154,14 +155,21 @@
 		}()
 	}()
 	buf, err := json.Marshal(pingReq{
-		Address: fmt.Sprintf("%s:%d", s.self, s.port),
+		Service: s.service,
+		Address: fmt.Sprintf("http://%s:%d", s.self, s.port),
 		Logs:    s.logs.Contents(),
 	})
 	if err != nil {
 		return
 	}
-	registerWorkerAddr := fmt.Sprintf("%s/api/apps/%s/workers", s.managerAddr, s.appId)
-	http.Post(registerWorkerAddr, "application/json", bytes.NewReader(buf))
+	registerWorkerAddr := fmt.Sprintf("%s/api/project/%s/workers", s.managerAddr, s.appId)
+	resp, err := http.Post(registerWorkerAddr, "application/json", bytes.NewReader(buf))
+	if err != nil {
+		fmt.Println(err)
+	} else {
+		// check resp code
+		io.Copy(os.Stdout, resp.Body)
+	}
 }
 
 func (s *Server) kill() error {
