diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -71,6 +71,34 @@
 
 Note that `$HOME/.local/bin` will need to be on your `PATH`.
 
+## Examples
+
+### Quick Start
+
+Install [pi](http://github.com/vmchale/project-init) with
+
+```
+curl -LSfs https://japaric.github.io/trust/install.sh | sh -s -- --git vmchale/project-init
+```
+
+Initialize an ATS project with
+
+```
+pi new ats project
+```
+
+Then build & run it:
+
+```
+cd project
+atspkg run
+```
+
+### Further Documentation
+
+You can find several examples with explanation
+[here](https://github.com/vmchale/atspkg/blob/master/EXAMPLES.md)
+
 ## Global Configuration
 
 `atspkg` is configured via a file in `~/.config/atspkg/config.dhall`. You can
@@ -79,6 +107,7 @@
 ```
 let cfg = 
   { defaultPkgs = "https://raw.githubusercontent.com/vmchale/atspkg/master/pkgs/pkg-set.dhall"
+  , path = ([] : Optional Text)
   }
 
 in cfg
@@ -86,8 +115,3 @@
 
 Package sets are simply sets of packages, so you can also use Dhall to
 concatenate custom package sets with the above.
-
-## Examples
-
-You can find several examples with explanation
-[here](https://github.com/vmchale/atspkg/blob/master/EXAMPLES.md)
diff --git a/ats-pkg.cabal b/ats-pkg.cabal
--- a/ats-pkg.cabal
+++ b/ats-pkg.cabal
@@ -1,5 +1,5 @@
 name:                ats-pkg
-version:             2.4.0.3
+version:             2.4.0.6
 synopsis:            A build tool for ATS
 description:         A collection of scripts to simplify building ATS projects.
 homepage:            https://github.com/vmchale/atspkg#readme
@@ -41,6 +41,8 @@
                      , Language.ATS.Package.Upgrade
                      , Language.ATS.Package.Config
                      , Language.ATS.Package.PackageSet
+                     , Language.ATS.Package.Dhall
+                     , Quaalude
   build-depends:       base >= 4.7 && < 5
                      , http-client
                      , bytestring
diff --git a/config.dhall b/config.dhall
--- a/config.dhall
+++ b/config.dhall
@@ -1,6 +1,7 @@
 let cfg = 
   { defaultPkgs = "https://raw.githubusercontent.com/vmchale/atspkg/master/pkgs/pkg-set.dhall"
   , path = ([] : Optional Text)
+  , githubUsername = ""
   }
 
 in cfg
diff --git a/src/Language/ATS/Package.hs b/src/Language/ATS/Package.hs
--- a/src/Language/ATS/Package.hs
+++ b/src/Language/ATS/Package.hs
@@ -10,6 +10,7 @@
                             , fetchDeps
                             , mkBuildPlan
                             , buildHelper
+                            , checkPkg
                             -- * Types
                             , Version (..)
                             , Pkg (..)
@@ -25,6 +26,7 @@
 import           Language.ATS.Package.Build
 import           Language.ATS.Package.Compiler
 import           Language.ATS.Package.Dependency
+import           Language.ATS.Package.Dhall
 import           Language.ATS.Package.PackageSet
 import           Language.ATS.Package.Type
 import           Language.ATS.Package.Upgrade
diff --git a/src/Language/ATS/Package/Build.hs b/src/Language/ATS/Package/Build.hs
--- a/src/Language/ATS/Package/Build.hs
+++ b/src/Language/ATS/Package/Build.hs
@@ -11,7 +11,6 @@
                                   , check
                                   ) where
 
-import           Control.Composition
 import           Control.Concurrent.ParallelIO.Global
 import           Control.Lens
 import           Control.Monad.IO.Class               (MonadIO)
@@ -35,6 +34,7 @@
 import           Language.ATS.Package.Dependency
 import           Language.ATS.Package.Type            hiding (version)
 import           Paths_ats_pkg
+import           Quaalude
 import           System.Directory                     (doesFileExist, getCurrentDirectory)
 import qualified System.Environment                   as SE
 
@@ -229,7 +229,7 @@
                 targets = fmap (((cedar <> "/") <>) . (-<.> "c") . takeBaseName . TL.unpack) as
             want targets
             hasPF <- patsFilter
-            mapM_ (cgen $ ATSToolConfig v v' hasPF (ccFromString cc')) atsSourceDirs
+            mapM_ (cgen (ATSToolConfig v v' hasPF (ccFromString cc')) [".atspkg/deps", ".atspkg/config"]) atsSourceDirs
 
           cc' = maybe (TL.unpack ccLocal) (<> "-gcc") tgt
           deps = (".atspkg/deps":) . (".atspkg/config":) . fmap TL.unpack
diff --git a/src/Language/ATS/Package/Config.hs b/src/Language/ATS/Package/Config.hs
--- a/src/Language/ATS/Package/Config.hs
+++ b/src/Language/ATS/Package/Config.hs
@@ -18,8 +18,9 @@
 import           System.Directory       (createDirectoryIfMissing)
 import           System.Environment     (getEnv)
 
-data UserConfig = UserConfig { defaultPkgs :: Text
-                             , path        :: Maybe Text
+data UserConfig = UserConfig { defaultPkgs    :: Text
+                             , path           :: Maybe Text
+                             , githubUsername :: Text
                              } deriving (Generic, Interpret, Binary)
 
 cfgFile :: String
diff --git a/src/Language/ATS/Package/Dhall.hs b/src/Language/ATS/Package/Dhall.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/ATS/Package/Dhall.hs
@@ -0,0 +1,13 @@
+module Language.ATS.Package.Dhall ( checkPkg
+                                  ) where
+
+import           Data.Bool                 (bool)
+import qualified Data.Text.Lazy            as TL
+import           Dhall                     hiding (bool)
+import           Language.ATS.Package.Type
+
+checkPkg :: FilePath -> Bool -> IO ATSDependency
+checkPkg path details = do
+    x <- input auto (TL.pack ('.' : '/' : path))
+    let f = bool id detailed details
+    f (pure (x :: ATSDependency))
diff --git a/src/Language/ATS/Package/Exec.hs b/src/Language/ATS/Package/Exec.hs
--- a/src/Language/ATS/Package/Exec.hs
+++ b/src/Language/ATS/Package/Exec.hs
@@ -43,6 +43,7 @@
              | Upgrade
              | Valgrind { _targets :: [String] }
              | Run { _targets :: [String] }
+             | Check { _filePath :: String, _details :: Bool }
 
 command' :: Parser Command
 command' = hsubparser
@@ -55,8 +56,19 @@
     <> command "upgrade" (info (pure Upgrade) (progDesc "Upgrade to the latest version of atspkg"))
     <> command "valgrind" (info valgrind (progDesc "Run generated binaries through valgrind"))
     <> command "run" (info run' (progDesc "Run generated binaries"))
+    <> command "check" (info check' (progDesc "Check pkg.dhall file to ensure it is well-typed."))
     )
 
+check' :: Parser Command
+check' = Check
+    <$> targetP completions id "check"
+    <*> switch
+    (long "detailed"
+    <> short 'd'
+    <> help "Enable detailed error messages")
+
+    where completions = completer (bashCompleter "file -X '!*.dhall' -o plusdirs")
+
 run' :: Parser Command
 run' = Run <$> targets "run"
 
@@ -67,10 +79,14 @@
 valgrind = Valgrind <$> targets "run with valgrind"
 
 targets :: String -> Parser [String]
-targets s = many
+targets = targetP mempty many
+
+targetP :: Mod ArgumentFields String -> (Parser String -> a) -> String -> a
+targetP completions f s = f
     (argument str
     (metavar "TARGET"
-    <> help ("Targets to " <> s)))
+    <> help ("Targets to " <> s)
+    <> completions))
 
 build' :: Parser Command
 build' = Build
@@ -124,6 +140,7 @@
     =<< check Nothing
 
 run :: Command -> IO ()
+run (Check p b) = print =<< checkPkg p b
 run Upgrade = upgradeAtsPkg
 run Nuke = cleanAll
 run (Fetch u) = fetchPkg u
diff --git a/src/Language/ATS/Package/Type.hs b/src/Language/ATS/Package/Type.hs
--- a/src/Language/ATS/Package/Type.hs
+++ b/src/Language/ATS/Package/Type.hs
@@ -55,6 +55,7 @@
 
 deriving instance Interpret ForeignCabal
 
+
 data Bin = Bin { src      :: Text -- ^ Source file (should end with @.dats@)
                , target   :: Text -- ^ Binary to be built
                , libs     :: [Text] -- ^ Libraries to link against (e.g. @[ "pthread" ]@)
@@ -65,6 +66,15 @@
                , extras   :: [Text] -- ^ Extra source files the build depends on
                }
          deriving (Show, Eq, Generic, Interpret, Binary)
+
+-- data Lib = Lib { src      :: [Text] -- ^ Source files (should end with @.dats@) to be compiled to object files
+--                , target   :: Text
+--                , hsDeps   :: [ForeignCabal] -- ^ Haskell @.cabal@ files associated with object files
+--                , hs2ats   :: [TargetPair] -- ^ Sources and targets for @hs2ats@
+--                , cSources :: [Text] -- ^ C source files the build depends on
+--                , extras   :: [Text] -- ^ Other source files the build depends on
+--                }
+--          deriving (Show, Eq, Generic, Interpret, Binary)
 
 -- TODO make binaries optional
 -- | Data type associated with @atspkg.dhall@ file.
diff --git a/src/Quaalude.hs b/src/Quaalude.hs
new file mode 100644
--- /dev/null
+++ b/src/Quaalude.hs
@@ -0,0 +1,39 @@
+{-# LANGUAGE CPP #-}
+
+module Quaalude ( bool
+                , void
+                , unless
+                , when
+                , join
+                , zipWithM
+                , pack
+                , unpack
+                , encode
+                , decode
+                , fromMaybe
+                , isPrefixOf
+                , isSuffixOf
+                , on
+                , Text
+                , Generic
+                , Binary
+                , (.*)
+                , (<>)
+                , (***)
+                , (&&&)
+                , first
+                , second
+                ) where
+
+import           Control.Arrow
+#if __GLASGOW_HASKELL__ < 804
+import           Data.Semigroup
+#endif
+import           Control.Composition
+import           Control.Monad
+import           Data.Binary
+import           Data.Bool           (bool)
+import           Data.List           (isPrefixOf, isSuffixOf)
+import           Data.Maybe          (fromMaybe)
+import           Data.Text.Lazy      (pack, unpack)
+import           Dhall               hiding (bool)
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,5 +1,5 @@
 ---
-resolver: lts-10.4
+resolver: lts-10.5
 packages:
   - '.'
   - 'dependency'
