diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -16,6 +16,7 @@
 import           Distribution.PackageDescription
 import           Distribution.PackageDescription.Parse
 import           System.Console.ANSI
+import           System.Console.Questioner
 import           System.Directory
 import           System.Directory.ProjectRoot
 import           System.Environment
@@ -35,6 +36,9 @@
                 , ""
                 , "    stack run set-default <name> Sets the default executable to run"
                 , ""
+                , "    stack run --interactive      Runs in interactive mode"
+                , "    stack run -i"
+                , ""
                 , "    stack run help               Print this help message"
                 , "    stack run --help"
                 , "    stack run -h"
@@ -67,6 +71,22 @@
                 [] -> error "No executable found"
                 ((d, _):_) -> return d
 
+getExecutables :: IO [String]
+getExecutables = do
+    pr <- fromMaybe (error "No project root found") <$>
+        getProjectRootCurrent
+    cfp <- fromMaybe (error "No cabal file found") <$>
+        (find ((== ".cabal") . takeExtension) <$> getDirectoryContents pr)
+    pkgParseResult <- getPackageDescription (pr </> cfp)
+    return $ getExecutables pkgParseResult
+  where
+    getPackageDescription p = parsePackageDescription <$> readFile p
+    getExecutables (ParseFailed _) =
+        error "Failed to parse cabal file"
+    getExecutables (ParseOk _ gpd) = case condExecutables gpd of
+        [] -> error "No executables found"
+        ds -> map fst ds
+
 stackRun :: String -> [String] -> IO b
 stackRun name as = do
     pr <- fromMaybe (error "No project root found") <$> getProjectRootCurrent
@@ -131,6 +151,12 @@
     hPutStrLn stderr cmd
     hSetSGR stderr [Reset]
 
+runInteractive :: [String] -> IO ()
+runInteractive as = do
+    exs <- getExecutables
+    ex <- prompt ("What executable should we run? ", exs)
+    stackRun ex as
+
 main :: IO ()
 main = do
     args <- getArgs
@@ -142,6 +168,8 @@
         ("get-default":_) -> putStrLn =<< findDefault
         ("--help":_) -> exitUsage
         ("-h":_) -> exitUsage
+        ("-i":as) -> runInteractive as
+        ("--interactive":as) -> runInteractive as
         ("help":_) -> exitUsage
         ("--":"--":as) -> flip stackRun as =<< findDefault
         ("--":name:as) -> stackRun name as
diff --git a/stack-run.cabal b/stack-run.cabal
--- a/stack-run.cabal
+++ b/stack-run.cabal
@@ -1,5 +1,5 @@
 name:                stack-run
-version:             0.1.0.7
+version:             0.1.1.0
 synopsis:            An equivalent to cabal run for stack.
 description:         Finds the project root, compiles your code and runs the
                      first or set default executable. It's a shorthand for
@@ -21,6 +21,9 @@
 executable stack-run
   main-is:             Main.hs
   build-depends:       Cabal
+                     , terminal-size
+                     , vty
+                     , stm
                      , MissingH
                      , ansi-terminal >= 0.6
                      , async
@@ -32,6 +35,7 @@
                      , filepath
                      , projectroot >= 0.2
                      , time >= 1.5.0.1
+                     , questioner
   hs-source-dirs:      src
   default-language:    Haskell2010
   ghc-options:       -threaded
