diff --git a/alice-ci/setup.cfg b/alice-ci/setup.cfg
index 6e7942106ed8f0768d86bab6065cac9b4afe5af8..d1e593da5d8be0095ffbe2e9515dcc5c40354acd 100644
--- a/alice-ci/setup.cfg
+++ b/alice-ci/setup.cfg
@@ -1,6 +1,6 @@
 [metadata]
 name = alice-ci
-version = 0.0.5
+version = 0.0.6
 author = Daniel Gyulai
 description = Alice CI framework
 long_description = file: README.md
diff --git a/alice-ci/src/alice/cli.py b/alice-ci/src/alice/cli.py
index 4c0140b8ca31b3dae415981c08e5a9fd6acdfb4a..bd958c49dfa685f3959f9d50485a62de29dd2ef0 100644
--- a/alice-ci/src/alice/cli.py
+++ b/alice-ci/src/alice/cli.py
@@ -30,8 +30,8 @@ def parse_jobs(args):
         print("Begin pipeline steps...")
         for step in args.steps:
             if step in jobParser.jobs:
-                jobParser.execute_job(step)
-                print(f"[Step] {step}: SUCCESS")
+                status = jobParser.execute_job(step)
+                print(f"[Step] {step}: {status}")
             else:
                 print(f"Step {step} not found in {args.input}")
                 exit(1)
diff --git a/alice-ci/src/alice/utils.py b/alice-ci/src/alice/utils.py
index 7794f4a369af705d4b396445133a3c1d8e035d32..914093cfa14e418825cc69ba40327fe441a2e0a8 100644
--- a/alice-ci/src/alice/utils.py
+++ b/alice-ci/src/alice/utils.py
@@ -1,3 +1,5 @@
+import os
+import subprocess
 import yaml
 
 from alice.exceptions import ConfigException
@@ -44,10 +46,41 @@ class ConfigParser:
                 print(f"[Alice] Parsed jobs: {', '.join(jobs.keys())}")
             return jobs
         else:
-            raise ConfigException("[Alice] No jobs defined in config")
+            raise ConfigException("No jobs defined in config")
+
+    def __is_changed(self, changes):
+        try:                
+            target = changes["branch"]
+            paths = []
+            for path in changes["paths"]:
+                paths.append(os.path.abspath(path))
+            print(paths)
+            # TODO: Error handling
+            command = ["git", "diff", "--name-only", target]
+            with subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) as p:
+                p.wait()
+                for line in p.stdout:
+                    change_path = os.path.abspath(line.decode("UTF-8").strip())
+                    for path in paths:
+                        spec_path = os.path.abspath(path)
+                        if change_path.startswith(spec_path):
+                            print(f"Modified file: {change_path}")
+                            print(f"Path match: {path}")
+                            return True
+        except KeyError:
+            raise ConfigException(f"Invalid 'changes' config: {changes}")
+        return False
 
     def execute_job(self, job_name):
         if job_name in self.jobs:
-            # Pass the job_spec to a runner
-            runner = self.factory.get_runner(self.jobs[job_name]["type"])
-            runner.run(self.jobs[job_name])
+            job_spec = self.jobs[job_name]
+            should_run = True
+            if "changes" in job_spec:
+                should_run = self.__is_changed(job_spec["changes"])
+            if should_run:
+                runner = self.factory.get_runner(job_spec["type"])
+                runner.run(job_spec)
+                return "SUCCESS"
+            else:
+                print("SKIP, no change detected")
+
diff --git a/ci-examples/full.yaml b/ci-examples/full.yaml
index f321b0c2a2d5b1807d51d90bea9da66d4279e067..3d2dfeed2d9cdf94fdf8d38e53fae4db05b9a827 100644
--- a/ci-examples/full.yaml
+++ b/ci-examples/full.yaml
@@ -18,6 +18,10 @@ runners:
 jobs:
   - name: env
     type: python
+    changes:
+      branch: origin/master
+      paths:
+        - "docs"
     env:
       - name: B
         value: E