diff --git a/buildstream/sandbox.py b/buildstream/sandbox.py
index fa849d2118d69253928d61e56bf4ab0e1bbf740c..fd033a88ff775ef7f5a1232a3598e297d2c46ed5 100644
--- a/buildstream/sandbox.py
+++ b/buildstream/sandbox.py
@@ -98,17 +98,22 @@ class Sandbox():
         """
         self.__cwd = directory
 
-    def mark_directory(self, directory):
+    def mark_directory(self, directory, artifact=False):
         """Marks a sandbox directory and ensures it will exist
 
         Args:
            directory (str): An absolute path within the sandbox to mark
+           artifact (bool): Whether the content staged at this location
+                            contains artifacts
 
         .. note::
            Any marked directories will be read-write in the sandboxed
            environment, only the root directory is allowed to be readonly.
         """
-        self.__directories.append(directory)
+        self.__directories.append({
+            'directory': directory,
+            'artifact': artifact
+        })
 
         host_directory = os.path.join(self.__root, directory.lstrip(os.sep))
         os.makedirs(host_directory, exist_ok=True)
@@ -165,7 +170,12 @@ class Sandbox():
     # Fetches the marked directories in the sandbox
     #
     # Returns:
-    #    (list): A list of directories.
+    #    (list): A list of directory mark objects.
+    #
+    # The returned objects are dictionaries with the following attributes:
+    #    directory: The absolute path within the sandbox
+    #    artifact: Whether the path will contain artifacts or not
+    #
     def _get_marked_directories(self):
         return self.__directories