               else
                 msg.reply "• #{entry.project} (#{entry.client}) → #{entry.task} <#{entry.notes}> [#{entry.started_at} – #{entry.ended_at} (#{entry.hours}h)]"
           else
-            msg.reply "Request failed with status #{status}."
+            msg.reply "Failed to retrieve entry information: request failed with status #{status}."
     catch error
-      msg.reply("Fatal error: #{error}")
+      msg.reply("Failed to retrieve entry information: fatal error: #{error}")
 
   # List all project/task combinations that are available to a user.
   robot.respond /list harvest tasks( of (.+))?/i, (msg) ->

              else
                msg.reply "• #{entry.project} (#{entry.client}) → #{entry.task} <#{entry.notes}> [#{entry.started_at} – #{entry.ended_at} (#{entry.hours}h)]"
          else
            msg.reply "Request failed with status #{status}."
      else
        harvest.daily msg, (status, body) ->
          if 200 <= status <= 299

            for task in project.tasks
              msg.reply "  ‣ #{task.name} (#{if task.billable then 'billable' else 'non-billable'})"
        else
          msg.reply "Failed to retrieve project/task list: request failed with status #{status}."
    catch error
      msg.reply "Failed to retrieve project/task list: fatal error: #{error}"

  # Kick off a new timer, stopping the previously running one, if any.
  robot.respond /start harvest at (.+)\/(.+): (.*)/i, (msg) ->
