   After calling this function, `shell` becomes the shell that is returned by
   `shell/0`.
   """
+  @spec shell(module) :: :ok
   def shell(shell) do
     Mix.State.put(:shell, shell)
   end
 
   @doc """
-  Returns `true` if Mix is in debug mode.
-  """
+  Returns `true` if Mix is in debug mode, `false` otherwise.
+  """
+  @spec debug?() :: boolean()
   def debug? do
     Mix.State.get(:debug, false)
   end


  By default, this returns `Mix.Shell.IO`.
  """
  def shell do
    Mix.State.get(:shell, Mix.Shell.IO)
  end

  Be careful when invoking this function as any project
  configuration won't be reloaded.
  """
  @spec target(atom()) :: :ok
  def target(target) when is_atom(target) do
    Mix.State.put(:target, target)
  end
