diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 43fe1bfebb34888e6c53d82df10863c69f6d231e..29ff69d6a767a77d5068e7e5fff62f6fa1f25d90 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -195,10 +195,13 @@ jobs:
         run: |
           echo "Failed to restore Python virtual environment from cache"
           exit 1
+      - name: Register codespell problem matcher
+        run: |
+          echo "::add-matcher::.github/workflows/matchers/codespell.json"
       - name: Run codespell
         run: |
           . venv/bin/activate
-          pre-commit run --show-diff-on-failure --color=always --hook-stage manual codespell --all-files
+          pre-commit run --show-diff-on-failure --hook-stage manual codespell --all-files
 
   lint-dockerfile:
     name: Check Dockerfile
diff --git a/.github/workflows/matchers/codespell.json b/.github/workflows/matchers/codespell.json
new file mode 100644
index 0000000000000000000000000000000000000000..cfa66d31392508c2895a95131b96507cd1c08a88
--- /dev/null
+++ b/.github/workflows/matchers/codespell.json
@@ -0,0 +1,16 @@
+{
+  "problemMatcher": [
+    {
+      "owner": "codespell",
+      "severity": "warning",
+      "pattern": [
+        {
+          "regexp": "^(.+):(\\d+):\\s(.+)$",
+          "file": 1,
+          "line": 2,
+          "message": 3
+        }
+      ]
+    }
+  ]
+}