diff --git a/apps/app-runner/main.go b/apps/app-runner/main.go
index b11a977..6aa487c 100644
--- a/apps/app-runner/main.go
+++ b/apps/app-runner/main.go
@@ -11,6 +11,7 @@
 	"path/filepath"
 	"strings"
 	"syscall"
+	"time"
 
 	"golang.org/x/crypto/ssh"
 
@@ -94,6 +95,19 @@
 	}, nil
 }
 
+func readRunConfiguration(p string) []Command {
+	r, err := os.Open(p)
+	if err != nil {
+		panic(err)
+	}
+	defer r.Close()
+	var cmds []Command
+	if err := json.NewDecoder(r).Decode(&cmds); err != nil {
+		log.Fatal(err)
+	}
+	return cmds
+}
+
 func main() {
 	flag.Parse()
 	self, ok := os.LookupEnv("SELF_IP")
@@ -121,15 +135,7 @@
 			panic(err)
 		}
 	}
-	r, err := os.Open(*runCfg)
-	if err != nil {
-		panic(err)
-	}
-	defer r.Close()
-	var cmds []Command
-	if err := json.NewDecoder(r).Decode(&cmds); err != nil {
-		panic(err)
-	}
+	cmds := readRunConfiguration(*runCfg)
 	s := NewServer(*agentMode, *port, *appId, *service, id, *repoAddr, *branch, *rootDir, signer, *appDir, cmds, self, *managerAddr)
 	go func() {
 		if err := s.Start(); err != nil {
@@ -139,8 +145,51 @@
 			os.Exit(0)
 		}
 	}()
+	go func() {
+		for {
+			time.Sleep(30 * time.Second)
+			newCmds := readRunConfiguration(*runCfg)
+			if commandsChanged(cmds, newCmds) {
+				s.UpdateRunCommands(newCmds)
+				cmds = newCmds
+			}
+		}
+	}()
 	sigChan := make(chan os.Signal, 1)
 	signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
 	<-sigChan
 	s.Stop()
 }
+
+func commandsChanged(a, b []Command) bool {
+	if len(a) != len(b) {
+		return true
+	}
+	for i, x := range a {
+		y := b[i]
+		if x.Bin != y.Bin {
+			return true
+		}
+		if len(x.Args) != len(y.Args) {
+			return true
+		}
+		for j, k := range x.Args {
+			l := y.Args[j]
+			if k != l {
+				return true
+			}
+		}
+		if !*agentMode {
+			if len(x.Env) != len(y.Env) {
+				return true
+			}
+			for j, k := range x.Env {
+				l := y.Env[j]
+				if k != l {
+					return true
+				}
+			}
+		}
+	}
+	return false
+}
diff --git a/apps/app-runner/server.go b/apps/app-runner/server.go
index 44e86fc..080a134 100644
--- a/apps/app-runner/server.go
+++ b/apps/app-runner/server.go
@@ -128,6 +128,13 @@
 	}
 }
 
+func (s *Server) UpdateRunCommands(runCommands []Command) {
+	s.l.Lock()
+	defer s.l.Unlock()
+	s.runCommands = runCommands
+	s.run()
+}
+
 func (s *Server) handleQuit(w http.ResponseWriter, r *http.Request) {
 	go s.Stop()
 }
