 struct SelfCommands: Command {
     static let id = "self"
 
+    static var pathToSelf: String? {
+        if let path = Process.arguments.first {
+            if path == "vapor" {
+                return try? runWithOutput("which vapor").trim()
+            } else {
+                return path
+            }
+        }
+        return nil
+    }
+
+    static func isCompiled(path: String) -> Bool {
+        let cmd = "file \(path) | grep 'text executable' > /dev/null 2>&1"
+        return system(cmd) != 0
+    }
+
     static var subCommands: [Command.Type] = [
         SelfCommands.Update.self,
-        SelfCommands.Compile.self,
-        SelfCommands.Install.self
+        SelfCommands.Compile.self
     ]
 
     static func execute(with args: [String], in directory: String) {


var iterator = Process.arguments.makeIterator()

guard let directory = iterator.next() else {
    fail("no directory")
}

            print("Compiling...")

            let name = "vapor-cli.tmp"
            let compile = "swiftc \(tmp) -o \(name)"
            #if os(OSX)
                let cmd = "env SDKROOT=$(xcrun -show-sdk-path -sdk macosx) \(compile)"
            #else
