diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000000000000000000000000000000000000..c34fb4974e0841af11de96e14484ba5aafe9a7a6
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,10 @@
+# This is a hack for:
+# https://github.com/pypa/pip/issues/7953
+
+import setuptools
+import site
+import sys
+site.ENABLE_USER_SITE = "--user" in sys.argv[1:]
+
+if __name__ == "__main__":
+    setuptools.setup()
diff --git a/src/crawl.py b/src/crawl.py
old mode 100644
new mode 100755
index 1b67def7b28329d1894fca640b58311aca73d20b..6a348f8ab5176665aae048c6e244a26af7384a66
--- a/src/crawl.py
+++ b/src/crawl.py
@@ -5,8 +5,32 @@
 import argparse
 import os
 import sys
+import yaml
 import re
 
+def crawl_cfood(dirname: str,
+                cfood: str):
+    """
+    Crawl a single cfood.
+    """
+
+    # Load the cfood from a yaml file:
+    with open(cfood, "r") as f:
+        cf = yaml.load(f, Loader=yaml.SafeLoader)
+
+    for currentpath, dirs, files in os.walk(dirname):
+        # for current nodes of type dir look in the list of dirs for matches
+        # dir is the default
+        if current_node["type"] == "dir":
+            for dirname in dirs:
+                pass
+        elif current_node["type"] == "file":
+            for filename in files:
+                pass
+        else:
+            # work in progress
+            pass
+            
 
 def crawl(dirname: str,
           cfoods: list[str]):
@@ -17,10 +41,12 @@ def crawl(dirname: str,
     cfoods  : a list of filenames of cfood files
     """
 
-    pass
+    # simplified for testing:
+    for cfood in cfoods:
+        crawl_cfood(dirname, cfood)
 
 def main():
-    pass
+    crawl(sys.args[1], [sys.args[2]])
 
 
 if __name__ == "__main__":
diff --git a/tests/scifolder_cfood.yml b/tests/scifolder_cfood.yml
new file mode 100644
index 0000000000000000000000000000000000000000..35a97a3bb314376ef9d688abf3c8a21c9100cbab
--- /dev/null
+++ b/tests/scifolder_cfood.yml
@@ -0,0 +1,31 @@
+
+DataAnalysis:
+
+  children:
+    project_dir:
+      re: (?P<date>.*?)_(?P<identifier>.*)
+      handlers:
+      - type: identifiable
+        name: idf_project
+
+      children:
+        single:
+          re: (?P<date>.*?)_(?P<identifier>.*)
+
+          children:
+
+            README:
+              type: file
+              case: insensitive
+              re: README\.md
+
+              children:
+              - description:
+                type: TEXT
+              - responsible:
+                children:
+                  type: TEXT
+                  re: (?P<first_name>.+) (?P<last_name>.+)
+                  handlers:
+                    type: identifiable
+                    name: idf_person