diff --git a/ahoy.test.yml b/ahoy.test.yml
index 9f92a92a8b55bb6f1318b063f489e049cf0ae47b..4774f1bbb53cbe08c77cded7eee2b5b48622b54c 100644
--- a/ahoy.test.yml
+++ b/ahoy.test.yml
@@ -105,3 +105,26 @@ commands:
       echo "Testing for outdated minor versions ..."
       composer outdated --minor-only --strict --no-interaction
     usage: Verifies that a dependencies are using the latest minor and patch versions
+  cspellmodule:
+    cmd: |
+      export CI_PROJECT_NAME=$1
+      shift
+      while read assign; do
+        export "$assign";
+      done < <(sed -nr '/variables:/,$ s/  ([A-Z_]+): (.*)/\1=\2/ p' /drupal/web/modules/contrib/$CI_PROJECT_NAME/.gitlab-ci.yml)
+      export _WEB_ROOT=/drupal/web
+      export _CURL_TEMPLATES_REPO=project/gitlab_templates
+      export _CURL_TEMPLATES_REF=default-ref
+      cd /drupal/web/modules/contrib/$CI_PROJECT_NAME
+      curl -sOL https://git.drupalcode.org/$_CURL_TEMPLATES_REPO/-/raw/$_CURL_TEMPLATES_REF/scripts/prepare-cspell.php
+      if [ ! -f .cspell.json ]; then
+        curl -sOL https://git.drupalcode.org/$_CURL_TEMPLATES_REPO/-/raw/$_CURL_TEMPLATES_REF/assets/.cspell.json
+      fi
+      php prepare-cspell.php
+      rm prepare-cspell.php
+      touch .cspell-project-words.txt
+      /drupal/web/core/node_modules/.bin/cspell -c .cspell.json --show-suggestions --show-context --no-progress $_CSPELL_EXTRA ** || EXIT_CODE=$?
+      if [ "$EXIT_CODE" != "" ]; then
+        /drupal/web/core/node_modules/.bin/cspell -c .cspell.json --words-only --unique --no-progress $_CSPELL_EXTRA ** | sort -f
+      fi
+      rm .cspell.json