diff --git a/src/check.rs b/src/check.rs
index 0e6913169fa628ab47c51a9364ba27ea93057625..3ba3e97d29bb1959e9e12d15b71d336628910e18 100644
--- a/src/check.rs
+++ b/src/check.rs
@@ -26,6 +26,7 @@ pub struct Init {
 
 pub struct Task {
     pub enabled: Option<bool>,
+    pub path: Option<Path>,
     pub priority: Option<u8>,
     pub resources: Idents,
 }
@@ -129,16 +130,22 @@ fn tasks(tasks: Option<::Tasks>) -> Result<Tasks> {
 
         tasks
             .into_iter()
-            .map(|(name, task)| {
-                Ok((
-                    name.clone(),
-                    Task {
-                        enabled: task.enabled,
-                        priority: task.priority,
-                        resources: ::check::idents("resources", task.resources)
-                            .chain_err(|| format!("checking task `{}`", name))?,
-                    },
-                ))
+            .map(|(name_, task)| {
+                let name = name_.clone();
+                (move || -> Result<_> {
+                    Ok((
+                        name,
+                        Task {
+                            enabled: task.enabled,
+                            path: task.path,
+                            priority: task.priority,
+                            resources: ::check::idents(
+                                "resources",
+                                task.resources,
+                            )?,
+                        },
+                    ))
+                })().chain_err(|| format!("checking task `{}`", name_))
             })
             .collect::<Result<_>>()?
     } else {
diff --git a/src/lib.rs b/src/lib.rs
index d7e38ff0f4e113eaa86f372a909b582ede3b14e7..7840e86d61e58e2eb279adc416c3c8d4fb726fcc 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -50,6 +50,7 @@ pub struct Idle {
 #[derive(Debug)]
 pub struct Task {
     pub enabled: Option<bool>,
+    pub path: Option<Path>,
     pub priority: Option<u8>,
     pub resources: Option<Idents>,
 }
diff --git a/src/parse.rs b/src/parse.rs
index 31381efda97641b88012468b6ec8e45d91e741c8..a00285aae08d77a0cc31d556c9824ac0fd91bc50 100644
--- a/src/parse.rs
+++ b/src/parse.rs
@@ -319,6 +319,7 @@ fn path(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Path> {
 fn task(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Task> {
     ::parse::delimited(tts, DelimToken::Brace, |tts| {
         let mut enabled = None;
+        let mut path = None;
         let mut priority = None;
         let mut resources = None;
 
@@ -330,6 +331,13 @@ fn task(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Task> {
                     enabled = Some(::parse::bool(tts.next())
                         .chain_err(|| "parsing `enabled`")?);
                 }
+                "path" => {
+                    ensure!(path.is_none(), "duplicated `path` field");
+
+                    path = Some(
+                        ::parse::path(tts).chain_err(|| "parsing `path`")?,
+                    );
+                }
                 "priority" => {
                     ensure!(priority.is_none(), "duplicated `priority` field");
 
@@ -353,6 +361,7 @@ fn task(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Task> {
 
         Ok(Task {
             enabled,
+            path,
             priority,
             resources,
         })