diff --git a/apps/reload/main.go b/apps/reload/main.go
new file mode 100644
index 0000000..a06d16f
--- /dev/null
+++ b/apps/reload/main.go
@@ -0,0 +1,68 @@
+package main
+
+import (
+	"crypto/sha256"
+	"flag"
+	"fmt"
+	"io"
+	"os"
+	"syscall"
+	"time"
+)
+
+var watch = flag.String("watch", "", "Path to watch")
+var reload = flag.String("reload", "", "Path to PID file")
+
+func check(err error) {
+	if err != nil {
+		panic(err)
+	}
+}
+
+func main() {
+	flag.Parse()
+	var prev string
+	for {
+		cur := func() string {
+			inp, err := os.Open(*watch)
+			check(err)
+			defer inp.Close()
+			h := sha256.New()
+			_, err = io.Copy(h, inp)
+			check(err)
+			return string(h.Sum(nil))
+		}()
+		if prev == "" {
+			prev = cur
+			continue
+		}
+		if prev != cur {
+			prev = cur
+			fmt.Println("changed")
+			pid := func() int {
+				inp, err := os.Open(*reload)
+				// TODO(gio): check error type
+				if err != nil {
+					return -1
+				}
+				defer inp.Close()
+				var ret int
+				_, err = fmt.Fscanf(inp, "%d", &ret)
+				check(err)
+				return ret
+			}()
+			if pid != -1 {
+				p, err := os.FindProcess(pid)
+				check(err)
+				fmt.Println("found process")
+				fmt.Println("%+v\n", p)
+				// TODO(gio): take signal value from flags
+				check(p.Signal(syscall.SIGKILL))
+				fmt.Println("sent signall")
+			}
+		} else {
+			fmt.Println("no change")
+		}
+		time.Sleep(5 * time.Second)
+	}
+}
